diff --git a/.github/actions/build_companion/action.yml b/.github/actions/build_companion/action.yml new file mode 100644 index 00000000000..c382a6a6c3c --- /dev/null +++ b/.github/actions/build_companion/action.yml @@ -0,0 +1,62 @@ +name: 'Build Companion' +inputs: + os: + description: 'OS / Architecture' + required: true + qt-version: + description: 'Qt version' + default: '6.9.0' + qt-arch: + description: 'Qt architecture' + required: runner.os != 'Linux' + sdl2-version: + description: 'SDL2 version' + default: '2.32.8' + +runs: + using: "composite" + steps: + + - name: Install Qt + if: runner.os != 'Linux' + uses: jdpurcell/install-qt-action@v5 + env: + AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini + with: + version: ${{ inputs.qt-version }} + modules: 'qtmultimedia qtserialport' + arch: ${{ inputs.qt-arch }} + cache: true + cache-key-prefix: 'install-qt-action-${{ inputs.qt-arch }}' + + - name: Setup SDL2 + if: runner.os != 'Linux' + id: setup-sdl2 + uses: libsdl-org/setup-sdl@v1 + with: + version: ${{ inputs.sdl2-version }} + build-type: "Release" + + - name: Setup MSVC + if: runner.os == 'Windows' + uses: ilammy/msvc-dev-cmd@v1 + + - name: Build + shell: bash + env: + CMAKE_BUILD_TYPE: 'Release' + run: | + mkdir output && \ + CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ + tools/build-companion.sh "$(pwd)" "$(pwd)/output/" + + - name: Compose release filename + run: echo "artifact_name=edgetx-cpn-${{ inputs.os }}-${GITHUB_REF##*/}" >> $GITHUB_ENV + shell: bash + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: "${{ env.artifact_name }}" + path: ${{github.workspace}}/output + retention-days: 15 diff --git a/.github/actions/python_dependencies/action.yml b/.github/actions/python_dependencies/action.yml new file mode 100644 index 00000000000..0071668610c --- /dev/null +++ b/.github/actions/python_dependencies/action.yml @@ -0,0 +1,17 @@ +name: 'Setup WASI SDK' +inputs: + python-version: + description: 'Python version' + default: '3.13' + +runs: + using: "composite" + steps: + + - uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + cache: 'pip' # caching pip dependencies + + - run: python3 -m pip install -r requirements.txt + shell: bash diff --git a/.github/actions/wasi_sdk/action.yml b/.github/actions/wasi_sdk/action.yml new file mode 100644 index 00000000000..c3d7da30e6c --- /dev/null +++ b/.github/actions/wasi_sdk/action.yml @@ -0,0 +1,20 @@ +name: 'Setup WASI SDK' +inputs: + arch: + description: 'OS / Architecture (ex: arm64-macos)' + default: 'arm64-macos' + version: + description: 'SDK version' + default: '25' + +runs: + using: "composite" + steps: + + - name: Install WASI SDK + if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' + shell: bash + run: | + mkdir /tmp/wasi-sdk + curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ inputs.version }}/wasi-sdk-${{ inputs.version }}.0-${{ inputs.arch }}.tar.gz | tar xz --strip-components 1 -C /tmp/wasi-sdk + sudo mv /tmp/wasi-sdk /opt/wasi-sdk diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index ac236b2dc25..10b965ab9f2 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -10,10 +10,7 @@ on: - '**.md' - '.github/ISSUE_TEMPLATE/**' - '.github/workflows/nightly.yml' - - '.github/workflows/linux_cpn.yml' - - '.github/workflows/macosx_cpn.yml' - - '.github/workflows/win-cpn-32.yml' - - '.github/workflows/win_cpn-64.yml' + - '.github/workflows/companion.yml' - '.github/workflows/validate_fw_json.yml' - 'companion/**' - '.gitpod.yml' @@ -26,10 +23,7 @@ on: - '**.md' - '.github/ISSUE_TEMPLATE/**' - '.github/workflows/nightly.yml' - - '.github/workflows/linux_cpn.yml' - - '.github/workflows/macosx_cpn.yml' - - '.github/workflows/win-cpn-32.yml' - - '.github/workflows/win_cpn-64.yml' + - '.github/workflows/companion.yml' - '.github/workflows/validate_fw_json.yml' - 'companion/**' - '.gitpod.yml' @@ -44,27 +38,21 @@ jobs: strategy: matrix: target: - - x9dp2019 + - x9dp2019;x9e - tx15 - tx16s - nv14 - el18 - pl18 - pl18ev - - t12max + - t12max;t14 - t15 - t16 - t18 - - tlite #STM32F2 - - t20 - - t14 - - t20v2 - - tx12 #STM32F2 + - t20;t20v2 - x10 - x12s - - x9e - - mt12 - - gx12 + - mt12;gx12 - nb4p - st16 container: @@ -76,7 +64,6 @@ jobs: uses: actions/checkout@v4 with: submodules: recursive - # fetch-depth: 0 # https://github.com/actions/checkout#Fetch-all-history-for-all-tags-and-branches - name: Test ${{ matrix.target }} env: @@ -85,7 +72,6 @@ jobs: echo "Running commit tests" ./tools/commit-tests.sh - build: name: Run builds needs: test @@ -94,26 +80,20 @@ jobs: matrix: target: - nv14;el18 - - pl18;pl18ev;pl18u - - pa01 - - t12max - - t15;t16;t18 - - zorro;pocket;mt12;commando8 + - pl18;pl18ev + - pl18u;pa01 + - t15;t16 + - t14;t18;mt12 + - zorro;pocket;commando8 - tprov2;tpros;bumblebee - - t20;t20v2;t14 - - tx12mk2;boxer;gx12 - - tx15 - - tx16s - - f16 + - mt12;gx12;t20;t20v2 + - t12max;tx12mk2;boxer + - tx15;tx16s + - x12s;f16 - v12;v14;v16 - x10;x10express - - x12s - - x7access - - x9dp2019 - - x9e;x9e-hall - - mt12;gx12 - - nb4p - - st16 + - x7access;x9dp2019;x9e;x9e-hall + - nb4p;st16 container: image: ghcr.io/edgetx/edgetx-dev:latest volumes: @@ -149,7 +129,6 @@ jobs: runs-on: ubuntu-latest steps: - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions run: echo "artifact_name=edgetx-firmware-${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Merge firmware artifact packages diff --git a/.github/workflows/companion.yml b/.github/workflows/companion.yml new file mode 100644 index 00000000000..58a1881ec57 --- /dev/null +++ b/.github/workflows/companion.yml @@ -0,0 +1,143 @@ +name: Companion + +on: + push: + branches: + - 'main' + tags: + - v* + paths: + - '.github/workflows/companion.yml' + - 'companion/**' + - 'tools/build-companion.sh' + + pull_request: + branches: + - 'main' + paths: + - '.github/workflows/companion.yml' + - 'companion/**' + - 'tools/build-companion.sh' + + workflow_dispatch: + +jobs: + modules: + name: WASM Modules (${{ matrix.group.id }}) + runs-on: macos-14 + strategy: + matrix: + group: + - id: color-1 + target: [nv14, el18, pl18, pl18ev] + - id: color-2 + target: [pl18u, t15, t16, t18] + - id: bw-1 + target: [zorro, pocket, mt12, commando8, tprov2, tpros, bumblebee, t14] + - id: bw-2 + target: [mt12, gx12, t20, t20v2, t12max, tx12mk2, boxer] + - id: color-3 + target: [tx15, tx16s, x12s, f16] + - id: mixed-1 + target: [v12, v14, v16, x10, x10express] + - id: bw-3 + target: [x7access, x9dp2019, x9e, x9e-hall] + - id: color-4 + target: [nb4p, st16, pa01] + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: true + + - name: Setup Python Dependencies + uses: ./.github/actions/python_dependencies + + - name: Setup WASI SDK + uses: ./.github/actions/wasi_sdk + + - name: Build modules + shell: bash + env: + FLAVOR: ${{ join(matrix.group.target, ';') }} + CMAKE_BUILD_TYPE: 'Release' + run: | + mkdir output && \ + tools/build-wasm-modules.sh "$(pwd)" "$(pwd)/output/" + + - name: Archive production artifacts + uses: actions/upload-artifact@v4 + with: + name: wasm-modules-${{ matrix.group.id }} + path: ${{github.workspace}}/output + if-no-files-found: error + retention-days: 15 + + build-linux: + name: Linux Companion + runs-on: ubuntu-latest + needs: modules + + container: + image: ghcr.io/edgetx/edgetx-dev:latest + volumes: + - ${{ github.workspace }}:/src + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup and Build + uses: ./.github/actions/build_companion + with: + os: 'linux' + + build-macos: + name: macOS Companion + runs-on: macos-14 + needs: modules + + env: + CMAKE_OSX_ARCHITECTURES: 'x86_64' + CMAKE_OSX_DEPLOYMENT_TARGET: '10.15' + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup and Build + uses: ./.github/actions/build_companion + with: + os: 'macos' + qt-arch: 'clang_64' + + build-win64: + name: Windows Companion + runs-on: windows-2022 + needs: modules + + env: + CMAKE_GENERATOR: 'Ninja' + CXX: 'clang++' + CC: 'clang' + + defaults: + run: + shell: bash + + steps: + - name: Check out the repo + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup and Build + uses: ./.github/actions/build_companion + with: + os: 'win64' + qt-arch: 'win64_msvc2022_64' diff --git a/.github/workflows/linux_cpn.yml b/.github/workflows/linux_cpn.yml deleted file mode 100644 index c282a5274ed..00000000000 --- a/.github/workflows/linux_cpn.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Linux Companion - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/linux_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/linux_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - runs-on: ubuntu-latest - container: - image: ghcr.io/edgetx/edgetx-dev:latest - volumes: - - ${{ github.workspace }}:/src - - steps: - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Build - working-directory: ${{github.workspace}} - shell: bash - run: | - mkdir output && \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-linux-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/macosx_cpn.yml b/.github/workflows/macosx_cpn.yml deleted file mode 100644 index 268275478f1..00000000000 --- a/.github/workflows/macosx_cpn.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: MacOSX Companion - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/macosx_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/macosx_cpn.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - QT_VERSION: "6.9.0" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: macos-13 - - steps: - - name: Select XCode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '14.1.0' - - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Setup Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - - name: Create Build Environment - # Some projects don't allow in-source building, so create a separate build directory - # We'll use this as our working directory for all subsequent commands - run: cmake -E make_directory ${{github.workspace}}/build - - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - version: ${{ env.QT_VERSION }} - modules: 'qtmultimedia qtserialport' - setup-python: 'false' - cache: true - cache-key-prefix: 'install-qt-action-macOS' - - - name: Install dependencies - run: python3 -m pip install --upgrade pip Pillow lz4 clang jinja2 - - - name: Install libusb - run: brew install libusb - - - name: Install dfu-util - run: brew install dfu-util - - - name: Install SDL2 - run: brew install SDL2 - - - name: Build - working-directory: ${{github.workspace}} - shell: bash - run: | - mkdir output && \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-osx-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/win_cpn-32.yml b/.github/workflows/win_cpn-32.yml deleted file mode 100644 index 1fb67e40199..00000000000 --- a/.github/workflows/win_cpn-32.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: Windows Companion 32-bit - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/win_cpn-32.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - CMAKE_GENERATOR: "MSYS Makefiles" - QT_VERSION: "5.15.2" - MINGW_VERSION: "win32_mingw81" - MINGW_PATH: "mingw81_32" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: windows-latest - defaults: - run: - shell: msys2 {0} - - steps: - - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW32 - update: true - install: git make curl tar mingw-w64-i686-toolchain - - - name: Install Dependencies - run: | - pacman -S --noconfirm mingw-w64-i686-cmake \ - mingw-w64-i686-python-pip \ - mingw-w64-i686-python-pillow \ - mingw-w64-i686-libjpeg-turbo \ - mingw-w64-i686-zlib \ - mingw-w64-i686-libtiff \ - mingw-w64-i686-freetype \ - mingw-w64-i686-lcms2 \ - mingw-w64-i686-libwebp \ - mingw-w64-i686-openjpeg2 \ - mingw-w64-i686-libimagequant \ - mingw-w64-i686-libraqm \ - mingw-w64-i686-SDL2 \ - mingw-w64-i686-clang \ - mingw-w64-i686-nsis \ - mingw-w64-i686-openssl - SETUPTOOLS_USE_DISTUTILS=stdlib pip install lz4 - python -m pip install clang jinja2 lz4 - - - name: Download and unpack dfu-util - run: | - curl -LO https://dfu-util.sourceforge.net/releases/dfu-util-0.11-binaries.tar.xz && \ - tar -xf dfu-util-0.11-binaries.tar.xz - cp dfu-util-0.11-binaries/win32/dfu-util-static.exe /mingw32/bin/dfu-util.exe - cp dfu-util-0.11-binaries/win32/libusb-1.0.dll /mingw32/bin/libusb-1.0.dll - cp dfu-util-0.11-binaries/win32/libusb-1.0.dll.a /mingw32/bin/libusb-1.0.dll.a - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - cache: true - cache-key-prefix: 'install-qt-action-win32' - version: ${{ env.QT_VERSION }} - arch: ${{ env.MINGW_VERSION }} - - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Build - working-directory: ${{github.workspace}} - # Execute the build. You can specify a specific target with "--target " - run: | - mkdir output && \ - CMAKE_PREFIX_PATH=$RUNNER_WORKSPACE/Qt/$QT_VERSION/$MINGW_PATH \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-win32-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/.github/workflows/win_cpn-64.yml b/.github/workflows/win_cpn-64.yml deleted file mode 100644 index e5cbcd7ca13..00000000000 --- a/.github/workflows/win_cpn-64.yml +++ /dev/null @@ -1,132 +0,0 @@ -name: Windows Companion 64-bit - -on: - push: - branches: - - 'main' - tags: - - v* - paths: - - '.github/workflows/win_cpn-64.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - pull_request: - branches: - - 'main' - paths: - - '.github/workflows/win_cpn-64.yml' - - 'companion/**' - - 'tools/build-companion.sh' - - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - CMAKE_BUILD_TYPE: "Release" - CMAKE_GENERATOR: "Ninja" - QT_VERSION: "6.9.0" - QT_ARCH: "win64_msvc2022_64" - SDL_VERSION: "2.32.8" - CXX: "clang++" - CC: "clang" - -jobs: - build: - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: windows-latest - defaults: - run: - shell: bash - - steps: - - name: Check out the repo - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Install Qt - uses: jdpurcell/install-qt-action@v5 - env: - AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - with: - cache: true - cache-key-prefix: 'install-qt-action-${{ env.QT_ARCH }}' - version: ${{ env.QT_VERSION }} - arch: ${{ env.QT_ARCH }} - modules: 'qtmultimedia qtserialport' - - - name: Setup SDL2 - id: setup-sdl2 - uses: libsdl-org/setup-sdl@v1 - with: - version: ${{ env.SDL_VERSION }} - build-type: "Release" - - - name: Install Python Dependencies - run: | - echo $PATH - $Python3_ROOT_DIR/python3.exe -m pip install clang jinja2 lz4 pillow - - - name: Setup dfu-util and libusb - run: | - #!/bin/bash - set -e - - echo "Setting up dfu-util and libusb..." - - # Create target directory - mkdir -p dfu-util-0.11 - - # Download and extract dfu-util - echo "Downloading dfu-util binaries..." - curl -LO https://dfu-util.sourceforge.net/releases/dfu-util-0.11-binaries.tar.xz - tar -xf dfu-util-0.11-binaries.tar.xz - cp dfu-util-0.11-binaries/win64/dfu-util.exe dfu-util-0.11/ - - # Install 7zip if not available - if ! command -v 7z &> /dev/null; then - echo "Installing 7zip..." - sudo apt-get update -qq - sudo apt-get install -y p7zip-full - fi - - # Download and extract libusb - echo "Downloading libusb..." - curl -LO https://github.com/libusb/libusb/releases/download/v1.0.29/libusb-1.0.29.7z - 7z x -olibusb-1.0.29 libusb-1.0.29.7z > /dev/null - cp libusb-1.0.29/VS2022/MS64/dll/* dfu-util-0.11/ - - # Clean up temporary files - rm -f dfu-util-0.11-binaries.tar.xz libusb-1.0.29.7z - rm -rf dfu-util-0.11-binaries libusb-1.0.29 - - echo "Setup complete. Contents of dfu-util-0.11:" - ls -la dfu-util-0.11/ - - echo "LIBUSB1_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV - echo "DFU_UTIL_ROOT_DIR=$(pwd)/dfu-util-0.11" >> $GITHUB_ENV - - - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@v1 - - - name: Build - run: | - mkdir output && \ - CMAKE_PREFIX_PATH="$QT_ROOT_DIR;$SDL2_ROOT" \ - tools/build-companion.sh "$(pwd)" "$(pwd)/output/" - - - name: Compose release filename - # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - run: echo "artifact_name=edgetx-cpn-win64-${GITHUB_REF##*/}" >> $GITHUB_ENV - - - name: Archive production artifacts - uses: actions/upload-artifact@v4 - with: - name: "${{ env.artifact_name }}" - path: ${{github.workspace}}/output - retention-days: 15 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bf1e6705cf..e77bb11086b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,8 @@ set(VERSION_REVISION "0") set(CODENAME "dev") string(TIMESTAMP BUILD_YEAR "%Y") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") + if(MINGW OR WIN32) set(CMAKE_OBJECT_PATH_MAX 200) endif() @@ -75,6 +77,28 @@ if(EdgeTX_SUPERBUILD) EXCLUDE_FROM_ALL TRUE ) + # Webasm targets + if(ENABLE_WASM) + include(FetchWasiSDK) + find_package(WasiSDK REQUIRED) + + ExternalProject_Add(wasm + SOURCE_DIR ${CMAKE_SOURCE_DIR} + BINARY_DIR ${CMAKE_BINARY_DIR}/wasm + CMAKE_ARGS + ${CMAKE_ARGS} + -Wno-dev + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-pthread.cmake + CMAKE_CACHE_ARGS + -DEdgeTX_SUPERBUILD:BOOL=0 + -DNATIVE_BUILD:BOOL=1 + -DDISABLE_COMPANION:BOOL=1 + INSTALL_COMMAND "" + EXCLUDE_FROM_ALL TRUE + ) + endif() + add_custom_target(configure DEPENDS native-configure arm-none-eabi-configure) @@ -93,6 +117,13 @@ if(EdgeTX_SUPERBUILD) DEPENDS native-configure ) + if(ENABLE_WASM) + add_custom_target(wasi-module + COMMAND ${CMAKE_COMMAND} --build wasm --target wasi-module --parallel + DEPENDS wasm-configure + ) + endif() + add_custom_target(companion COMMAND ${CMAKE_COMMAND} --build native --target companion --parallel DEPENDS native-configure @@ -127,8 +158,6 @@ if(EdgeTX_SUPERBUILD) return() endif() -enable_language(ASM) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) include(GenericDefinitions) @@ -138,11 +167,14 @@ else() message(STATUS "EdgeTX ${VERSION}-${VERSION_SUFFIX} @ ${GIT_STR}") endif() -if(NATIVE_BUILD) +if(NATIVE_BUILD AND NOT WASI) include(NativeTargets) else() # Prevent CMake warnings set(IGNORE "${LIBUSB1_ROOT_DIR}" "${OPENSSL_ROOT_DIR}") endif() +# Prevent CMake warnings +set(IGNORE "${ENABLE_WASM}") + add_subdirectory(${RADIO_SRC_DIR}) diff --git a/cmake/FetchWasiSDK.cmake b/cmake/FetchWasiSDK.cmake new file mode 100644 index 00000000000..5c54a73154d --- /dev/null +++ b/cmake/FetchWasiSDK.cmake @@ -0,0 +1,41 @@ +cmake_minimum_required(VERSION 3.14) + +set(WASI_SDK_VERSION "25") +set(WASI_SDK_FULL_VERSION "${WASI_SDK_VERSION}.0") + +# Determine platform and architecture +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(WASI_SDK_PLATFORM "linux") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(WASI_SDK_PLATFORM "macos") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(WASI_SDK_PLATFORM "windows") +else() + message(FATAL_ERROR "Unsupported platform: ${CMAKE_HOST_SYSTEM_NAME}") +endif() + +if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") + set(WASI_SDK_ARCH "x86_64") +elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64|arm64") + set(WASI_SDK_ARCH "arm64") +else() + message(FATAL_ERROR "Unsupported Linux architecture: ${CMAKE_HOST_SYSTEM_PROCESSOR}") +endif() + +set(WASI_SDK_BASE_URL "https://github.com/WebAssembly/wasi-sdk/releases/download") +set(WASI_SDK_FILENAME "wasi-sdk-${WASI_SDK_VERSION}.0-${WASI_SDK_ARCH}-${WASI_SDK_PLATFORM}") +set(WASI_SDK_URL "${WASI_SDK_BASE_URL}/wasi-sdk-${WASI_SDK_VERSION}/${WASI_SDK_FILENAME}.tar.gz") + +set(FETCHCONTENT_QUIET FALSE) + +include(FetchContent) +FetchContent_Declare( + WasiSDK + URL ${WASI_SDK_URL} + DOWNLOAD_EXTRACT_TIMESTAMP true + FIND_PACKAGE_ARGS +) + +FetchContent_MakeAvailable(WasiSDK) + +set(WASI_SDK_PATH ${wasisdk_SOURCE_DIR}) diff --git a/cmake/FindWasiSDK.cmake b/cmake/FindWasiSDK.cmake new file mode 100644 index 00000000000..e7cebdeafe1 --- /dev/null +++ b/cmake/FindWasiSDK.cmake @@ -0,0 +1,47 @@ +# FindWasiSDK.cmake +# Module to find WASI SDK installation +# +# This module defines the following variables: +# WasiSDK_FOUND - True if WASI SDK is found +# WasiSDK_ROOT_DIR - Root directory of WASI SDK installation +# +# Usage: +# set(WASI_SDK_PATH "/path/to/wasi-sdk") +# find_package(WasiSDK REQUIRED) + +cmake_minimum_required(VERSION 3.10) + +# Use WASI_SDK_PATH if provided, otherwise try to find it +if(WASI_SDK_PATH) + set(_wasi_sdk_search_paths "${WASI_SDK_PATH}") +else() + # Default search paths for common WASI SDK installations + set(_wasi_sdk_search_paths + "$ENV{WASI_SDK_PATH}" + "/opt/wasi-sdk" + ) +endif() + +# Find the WASI SDK root directory by looking for the toolchain file +find_path(WasiSDK_ROOT_DIR + NAMES share/cmake/wasi-sdk.cmake + PATHS ${_wasi_sdk_search_paths} + DOC "WASI SDK root directory" + NO_DEFAULT_PATH +) + +# Handle find_package arguments +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(WasiSDK + DEFAULT_MSG + WasiSDK_ROOT_DIR +) + +# Mark variables as advanced +mark_as_advanced( + WasiSDK_ROOT_DIR +) + +if(WasiSDK_FOUND) + set(WASI_SDK_PATH ${WasiSDK_ROOT_DIR}) +endif() diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index d6a929e8337..89d47ffab49 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -96,18 +96,18 @@ function(AddHardwareDefTarget output) endforeach() set(GEN_HW_DEFS ${CMAKE_CXX_COMPILER} ${HW_DEF_ARGS} -x c++-header -E -dM ${HW_DEF_SRC}) - set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) - set(GEN_JSON ${GEN_JSON} -i defines -T ${FLAVOUR} -) + # set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) + # set(GEN_JSON ${GEN_JSON} -i defines -T ${FLAVOUR} -) - add_custom_command(OUTPUT ${output} - COMMAND ${GEN_HW_DEFS} | ${GEN_JSON} > ${output} - DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py - ) + # add_custom_command(OUTPUT ${output} + # COMMAND ${GEN_HW_DEFS} | ${GEN_JSON} > ${output} + # DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py + # ) add_custom_command(OUTPUT ${output}.h COMMAND ${GEN_HW_DEFS} > ${output}.h DEPENDS ${HW_DEF_SRC} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py - ) + ) endfunction() function(AddHWGenTarget input template output) @@ -116,7 +116,7 @@ function(AddHWGenTarget input template output) set(GEN_JSON ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/hw_defs/generate_hw_def.py) # Inputs - set(INPUT_JSON ${CMAKE_CURRENT_BINARY_DIR}/${input}) + set(INPUT_JSON ${RADIO_SRC_DIR}/boards/hw_defs/${input}) set(TEMPLATE ${RADIO_DIRECTORY}/util/hw_defs/${template}.jinja) set(GEN_PY_DEPS ${RADIO_DIRECTORY}/util/hw_defs/generator.py diff --git a/cmake/NativeTargets.cmake b/cmake/NativeTargets.cmake index 30b653a5511..f44dfd05c5e 100644 --- a/cmake/NativeTargets.cmake +++ b/cmake/NativeTargets.cmake @@ -51,24 +51,24 @@ include(FetchGtest) add_custom_target(tests-radio COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gtests-radio DEPENDS gtests-radio - ) +) if(Qt6Core_FOUND AND NOT DISABLE_COMPANION) add_subdirectory(${COMPANION_SRC_DIRECTORY}) add_custom_target(tests-companion COMMAND ${CMAKE_CURRENT_BINARY_DIR}/gtests-companion DEPENDS gtests-companion - ) + ) add_custom_target(gtests DEPENDS gtests-radio gtests-companion - ) + ) add_custom_target(tests DEPENDS tests-radio tests-companion ) else() add_custom_target(gtests DEPENDS gtests-radio - ) + ) add_custom_target(tests DEPENDS tests-radio ) diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 918367a6396..72de9d98ca0 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -130,7 +130,8 @@ else() endif() ############# Import radio hardware definitions ############### -set(HWDEFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/../../radio/src") + +set(HWDEFS_DIR "${CMAKE_SOURCE_DIR}/radio/src/boards/hw_defs") set(HWDEFS_TMPL "${COMPANION_SRC_DIRECTORY}/hwdefs.qrc.in") set(HWDEFS_PHDR "HWDEF_JSON_LIST") set(HWDEFS_QRC "${CMAKE_CURRENT_BINARY_DIR}/hwdefs.qrc") @@ -300,22 +301,6 @@ add_subdirectory(tests) ############# Install #################### -# the current flavour is not automatically added if build in the current cmake iteration, so always -# add its library name to be sure -string(TOLOWER ${PCB} FLAVOUR) - -if(PCBREV) - if(PCB STREQUAL X7 AND PCBREV STREQUAL ACCESS) - set(FLAVOUR x7access) - elseif(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019) - set(FLAVOUR x9d+2019) - elseif(PCB STREQUAL X10 AND PCBREV STREQUAL EXPRESS) - set(FLAVOUR x10express) - else() - string(TOLOWER ${PCBREV} FLAVOUR) - endif() -endif(PCBREV) - set(COMPANION_TARGETS_DIR_ROOT "${COMPANION_SRC_DIRECTORY}/../targets") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") @@ -680,4 +665,3 @@ else() endif() include(CPack) - diff --git a/companion/src/simulation/simulatorinterface.h b/companion/src/simulation/simulatorinterface.h index 2d9850eed0f..5e1bc4ac528 100644 --- a/companion/src/simulation/simulatorinterface.h +++ b/companion/src/simulation/simulatorinterface.h @@ -177,7 +177,6 @@ class SimulatorInterface : public QObject void started(); void stopped(); void heartbeat(qint32 loops, qint64 timestamp); - void runtimeError(const QString & error); void lcdChange(bool backlightEnable); void phaseChanged(qint8 phase, const QString & name); void channelOutValueChange(quint8 index, qint32 value, qint32 limit); diff --git a/companion/src/simulation/simulatorwidget.cpp b/companion/src/simulation/simulatorwidget.cpp index b4e3e26865e..3c8092357ca 100644 --- a/companion/src/simulation/simulatorwidget.cpp +++ b/companion/src/simulation/simulatorwidget.cpp @@ -104,7 +104,6 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato connect(simulator, &SimulatorInterface::started, this, &SimulatorWidget::onSimulatorStarted); connect(simulator, &SimulatorInterface::heartbeat, this, &SimulatorWidget::onSimulatorHeartbeat); - connect(simulator, &SimulatorInterface::runtimeError, this, &SimulatorWidget::onSimulatorError); connect(simulator, &SimulatorInterface::phaseChanged, this, &SimulatorWidget::onPhaseChanged); connect((SimulatorMainWindow *)parent, &SimulatorMainWindow::txBatteryVoltageChanged, this, &SimulatorWidget::onTxBatteryVoltageChanged); diff --git a/define_remover.py b/define_remover.py new file mode 100644 index 00000000000..1ffd0c4fe09 --- /dev/null +++ b/define_remover.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python3 +""" +Program to remove #define statements from C/C++ files based on a list of names. +""" + +import re +import argparse +import sys +from pathlib import Path + +def load_names_to_remove(names_file): + """Load the list of names to remove from the specified file.""" + try: + with open(names_file, 'r', encoding='utf-8') as f: + names = [line.strip() for line in f if line.strip()] + return set(names) # Use set for faster lookup + except FileNotFoundError: + print(f"Error: Names file '{names_file}' not found.") + sys.exit(1) + except Exception as e: + print(f"Error reading names file: {e}") + sys.exit(1) + +def remove_defines_from_file(file_path, names_to_remove, dry_run=False): + """Remove #define statements from a file based on the names list.""" + try: + with open(file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + except Exception as e: + print(f"Error reading file '{file_path}': {e}") + return False + + modified_lines = [] + removed_count = 0 + i = 0 + + # Pattern to match #define statements + # Matches: #define NAME or #define NAME value + define_pattern = re.compile(r'^\s*#define\s+(\w+)') + + while i < len(lines): + line = lines[i] + line_num = i + 1 + + match = define_pattern.match(line) + if match: + define_name = match.group(1) + if define_name in names_to_remove: + # Found a #define to remove, collect all continuation lines + lines_to_remove = [] + current_line = line + current_line_num = line_num + + # Keep collecting lines while they end with backslash + while current_line.rstrip().endswith('\\'): + lines_to_remove.append((current_line_num, current_line)) + i += 1 + if i < len(lines): + current_line = lines[i] + current_line_num = i + 1 + else: + break + + # Add the final line (without backslash or last line of file) + lines_to_remove.append((current_line_num, current_line)) + + # Print what we're removing + if not dry_run: + print(f"Removing multi-line #define from {file_path}:") + for ln, l in lines_to_remove: + print(f" Line {ln}: {l.rstrip()}") + else: + print(f"Would remove multi-line #define from {file_path}:") + for ln, l in lines_to_remove: + print(f" Line {ln}: {l.rstrip()}") + + removed_count += 1 + i += 1 # Move to next line after the #define block + continue + + # Line is not a #define to remove, keep it + modified_lines.append(line) + i += 1 + + # Write back to file if not dry run and changes were made + if not dry_run and removed_count > 0: + try: + with open(file_path, 'w', encoding='utf-8') as f: + f.writelines(modified_lines) + print(f"Successfully processed '{file_path}' - removed {removed_count} #define(s)") + except Exception as e: + print(f"Error writing file '{file_path}': {e}") + return False + elif dry_run and removed_count > 0: + print(f"Would process '{file_path}' - {removed_count} #define(s) to remove") + elif removed_count == 0: + print(f"No matching #define statements found in '{file_path}'") + + return True + +def main(): + parser = argparse.ArgumentParser( + description="Remove #define statements from C/C++ files based on a list of names" + ) + parser.add_argument( + "names_file", + help="File containing names to remove (one name per line)" + ) + parser.add_argument( + "source_files", + nargs="+", + help="Source files to process" + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="Show what would be removed without actually modifying files" + ) + + args = parser.parse_args() + + # Load names to remove + names_to_remove = load_names_to_remove(args.names_file) + print(f"Loaded {len(names_to_remove)} names to remove") + + if args.dry_run: + print("DRY RUN MODE - No files will be modified") + + # Process each source file + success_count = 0 + for source_file in args.source_files: + file_path = Path(source_file) + if not file_path.exists(): + print(f"Warning: File '{source_file}' not found, skipping") + continue + + if remove_defines_from_file(file_path, names_to_remove, args.dry_run): + success_count += 1 + + print(f"\nProcessed {success_count} out of {len(args.source_files)} files successfully") + +if __name__ == "__main__": + main() diff --git a/define_usage_checker.py b/define_usage_checker.py new file mode 100644 index 00000000000..002cb76e573 --- /dev/null +++ b/define_usage_checker.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +""" +Program to check if #define names are used anywhere in C++ code files. +Use this to verify that defines are safe to remove. +""" + +import re +import argparse +import sys +from pathlib import Path +from collections import defaultdict + +def load_names_to_check(names_file): + """Load the list of names to check from the specified file.""" + try: + with open(names_file, 'r', encoding='utf-8') as f: + names = [line.strip() for line in f if line.strip()] + return names + except FileNotFoundError: + print(f"Error: Names file '{names_file}' not found.") + sys.exit(1) + except Exception as e: + print(f"Error reading names file: {e}") + sys.exit(1) + +def check_usage_in_file(file_path, names_to_check, exclude_defines=True): + """Check if any of the names are used in the given file.""" + try: + with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: + content = f.read() + except Exception as e: + print(f"Error reading file '{file_path}': {e}") + return {} + + lines = content.splitlines() + usage_found = defaultdict(list) + + # Pattern to match #define statements (to potentially exclude them) + define_pattern = re.compile(r'^\s*#define\s+(\w+)') + + # Pre-compile regex patterns for better performance + name_patterns = {name: re.compile(r'\b' + re.escape(name) + r'\b') for name in names_to_check} + + for line_num, line in enumerate(lines, 1): + # Skip #define lines if exclude_defines is True + if exclude_defines and define_pattern.match(line): + continue + + # Skip comments (basic comment detection) + # Remove single-line comments + if '//' in line: + line = line.split('//')[0] + + # Skip lines that are mostly comments (basic /* */ detection) + if line.strip().startswith('/*') or line.strip().startswith('*'): + continue + + # Check each name using pre-compiled patterns + for name, pattern in name_patterns.items(): + if pattern.search(line): + usage_found[name].append({ + 'line_num': line_num, + 'line': line.strip(), + 'file': str(file_path) + }) + + return usage_found + +def find_cpp_files(directories, extensions=None): + """Find all C++ files in the given directories.""" + if extensions is None: + extensions = {'.cpp', '.cxx', '.cc', '.c', '.hpp', '.hxx', '.h', '.hh'} + + cpp_files = [] + for directory in directories: + dir_path = Path(directory) + if dir_path.is_file(): + if dir_path.suffix.lower() in extensions: + cpp_files.append(dir_path) + elif dir_path.is_dir(): + for ext in extensions: + cpp_files.extend(dir_path.rglob(f'*{ext}')) + else: + print(f"Warning: '{directory}' is not a valid file or directory") + + return cpp_files + +def main(): + parser = argparse.ArgumentParser( + description="Check if #define names are used anywhere in C++ code" + ) + parser.add_argument( + "names_file", + help="File containing names to check (one name per line)" + ) + parser.add_argument( + "paths", + nargs="+", + help="Files or directories to search (directories are searched recursively)" + ) + parser.add_argument( + "--include-defines", + action="store_true", + help="Include #define statements in the search (default: exclude them)" + ) + parser.add_argument( + "--extensions", + default=".cpp,.cxx,.cc,.c,.hpp,.hxx,.h,.hh", + help="Comma-separated list of file extensions to search (default: .cpp,.cxx,.cc,.c,.hpp,.hxx,.h,.hh)" + ) + parser.add_argument( + "--summary-only", + action="store_true", + help="Show only summary of used/unused names" + ) + + args = parser.parse_args() + + # Parse extensions + extensions = {ext.strip() for ext in args.extensions.split(',') if ext.strip()} + + # Load names to check + names_to_check = load_names_to_check(args.names_file) + print(f"Checking usage of {len(names_to_check)} names") + + # Find C++ files + cpp_files = find_cpp_files(args.paths, extensions) + print(f"Found {len(cpp_files)} C++ files to search") + + if not cpp_files: + print("No C++ files found to search!") + sys.exit(1) + + # Check usage in all files + all_usage = defaultdict(list) + files_processed = 0 + + for cpp_file in cpp_files: + usage = check_usage_in_file(cpp_file, names_to_check, exclude_defines=not args.include_defines) + files_processed += 1 + + for name, occurrences in usage.items(): + all_usage[name].extend(occurrences) + + # Progress indicator for large codebases + if files_processed % 100 == 0: + print(f"Processed {files_processed} files...") + + # Analyze results + used_names = set() + unused_names = set() + + for name in names_to_check: + if name in all_usage: + used_names.add(name) + else: + unused_names.add(name) + + # Display results + print(f"\n{'='*60}") + print("USAGE ANALYSIS RESULTS") + print(f"{'='*60}") + + if used_names: + print(f"\n❌ USED NAMES ({len(used_names)}) - DO NOT REMOVE:") + for name in sorted(used_names): + print(f" • {name}") + if not args.summary_only: + print(f" Used in {len(set(occ['file'] for occ in all_usage[name]))} file(s):") + for occurrence in all_usage[name][:5]: # Show first 5 occurrences + print(f" {occurrence['file']}:{occurrence['line_num']}: {occurrence['line']}") + if len(all_usage[name]) > 5: + print(f" ... and {len(all_usage[name]) - 5} more occurrences") + print() + + if unused_names: + print(f"\n✅ UNUSED NAMES ({len(unused_names)}) - SAFE TO REMOVE:") + for name in sorted(unused_names): + print(f" • {name}") + + # Summary + print(f"\n{'='*60}") + print("SUMMARY:") + print(f" Total names checked: {len(names_to_check)}") + print(f" Names in use: {len(used_names)}") + print(f" Names unused: {len(unused_names)}") + print(f" Files searched: {files_processed}") + + if used_names: + print(f"\n⚠️ WARNING: {len(used_names)} names are still in use!") + print(" Review the usage before removing these #define statements.") + else: + print(f"\n✅ All {len(names_to_check)} names appear to be unused and safe to remove.") + +if __name__ == "__main__": + main() diff --git a/hw_defs.sorted b/hw_defs.sorted new file mode 100644 index 00000000000..b3b91763812 --- /dev/null +++ b/hw_defs.sorted @@ -0,0 +1,441 @@ +ADC_CHANNEL_BATT +ADC_CHANNEL_EXT1 +ADC_CHANNEL_EXT2 +ADC_CHANNEL_EXT3 +ADC_CHANNEL_EXT4 +ADC_CHANNEL_MOUSE1 +ADC_CHANNEL_MOUSE2 +ADC_CHANNEL_POT1 +ADC_CHANNEL_POT2 +ADC_CHANNEL_POT3 +ADC_CHANNEL_POT4 +ADC_CHANNEL_RAW1 +ADC_CHANNEL_RAW2 +ADC_CHANNEL_RAW3 +ADC_CHANNEL_RAW4 +ADC_CHANNEL_RTC_BAT +ADC_CHANNEL_SLIDER1 +ADC_CHANNEL_SLIDER2 +ADC_CHANNEL_SLIDER3 +ADC_CHANNEL_SLIDER4 +ADC_CHANNEL_STICK_LH +ADC_CHANNEL_STICK_LV +ADC_CHANNEL_STICK_RH +ADC_CHANNEL_STICK_RV +ADC_CHANNEL_STICK_ST +ADC_CHANNEL_STICK_TH +ADC_CHANNEL_SWA +ADC_CHANNEL_SWB +ADC_CHANNEL_SWC +ADC_CHANNEL_SWD +ADC_CHANNEL_SWE +ADC_CHANNEL_SWF +ADC_CHANNEL_SWG +ADC_CHANNEL_SWH +ADC_DIRECTION +ADC_DMA +ADC_DMA_CHANNEL +ADC_DMA_STREAM +ADC_DMA_STREAM_IRQ +ADC_DMA_STREAM_IRQHandler +ADC_EXT +ADC_EXT_CHANNELS +ADC_EXT_DMA +ADC_EXT_DMA_CHANNEL +ADC_EXT_DMA_STREAM +ADC_EXT_DMA_STREAM_IRQ +ADC_EXT_DMA_STREAM_IRQHandler +ADC_EXT_SAMPTIME +ADC_GPIO_PIN_BATT +ADC_GPIO_PIN_EXT1 +ADC_GPIO_PIN_EXT2 +ADC_GPIO_PIN_EXT3 +ADC_GPIO_PIN_EXT4 +ADC_GPIO_PIN_MOUSE1 +ADC_GPIO_PIN_MOUSE2 +ADC_GPIO_PIN_POT1 +ADC_GPIO_PIN_POT2 +ADC_GPIO_PIN_POT3 +ADC_GPIO_PIN_POT4 +ADC_GPIO_PIN_RAW1 +ADC_GPIO_PIN_RAW2 +ADC_GPIO_PIN_RAW3 +ADC_GPIO_PIN_RAW4 +ADC_GPIO_PIN_SLIDER1 +ADC_GPIO_PIN_SLIDER2 +ADC_GPIO_PIN_SLIDER3 +ADC_GPIO_PIN_SLIDER4 +ADC_GPIO_PIN_STICK_LH +ADC_GPIO_PIN_STICK_LV +ADC_GPIO_PIN_STICK_RH +ADC_GPIO_PIN_STICK_RV +ADC_GPIO_PIN_STICK_ST +ADC_GPIO_PIN_STICK_TH +ADC_GPIO_PIN_SWA +ADC_GPIO_PIN_SWB +ADC_GPIO_PIN_SWC +ADC_GPIO_PIN_SWD +ADC_GPIO_PIN_SWE +ADC_GPIO_PIN_SWF +ADC_GPIO_PIN_SWG +ADC_GPIO_PIN_SWH +ADC_GPIO_PIN_SWI +ADC_GPIO_PIN_SWJ +ADC_GPIO_PIN_SWK +ADC_GPIO_PIN_SWL +ADC_GPIO_PIN_SWM +ADC_GPIO_PIN_SWN +ADC_GPIO_PIN_SWO +ADC_GPIO_PIN_SWP +ADC_GPIO_PIN_SWQ +ADC_GPIO_PIN_SWR +ADC_GPIO_PIN_SWS +ADC_GPIO_PIN_SWT +ADC_GPIO_PIN_SWU +ADC_GPIO_PIN_SWV +ADC_GPIO_PIN_SWW +ADC_GPIO_PIN_SWX +ADC_GPIO_PIN_SWY +ADC_GPIO_PIN_SWZ +ADC_GPIOA_PINS +ADC_GPIOB_PINS +ADC_GPIOC_PINS +ADC_GPIOD_PINS +ADC_GPIOE_PINS +ADC_GPIOF_PINS +ADC_GPIOG_PINS +ADC_GPIOH_PINS +ADC_GPIOI_PINS +ADC_GPIOJ_PINS +ADC_GPIOK_PINS +ADC_GPIOL_PINS +ADC_GPIOM_PINS +ADC_GPION_PINS +ADC_GPIOO_PINS +ADC_GPIOP_PINS +ADC_GPIOQ_PINS +ADC_GPIOR_PINS +ADC_GPIOS_PINS +ADC_GPIOT_PINS +ADC_GPIOU_PINS +ADC_GPIOV_PINS +ADC_GPIOW_PINS +ADC_GPIOX_PINS +ADC_GPIOY_PINS +ADC_GPIOZ_PINS +ADC_MAIN +ADC_SAMPTIME +ADC_SPI +ADC_SPI_BATT +ADC_SPI_EXT1 +ADC_SPI_EXT2 +ADC_SPI_EXT3 +ADC_SPI_EXT4 +ADC_SPI_GPIO_PIN_CS +ADC_SPI_GPIO_PIN_MISO +ADC_SPI_GPIO_PIN_MOSI +ADC_SPI_GPIO_PIN_SCK +ADC_SPI_MOUSE1 +ADC_SPI_MOUSE2 +ADC_SPI_POT1 +ADC_SPI_POT2 +ADC_SPI_POT3 +ADC_SPI_POT4 +ADC_SPI_RAW1 +ADC_SPI_RAW2 +ADC_SPI_RAW3 +ADC_SPI_RAW4 +ADC_SPI_RTC_BAT +ADC_SPI_SLIDER1 +ADC_SPI_SLIDER2 +ADC_SPI_SLIDER3 +ADC_SPI_SLIDER4 +ADC_SPI_STICK_LH +ADC_SPI_STICK_LV +ADC_SPI_STICK_RH +ADC_SPI_STICK_RV +ADC_SPI_STICK_ST +ADC_SPI_STICK_TH +ADC_SPI_SWA +ADC_SPI_SWB +ADC_SPI_SWC +ADC_SPI_SWD +ADC_SPI_SWE +ADC_SPI_SWF +ADC_SPI_SWG +ADC_SPI_SWH +ADC_SPI_SWI +ADC_SPI_SWJ +ADC_SPI_SWK +ADC_SPI_SWL +ADC_SPI_SWM +ADC_SPI_SWN +ADC_SPI_SWO +ADC_SPI_SWP +ADC_SPI_SWQ +ADC_SPI_SWR +ADC_SPI_SWS +ADC_SPI_SWT +ADC_SPI_SWU +ADC_SPI_SWV +ADC_SPI_SWW +ADC_SPI_SWX +ADC_SPI_SWY +ADC_SPI_SWZ +FUNCTION_SWITCH_1 +FUNCTION_SWITCH_2 +FUNCTION_SWITCH_3 +FUNCTION_SWITCH_4 +FUNCTION_SWITCH_5 +FUNCTION_SWITCH_6 +KEYS_GPIO_ACTIVE_HIGH +KEYS_GPIO_PIN_DOWN +KEYS_GPIO_PIN_ENTER +KEYS_GPIO_PIN_EXIT +KEYS_GPIO_PIN_LEFT +KEYS_GPIO_PIN_MDL +KEYS_GPIO_PIN_MENU +KEYS_GPIO_PIN_MINUS +KEYS_GPIO_PIN_PAGEDN +KEYS_GPIO_PIN_PAGEUP +KEYS_GPIO_PIN_PLUS +KEYS_GPIO_PIN_RIGHT +KEYS_GPIO_PIN_SHIFT +KEYS_GPIO_PIN_SYS +KEYS_GPIO_PIN_TELE +KEYS_GPIO_PIN_UP +KEYS_GPIO_REG_DOWN +KEYS_GPIO_REG_ENTER +KEYS_GPIO_REG_EXIT +KEYS_GPIO_REG_LEFT +KEYS_GPIO_REG_MDL +KEYS_GPIO_REG_MENU +KEYS_GPIO_REG_MINUS +KEYS_GPIO_REG_PAGEDN +KEYS_GPIO_REG_PAGEUP +KEYS_GPIO_REG_PLUS +KEYS_GPIO_REG_RIGHT +KEYS_GPIO_REG_SHIFT +KEYS_GPIO_REG_SYS +KEYS_GPIO_REG_TELE +KEYS_GPIO_REG_UP +STICK_PWM_CHANNEL_LH +STICK_PWM_CHANNEL_LV +STICK_PWM_CHANNEL_RH +STICK_PWM_CHANNEL_RV +SWITCHES_A_CFS_IDX +SWITCHES_A_INVERTED +SWITCHES_B_CFS_IDX +SWITCHES_B_INVERTED +SWITCHES_C_CFS_IDX +SWITCHES_C_INVERTED +SWITCHES_D_CFS_IDX +SWITCHES_D_INVERTED +SWITCHES_E_CFS_IDX +SWITCHES_E_INVERTED +SWITCHES_F_CFS_IDX +SWITCHES_F_INVERTED +SWITCHES_G_CFS_IDX +SWITCHES_G_INVERTED +SWITCHES_GPIO_PIN_A +SWITCHES_GPIO_PIN_A_H +SWITCHES_GPIO_PIN_A_L +SWITCHES_GPIO_PIN_B +SWITCHES_GPIO_PIN_B_H +SWITCHES_GPIO_PIN_B_L +SWITCHES_GPIO_PIN_C +SWITCHES_GPIO_PIN_C_H +SWITCHES_GPIO_PIN_C_L +SWITCHES_GPIO_PIN_D +SWITCHES_GPIO_PIN_D_H +SWITCHES_GPIO_PIN_D_L +SWITCHES_GPIO_PIN_E +SWITCHES_GPIO_PIN_E_H +SWITCHES_GPIO_PIN_E_L +SWITCHES_GPIO_PIN_F +SWITCHES_GPIO_PIN_F_H +SWITCHES_GPIO_PIN_F_L +SWITCHES_GPIO_PIN_G +SWITCHES_GPIO_PIN_G_H +SWITCHES_GPIO_PIN_G_L +SWITCHES_GPIO_PIN_H +SWITCHES_GPIO_PIN_I +SWITCHES_GPIO_PIN_I_H +SWITCHES_GPIO_PIN_I_L +SWITCHES_GPIO_PIN_J +SWITCHES_GPIO_PIN_J_H +SWITCHES_GPIO_PIN_J_L +SWITCHES_GPIO_PIN_K +SWITCHES_GPIO_PIN_K_H +SWITCHES_GPIO_PIN_K_L +SWITCHES_GPIO_PIN_L +SWITCHES_GPIO_PIN_L_H +SWITCHES_GPIO_PIN_L_L +SWITCHES_GPIO_PIN_M +SWITCHES_GPIO_PIN_M_H +SWITCHES_GPIO_PIN_M_L +SWITCHES_GPIO_PIN_N +SWITCHES_GPIO_PIN_N_H +SWITCHES_GPIO_PIN_N_L +SWITCHES_GPIO_PIN_O +SWITCHES_GPIO_PIN_O_H +SWITCHES_GPIO_PIN_O_L +SWITCHES_GPIO_PIN_P +SWITCHES_GPIO_PIN_P_H +SWITCHES_GPIO_PIN_P_L +SWITCHES_GPIO_PIN_Q_H +SWITCHES_GPIO_PIN_Q_L +SWITCHES_GPIO_PIN_R_H +SWITCHES_GPIO_PIN_R_L +SWITCHES_GPIO_REG_A +SWITCHES_GPIO_REG_A_H +SWITCHES_GPIO_REG_A_L +SWITCHES_GPIO_REG_B +SWITCHES_GPIO_REG_B_H +SWITCHES_GPIO_REG_B_L +SWITCHES_GPIO_REG_C +SWITCHES_GPIO_REG_C_H +SWITCHES_GPIO_REG_C_L +SWITCHES_GPIO_REG_D +SWITCHES_GPIO_REG_D_H +SWITCHES_GPIO_REG_D_L +SWITCHES_GPIO_REG_E +SWITCHES_GPIO_REG_E_H +SWITCHES_GPIO_REG_E_L +SWITCHES_GPIO_REG_F +SWITCHES_GPIO_REG_F_H +SWITCHES_GPIO_REG_F_L +SWITCHES_GPIO_REG_G +SWITCHES_GPIO_REG_G_H +SWITCHES_GPIO_REG_G_L +SWITCHES_GPIO_REG_H +SWITCHES_GPIO_REG_H_H +SWITCHES_GPIO_REG_I +SWITCHES_GPIO_REG_I_H +SWITCHES_GPIO_REG_I_L +SWITCHES_GPIO_REG_J +SWITCHES_GPIO_REG_J_H +SWITCHES_GPIO_REG_J_L +SWITCHES_GPIO_REG_K +SWITCHES_GPIO_REG_K_H +SWITCHES_GPIO_REG_K_L +SWITCHES_GPIO_REG_L +SWITCHES_GPIO_REG_L_H +SWITCHES_GPIO_REG_L_L +SWITCHES_GPIO_REG_M +SWITCHES_GPIO_REG_M_H +SWITCHES_GPIO_REG_M_L +SWITCHES_GPIO_REG_N +SWITCHES_GPIO_REG_N_H +SWITCHES_GPIO_REG_N_L +SWITCHES_GPIO_REG_O +SWITCHES_GPIO_REG_O_H +SWITCHES_GPIO_REG_O_L +SWITCHES_GPIO_REG_P +SWITCHES_GPIO_REG_P_H +SWITCHES_GPIO_REG_P_L +SWITCHES_GPIO_REG_Q +SWITCHES_GPIO_REG_Q_H +SWITCHES_GPIO_REG_Q_L +SWITCHES_GPIO_REG_R +SWITCHES_GPIO_REG_R_H +SWITCHES_GPIO_REG_R_L +SWITCHES_GPIO_REG_S +SWITCHES_GPIO_REG_S_H +SWITCHES_GPIO_REG_T +SWITCHES_GPIO_REG_T_H +SWITCHES_GPIO_REG_U +SWITCHES_GPIO_REG_U_H +SWITCHES_GPIO_REG_V +SWITCHES_GPIO_REG_V_H +SWITCHES_GPIO_REG_W +SWITCHES_GPIO_REG_W_H +SWITCHES_GPIO_REG_X +SWITCHES_GPIO_REG_X_H +SWITCHES_GPIO_REG_Y +SWITCHES_GPIO_REG_Y_H +SWITCHES_GPIO_REG_Z +SWITCHES_GPIO_REG_Z_H +SWITCHES_H_CFS_IDX +SWITCHES_H_INVERTED +SWITCHES_I_CFS_IDX +SWITCHES_I_INVERTED +SWITCHES_J_CFS_IDX +SWITCHES_J_INVERTED +SWITCHES_K_CFS_IDX +SWITCHES_K_INVERTED +SWITCHES_L_CFS_IDX +SWITCHES_L_INVERTED +SWITCHES_M_CFS_IDX +SWITCHES_M_INVERTED +SWITCHES_N_CFS_IDX +SWITCHES_N_INVERTED +SWITCHES_O_CFS_IDX +SWITCHES_O_INVERTED +SWITCHES_P_CFS_IDX +SWITCHES_P_INVERTED +SWITCHES_Q_CFS_IDX +SWITCHES_Q_INVERTED +SWITCHES_R_CFS_IDX +SWITCHES_R_INVERTED +TRIMS_GPIO_ACTIVE_HIGH +TRIMS_GPIO_PIN_LHL +TRIMS_GPIO_PIN_LHR +TRIMS_GPIO_PIN_LSD +TRIMS_GPIO_PIN_LSU +TRIMS_GPIO_PIN_LVD +TRIMS_GPIO_PIN_LVU +TRIMS_GPIO_PIN_RHL +TRIMS_GPIO_PIN_RHR +TRIMS_GPIO_PIN_RSD +TRIMS_GPIO_PIN_RSU +TRIMS_GPIO_PIN_RVD +TRIMS_GPIO_PIN_RVU +TRIMS_GPIO_PIN_T1L +TRIMS_GPIO_PIN_T1R +TRIMS_GPIO_PIN_T2L +TRIMS_GPIO_PIN_T2R +TRIMS_GPIO_PIN_T3L +TRIMS_GPIO_PIN_T3R +TRIMS_GPIO_PIN_T4L +TRIMS_GPIO_PIN_T4R +TRIMS_GPIO_PIN_T5L +TRIMS_GPIO_PIN_T5R +TRIMS_GPIO_PIN_T7L +TRIMS_GPIO_PIN_T7R +TRIMS_GPIO_PIN_T8D +TRIMS_GPIO_PIN_T8U +TRIMS_GPIO_REG_LHL +TRIMS_GPIO_REG_LHR +TRIMS_GPIO_REG_LSD +TRIMS_GPIO_REG_LSU +TRIMS_GPIO_REG_LVD +TRIMS_GPIO_REG_LVU +TRIMS_GPIO_REG_RHL +TRIMS_GPIO_REG_RHR +TRIMS_GPIO_REG_RSD +TRIMS_GPIO_REG_RSU +TRIMS_GPIO_REG_RVD +TRIMS_GPIO_REG_RVU +TRIMS_GPIO_REG_T1L +TRIMS_GPIO_REG_T1R +TRIMS_GPIO_REG_T2L +TRIMS_GPIO_REG_T2R +TRIMS_GPIO_REG_T3L +TRIMS_GPIO_REG_T3R +TRIMS_GPIO_REG_T4L +TRIMS_GPIO_REG_T4R +TRIMS_GPIO_REG_T5L +TRIMS_GPIO_REG_T5R +TRIMS_GPIO_REG_T6D +TRIMS_GPIO_REG_T6U +TRIMS_GPIO_REG_T7L +TRIMS_GPIO_REG_T7R +TRIMS_GPIO_REG_T8D +TRIMS_GPIO_REG_T8U +TRIMS_VIRTUAL_LH +TRIMS_VIRTUAL_LV +TRIMS_VIRTUAL_RH +TRIMS_VIRTUAL_RV +TRIMS_VIRTUAL_ST +TRIMS_VIRTUAL_TH diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index e3988c7ba92..0a72f282642 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -34,7 +34,6 @@ option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON) option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF) option(RAS "RAS (SWR) enabled" ON) option(TEMPLATES "Model templates menu" OFF) -option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF) option(TRACE_AUDIO "Traces audio enabled" OFF) option(DEBUG_SEGGER_RTT "Debug output to Segger RTT" OFF) @@ -100,11 +99,18 @@ else() message(FATAL_ERROR "Unknown PCB '${PCB}'") endif() +# Add RADIO_xxx definition +string(TOUPPER ${FLAVOUR} RADIO_NAME) +string(REPLACE "+" "P" RADIO_NAME ${RADIO_NAME}) +string(CONCAT RADIO_NAME "RADIO_" ${RADIO_NAME}) +add_definitions(-D${RADIO_NAME}) +set(${RADIO_NAME} YES) + set(HW_DESC_JSON ${FLAVOUR}.json) AddHardwareDefTarget(${HW_DESC_JSON}) # enable generating JSON definition separately for debugging -add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON} ${HW_DESC_JSON}.h) +add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON}.h) include(hal/CMakeLists.txt) @@ -511,7 +517,10 @@ if(NATIVE_BUILD) set_property(TARGET radiolib_native PROPERTY POSITION_INDEPENDENT_CODE ON) add_subdirectory(targets/simu) - add_subdirectory(tests) + + if(NOT WASI) + add_subdirectory(tests) + endif() endif() set(SRC ${SRC} ${FIRMWARE_SRC}) @@ -531,6 +540,8 @@ if(NOT USE_UNSUPPORTED_TOOLCHAIN AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUA message(FATAL_ERROR "Only Arm GNU Toolchain version 14.2.rel1 is supported!!") endif() +enable_language(ASM) + set(CMAKE_C_FLAGS "${FIRMWARE_C_FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${FIRMWARE_C_FLAGS_DEBUG}") set(CMAKE_C_FLAGS_RELEASE "${FIRMWARE_C_FLAGS}") @@ -719,5 +730,3 @@ if(CPU_FAMILY STREQUAL STM32) endif() PrintTargetReport("firmware") - -AddHardwareDefTarget(hardware_defs ${RADIO_DIRECTORY}/src/targets/hw_defs/${FLAVOUR}.json) diff --git a/radio/src/audio.cpp b/radio/src/audio.cpp index 5a082e286ab..29aa2da35af 100644 --- a/radio/src/audio.cpp +++ b/radio/src/audio.cpp @@ -730,13 +730,6 @@ void AudioQueue::playTone(uint16_t freq, uint16_t len, uint16_t pause, uint8_t f void AudioQueue::playFile(const char * filename, uint8_t flags, uint8_t id, int8_t fragmentVolume) { -#if defined(SIMU) - TRACE("playFile(\"%s\", flags=%x, id=%d fragmentVolume=%d ee_general=%d)", filename, flags, id, fragmentVolume, g_eeGeneral.wavVolume); - if (strlen(filename) > AUDIO_FILENAME_MAXLEN) { - TRACE("file name too long! maximum length is %d characters", AUDIO_FILENAME_MAXLEN); - } -#endif - if (!sdMounted()) return; diff --git a/radio/src/boards/generic_stm32/CMakeLists.txt b/radio/src/boards/generic_stm32/CMakeLists.txt index 629da13d719..8739feebb21 100644 --- a/radio/src/boards/generic_stm32/CMakeLists.txt +++ b/radio/src/boards/generic_stm32/CMakeLists.txt @@ -8,7 +8,7 @@ AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) # Dependencies common to bootloader and firmware set(MINIMAL_BOARD_LIB_SRC - ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} + ${RADIO_SRC_DIR}/boards/hw_defs/${HW_DESC_JSON} ${CMAKE_CURRENT_BINARY_DIR}/stm32_keys.inc boards/generic_stm32/inputs.cpp diff --git a/radio/src/boards/generic_stm32/analog_inputs.cpp b/radio/src/boards/generic_stm32/analog_inputs.cpp index bfd99db1e2a..e18fc13ec3a 100644 --- a/radio/src/boards/generic_stm32/analog_inputs.cpp +++ b/radio/src/boards/generic_stm32/analog_inputs.cpp @@ -27,7 +27,7 @@ #include "hal.h" -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) #include "ads79xx.h" #endif @@ -40,8 +40,9 @@ // generated files #include "stm32_adc_inputs.inc" -#include "stm32_pwm_inputs.inc" +#if !defined(BOOT) #include "hal_adc_inputs.inc" +#endif constexpr uint8_t n_ADC = DIM(_ADC_adc); constexpr uint8_t n_ADC_spi = DIM(_ADC_spi); @@ -54,16 +55,21 @@ static_assert(n_inputs <= MAX_ANALOG_INPUTS, "Too many analog inputs"); static bool adc_init() { bool success = stm32_hal_adc_init(_ADC_adc, n_ADC, _ADC_inputs, _ADC_GPIOs, n_GPIO); -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) if (n_ADC_spi > 0) ads79xx_init(&_ADC_spi[0]); #endif return success; } +static void adc_deinit() +{ + stm32_hal_adc_deinit(_ADC_adc, n_ADC); +} + static bool adc_start_read() { bool success = stm32_hal_adc_start_read(_ADC_adc, n_ADC, _ADC_inputs, n_inputs); -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) if (n_ADC_spi > 0) { success = success && ads79xx_adc_start_read(&_ADC_spi[0], _ADC_inputs); } @@ -73,7 +79,7 @@ static bool adc_start_read() static void adc_wait_completion() { -#if defined(ADC_SPI) +#if defined(USE_ADS79XX) // ADS79xx does all the work in the completion function // so it's probably better to poll it first if (n_ADC_spi > 0) ads79xx_adc_wait_completion(&_ADC_spi[0], _ADC_inputs); @@ -82,17 +88,22 @@ static void adc_wait_completion() } const etx_hal_adc_driver_t _adc_driver = { +#if !defined(BOOT) .inputs = _hal_inputs, .default_pots_cfg = _pot_default_config, +#endif .init = adc_init, + .deinit = adc_deinit, .start_conversion = adc_start_read, .wait_completion = adc_wait_completion, .set_input_mask = stm32_hal_set_inputs_mask, .get_input_mask = stm32_hal_get_inputs_mask, }; +#if !defined(BOOT) #if defined(PWM_STICKS) #include "stm32_gpio.h" +#include "stm32_pwm_inputs.inc" static const stick_pwm_timer_t _sticks_timer = { .GPIOx = PWM_GPIO, @@ -141,3 +152,4 @@ void gimbalsDetect() detected = gimbal_drivers[idx++](); } } +#endif // !BOOT diff --git a/radio/src/boards/hw_defs/boxer.json b/radio/src/boards/hw_defs/boxer.json new file mode 100644 index 00000000000..85e8913938f --- /dev/null +++ b/radio/src/boards/hw_defs/boxer.json @@ -0,0 +1,309 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "6P", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/bumblebee.json b/radio/src/boards/hw_defs/bumblebee.json new file mode 100644 index 00000000000..a6f8915e3bb --- /dev/null +++ b/radio/src/boards/hw_defs/bumblebee.json @@ -0,0 +1,378 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/commando8.json b/radio/src/boards/hw_defs/commando8.json new file mode 100644 index 00000000000..0f73209ce20 --- /dev/null +++ b/radio/src/boards/hw_defs/commando8.json @@ -0,0 +1,258 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOC", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "BCK" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/el18.json b/radio/src/boards/hw_defs/el18.json new file mode 100644 index 00000000000..28ef98fedf6 --- /dev/null +++ b/radio/src/boards/hw_defs/el18.json @@ -0,0 +1,323 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "active_low": false, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": false, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": false + }, + "inc": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_0", + "active_low": false + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "active_low": false + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": false + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/f16.json b/radio/src/boards/hw_defs/f16.json new file mode 100644 index 00000000000..436b0aaabbf --- /dev/null +++ b/radio/src/boards/hw_defs/f16.json @@ -0,0 +1,417 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/gx12.json b/radio/src/boards/hw_defs/gx12.json new file mode 100644 index 00000000000..0dec260a49c --- /dev/null +++ b/radio/src/boards/hw_defs/gx12.json @@ -0,0 +1,419 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "P1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "P2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "S1", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "S2", + "short_label": "S2", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_14", + "is_cfs": true, + "cfs_idx": 7 + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_10", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_11", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_5", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_4", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 6 + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_12", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_13", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": null, + "pin_high": "PCA95XX_PIN_3", + "gpio_low": null, + "pin_low": "PCA95XX_PIN_2", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": null, + "pin": "PCA95XX_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/lr3pro.json b/radio/src/boards/hw_defs/lr3pro.json new file mode 100644 index 00000000000..a663f8fde14 --- /dev/null +++ b/radio/src/boards/hw_defs/lr3pro.json @@ -0,0 +1,238 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/mt12.json b/radio/src/boards/hw_defs/mt12.json new file mode 100644 index 00000000000..b92e81cdad2 --- /dev/null +++ b/radio/src/boards/hw_defs/mt12.json @@ -0,0 +1,287 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "ST", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "TH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "S3", + "short_label": "3", + "default": "NONE" + }, + { + "name": "P4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S4", + "short_label": "4", + "default": "NONE" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/nb4p.json b/radio/src/boards/hw_defs/nb4p.json new file mode 100644 index 00000000000..d0013682de2 --- /dev/null +++ b/radio/src/boards/hw_defs/nb4p.json @@ -0,0 +1,150 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "ST", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "TH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "VR1L", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "VR1R", + "short_label": "2", + "default": "POT" + }, + { + "name": "RAW1", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RAW2", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RAW3", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "RAW4", + "type": "RAW", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "is_cfs": false + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + } + ] +} diff --git a/radio/src/boards/hw_defs/nv14.json b/radio/src/boards/hw_defs/nv14.json new file mode 100644 index 00000000000..3c90e3504a1 --- /dev/null +++ b/radio/src/boards/hw_defs/nv14.json @@ -0,0 +1,323 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "active_low": false, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": false, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": false + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": false + }, + "inc": { + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_0", + "active_low": false + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "active_low": false + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": false + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": false + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/pa01.json b/radio/src/boards/hw_defs/pa01.json new file mode 100644 index 00000000000..70b1814c1e2 --- /dev/null +++ b/radio/src/boards/hw_defs/pa01.json @@ -0,0 +1,286 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_15", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_19", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "AW9523B_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18.json b/radio/src/boards/hw_defs/pl18.json new file mode 100644 index 00000000000..53ff09750e3 --- /dev/null +++ b/radio/src/boards/hw_defs/pl18.json @@ -0,0 +1,294 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + }, + { + "name": "T7" + }, + { + "name": "T8" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18ev.json b/radio/src/boards/hw_defs/pl18ev.json new file mode 100644 index 00000000000..d90b9a2256f --- /dev/null +++ b/radio/src/boards/hw_defs/pl18ev.json @@ -0,0 +1,338 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "label": "EXT1", + "short_label": "E1", + "default": "POT_CENTER" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT2", + "short_label": "E2", + "default": "POT_CENTER" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "EXT3", + "short_label": "E3", + "default": "MULTIPOS" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4", + "default": "MULTIPOS" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9" + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + }, + { + "name": "T7" + }, + { + "name": "T8" + } + ] +} diff --git a/radio/src/boards/hw_defs/pl18u.json b/radio/src/boards/hw_defs/pl18u.json new file mode 100644 index 00000000000..9b1361e754d --- /dev/null +++ b/radio/src/boards/hw_defs/pl18u.json @@ -0,0 +1,309 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": null + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "S3", + "short_label": "3", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWG", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true + }, + { + "name": "SWH", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_14", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWG", + "is_cfs": false + }, + { + "name": "SH", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "adc_input": "SWH", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": null, + "pin": null, + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + }, + { + "name": "T5" + }, + { + "name": "T6" + } + ] +} diff --git a/radio/src/boards/hw_defs/pocket.json b/radio/src/boards/hw_defs/pocket.json new file mode 100644 index 00000000000..2bf00537e9e --- /dev/null +++ b/radio/src/boards/hw_defs/pocket.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/st16.json b/radio/src/boards/hw_defs/st16.json new file mode 100644 index 00000000000..cb4a50b3d70 --- /dev/null +++ b/radio/src/boards/hw_defs/st16.json @@ -0,0 +1,386 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_15" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_16" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_17" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_3", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_5", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_9", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWA", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "SWD", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_8" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_7" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWA", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWD", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "adc_input": "SWF", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_6", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_PIN_5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "MENU" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/t12.json b/radio/src/boards/hw_defs/t12.json new file mode 100644 index 00000000000..48785f16ccc --- /dev/null +++ b/radio/src/boards/hw_defs/t12.json @@ -0,0 +1,314 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t12max.json b/radio/src/boards/hw_defs/t12max.json new file mode 100644 index 00000000000..6ed45144ca8 --- /dev/null +++ b/radio/src/boards/hw_defs/t12max.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t14.json b/radio/src/boards/hw_defs/t14.json new file mode 100644 index 00000000000..2a90708bc2e --- /dev/null +++ b/radio/src/boards/hw_defs/t14.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t15.json b/radio/src/boards/hw_defs/t15.json new file mode 100644 index 00000000000..b39162d033f --- /dev/null +++ b/radio/src/boards/hw_defs/t15.json @@ -0,0 +1,352 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOI", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOH", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t16.json b/radio/src/boards/hw_defs/t16.json new file mode 100644 index 00000000000..2de99252f11 --- /dev/null +++ b/radio/src/boards/hw_defs/t16.json @@ -0,0 +1,431 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t18.json b/radio/src/boards/hw_defs/t18.json new file mode 100644 index 00000000000..5b78ca04313 --- /dev/null +++ b/radio/src/boards/hw_defs/t18.json @@ -0,0 +1,433 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t20.json b/radio/src/boards/hw_defs/t20.json new file mode 100644 index 00000000000..e66c3520131 --- /dev/null +++ b/radio/src/boards/hw_defs/t20.json @@ -0,0 +1,511 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "S3", + "short_label": "3", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S4", + "short_label": "4", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "SL", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "SR", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T7", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T8", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t20v2.json b/radio/src/boards/hw_defs/t20v2.json new file mode 100644 index 00000000000..11e029d52a8 --- /dev/null +++ b/radio/src/boards/hw_defs/t20v2.json @@ -0,0 +1,511 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "S3", + "short_label": "3", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S4", + "short_label": "4", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "SL", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "SR", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 4 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_15", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T7", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T8", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/t8.json b/radio/src/boards/hw_defs/t8.json new file mode 100644 index 00000000000..ae0b91c12cf --- /dev/null +++ b/radio/src/boards/hw_defs/t8.json @@ -0,0 +1,254 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tlite.json b/radio/src/boards/hw_defs/tlite.json new file mode 100644 index 00000000000..0b89aff882c --- /dev/null +++ b/radio/src/boards/hw_defs/tlite.json @@ -0,0 +1,238 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left/SYS" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right/MDL" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tpro.json b/radio/src/boards/hw_defs/tpro.json new file mode 100644 index 00000000000..142e356107c --- /dev/null +++ b/radio/src/boards/hw_defs/tpro.json @@ -0,0 +1,344 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_6", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_5", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_4", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tpros.json b/radio/src/boards/hw_defs/tpros.json new file mode 100644 index 00000000000..3c9e33b3d08 --- /dev/null +++ b/radio/src/boards/hw_defs/tpros.json @@ -0,0 +1,272 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tprov2.json b/radio/src/boards/hw_defs/tprov2.json new file mode 100644 index 00000000000..e372676d807 --- /dev/null +++ b/radio/src/boards/hw_defs/tprov2.json @@ -0,0 +1,372 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SC", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_9", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_6", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_5", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_4", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx12.json b/radio/src/boards/hw_defs/tx12.json new file mode 100644 index 00000000000..3b3c291f97d --- /dev/null +++ b/radio/src/boards/hw_defs/tx12.json @@ -0,0 +1,324 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx12mk2.json b/radio/src/boards/hw_defs/tx12mk2.json new file mode 100644 index 00000000000..431f7aed673 --- /dev/null +++ b/radio/src/boards/hw_defs/tx12mk2.json @@ -0,0 +1,301 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_14", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/tx15.json b/radio/src/boards/hw_defs/tx15.json new file mode 100644 index 00000000000..188db6026e4 --- /dev/null +++ b/radio/src/boards/hw_defs/tx15.json @@ -0,0 +1,322 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC1", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_8CYCLES_5" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMAMUX1_REQ_ADC3", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_64CYCLES_5" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_4" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "EXT", + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_14" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P15", + "gpio_low": null, + "pin_low": "PCA95XX_P14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P13", + "gpio_low": null, + "pin_low": "PCA95XX_P12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P11", + "gpio_low": null, + "pin_low": "PCA95XX_P10", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": null, + "pin_high": "PCA95XX_P7", + "gpio_low": null, + "pin_low": "PCA95XX_P6", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P16", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": null, + "pin": "PCA95XX_P4", + "is_cfs": false + }, + { + "name": "SW1", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P0", + "is_cfs": true, + "cfs_idx": 0 + }, + { + "name": "SW2", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P1", + "is_cfs": true, + "cfs_idx": 1 + }, + { + "name": "SW3", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P2", + "is_cfs": true, + "cfs_idx": 2 + }, + { + "name": "SW4", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P3", + "is_cfs": true, + "cfs_idx": 3 + }, + { + "name": "SW5", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P4", + "is_cfs": true, + "cfs_idx": 4 + }, + { + "name": "SW6", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": null, + "pin": "PCA95XX_P5", + "is_cfs": true, + "cfs_idx": 5 + } + ], + "keys": [ + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1" + }, + { + "name": "T2" + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/tx16s.json b/radio/src/boards/hw_defs/tx16s.json new file mode 100644 index 00000000000..fe7ae2dd6c1 --- /dev/null +++ b/radio/src/boards/hw_defs/tx16s.json @@ -0,0 +1,439 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v12.json b/radio/src/boards/hw_defs/v12.json new file mode 100644 index 00000000000..91e1e6db72a --- /dev/null +++ b/radio/src/boards/hw_defs/v12.json @@ -0,0 +1,335 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S3", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "adc_input": "SWF", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v14.json b/radio/src/boards/hw_defs/v14.json new file mode 100644 index 00000000000..1b5bfcc5f78 --- /dev/null +++ b/radio/src/boards/hw_defs/v14.json @@ -0,0 +1,335 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S3", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + }, + { + "name": "SWB", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "SWC", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "SWE", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_7" + }, + { + "name": "SWF", + "type": "SWITCH", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 0 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "adc_input": "SWB", + "is_cfs": false + }, + { + "name": "SC", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "adc_input": "SWC", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "adc_input": "SWE", + "is_cfs": false + }, + { + "name": "SF", + "type": "ADC", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "adc_input": "SWF", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/v16.json b/radio/src/boards/hw_defs/v16.json new file mode 100644 index 00000000000..0d1c2463549 --- /dev/null +++ b/radio/src/boards/hw_defs/v16.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_5", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true, + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x10.json b/radio/src/boards/hw_defs/x10.json new file mode 100644 index 00000000000..223cf6ff68f --- /dev/null +++ b/radio/src/boards/hw_defs/x10.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgUp/Dn" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x10express.json b/radio/src/boards/hw_defs/x10express.json new file mode 100644 index 00000000000..223cf6ff68f --- /dev/null +++ b/radio/src/boards/hw_defs/x10express.json @@ -0,0 +1,437 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3 + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_4", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_13", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "EXT1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "label": "EXT1", + "short_label": "E1" + }, + { + "name": "EXT2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "EXT2", + "short_label": "E2" + }, + { + "name": "EXT3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "label": "EXT3", + "short_label": "E3" + }, + { + "name": "EXT4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true, + "label": "EXT4", + "short_label": "E4" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_7", + "channel": "LL_ADC_CHANNEL_5" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": true, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_15", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgUp/Dn" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x12s.json b/radio/src/boards/hw_defs/x12s.json new file mode 100644 index 00000000000..ae2d60d0604 --- /dev/null +++ b/radio/src/boards/hw_defs/x12s.json @@ -0,0 +1,430 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "SPI", + "adc": "SPI4", + "gpio_pin_miso": "GPIO_PIN(GPIOE, 5)", + "gpio_pin_mosi": "GPIO_PIN(GPIOE, 6)", + "gpio_pin_sck": "GPIO_PIN(GPIOE, 2)", + "gpio_pin_cs": "GPIO_PIN(GPIOE, 4)" + }, + { + "name": "MAIN", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + }, + { + "name": "EXT", + "adc": "ADC1", + "dma": null, + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "SPI", + "channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "SPI", + "channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "SPI", + "channel": 2 + }, + { + "name": "RH", + "type": "STICK", + "adc": "SPI", + "channel": 3, + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "SPI", + "channel": 4, + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "SPI", + "channel": 5, + "label": "6POS", + "short_label": "3", + "default": "MULTIPOS" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "SPI", + "channel": 6, + "inverted": true, + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "SPI", + "channel": 7, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "SPI", + "channel": 8, + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "SPI", + "channel": 11, + "inverted": true, + "label": "L1", + "short_label": "1", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "SPI", + "channel": 10, + "inverted": true, + "label": "L2", + "short_label": "2", + "default": "SLIDER" + }, + { + "name": "JSx", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": 6, + "label": "JSx", + "short_label": "X", + "default": "AXIS_X" + }, + { + "name": "JSy", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": 7, + "label": "JSy", + "short_label": "Y", + "default": "AXIS_Y" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "SPI", + "channel": 9 + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "EXT", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOI", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_12", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOJ", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOH", + "pin_high": "LL_GPIO_PIN_4", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": true, + "default": "2POS", + "display": null, + "gpio": "GPIOH", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": null, + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_6", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": null, + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": null, + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_6", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PgUp" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PgDn" + }, + { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_12", + "active_low": true + }, + "inc": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "inc": { + "gpio": "GPIOI", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T5", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T6", + "dec": { + "gpio": "GPIOJ", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x7.json b/radio/src/boards/hw_defs/x7.json new file mode 100644 index 00000000000..417a3589db2 --- /dev/null +++ b/radio/src/boards/hw_defs/x7.json @@ -0,0 +1,304 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_0", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SJ", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x7access.json b/radio/src/boards/hw_defs/x7access.json new file mode 100644 index 00000000000..99b36e90789 --- /dev/null +++ b/radio/src/boards/hw_defs/x7access.json @@ -0,0 +1,290 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_10", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_2", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d+.json b/radio/src/boards/hw_defs/x9d+.json new file mode 100644 index 00000000000..20ec26d2163 --- /dev/null +++ b/radio/src/boards/hw_defs/x9d+.json @@ -0,0 +1,357 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "S3", + "short_label": "3" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d+2019.json b/radio/src/boards/hw_defs/x9d+2019.json new file mode 100644 index 00000000000..812cd273d8e --- /dev/null +++ b/radio/src/boards/hw_defs/x9d+2019.json @@ -0,0 +1,345 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "inverted": true, + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SI", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 4 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_10", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9d.json b/radio/src/boards/hw_defs/x9d.json new file mode 100644 index 00000000000..b1d23760d2b --- /dev/null +++ b/radio/src/boards/hw_defs/x9d.json @@ -0,0 +1,346 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "label": "S2", + "short_label": "2", + "default": "POT_CENTER" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "ENT" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_PLUS", + "name": "PLUS", + "label": "(+)" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MINUS", + "name": "MINUS", + "label": "(-)" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9e.json b/radio/src/boards/hw_defs/x9e.json new file mode 100644 index 00000000000..3f68e33684e --- /dev/null +++ b/radio/src/boards/hw_defs/x9e.json @@ -0,0 +1,549 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + }, + { + "name": "EXT", + "adc": "ADC3", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_2", + "dma_stream": "LL_DMA_STREAM_0", + "dma_stream_irq": "DMA2_Stream0_IRQn", + "dma_stream_irq_handler": "DMA2_Stream0_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_56CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_8", + "channel": "LL_ADC_CHANNEL_6", + "inverted": true, + "label": "F1", + "short_label": "F1", + "default": "POT_CENTER" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "F2", + "short_label": "F2", + "default": "POT_CENTER" + }, + { + "name": "P3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "channel": "LL_ADC_CHANNEL_15", + "inverted": true, + "label": "F3", + "short_label": "F3", + "default": "NONE" + }, + { + "name": "P4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "channel": "LL_ADC_CHANNEL_14", + "label": "F4", + "short_label": "F4", + "default": "NONE" + }, + { + "name": "SL1", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_10", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "S1", + "default": "SLIDER" + }, + { + "name": "SL2", + "type": "FLEX", + "adc": "EXT", + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_9", + "channel": "LL_ADC_CHANNEL_7", + "label": "S2", + "short_label": "S2", + "default": "SLIDER" + }, + { + "name": "SL3", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "LS", + "short_label": "L", + "default": "SLIDER" + }, + { + "name": "SL4", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_9", + "inverted": true, + "label": "RS", + "short_label": "R", + "default": "SLIDER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_10", + "gpio_low": "GPIOD", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SE", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 2 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "is_cfs": false + }, + { + "name": "SG", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SI", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 4 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SJ", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 4 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SK", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 5 + ], + "gpio_high": "GPIOG", + "pin_high": "LL_GPIO_PIN_13", + "gpio_low": "GPIOG", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SL", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 5 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_9", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SM", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 6 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_15", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SN", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 6 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SO", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 7 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_7", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_10", + "is_cfs": false + }, + { + "name": "SP", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 7 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_12", + "is_cfs": false + }, + { + "name": "SQ", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 0, + 8 + ], + "gpio_high": "GPIOF", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOF", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SR", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "NONE", + "display": [ + 1, + 8 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOF", + "pin": "LL_GPIO_PIN_0", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOG", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9lite.json b/radio/src/boards/hw_defs/x9lite.json new file mode 100644 index 00000000000..9fb6ee1e07f --- /dev/null +++ b/radio/src/boards/hw_defs/x9lite.json @@ -0,0 +1,249 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/x9lites.json b/radio/src/boards/hw_defs/x9lites.json new file mode 100644 index 00000000000..390d0139b42 --- /dev/null +++ b/radio/src/boards/hw_defs/x9lites.json @@ -0,0 +1,277 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3" + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "label": "S1", + "short_label": "1", + "default": "POT_CENTER" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_MENU", + "name": "MENU", + "label": "MENU" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_9", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_9", + "active_low": true + }, + "inc": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_8", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/boards/hw_defs/xlite.json b/radio/src/boards/hw_defs/xlite.json new file mode 100644 index 00000000000..45d29c16739 --- /dev/null +++ b/radio/src/boards/hw_defs/xlite.json @@ -0,0 +1,255 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2 + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_SHIFT", + "name": "SHIFT", + "label": "Shift" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/xlites.json b/radio/src/boards/hw_defs/xlites.json new file mode 100644 index 00000000000..6807a68df40 --- /dev/null +++ b/radio/src/boards/hw_defs/xlites.json @@ -0,0 +1,283 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0", + "pwm_channel": 0 + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "pwm_channel": 1, + "inverted": true + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "pwm_channel": 3, + "inverted": true + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2", + "pwm_channel": 2 + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_11", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_12", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_1", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOA", + "pin_low": "LL_GPIO_PIN_6", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 1 + ], + "gpio_high": "GPIOE", + "pin_high": "LL_GPIO_PIN_3", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_2", + "is_cfs": false + }, + { + "name": "SD", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 1 + ], + "gpio_high": "GPIOB", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOB", + "pin_low": "LL_GPIO_PIN_4", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 2 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "EXIT" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_10", + "active_low": true, + "key": "KEY_UP", + "name": "UP", + "label": "Up" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "active_low": true, + "key": "KEY_DOWN", + "name": "DOWN", + "label": "Down" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_12", + "active_low": true, + "key": "KEY_LEFT", + "name": "LEFT", + "label": "Left" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_RIGHT", + "name": "RIGHT", + "label": "Right" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "active_low": true, + "key": "KEY_SHIFT", + "name": "SHIFT", + "label": "Shift" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "inc": { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3" + }, + { + "name": "T4" + } + ] +} diff --git a/radio/src/boards/hw_defs/zorro.json b/radio/src/boards/hw_defs/zorro.json new file mode 100644 index 00000000000..5351f6aae22 --- /dev/null +++ b/radio/src/boards/hw_defs/zorro.json @@ -0,0 +1,325 @@ +{ + "adc_inputs": { + "adcs": [ + { + "name": "MAIN", + "adc": "ADC1", + "dma": "DMA2", + "dma_channel": "LL_DMA_CHANNEL_0", + "dma_stream": "LL_DMA_STREAM_4", + "dma_stream_irq": "DMA2_Stream4_IRQn", + "dma_stream_irq_handler": "DMA2_Stream4_IRQHandler", + "sample_time": "LL_ADC_SAMPLINGTIME_28CYCLES" + } + ], + "inputs": [ + { + "name": "LH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_3", + "channel": "LL_ADC_CHANNEL_3", + "inverted": true + }, + { + "name": "LV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_2", + "channel": "LL_ADC_CHANNEL_2" + }, + { + "name": "RV", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_0" + }, + { + "name": "RH", + "type": "STICK", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_1", + "channel": "LL_ADC_CHANNEL_1", + "inverted": true + }, + { + "name": "P1", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_8", + "inverted": true, + "label": "S1", + "short_label": "1", + "default": "POT" + }, + { + "name": "P2", + "type": "FLEX", + "adc": "MAIN", + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_6", + "channel": "LL_ADC_CHANNEL_6", + "label": "S2", + "short_label": "2", + "default": "POT" + }, + { + "name": "VBAT", + "type": "VBAT", + "adc": "MAIN", + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_0", + "channel": "LL_ADC_CHANNEL_10" + }, + { + "name": "RTC_BAT", + "type": "RTC_BAT", + "adc": "MAIN", + "gpio": null, + "pin": null, + "channel": "LL_ADC_CHANNEL_VBAT" + } + ] + }, + "switches": [ + { + "name": "SA", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 1 + ], + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_13", + "is_cfs": false + }, + { + "name": "SB", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 0, + 0 + ], + "gpio_high": "GPIOA", + "pin_high": "LL_GPIO_PIN_5", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_15", + "is_cfs": false + }, + { + "name": "SC", + "type": "3POS", + "flags": 0, + "inverted": false, + "default": "3POS", + "display": [ + 1, + 0 + ], + "gpio_high": "GPIOD", + "pin_high": "LL_GPIO_PIN_11", + "gpio_low": "GPIOE", + "pin_low": "LL_GPIO_PIN_0", + "is_cfs": false + }, + { + "name": "SD", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 1 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_8", + "is_cfs": false + }, + { + "name": "SE", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 0, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_7", + "is_cfs": false + }, + { + "name": "SF", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "2POS", + "display": [ + 1, + 2 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_1", + "is_cfs": false + }, + { + "name": "SG", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 0, + 3 + ], + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + }, + { + "name": "SH", + "type": "2POS", + "flags": 0, + "inverted": false, + "default": "TOGGLE", + "display": [ + 1, + 3 + ], + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_14", + "is_cfs": false + } + ], + "keys": [ + { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_5", + "active_low": true, + "key": "KEY_EXIT", + "name": "EXIT", + "label": "RTN" + }, + { + "gpio": "GPIOA", + "pin": "LL_GPIO_PIN_13", + "active_low": true, + "key": "KEY_ENTER", + "name": "ENTER", + "label": "Enter" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_3", + "active_low": true, + "key": "KEY_PAGEUP", + "name": "PAGEUP", + "label": "PAGE<" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_7", + "active_low": true, + "key": "KEY_PAGEDN", + "name": "PAGEDN", + "label": "PAGE>" + }, + { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_11", + "active_low": true, + "key": "KEY_MODEL", + "name": "MDL", + "label": "MDL" + }, + { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_2", + "active_low": true, + "key": "KEY_TELE", + "name": "TELE", + "label": "TELE" + }, + { + "gpio": "GPIOB", + "pin": "LL_GPIO_PIN_4", + "active_low": true, + "key": "KEY_SYS", + "name": "SYS", + "label": "SYS" + } + ], + "trims": [ + { + "name": "T1", + "dec": { + "gpio": "GPIOD", + "pin": "LL_GPIO_PIN_15", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_1", + "active_low": true + }, + "active_low": true + }, + { + "name": "T2", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_6", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_5", + "active_low": true + }, + "active_low": true + }, + { + "name": "T3", + "dec": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOC", + "pin": "LL_GPIO_PIN_2", + "active_low": true + }, + "active_low": true + }, + { + "name": "T4", + "dec": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_3", + "active_low": true + }, + "inc": { + "gpio": "GPIOE", + "pin": "LL_GPIO_PIN_4", + "active_low": true + }, + "active_low": true + } + ] +} diff --git a/radio/src/bootloader/CMakeLists.txt b/radio/src/bootloader/CMakeLists.txt index 905d967d357..36995f159fb 100644 --- a/radio/src/bootloader/CMakeLists.txt +++ b/radio/src/bootloader/CMakeLists.txt @@ -1,7 +1,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -AddHardwareDefTarget(${HW_DESC_JSON}) +# AddHardwareDefTarget(${HW_DESC_JSON}) AddHWGenTarget(${HW_DESC_JSON} hal_keys hal_keys.inc) set(BOOTLOADER_SRC ${BOOTLOADER_SRC} @@ -52,6 +52,7 @@ if(NOT NO_LTO) target_compile_options(stm32_drivers PRIVATE -flto) target_compile_options(stm32_drivers_w_dbg_fw PRIVATE -flto) target_compile_options(stm32_drivers_w_dbg_bl PRIVATE -flto) + target_compile_options(board_bl PRIVATE -flto) endif() add_executable(bootloader EXCLUDE_FROM_ALL ${BOOTLOADER_SRC}) diff --git a/radio/src/cli.cpp b/radio/src/cli.cpp index a0e3f97f4ed..8d7aa1f0fe5 100644 --- a/radio/src/cli.cpp +++ b/radio/src/cli.cpp @@ -1442,7 +1442,7 @@ int cliDisplay(const char ** argv) if (!strcmp(argv[1], "keys")) { for (int i = 0; i <= MAX_KEYS; i++) { - if (keysGetSupported() & (1 << i)) { + if (keyIsSupported(i)) { cliSerialPrint("[Key %s] = %s", keysGetLabel((EnumKeys)i), keysGetState(i) ? "on" : "off"); diff --git a/radio/src/edgetx.h b/radio/src/edgetx.h index 2b8b05586c7..50ae83e1e98 100644 --- a/radio/src/edgetx.h +++ b/radio/src/edgetx.h @@ -27,11 +27,6 @@ #include "edgetx_helpers.h" #include "touch.h" #include "switches.h" - -#if defined(SIMU) -#include "targets/simu/simpgmspace.h" -#endif - #include "board.h" #if !defined(SIMU) diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 66b9862a4f1..c3319f9b0e8 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -23,8 +23,7 @@ #include "switches.h" #include "hal/audio_driver.h" - -#include "boards/generic_stm32/rgb_leds.h" +#include "os/time.h" #if defined(COLORLCD) void setRequestedMainView(uint8_t view); @@ -385,9 +384,10 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func case FUNC_PUSH_CUST_SWITCH: if (CFN_PARAM(cfn)) { // Duration is set if (! CFN_VAL2(cfn) ) { // Duration not started yet - CFN_VAL2(cfn) = timersGetMsTick() + CFN_PARAM(cfn) * 100; + CFN_VAL2(cfn) = time_get_ms() + CFN_PARAM(cfn) * 100; g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); - } else if (timersGetMsTick() < (uint32_t)CFN_VAL2(cfn) ) { // Still within push duration + } + else if (time_get_ms() < (uint32_t)CFN_VAL2(cfn) ) { // Still within push duration g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); } } else { // No duration set @@ -471,7 +471,7 @@ void evalFunctions(CustomFunctionData * functions, CustomFunctionsContext & func #if defined(FUNCTION_SWITCHES) if (CFN_FUNC(cfn) == FUNC_PUSH_CUST_SWITCH) { // Handling duration after function is active - if (timersGetMsTick() < (uint32_t)CFN_VAL2(cfn)) { + if (time_get_ms() < (uint32_t)CFN_VAL2(cfn)) { g_model.cfsSetSFState(CFN_CS_INDEX(cfn), 1); } else { diff --git a/radio/src/gps_nmea.cpp b/radio/src/gps_nmea.cpp index 00fa047b2e7..b7f5033a530 100644 --- a/radio/src/gps_nmea.cpp +++ b/radio/src/gps_nmea.cpp @@ -256,11 +256,11 @@ bool gpsNewFrameNMEA(char c) gpsData.numSat = gps_Msg.numSat; gpsData.hdop = gps_Msg.hdop; if (gps_Msg.fix) { - __disable_irq(); // do the atomic update of lat/lon + // __disable_irq(); // do the atomic update of lat/lon gpsData.latitude = gps_Msg.latitude; gpsData.longitude = gps_Msg.longitude; gpsData.altitude = gps_Msg.altitude; - __enable_irq(); + // __enable_irq(); } break; case FRAME_RMC: diff --git a/radio/src/gps_ubx.cpp b/radio/src/gps_ubx.cpp index 90ee23c3cf2..babf2025157 100644 --- a/radio/src/gps_ubx.cpp +++ b/radio/src/gps_ubx.cpp @@ -158,11 +158,11 @@ static void gpsProcessMessage(uint16_t msg_type, uint16_t msg_len, gpsData.speed = pvt->gSpeed / 100; // speed in 0.1m/s gpsData.groundCourse = pvt->headMot / 10000; // degrees * 10 if (gpsData.fix) { - __disable_irq(); // do the atomic update of lat/lon + // __disable_irq(); // do the atomic update of lat/lon gpsData.longitude = pvt->lon / 10; // degrees * 1.000.000 gpsData.latitude = pvt->lat / 10; // degrees * 1.000.000 gpsData.altitude = pvt->hMSL / 100; // altitude in 0.1m - __enable_irq(); + // __enable_irq(); } #if defined(RTCLOCK) diff --git a/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp b/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp index 13707fce04a..0d6531390e8 100644 --- a/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp +++ b/radio/src/gui/colorlcd/libui/bitmapbuffer.cpp @@ -529,6 +529,12 @@ coord_t BitmapBuffer::drawSizedText(coord_t x, coord_t y, const char *s, return ((flags & RIGHT) ? orig_pos : pos) - offsetX; } +coord_t BitmapBuffer::drawText(coord_t x, coord_t y, const char* s, LcdFlags flags) +{ + if (!s) return x; + return drawSizedText(x, y, s, strlen(s), flags); +} + // Resize and convert to LVGL image data format with alpha blending to // background color void BitmapBuffer::resizeToLVGL(coord_t w, coord_t h) diff --git a/radio/src/gui/colorlcd/libui/bitmapbuffer.h b/radio/src/gui/colorlcd/libui/bitmapbuffer.h index 0d9f2ca083c..a9a1b0cc483 100644 --- a/radio/src/gui/colorlcd/libui/bitmapbuffer.h +++ b/radio/src/gui/colorlcd/libui/bitmapbuffer.h @@ -19,6 +19,7 @@ #pragma once #include "libopenui_defines.h" +#include struct MaskBitmap; class TelemetryItem; @@ -128,11 +129,7 @@ class BitmapBuffer coord_t drawSizedText(coord_t x, coord_t y, const char* s, uint8_t len, LcdFlags flags = 0); - coord_t drawText(coord_t x, coord_t y, const char* s, LcdFlags flags = 0) - { - if (!s) return x; - return drawSizedText(x, y, s, strlen(s), flags); - } + coord_t drawText(coord_t x, coord_t y, const char* s, LcdFlags flags = 0); void drawBitmap(coord_t x, coord_t y, const BitmapBuffer* bmp, coord_t srcx = 0, coord_t srcy = 0, coord_t srcw = 0, diff --git a/radio/src/gui/colorlcd/libui/dialog.cpp b/radio/src/gui/colorlcd/libui/dialog.cpp index 29f3863de73..9ac13ab5656 100644 --- a/radio/src/gui/colorlcd/libui/dialog.cpp +++ b/radio/src/gui/colorlcd/libui/dialog.cpp @@ -174,9 +174,7 @@ LabelDialog::LabelDialog(const char *label, int length, const char* title, std::function _saveHandler) : ModalWindow(false), saveHandler(std::move(_saveHandler)) { - assert(length <= MAX_LABEL_LENGTH); - - strncpy(this->label, label, length); + strncpy(this->label, label, std::min(length, MAX_LABEL_LENGTH)); this->label[length] = '\0'; auto form = new Window(this, rect_t{}); diff --git a/radio/src/gui/colorlcd/libui/keyboard_base.cpp b/radio/src/gui/colorlcd/libui/keyboard_base.cpp index 07e4c31abea..880a785ce61 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_base.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_base.cpp @@ -84,6 +84,12 @@ static void _assign_lv_group(lv_group_t* g) Keyboard::Keyboard(coord_t height) : NavWindow(MainWindow::instance(), {0, LCD_H - height, LCD_W, height}) { +#if defined(USE_HATS_AS_KEYS) + hasTwoPageKeys = true; +#else + hasTwoPageKeys = keyIsSupported(KEY_PAGEUP); +#endif + lv_obj_set_parent(lvobj, lv_layer_top()); // the keyboard is always on top // use a separate group for the keyboard diff --git a/radio/src/gui/colorlcd/libui/keyboard_base.h b/radio/src/gui/colorlcd/libui/keyboard_base.h index cf670073f7c..5b7697a2fdd 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_base.h +++ b/radio/src/gui/colorlcd/libui/keyboard_base.h @@ -36,6 +36,7 @@ class Keyboard : public NavWindow protected: static Keyboard *activeKeyboard; + bool hasTwoPageKeys; lv_group_t* group = nullptr; lv_obj_t* keyboard = nullptr; diff --git a/radio/src/gui/colorlcd/libui/keyboard_number.cpp b/radio/src/gui/colorlcd/libui/keyboard_number.cpp index de9efde635c..38609b85303 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_number.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_number.cpp @@ -111,36 +111,14 @@ void NumberKeyboard::changeSign() #if defined(HARDWARE_KEYS) -#if (defined(KEYS_GPIO_REG_PAGEUP) || defined(USE_HATS_AS_KEYS)) && \ - !defined(PCBX12S) -// Radios with both PGUP and PGDN buttons except X12S -void NumberKeyboard::onPressSYS() { decLarge(); } +void NumberKeyboard::onPressSYS() { if (hasTwoPageKeys) decLarge(); else decSmall(); } void NumberKeyboard::onLongPressSYS() { setMIN(); } void NumberKeyboard::onPressMDL() { incLarge(); } -void NumberKeyboard::onLongPressMDL() { setMAX(); } -void NumberKeyboard::onPressTELE() { changeSign(); } -void NumberKeyboard::onLongPressTELE() { setDEF(); } -void NumberKeyboard::onPressPGUP() { decSmall(); } -void NumberKeyboard::onPressPGDN() { incSmall(); } -void NumberKeyboard::onLongPressPGUP() {} -void NumberKeyboard::onLongPressPGDN() {} -#else -// Radios witb only a single PGUP/DN button or X12S -void NumberKeyboard::onPressSYS() { decSmall(); } -void NumberKeyboard::onLongPressSYS() { setMIN(); } -void NumberKeyboard::onPressMDL() { incLarge(); } -void NumberKeyboard::onLongPressMDL() { changeSign(); } -void NumberKeyboard::onPressTELE() { incSmall(); } -void NumberKeyboard::onLongPressTELE() { setMAX(); } -#if defined(PCBX12S) -void NumberKeyboard::onPressPGUP() { decLarge(); } -#else -void NumberKeyboard::onPressPGUP() { setDEF(); } -#endif -void NumberKeyboard::onPressPGDN() { decLarge(); } -void NumberKeyboard::onLongPressPGUP() { setDEF(); } -void NumberKeyboard::onLongPressPGDN() { setDEF(); } -#endif +void NumberKeyboard::onLongPressMDL() { if (hasTwoPageKeys) setMAX(); else changeSign(); } +void NumberKeyboard::onPressTELE() { if (hasTwoPageKeys) changeSign(); else incSmall(); } +void NumberKeyboard::onLongPressTELE() { if (hasTwoPageKeys) setDEF(); else setMAX(); } +void NumberKeyboard::onPressPGUP() { if (hasTwoPageKeys) decSmall(); else setDEF(); } +void NumberKeyboard::onPressPGDN() { if (hasTwoPageKeys) incSmall(); else decLarge(); } #endif diff --git a/radio/src/gui/colorlcd/libui/keyboard_number.h b/radio/src/gui/colorlcd/libui/keyboard_number.h index 0354a9c3176..c396ac295a3 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_number.h +++ b/radio/src/gui/colorlcd/libui/keyboard_number.h @@ -53,8 +53,6 @@ class NumberKeyboard : public Keyboard void onLongPressTELE() override; void onPressPGUP() override; void onPressPGDN() override; - void onLongPressPGUP() override; - void onLongPressPGDN() override; #endif static NumberKeyboard* _instance; diff --git a/radio/src/gui/colorlcd/libui/keyboard_text.cpp b/radio/src/gui/colorlcd/libui/keyboard_text.cpp index a4f72938631..ee85e60cc7b 100644 --- a/radio/src/gui/colorlcd/libui/keyboard_text.cpp +++ b/radio/src/gui/colorlcd/libui/keyboard_text.cpp @@ -95,36 +95,16 @@ void TextKeyboard::cursorEnd() lv_textarea_cursor_right(kb->ta); } -#if (defined(KEYS_GPIO_REG_PAGEUP) || defined(USE_HATS_AS_KEYS)) && \ - !defined(PCBX12S) -// Radios with both PGUP and PGDN buttons except X12S -void TextKeyboard::onPressSYS() { changeMode(); } -void TextKeyboard::onLongPressSYS() {} -void TextKeyboard::onPressMDL() {} +void TextKeyboard::onPressSYS() { if (hasTwoPageKeys) changeMode(); else cursorLeft(); } +void TextKeyboard::onLongPressSYS() { if (!hasTwoPageKeys) cursorStart(); } +void TextKeyboard::onPressMDL() { if (!hasTwoPageKeys) changeMode(); } void TextKeyboard::onLongPressMDL() { backspace(); } -void TextKeyboard::onPressTELE() { toggleCase(); } -void TextKeyboard::onLongPressTELE() { deleteChar(); } -void TextKeyboard::onPressPGUP() { cursorLeft(); } -void TextKeyboard::onPressPGDN() { cursorRight(); } +void TextKeyboard::onPressTELE() { if (hasTwoPageKeys) toggleCase(); else cursorRight(); } +void TextKeyboard::onLongPressTELE() { if (hasTwoPageKeys) deleteChar(); else cursorEnd(); } +void TextKeyboard::onPressPGUP() { if (hasTwoPageKeys) cursorLeft(); else deleteChar(); } +void TextKeyboard::onPressPGDN() { if (hasTwoPageKeys) cursorRight(); else toggleCase(); } void TextKeyboard::onLongPressPGUP() { cursorStart(); } void TextKeyboard::onLongPressPGDN() { cursorEnd(); } -#else -// Radios witb only a single PGUP/DN button or X12S -void TextKeyboard::onPressSYS() { cursorLeft(); } -void TextKeyboard::onLongPressSYS() { cursorStart(); } -void TextKeyboard::onPressMDL() { changeMode(); } -void TextKeyboard::onLongPressMDL() { backspace(); } -void TextKeyboard::onPressTELE() { cursorRight(); } -void TextKeyboard::onLongPressTELE() { cursorEnd(); } -#if defined(PCBX12S) -void TextKeyboard::onPressPGUP() { toggleCase(); } -#else -void TextKeyboard::onPressPGUP() { deleteChar(); } -#endif -void TextKeyboard::onPressPGDN() { toggleCase(); } -void TextKeyboard::onLongPressPGUP() {} -void TextKeyboard::onLongPressPGDN() { deleteChar(); } -#endif #endif void TextKeyboard::open(FormField* field) diff --git a/radio/src/gui/colorlcd/libui/mainwindow.cpp b/radio/src/gui/colorlcd/libui/mainwindow.cpp index e4103d6a3a9..ec9b2fee784 100644 --- a/radio/src/gui/colorlcd/libui/mainwindow.cpp +++ b/radio/src/gui/colorlcd/libui/mainwindow.cpp @@ -22,10 +22,9 @@ #include "keyboard_base.h" #include "layout.h" #include "etx_lv_theme.h" -#include "sdcard.h" -// timers_driver.h -uint32_t timersGetMsTick(); +#include "os/time.h" +#include "sdcard.h" MainWindow* MainWindow::_instance = nullptr; @@ -55,7 +54,7 @@ void MainWindow::emptyTrash() void MainWindow::run(bool trash) { - auto start = timersGetMsTick(); + auto start = time_get_ms(); auto opaque = Layer::getFirstOpaque(); if (opaque) { @@ -71,7 +70,7 @@ void MainWindow::run(bool trash) if (trash) emptyTrash(); - auto delta = timersGetMsTick() - start; + auto delta = time_get_ms() - start; if (delta > 10) { TRACE_WINDOWS("MainWindow::run took %dms", delta); } diff --git a/radio/src/gui/colorlcd/module/pxx1_settings.cpp b/radio/src/gui/colorlcd/module/pxx1_settings.cpp index 04783728167..8e00cf1f818 100644 --- a/radio/src/gui/colorlcd/module/pxx1_settings.cpp +++ b/radio/src/gui/colorlcd/module/pxx1_settings.cpp @@ -26,6 +26,7 @@ #define SET_DIRTY() storageDirty(EE_MODEL) +#if defined(EXTERNAL_ANTENNA) PXX1AntennaSettings::PXX1AntennaSettings(Window* parent, const FlexGridLayout& g, uint8_t moduleIdx) : @@ -61,3 +62,4 @@ PXX1AntennaSettings::PXX1AntennaSettings(Window* parent, antennaChoice->setAvailableHandler( [=](int8_t mode) { return mode != ANTENNA_MODE_PER_MODEL; }); } +#endif diff --git a/radio/src/gui/common/stdlcd/menus.cpp b/radio/src/gui/common/stdlcd/menus.cpp index f185a902e27..75630e71c6f 100644 --- a/radio/src/gui/common/stdlcd/menus.cpp +++ b/radio/src/gui/common/stdlcd/menus.cpp @@ -30,8 +30,8 @@ uint8_t menuLevel = 0; void popMenu() { killEvents(KEY_EXIT); + if (menuLevel == 0) return; - assert(menuLevel > 0); menuLevel = menuLevel - 1; menuEvent = EVT_ENTRY_UP; // TODO ? AUDIO_KEY_PRESS(); @@ -57,6 +57,7 @@ void chainMenu(MenuHandlerFunc newMenu) void pushMenu(MenuHandlerFunc newMenu) { killAllEvents(); + if (menuLevel == DIM(menuHandlers) - 1) return; if (menuLevel == 0) { if (newMenu == menuTabGeneral[0].menuFunc) @@ -71,8 +72,6 @@ void pushMenu(MenuHandlerFunc newMenu) menuLevel++; - assert(menuLevel < DIM(menuHandlers)); - menuHandlers[menuLevel] = newMenu; menuEvent = EVT_ENTRY; // ? AUDIO_KEY_PRESS(); diff --git a/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp b/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp index a0e1e816e76..6ce59251e10 100644 --- a/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp +++ b/radio/src/gui/common/stdlcd/radio_ghost_menu.cpp @@ -38,26 +38,18 @@ void menuGhostModuleConfig(event_t event) moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; break; -#if defined(ROTARY_ENCODER_NAVIGATION) case EVT_ROTARY_LEFT: -#elif defined(KEYS_GPIO_REG_UP) - case EVT_KEY_BREAK(KEY_UP): -#elif defined(KEYS_GPIO_REG_PLUS) - case EVT_KEY_BREAK(KEY_PLUS): -#endif + case EVT_KEY_BREAK(KEY_UP): + case EVT_KEY_BREAK(KEY_PLUS): reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYUP; reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE; moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; audioKeyPress(); break; -#if defined(ROTARY_ENCODER_NAVIGATION) case EVT_ROTARY_RIGHT: -#elif defined(KEYS_GPIO_REG_DOWN) - case EVT_KEY_BREAK(KEY_DOWN): -#elif defined(KEYS_GPIO_REG_MINUS) + case EVT_KEY_BREAK(KEY_DOWN): case EVT_KEY_BREAK(KEY_MINUS): -#endif reusableBuffer.ghostMenu.buttonAction = GHST_BTN_JOYDOWN; reusableBuffer.ghostMenu.menuAction = GHST_MENU_CTRL_NONE; moduleState[EXTERNAL_MODULE].counter = GHST_MENU_CONTROL; diff --git a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp index 104f66bdefb..c6888798f87 100644 --- a/radio/src/gui/common/stdlcd/radio_sdmanager.cpp +++ b/radio/src/gui/common/stdlcd/radio_sdmanager.cpp @@ -304,14 +304,12 @@ void menuRadioSdManager(event_t _event) switch (_event) { -#if defined(KEYS_GPIO_REG_MENU) case EVT_KEY_LONG(KEY_MENU): if (SD_CARD_PRESENT() && s_editMode == 0) { POPUP_MENU_ADD_ITEM(STR_SD_INFO); POPUP_MENU_START(onSdManagerMenu); } break; -#endif case EVT_KEY_BREAK(KEY_EXIT): REFRESH_FILES(); diff --git a/radio/src/gui/navigation/navigation.h b/radio/src/gui/navigation/navigation.h index 46cc593b4ca..454501d4638 100644 --- a/radio/src/gui/navigation/navigation.h +++ b/radio/src/gui/navigation/navigation.h @@ -21,18 +21,18 @@ #pragma once -// Define navigation type based on available keys -#if LCD_W == 212 - #define NAVIGATION_X9D -#elif defined(KEYS_GPIO_REG_SHIFT) +// Define navigation type if not defined already +#if defined(RADIO_XLITE) || defined(RADIO_XLITES) #define NAVIGATION_XLITE -#elif defined(KEYS_GPIO_REG_LEFT) +#elif defined(RADIO_LR3PRO) || defined(RADIO_T12) || defined(RADIO_TLITE) #define NAVIGATION_9X -#elif defined(KEYS_GPIO_REG_PAGEUP) && defined(KEYS_GPIO_REG_TELE) - #define NAVIGATION_X7 - #define NAVIGATION_X7_TX12 +#elif defined(RADIO_X9D) || defined(RADIO_X9DP) || defined(RADIO_X9DP2019) || defined(RADIO_X9E) + #define NAVIGATION_X9D #else #define NAVIGATION_X7 + #if defined(MANUFACTURER_RADIOMASTER) && !defined(RADIO_T8) + #define NAVIGATION_X7_RM + #endif #endif #if defined(NAVIGATION_X7) || defined(NAVIGATION_X9D) @@ -55,7 +55,7 @@ #define EVT_KEY_MODEL_MENU EVT_KEY_BREAK(KEY_MODEL) #define EVT_KEY_GENERAL_MENU EVT_KEY_BREAK(KEY_SYS) #define EVT_KEY_TELEMETRY EVT_KEY_LONG(KEY_PAGEUP) -#elif defined(NAVIGATION_X7_TX12) +#elif defined(NAVIGATION_X7_RM) #define EVT_KEY_PREVIOUS_VIEW EVT_KEY_BREAK(KEY_PAGEUP) #define EVT_KEY_NEXT_VIEW EVT_KEY_BREAK(KEY_PAGEDN) #define EVT_KEY_NEXT_PAGE EVT_ROTARY_RIGHT @@ -86,7 +86,7 @@ #if defined(NAVIGATION_XLITE) #define EVT_KEY_PREVIOUS_TELEM_VIEW(evt) (evt == EVT_KEY_LONG(KEY_LEFT) && keysGetState(KEY_SHIFT)) #define EVT_KEY_NEXT_TELEM_VIEW(evt) (evt == EVT_KEY_LONG(KEY_RIGHT) && keysGetState(KEY_SHIFT)) -#elif defined(KEYS_GPIO_REG_PAGEUP) +#elif defined(NAVIGATION_X7_RM) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) #define EVT_KEY_PREVIOUS_TELEM_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEUP)) #define EVT_KEY_NEXT_TELEM_VIEW(evt) (evt == EVT_KEY_FIRST(KEY_PAGEDN)) #elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D) diff --git a/radio/src/hal/adc_driver.h b/radio/src/hal/adc_driver.h index 41468445e81..93ea83ccb90 100644 --- a/radio/src/hal/adc_driver.h +++ b/radio/src/hal/adc_driver.h @@ -77,6 +77,7 @@ struct etx_hal_adc_driver_t { potconfig_t default_pots_cfg; bool (*init)(); + void (*deinit)(); bool (*start_conversion)(); void (*wait_completion)(); diff --git a/radio/src/hal/key_driver.h b/radio/src/hal/key_driver.h index 933fbd08119..b5932b8a033 100644 --- a/radio/src/hal/key_driver.h +++ b/radio/src/hal/key_driver.h @@ -60,8 +60,13 @@ uint32_t readTrims(); // Init GPIO ports void keysInit(); +// returns a bit field with each supported key uint32_t keysGetSupported(); +static inline bool keyIsSupported(EnumKeys key) { + return keysGetSupported() & (1 << key); +} + uint8_t keysGetMaxKeys(); uint8_t keysGetMaxTrims(); diff --git a/radio/src/keys.cpp b/radio/src/keys.cpp index b529c315639..42d429b185c 100644 --- a/radio/src/keys.cpp +++ b/radio/src/keys.cpp @@ -467,22 +467,20 @@ bool keysPollingCycle() event_t evt = keys[i].input(keys_input & (1 << i)); if (evt) { evt |= i; -#if defined(KEYS_GPIO_REG_PAGEDN) && !defined(KEYS_GPIO_REG_PAGEUP) + // Radio with single PAGEDN key - if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { - // Convert long press PAGEDN to short press PAGEUP - evt = EVT_KEY_BREAK(KEY_PAGEUP); - killEvents(KEY_PAGEDN); + if (!keyIsSupported(KEY_PAGEUP)) { + if (evt == EVT_KEY_LONG(KEY_PAGEDN)) { + // Convert long press PAGEDN to short press PAGEUP + evt = EVT_KEY_BREAK(KEY_PAGEUP); + killEvents(KEY_PAGEDN); + } } -#endif -#if defined(KEYS_GPIO_REG_SHIFT) + // SHIFT key should not trigger REPT events - if (evt != EVT_KEY_REPT(KEY_SHIFT)) { - pushEvent(evt); - } -#else + if (evt == EVT_KEY_REPT(KEY_SHIFT)) continue; + pushEvent(evt); -#endif } } diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index ee23bb7d1bc..7f59d05dc8c 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -1693,12 +1693,13 @@ Stops key state machine. See [Key Events](../key_events.md) for the detailed des */ static int luaKillEvents(lua_State * L) { -#if defined(KEYS_GPIO_REG_MENU) - #define IS_MASKABLE(key) \ - ((key) != KEY_EXIT && (key) != KEY_ENTER && \ - ((scriptInternalData[0].reference == SCRIPT_STANDALONE) || \ - (key) != KEY_PAGEDN)) +#if !defined(COLORLCD) + #define IS_STANDALONE() (scriptInternalData[0].reference == SCRIPT_STANDALONE) + #define IS_MASKABLE(key) \ + ((key) != KEY_EXIT && (key) != KEY_ENTER && \ + (!keyIsSupported(KEY_MENU) || (IS_STANDALONE() || ((key) != KEY_PAGEDN)))) #else + #define IS_STANDALONE() (false) #define IS_MASKABLE(key) ((key) != KEY_EXIT && (key) != KEY_ENTER) #endif @@ -1710,6 +1711,9 @@ static int luaKillEvents(lua_State * L) luaEmptyEventBuffer(); } return 0; + +#undef IS_MASKABLE +#undef IS_STANDALONE } #if LCD_DEPTH > 1 && !defined(COLORLCD) diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index 7113c767410..be01b4acab0 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -1236,8 +1236,8 @@ static bool resumeLua(bool init, bool allowLcdUsage) luaState = INTERPRETER_RELOAD_PERMANENT_SCRIPTS; killEvents(evt.event); } -#if defined(KEYS_GPIO_REG_MENU) - // TODO find another key and add a #define +#if !defined(COLORLCD) + // TODO find another key else if (evt.event == EVT_KEY_LONG(KEY_MENU)) { luaEmptyEventBuffer(); luaDisplayStatistics = !luaDisplayStatistics; diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 3e255f3058e..658baa99c08 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -1180,7 +1180,6 @@ void evalMixes(uint8_t tick10ms) weight += fp_act[p]; } } - assert(weight); mixerCurrentFlightMode = fm; } else { diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 835c08f1d9d..51136a4af94 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -242,8 +242,10 @@ enum DisplayTrims DISPLAY_TRIMS_ALWAYS }; +#if !defined(BOOT) extern RadioData g_eeGeneral; extern ModelData g_model; +#endif constexpr uint8_t EE_GENERAL = 0x01; constexpr uint8_t EE_MODEL = 0x02; diff --git a/radio/src/os/time_native.cpp b/radio/src/os/time_native.cpp index 59f0ad370f9..30961d67996 100644 --- a/radio/src/os/time_native.cpp +++ b/radio/src/os/time_native.cpp @@ -23,11 +23,12 @@ #include -extern uint64_t simuTimerMicros(void); - uint32_t time_get_ms() { - return simuTimerMicros() / 1000; + static auto _start = std::chrono::steady_clock::now();; + auto now = std::chrono::steady_clock::now(); + auto duration = std::chrono::duration_cast(now - _start); + return duration.count(); } time_point_t time_point_now() diff --git a/radio/src/targets/common/arm/stm32/board_common.h b/radio/src/targets/common/arm/stm32/board_common.h index f4e9067c4b6..ea64638dcb1 100644 --- a/radio/src/targets/common/arm/stm32/board_common.h +++ b/radio/src/targets/common/arm/stm32/board_common.h @@ -38,9 +38,4 @@ #endif #endif - -#if defined(SIMU) -#include "../simu/simpgmspace.h" -#endif - #include "delays_driver.h" diff --git a/radio/src/targets/common/arm/stm32/stm32_adc.cpp b/radio/src/targets/common/arm/stm32/stm32_adc.cpp index 75d8c860b5e..d80ea9e7414 100644 --- a/radio/src/targets/common/arm/stm32/stm32_adc.cpp +++ b/radio/src/targets/common/arm/stm32/stm32_adc.cpp @@ -540,6 +540,16 @@ bool stm32_hal_adc_init(const stm32_adc_t* ADCs, uint8_t n_ADC, return true; } +void stm32_hal_adc_deinit(const stm32_adc_t* ADCs, uint8_t n_ADC) +{ + const stm32_adc_t* adc = ADCs; + + while (n_ADC > 0) { + LL_ADC_Disable(adc->ADCx); + adc++; n_ADC--; + } +} + #if defined(STM32H7RS) static inline DMA_Channel_TypeDef* _dma_get_stream(DMA_TypeDef *DMAx, uint32_t Channel) diff --git a/radio/src/targets/common/arm/stm32/stm32_adc.h b/radio/src/targets/common/arm/stm32/stm32_adc.h index 9812a1526b0..f0e94856308 100644 --- a/radio/src/targets/common/arm/stm32/stm32_adc.h +++ b/radio/src/targets/common/arm/stm32/stm32_adc.h @@ -56,6 +56,8 @@ bool stm32_hal_adc_init(const stm32_adc_t* ADCs, uint8_t n_ADC, const stm32_adc_input_t* inputs, const stm32_adc_gpio_t* ADC_GPIOs, uint8_t n_GPIO); +void stm32_hal_adc_deinit(const stm32_adc_t* ADCs, uint8_t n_ADC); + bool stm32_hal_adc_start_read(const stm32_adc_t* ADCs, uint8_t n_ADC, const stm32_adc_input_t* inputs, uint8_t n_inputs); diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index cae18358fc6..866b71632d3 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -54,11 +54,9 @@ if (PCB STREQUAL X10) set(BLUETOOTH ON) set(AUX_SERIAL OFF) add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT) - add_definitions(-DRADIO_X10E) add_definitions(-DMANUFACTURER_FRSKY) elseif (PCBREV STREQUAL T15) set(FLAVOUR t15) - add_definitions(-DRADIO_T15) add_definitions(-DRADIO_FAMILY_T16) set(FUNCTION_SWITCHES ON) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") @@ -75,7 +73,6 @@ if (PCB STREQUAL X10) set(LCD_DRIVER lcd_st7796s_driver.cpp) elseif (PCBREV STREQUAL T16) set(FLAVOUR t16) - add_definitions(-DRADIO_T16) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -86,7 +83,6 @@ if (PCB STREQUAL X10) set(FLYSKY_GIMBAL ON) elseif (PCBREV STREQUAL TX16S) set(FLAVOUR tx16s) - add_definitions(-DRADIO_TX16S) add_definitions(-DRADIO_FAMILY_T16) # Uncomment the line below to enable bootloader support for SPI flash @@ -104,7 +100,6 @@ if (PCB STREQUAL X10) set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches") elseif (PCBREV STREQUAL F16) set(FLAVOUR f16) - add_definitions(-DRADIO_F16) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -113,7 +108,6 @@ if (PCB STREQUAL X10) set(VIDEO_SWITCH ON) elseif (PCBREV STREQUAL V16) set(FLAVOUR v16) - add_definitions(-DRADIO_V16) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -128,7 +122,6 @@ if (PCB STREQUAL X10) endif() elseif (PCBREV STREQUAL T18) set(FLAVOUR t18) - add_definitions(-DRADIO_T18) add_definitions(-DRADIO_FAMILY_T16) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") option(BLUETOOTH "Support for bluetooth module" OFF) @@ -141,7 +134,6 @@ if (PCB STREQUAL X10) set(FLAVOUR x10) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(BLUETOOTH ON) - add_definitions(-DRADIO_X10) add_definitions(-DMANUFACTURER_FRSKY) endif() elseif (PCB STREQUAL X12S) diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 0679f50bb0c..cecb8d3dccd 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -29,65 +29,6 @@ #define TELEMETRY_EXTI_PRIO 0 // required for soft serial -// Keys -#if defined(PCBX12S) - #define KEYS_GPIO_REG_PAGEUP GPIOC - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_ENTER GPIOC - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_1 // PC.01 - #define KEYS_GPIO_REG_MDL GPIOG - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_13 // PG.13 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_TELE GPIOC - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_4 // PC.04 -#elif defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16) - #define KEYS_GPIO_REG_ENTER GPIOI - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_PAGEUP GPIOC - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_4 // PI.04 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_5 // PI.05 -#elif defined(RADIO_T15) - #define KEYS_GPIO_REG_ENTER GPIOI - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PI.05 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_4 // PI.04 -#elif defined(PCBX10) - #define KEYS_GPIO_REG_ENTER GPIOI - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08 - #define KEYS_GPIO_REG_PAGEDN GPIOI - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PI.11 - #define KEYS_GPIO_REG_MDL GPIOI - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_4 // PI.04 - #define KEYS_GPIO_REG_EXIT GPIOI - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_6 // PI.06 - #define KEYS_GPIO_REG_SYS GPIOI - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_7 // PI.07 - #define KEYS_GPIO_REG_TELE GPIOI - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_5 // PI.05 -#endif - // Rotary Encoder #define ROTARY_ENCODER_GPIO GPIOH #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_11 // PH.11 @@ -107,168 +48,7 @@ #define ROTARY_ENCODER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler #if defined(RADIO_T15) - #define ROTARY_ENCODER_INVERTED -#endif - -// Switches -#if defined(RADIO_T15) - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A_H GPIOG - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_A_INVERTED - - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_B - #define SWITCHES_GPIO_REG_B_H GPIOB - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_12 // PB.12 - #define SWITCHES_GPIO_REG_B_L GPIOH - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_9 // PH.09 - - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_C - #define SWITCHES_GPIO_REG_C_H GPIOG - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_GPIO_REG_C_L GPIOH - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_14 // PH.14 - #define SWITCHES_C_INVERTED - - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D_H GPIOI - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_15 // PI.15 - #define SWITCHES_GPIO_REG_D_L GPIOH - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_15 // PH.15 - - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_E - #define SWITCHES_GPIO_REG_E GPIOB - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_15 // PB.15 - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_F - #define SWITCHES_GPIO_REG_F GPIOH - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_12 // PH.12 - //SW1 - #define FUNCTION_SWITCH_1 SG - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_G - #define SWITCHES_GPIO_REG_G GPIOB - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_14 // PB.14 - #define SWITCHES_G_CFS_IDX 0 - //SW2 - #define FUNCTION_SWITCH_2 SH - #define STORAGE_SWITCH_H - #define HARDWARE_SWITCH_H - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_13 // PD.13 - #define SWITCHES_H_CFS_IDX 1 - //SW3 - #define FUNCTION_SWITCH_3 SI - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOJ - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_7 // PJ.07 - #define SWITCHES_I_CFS_IDX 2 - //SW4 - #define FUNCTION_SWITCH_4 SJ - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_13 // PG.13 - #define SWITCHES_J_CFS_IDX 3 - //SW5 - #define FUNCTION_SWITCH_5 SK - #define STORAGE_SWITCH_K - #define HARDWARE_SWITCH_K - #define SWITCHES_GPIO_REG_K GPIOJ - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_8 // PJ.08 - #define SWITCHES_K_CFS_IDX 4 - //SW6 - #define FUNCTION_SWITCH_6 SL - #define STORAGE_SWITCH_L - #define HARDWARE_SWITCH_L - #define SWITCHES_GPIO_REG_L GPIOB - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_13 // PB.13 - #define SWITCHES_L_CFS_IDX 5 -#else - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A_H GPIOH - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_9 // PH.09 - #define SWITCHES_GPIO_REG_A_L GPIOI - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_15 // PI.15 - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_B - #define SWITCHES_GPIO_REG_B_H GPIOH - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_12 // PH.12 - #define SWITCHES_GPIO_REG_B_L GPIOB - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_12 // PB.12 - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_C - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_GPIO_REG_C_L GPIOB - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_15 // PB.15 - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D_H GPIOJ - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PJ.07 - #define SWITCHES_GPIO_REG_D_L GPIOG - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_2 // PG.02 - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_E - #define SWITCHES_GPIO_REG_E_H GPIOH - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_4 // PH.04 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_3 // PE.03 - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_F - #define SWITCHES_GPIO_REG_F GPIOH - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PH.03 - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_G - #define SWITCHES_GPIO_REG_G_H GPIOG - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_GPIO_REG_G_L GPIOG - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_3 // PG.03 - #define STORAGE_SWITCH_H - #define HARDWARE_SWITCH_H - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_7 // PG.07 - - #if defined(PCBX12S) - #define SWITCHES_F_INVERTED - #elif defined(PCBX10) - #define SWITCHES_B_INVERTED - #define SWITCHES_D_INVERTED - #define SWITCHES_E_INVERTED - #endif - - #if defined(PCBX10) && !defined(RADIO_F16) - // Gimbal switch left - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOH - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_14 // PH.14 - // Gimbal switch right - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOH - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_15 // PH.15 - #elif defined(PCBX12S) - // Gimbal switch left - #define STORAGE_SWITCH_I - #define HARDWARE_SWITCH_I - #define SWITCHES_GPIO_REG_I GPIOB - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_1 // PB.01 - // Gimbal switch right - #define STORAGE_SWITCH_J - #define HARDWARE_SWITCH_J - #define SWITCHES_GPIO_REG_J GPIOB - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_0 // PB.00 - #endif + #define ROTARY_ENCODER_INVERTED #endif // 6POS SW @@ -279,231 +59,13 @@ #define SIXPOS_LED_BLUE 0 #endif -// Trims -#if defined(RADIO_T15) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_12 // PJ.12 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_RVD GPIOG - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_RHL GPIOA - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_6 // PA.06 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PC.04 -#elif defined(PCBX12S) - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_0 // PC.00 - #define TRIMS_GPIO_REG_RHR GPIOI - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PI.04 - #define TRIMS_GPIO_REG_RVD GPIOG - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_12 // PJ.12 - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RSD GPIOJ - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_RSU GPIOD - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LSD GPIOB - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_LSU GPIOB - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PB.13 -#elif defined(PCBX10) - // Left/Right Horizontal trims (LHL/LHR) - #if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16) - #define TRIMS_GPIO_REG_LHL GPIOA - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_6 // PA.06 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PC.04 - #else - #define TRIMS_GPIO_REG_LHL GPIOB - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_8 // PB.08 - #define TRIMS_GPIO_REG_LHR GPIOB - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_9 // PB.09 - #endif - - // Vertical trims - common across all PCBX10 variants - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PG.12 - #define TRIMS_GPIO_REG_LVU GPIOJ - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PJ.14 - #define TRIMS_GPIO_REG_RVD GPIOJ - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_13 // PJ.13 - #define TRIMS_GPIO_REG_RVU GPIOJ - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_12 // PJ.12 - - // Right Horizontal trims - common across all PCBX10 variants - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PD.03 - #define TRIMS_GPIO_REG_RHR GPIOD - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_7 // PD.07 - - // T5/T6 trim assignments - #if defined(RADIO_V16) - // T5/T6 trims are in exchanged positions to other handsets - #define TRIMS_GPIO_REG_LSU GPIOB - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_LSD GPIOB - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_13 // PB.13 - #define TRIMS_GPIO_REG_RSU GPIOD - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_RSD GPIOJ - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_8 // PJ.08 - #elif defined(RADIO_FAMILY_T16) - #define TRIMS_GPIO_REG_LSU GPIOD - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LSD GPIOJ - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_RSU GPIOB - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_RSD GPIOB - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_13 // PB.13 - #else // Other PCBX10 variants - #define TRIMS_GPIO_REG_LSU GPIOJ - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_8 // PJ.08 - #define TRIMS_GPIO_REG_LSD GPIOD - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_RSU GPIOB - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_14 // PB.14 - #define TRIMS_GPIO_REG_RSD GPIOB - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_13 // PB.13 - #endif -#endif - - // ADC #if defined(PCBX12S) - #define ADC_SPI SPI4 - #define ADC_SPI_GPIO_PIN_SCK GPIO_PIN(GPIOE, 2) // PE.02 - #define ADC_SPI_GPIO_PIN_CS GPIO_PIN(GPIOE, 4) // PE.04 - #define ADC_SPI_GPIO_PIN_MOSI GPIO_PIN(GPIOE, 6) // PE.06 - #define ADC_SPI_GPIO_PIN_MISO GPIO_PIN(GPIOE, 5) // PE.05 - - #define ADC_SPI_STICK_LH 0 - #define ADC_SPI_STICK_LV 1 - #define ADC_SPI_STICK_RV 2 - #define ADC_SPI_STICK_RH 3 - #define ADC_SPI_POT1 4 - #define ADC_SPI_POT2 5 - #define ADC_SPI_POT3 6 - #define ADC_SPI_SLIDER1 7 - #define ADC_SPI_SLIDER2 8 - #define ADC_SPI_BATT 9 - #define ADC_SPI_SLIDER3 11 - #define ADC_SPI_SLIDER4 10 - - #define ADC_MAIN ADC3 - #define ADC_GPIO_PIN_MOUSE1 LL_GPIO_PIN_8 // PF.08 ADC3_IN6 J5 MOUSE_X - #define ADC_GPIO_PIN_MOUSE2 LL_GPIO_PIN_9 // PF.09 ADC3_IN7 J6 MOUSE_Y - #define ADC_GPIO_MOUSE GPIOF - #define ADC_CHANNEL_MOUSE1 6 - #define ADC_CHANNEL_MOUSE2 7 - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_MOUSE1 | ADC_GPIO_PIN_MOUSE2) - #define ADC_EXT ADC1 - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN16 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 - // TODO: use for SPI1_RX instead? - #define ADC_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES + #define USE_ADS79XX #define ADC_VREF_PREC2 300 #elif defined(RADIO_V16) - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.00 // ADC123_IN10 -> ADC3_IN10 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PC.02 // ADC123_IN12 -> ADC3_IN12 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_0 // PC.01 // ADC123_IN11 -> ADC3_IN11 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_3 // PC.03 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_7 // PF.07 - #define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_9 // PF.09 - #define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH - #define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV - #define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3) - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_SLIDER1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2) - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC123_IN0 -> ADC3_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC123_IN1 -> ADC3_IN1 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC3_IN2 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC3_IN3 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN10 -> ADC3_IN10 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_11 // ADC123_IN12 -> ADC3_IN12 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_10 // ADC123_IN11 -> ADC3_IN11 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_13 // ADC123_IN13 -> ADC1_IN13 - #define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 - #define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_7 // ADC3_IN7 -> ADC3_IN7 - #define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_2 // ADC3_IN2: same as RH - #define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC3_IN3: same as RV - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - #define ADC_MAIN ADC3 - #define ADC_EXT ADC1 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT } - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler #define ADC_VREF_PREC2 330 #elif defined(PCBX10) -#if defined(RADIO_T15) - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC3_IN12 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_10 // ADC3_IN10 -#else - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PC.01 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_10 // ADC3_IN10 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_11 // ADC3_IN11 -#endif - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_7 // PF.07 -#if !defined(RADIO_T15) - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_2 // PC.02 // - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_6 // PF.06 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_3 // PC.03 // - #define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_9 // PF.09 - #define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH - #define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV -#endif #if defined(RADIO_X10) || defined(RADIO_X10E) #define PWM_STICKS #define PWM_TIMER TIM5 @@ -512,66 +74,8 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - #define STICK_PWM_CHANNEL_LH 0 - #define STICK_PWM_CHANNEL_LV 1 - #define STICK_PWM_CHANNEL_RV 3 - #define STICK_PWM_CHANNEL_RH 2 - #endif -#if defined(RADIO_T15) - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC3_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC3_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC3_IN3 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC3_IN2 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_5 // ADC3_IN5 -#else - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC3_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC3_IN1 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC3_IN2 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC3_IN3 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_5 // ADC3_IN5 -#endif -#if !defined(RADIO_T15) - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_12 // ADC3_IN12 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_4 // ADC3_IN4 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_13 // ADC3_IN13 - #define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_6 // ADC3_IN6 - #define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_7 // ADC3_IN7 - #define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_2 // ADC3_IN2: same as RH - #define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC3_IN3: same as RV -#endif -#if defined(RADIO_T15) - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_BATT) -#else - #define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3) - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_BATT | ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2) -#endif - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - #define ADC_MAIN ADC3 - #define ADC_EXT ADC1 - #if defined(RADIO_V16) - #define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT } - // Required DMA for more than one channel for EXT_ADC - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - #else - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BAT } + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #endif - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - // VBat divider is /4 on F42x and F43x devices #if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16) || defined(RADIO_V16) || defined(RADIO_T18) #define ADC_VREF_PREC2 330 @@ -582,29 +86,10 @@ #endif #endif -#if defined(RADIO_T15) - #define ADC_DIRECTION {1,-1,1,-1, 1,1} -#elif defined(RADIO_T16) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 } -#elif defined(RADIO_T18) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, -1,1,1,1, -1,1 } -#elif defined(RADIO_TX16S) || defined(RADIO_F16) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 } -#elif defined(RADIO_V16) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, -1,1,1,1, -1,1 } -#elif defined(PCBX10) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, 1,-1,1,1, 1,-1 } -#elif defined(PCBX12S) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, 1,-1, -1,-1, 0,0,0} -#else - #error "Missing ADC_DIRECTION array" -#endif - #if defined(RADIO_TX16S) #define DEFAULT_6POS_CALIB {3, 12, 21, 30, 38} #define DEFAULT_6POS_IDX 5 #endif - // Power #if defined(RADIO_T18) diff --git a/radio/src/targets/nv14/hal.h b/radio/src/targets/nv14/hal.h index 6b1e34435ed..4d1f880e951 100644 --- a/radio/src/targets/nv14/hal.h +++ b/radio/src/targets/nv14/hal.h @@ -46,130 +46,12 @@ 2/3/4 SDIO */ - -// Trims -#define TRIMS_GPIO_REG_RHL GPIOD -#define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_7 // PD.07 -#define TRIMS_GPIO_REG_RHR GPIOG -#define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_10 // PG.10 -#define TRIMS_GPIO_REG_RVD GPIOJ -#define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_0 // PJ.00 -#define TRIMS_GPIO_REG_RVU GPIOB -#define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PB.15 - -#define KEYS_GPIO_REG_ENTER GPIOC -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PC.13 - -#define TRIMS_GPIO_REG_LHL GPIOH -#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_2 // PH.02 -#define TRIMS_GPIO_REG_LHR GPIOG -#define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 -#define TRIMS_GPIO_REG_LVU GPIOH -#define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_7 // PH.07 -#define TRIMS_GPIO_REG_LVD GPIOJ -#define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PJ.12 - -#define KEYS_GPIO_REG_EXIT GPIOG -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_11 // PG.11 - // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 -// Switches -#define HARDWARE_SWITCH_A -#define STORAGE_SWITCH_A -#define HARDWARE_SWITCH_B -#define STORAGE_SWITCH_B -#define HARDWARE_SWITCH_C -#define STORAGE_SWITCH_C -#define HARDWARE_SWITCH_D -#define STORAGE_SWITCH_D -#define HARDWARE_SWITCH_E -#define STORAGE_SWITCH_E -#define HARDWARE_SWITCH_F -#define STORAGE_SWITCH_F -#define HARDWARE_SWITCH_G -#define STORAGE_SWITCH_G -#define HARDWARE_SWITCH_H -#define STORAGE_SWITCH_H - -// Index of all switches / trims -#define KEYS_GPIO_ACTIVE_HIGH -#define TRIMS_GPIO_ACTIVE_HIGH - // ADC - -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_4 // PA.04 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_5 // PA.05 - -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB -#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 // PB.01 -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_8 // PF.08 -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PB.00 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_10 // PF.10 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_0 // PC.00 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIO_PIN_SWG LL_GPIO_PIN_2 // PC.02 -#define ADC_GPIO_PIN_SWH LL_GPIO_PIN_7 // PA.07 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - -// FLYSKY_HALL_STICKS -// #define ADC_GPIOA_PINS_FS (GPIO_Pin_6 | GPIO_Pin_7) -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH \ - | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SWH) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWC) -#define ADC_GPIOC_PINS \ - (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG | ADC_GPIO_PIN_BATT) -#define ADC_GPIOF_PINS (ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD) - -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_4 // ADC12_IN4 -> ADC1_IN4 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 -#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_10 // ADC123_IN10-> ADC1_IN10 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_11 // ADC123_IN11-> ADC1_IN11 -#define ADC_CHANNEL_SWG LL_ADC_CHANNEL_12 // ADC123_IN12-> ADC1_IN12 -#define ADC_CHANNEL_SWH LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - -#define ADC_MAIN ADC1 -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS { ADC_CHANNEL_SWB, ADC_CHANNEL_SWD } -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES #define ADC_VREF_PREC2 330 -#define ADC_DIRECTION \ - { 0 /*STICK1*/, 0 /*STICK2*/, 0 /*STICK3*/, 0 /*STICK4*/, \ - -1 /*POT1*/, 0 /*POT2*/, 0 /*TX_VOLTAGE*/, 0 /*TX_VBAT*/, \ - 0 /*SWA*/, 0 /*SWB*/, 0 /*SWC*/, 0 /*SWD*/, 0 /*SWE*/, \ - -1 /*SWF*/, -1 /*SWG*/, 0 /*SWH*/ \ - } - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 diff --git a/radio/src/targets/pa01/CMakeLists.txt b/radio/src/targets/pa01/CMakeLists.txt index d60283e57db..a3a0675a846 100644 --- a/radio/src/targets/pa01/CMakeLists.txt +++ b/radio/src/targets/pa01/CMakeLists.txt @@ -47,7 +47,6 @@ add_definitions(-DFIRMWARE_FORMAT_UF2) add_definitions(-DUSE_CUSTOM_EXTI_IRQ) set(FLAVOUR pa01) -add_definitions(-DRADIO_PA01) # Defines internal modules for PL18 via UART7 set(INTERNAL_MODULES AFHDS3;CRSF CACHE STRING "Internal modules") diff --git a/radio/src/targets/pa01/hal.h b/radio/src/targets/pa01/hal.h index 2bc20e0ecaf..baf7fc14d0f 100644 --- a/radio/src/targets/pa01/hal.h +++ b/radio/src/targets/pa01/hal.h @@ -39,173 +39,9 @@ /* DMA Allocation: */ -// Keys -#define KEYS_GPIO_REG_ENTER -#define KEYS_GPIO_PIN_ENTER -#define KEYS_GPIO_ENTER GPIO_PIN(GPIOG, 13) // PG.13 - -// Keys in bsp matrix -#define KEYS_GPIO_REG_PAGEUP -#define KEYS_GPIO_PIN_PAGEUP -#define KEYS_GPIO_REG_PAGEDN -#define KEYS_GPIO_PIN_PAGEDN -#define KEYS_GPIO_REG_SYS -#define KEYS_GPIO_PIN_SYS -#define KEYS_GPIO_REG_EXIT -#define KEYS_GPIO_PIN_EXIT - -// Trims in bsp matrix -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL - -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR - -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD - -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU - -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL - -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR - -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD - -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU - -// function switches -#define FUNCTION_SWITCH_1 SK -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K AW9523B_PIN_0 -#define SWITCHES_K_CFS_IDX 0 -#define FUNCTION_SWITCH_2 SL -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L AW9523B_PIN_1 -#define SWITCHES_L_CFS_IDX 1 -#define FUNCTION_SWITCH_3 SM -#define SWITCHES_GPIO_REG_M -#define SWITCHES_GPIO_PIN_M AW9523B_PIN_2 -#define SWITCHES_M_CFS_IDX 2 -#define FUNCTION_SWITCH_4 SN -#define SWITCHES_GPIO_REG_N -#define SWITCHES_GPIO_PIN_N AW9523B_PIN_3 -#define SWITCHES_N_CFS_IDX 3 - -// Direct switches -// SWA -#define STORAGE_SWITCH_A -#define HARDWARE_SWITCH_A -#define SWITCHES_GPIO_REG_A GPIOA -#define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_2 // PA.02 - -// SWD -#define STORAGE_SWITCH_D -#define HARDWARE_SWITCH_D -#define SWITCHES_GPIO_REG_D GPIOF -#define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PF.08 - -// SWE -#define STORAGE_SWITCH_E -#define HARDWARE_SWITCH_E -#define SWITCHES_GPIO_REG_E GPIOG -#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PG.03 - -// SWF -#define STORAGE_SWITCH_F -#define HARDWARE_SWITCH_F -#define SWITCHES_GPIO_REG_F GPIOG -#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_2 // PG.02 - -#define KEYS_GPIOB_PINS (LL_GPIO_PIN_15) - -// PC8 allocated to SDIO D0, is not required to sample SWA ! -#define KEYS_GPIOC_PINS (LL_GPIO_PIN_13) - -#define KEYS_GPIOD_PINS () - -#define KEYS_GPIOH_PINS \ - (LL_GPIO_PIN_8 | LL_GPIO_PIN_9 | LL_GPIO_PIN_10 | LL_GPIO_PIN_11) - -#define KEYS_GPIOJ_PINS (LL_GPIO_PIN_12) - -#define KEYS_OUT_GPIOG_PINS (LL_GPIO_PIN_2 ) - -#define KEYS_OUT_GPIOH_PINS (LL_GPIO_PIN_7) - // ADC -#define ADC_GPIO_PIN_STICK_LH -#define ADC_GPIO_PIN_STICK_LV -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH - -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_3 // PA.03 S1 -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PA.05 S2 - -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_5 // PC.05 -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_7 // PF.07 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_1 // PC.01 - -#define ADC_GPIOA_PINS ( ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 ) - -#define ADC_GPIOC_PINS ( ADC_GPIO_PIN_BATT | ADC_GPIO_PIN_SWB ) - -#define ADC_GPIOF_PINS ( ADC_GPIO_PIN_SWC ) - -#define ADC_CHANNEL_STICK_LH -#define ADC_CHANNEL_STICK_LV -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH - -// Sliders -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_19 // ADC12_INP19 - -// Analog switches -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_8 // ADC12_INP8 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_3 // ADC3_INP3 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_11 // ADC123_INP11 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC12_IN16 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS \ - { ADC_CHANNEL_SWC, ADC_CHANNEL_SWD } - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 - #define ADC_VREF_PREC2 329 -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWC */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOE, 6) // PE.06 #define PWR_ON_GPIO GPIO_PIN(GPIOE, 3) // PE.03 diff --git a/radio/src/targets/pa01/key_driver.cpp b/radio/src/targets/pa01/key_driver.cpp index e8435d25510..c8255aaaa43 100644 --- a/radio/src/targets/pa01/key_driver.cpp +++ b/radio/src/targets/pa01/key_driver.cpp @@ -34,6 +34,8 @@ #define BSP_KEY_OUT_MASK \ (BSP_KEY_OUT1 | BSP_KEY_OUT2 | BSP_KEY_OUT3 | BSP_KEY_OUT4) +#define KEYS_GPIO_ENTER GPIO_PIN(GPIOG, 13) // PG.13 + /* The output bit-order has to be: 0 LHL TR3L (Left equals down) 1 LHR TR3R diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index ad9cc6b7270..e729b506ea9 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -44,7 +44,6 @@ add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) if(PCBREV STREQUAL PL18U) set(FLAVOUR pl18u) - add_definitions(-DRADIO_PL18U) set(DISK_CACHE ON) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) @@ -57,7 +56,7 @@ if(PCBREV STREQUAL PL18U) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif (PCBREV STREQUAL EL18) set(FLAVOUR el18) - add_definitions(-DRADIO_EL18 -DRADIO_NV14_FAMILY -DPCBNV14 -DUSE_HATS_AS_KEYS) + add_definitions(-DRADIO_NV14_FAMILY -DPCBNV14 -DUSE_HATS_AS_KEYS) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) set(USE_VS1053B ON) @@ -68,7 +67,7 @@ elseif (PCBREV STREQUAL EL18) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS3 CACHE STRING "Default internal module") elseif(PCBREV STREQUAL NV14) set(FLAVOUR nv14) - add_definitions(-DRADIO_NV14 -DRADIO_NV14_FAMILY -DPCBNV14) + add_definitions(-DRADIO_NV14_FAMILY -DPCBNV14) add_definitions(-DUSE_HATS_AS_KEYS -DAFHDS2_BAUDRATE=${PCB_RF_BAUD}) set(DISK_CACHE ON) set(FLYSKY_GIMBAL ON) @@ -81,7 +80,7 @@ elseif(PCBREV STREQUAL NV14) set(DEFAULT_INTERNAL_MODULE FLYSKY_AFHDS2A CACHE STRING "Default internal module") elseif(PCBREV STREQUAL NB4P) set(FLAVOUR nb4p) - add_definitions(-DRADIO_NB4P -DSPI_FLASH) + add_definitions(-DSPI_FLASH) set(ROTARY_ENCODER YES) set(LED_STRIP ON) set(AFHDS3 ON) @@ -92,7 +91,7 @@ elseif(PCBREV STREQUAL NB4P) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") elseif(PCBREV STREQUAL PL18EV) set(FLAVOUR pl18ev) - add_definitions(-DRADIO_PL18EV -DSPI_FLASH -DUSE_HATS_AS_KEYS) + add_definitions(-DSPI_FLASH -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) set(LED_STRIP ON) @@ -100,7 +99,7 @@ elseif(PCBREV STREQUAL PL18EV) set(KEY_DRIVER key_driver.cpp) else() set(FLAVOUR pl18) - add_definitions(-DRADIO_PL18 -DSPI_FLASH -DUSE_HATS_AS_KEYS) + add_definitions(-DSPI_FLASH -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) set(LED_STRIP ON) @@ -201,6 +200,14 @@ add_library(board_bl OBJECT EXCLUDE_FROM_ALL targets/common/arm/stm32/sdram_driver.cpp ) add_dependencies(board_bl ${BITMAPS_TARGET}) + +if(PCBREV STREQUAL NB4P) + target_sources(board_bl PUBLIC + ${CMAKE_CURRENT_BINARY_DIR}/stm32_adc_inputs.inc + boards/generic_stm32/analog_inputs.cpp + ) +endif() + set(BOOTLOADER_SRC ${BOOTLOADER_SRC} $) # Firmware board library diff --git a/radio/src/targets/pl18/board.cpp b/radio/src/targets/pl18/board.cpp index d8d265e5b8b..7508cdfa7f3 100644 --- a/radio/src/targets/pl18/board.cpp +++ b/radio/src/targets/pl18/board.cpp @@ -183,7 +183,7 @@ void boardBLPreJump() { SDRAM_Init(); #if defined(RADIO_NB4P) - LL_ADC_Disable(ADC_MAIN); + _adc_driver.deinit(); #endif } diff --git a/radio/src/targets/pl18/board.h b/radio/src/targets/pl18/board.h index fc1a771124a..3c45038f3f8 100644 --- a/radio/src/targets/pl18/board.h +++ b/radio/src/targets/pl18/board.h @@ -29,8 +29,8 @@ #include "hal/serial_port.h" #include "hal/watchdog_driver.h" -#if defined(ADC_GPIO_PIN_STICK_TH) -#define SURFACE_RADIO true +#if defined(RADIO_NB4P) + #define SURFACE_RADIO true #endif #define FLASHSIZE 0x200000 diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index a53851692d0..4fd79ef25fe 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -47,252 +47,18 @@ 2/3/4 SDIO */ -// Keys -// PL18/PL18EV only has virtual keys via trim buttons -// #define KEYS_GPIO_PIN_PGUP /* for activating PGUP in keys diagnose screen */ - #if defined(RADIO_NV14_FAMILY) - // Trims - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RHR GPIOG - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_10 // PG.10 - #define TRIMS_GPIO_REG_RVD GPIOJ - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_0 // PJ.00 - #define TRIMS_GPIO_REG_RVU GPIOB - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PB.15 - - #define TRIMS_GPIO_REG_LHL GPIOH - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_2 // PH.02 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LVU GPIOH - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_7 // PH.07 - #define TRIMS_GPIO_REG_LVD GPIOJ - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_12 // PJ.12 - - // Keys - #define KEYS_GPIO_REG_ENTER GPIOC - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PC.13 - #define KEYS_GPIO_REG_EXIT GPIOG - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_11 // PG.11 - // Monitor pin #define VBUS_MONITOR_GPIO GPIO_PIN(GPIOJ, 14) // PJ.14 - - // Switches - #define HARDWARE_SWITCH_A - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_B - #define STORAGE_SWITCH_B - #define HARDWARE_SWITCH_C - #define STORAGE_SWITCH_C - #define HARDWARE_SWITCH_D - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_E - #define STORAGE_SWITCH_E - #define HARDWARE_SWITCH_F - #define STORAGE_SWITCH_F - #define HARDWARE_SWITCH_G - #define STORAGE_SWITCH_G - #define HARDWARE_SWITCH_H - #define STORAGE_SWITCH_H - - // Index of all switches / trims - #define KEYS_GPIO_ACTIVE_HIGH - #define TRIMS_GPIO_ACTIVE_HIGH - // ADC - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_4 // PA.04 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_5 // PA.05 - - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB - #define ADC_GPIO_PIN_SWA LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_SWB LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SWD LL_GPIO_PIN_10 // PF.10 - #define ADC_GPIO_PIN_SWE LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SWF LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_SWG LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_SWH LL_GPIO_PIN_7 // PA.07 - - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH \ - | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SWH) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWC) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG | ADC_GPIO_PIN_BATT) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD) - - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_4 // ADC12_IN4 -> ADC1_IN4 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 - #define ADC_CHANNEL_SWA LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 - #define ADC_CHANNEL_SWB LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 - #define ADC_CHANNEL_SWC LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 - #define ADC_CHANNEL_SWD LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 - #define ADC_CHANNEL_SWE LL_ADC_CHANNEL_10 // ADC123_IN10-> ADC1_IN10 - #define ADC_CHANNEL_SWF LL_ADC_CHANNEL_11 // ADC123_IN11-> ADC1_IN11 - #define ADC_CHANNEL_SWG LL_ADC_CHANNEL_12 // ADC123_IN12-> ADC1_IN12 - #define ADC_CHANNEL_SWH LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - - #define ADC_MAIN ADC1 - #define ADC_EXT ADC3 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_SWB, ADC_CHANNEL_SWD } - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES #define ADC_VREF_PREC2 330 - - #define ADC_DIRECTION \ - { 0 /*STICK1*/, 0 /*STICK2*/, 0 /*STICK3*/, 0 /*STICK4*/, \ - -1 /*POT1*/, 0 /*POT2*/, 0 /*TX_VOLTAGE*/, 0 /*TX_VBAT*/, \ - 0 /*SWA*/, 0 /*SWB*/, 0 /*SWC*/, 0 /*SWD*/, 0 /*SWE*/, \ - -1 /*SWF*/, -1 /*SWG*/, 0 /*SWH*/ \ - } - #elif defined(RADIO_NB4P) - // Trims - #define TRIMS_GPIO_REG_T1L - #define TRIMS_GPIO_PIN_T1L - #define TRIMS_GPIO_REG_T1R - #define TRIMS_GPIO_PIN_T1R - #define TRIMS_GPIO_REG_T2L - #define TRIMS_GPIO_PIN_T2L - #define TRIMS_GPIO_REG_T2R - #define TRIMS_GPIO_PIN_T2R - - // Switches - #define SWITCHES_A_2POS - #define SWITCHES_B_2POS - - // Keys - #define KEYS_GPIO_PIN_ENTER - #define KEYS_GPIO_REG_ENTER - #define KEYS_GPIO_PIN_EXIT - #define KEYS_GPIO_REG_EXIT - - #define ADC_GPIO_PIN_STICK_TH LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_2 // PA.02 - #define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 #define ADC_GPIO_RAW1 GPIOC - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_7 // PA.07 - #define ADC_GPIO_PIN_RAW1 LL_GPIO_PIN_1 // PC.01 (SW1) - #define ADC_GPIO_PIN_RAW2 LL_GPIO_PIN_0 // PC.00 (SW2 SW3) - #define ADC_GPIO_PIN_RAW3 LL_GPIO_PIN_6 // PA.06 (TR1) - #define ADC_GPIO_PIN_RAW4 LL_GPIO_PIN_4 // PC.04 (TR2) - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - #define ADC_CHANNEL_RAW1 LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC1_IN11 - #define ADC_CHANNEL_RAW2 LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10 - #define ADC_CHANNEL_RAW3 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_RAW4 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_RAW3) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_RAW1 | ADC_GPIO_PIN_RAW2 | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_RAW4 | ADC_GPIO_PIN_BATT) - - #define ADC_MAIN ADC1 - #define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - #define ADC_VREF_PREC2 330 - - #define ADC_DIRECTION { \ - 0,0, /* gimbals */ \ - 0,0, /* pots */ \ - 0,0,0,0, /* raw1-4 */ \ - 0, /* vbat */ \ - 0 /* rtc_bat */ \ - } - -#else // !defined(RADIO_NB4P) && !defined(RADIO_NV14_FAMILY) - -// Keys -#if defined(RADIO_PL18U) -#define KEYS_GPIO_PIN_ENTER -#define KEYS_GPIO_REG_ENTER -#define KEYS_GPIO_PIN_EXIT -#define KEYS_GPIO_REG_EXIT #endif // Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL - -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR - -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD - -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU - -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL - -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR - -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD - -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU - -#define TRIMS_GPIO_REG_LSD -#define TRIMS_GPIO_PIN_LSD - -#define TRIMS_GPIO_REG_LSU -#define TRIMS_GPIO_PIN_LSU - -#define TRIMS_GPIO_REG_RSD -#define TRIMS_GPIO_PIN_RSD - -#define TRIMS_GPIO_REG_RSU -#define TRIMS_GPIO_PIN_RSU - #if !defined(RADIO_PL18U) - #define TRIMS_GPIO_REG_T7L - #define TRIMS_GPIO_PIN_T7L - - #define TRIMS_GPIO_REG_T7R - #define TRIMS_GPIO_PIN_T7R - - #define TRIMS_GPIO_REG_T8D - #define TRIMS_GPIO_PIN_T8D - - #define TRIMS_GPIO_REG_T8U - #define TRIMS_GPIO_PIN_T8U - #define TRIMS_GPIO_REG_TR1U GPIOH->IDR #define TRIMS_GPIO_PIN_TR1U LL_GPIO_PIN_8 // PH.08 #define TRIMS_GPIO_REG_TR1D GPIOH->IDR @@ -336,7 +102,6 @@ #define TRIMS_GPIO_PIN_IN4 LL_GPIO_PIN_12 // PJ.12 // Index of all trims - #define KEYS_GPIOB_PINS (LL_GPIO_PIN_15) // PC8 allocated to SDIO D0, is not required to sample SWA ! @@ -365,181 +130,9 @@ // #define VBUS_MONITOR_GPIO (GPIOJ) // #define VBUS_MONITOR_PIN (LL_GPIO_PIN_14) -// Switches: -// Switches A and C on PL18/PL18EV are 2-position switches, -// so there is no NEED to configure two pins for Switches A and C. -// -// Especially, as on current dev. state, using PC8 for SDIO D0. -// (happy coincidence ;) -// -#if defined(RADIO_PL18U) - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_3 // PD.03 - #define SWITCHES_GPIO_REG_A_L GPIOB - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_6 // PB.06 -#else - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_9 // PC.09 -#endif - -// High rail of Switch C is not required and thus PC10 is free to use for -// customizations. -// -// #define SWITCHES_GPIO_REG_C_H GPIOC -// #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_10 // PC.10 -// #define SWITCHES_GPIO_REG_C_L GPIOC -// #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PC.11 - -#if defined(RADIO_PL18U) - #define SWITCHES_GPIO_REG_C_H GPIOJ - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_14 // PJ.14 - #define SWITCHES_GPIO_REG_C_L GPIOH - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PH.02 -#else - #define SWITCHES_GPIO_REG_C GPIOC - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_11 // PC.11 -#endif - // ADC - -#define ADC_GPIO_PIN_STICK_LH -#define ADC_GPIO_PIN_STICK_LV -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH - -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_4 // PC.04 VRB -#define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_8 // PF.08 VRC -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_9 // PF.09 VRD/LS -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_7 // PA.07 VRE/RS - -#if defined(RADIO_PL18EV) -#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_5 // PA.05 -#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_EXT3 LL_GPIO_PIN_6 // PF.06 -#define ADC_GPIO_PIN_EXT4 LL_GPIO_PIN_3 // PA.03 -#endif - -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_1 // PC.01 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_0 // PC.00 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_2 // PC.02 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_0 // PB.00 -#define ADC_GPIO_PIN_SWG LL_GPIO_PIN_1 // PB.01 -#define ADC_GPIO_PIN_SWH LL_GPIO_PIN_10 // PF.10 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER2 | \ - ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2 | ADC_GPIO_PIN_EXT4) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_SWF | ADC_GPIO_PIN_SWG) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_BATT | \ - ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_SWD | ADC_GPIO_PIN_SWE) -#define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER1 | \ - ADC_GPIO_PIN_EXT3 | ADC_GPIO_PIN_SWH) - -#define ADC_CHANNEL_STICK_LH -#define ADC_CHANNEL_STICK_LV -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH - -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_14 // ADC12_IN14 -> ADC1_IN14 -#define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6 -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_7 // ADC3_IN7 -> ADC3_IN7 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - -#if defined(RADIO_PL18EV) -// Left, right stick end pot on PL18EV -#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 -#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 - -// Left, right stick end buttons on PL18EV -#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_4 // ADC3_IN4 -> ADC3_IN4 -#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC3_IN3 -#endif - -// Analog switches -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_11 // ADC123_IN11 -> ADC3_IN11 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC3_IN10 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC3_IN12 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 -#define ADC_CHANNEL_SWG LL_ADC_CHANNEL_9 // ADC12_IN9 -> ADC1_IN9 -#define ADC_CHANNEL_SWH LL_ADC_CHANNEL_8 // ADC3_IN8 -> ADC3_IN8 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18 - -#define ADC_MAIN ADC1 -#define ADC_EXT ADC3 - -#define ADC_EXT_CHANNELS \ - { ADC_CHANNEL_POT3, ADC_CHANNEL_SLIDER1, ADC_CHANNEL_EXT3, ADC_CHANNEL_EXT4, \ - ADC_CHANNEL_SWB, ADC_CHANNEL_SWD, ADC_CHANNEL_SWE, ADC_CHANNEL_SWH \ - } - -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES - #define ADC_VREF_PREC2 330 -#if defined(RADIO_PL18EV) -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,-1, /* sliders */ \ - 0,0,0,0, /* ext1-4 */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWD */ \ - 0, /* SWE */ \ - 0, /* SWF */ \ - 0, /* SWG */ \ - 0 /* SWH */ \ - } -#elif defined(RADIO_PL18U) -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,1, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - 0, /* SWD */ \ - -1, /* SWE */ \ - 0, /* SWF */ \ - -1, /* SWG */ \ - 0 /* SWH */ \ - } -#else -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0,0, /* pots */ \ - -1,-1, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - -1, /* SWB */ \ - -1, /* SWD */ \ - 0, /* SWE */ \ - 0, /* SWF */ \ - 0, /* SWG */ \ - 0 /* SWH */ \ - } -#endif - -#endif - // Power #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 diff --git a/radio/src/targets/pl18/nb4p_key_driver.cpp b/radio/src/targets/pl18/nb4p_key_driver.cpp index c3521c4fe48..0bac65c23b5 100644 --- a/radio/src/targets/pl18/nb4p_key_driver.cpp +++ b/radio/src/targets/pl18/nb4p_key_driver.cpp @@ -28,11 +28,15 @@ #include "delays_driver.h" #include "keys.h" -#if !defined(BOOT) - #include "hal/adc_driver.h" +#include "hal/adc_driver.h" + +#if defined(BOOT) + #include "stm32_adc.h" + #include "boards/generic_stm32/analog_inputs.h" #endif -#define BOOTLOADER_KEYS 0x42 +#define BOOTLOADER_KEYS 0x42 +#define ADC_KEYS_INDEX 4 /* The output bit-order has to be: 0 LHL STD (Left equals down) @@ -47,92 +51,51 @@ enum PhysicalTrims STU, THD = 2, THU, -/* TR2L = 4, +/* + TR2L = 4, TR2R, TR2D = 8, - TR2U,*/ + TR2U, +*/ }; void keysInit() { #if defined(BOOT) - LL_GPIO_InitTypeDef pinInit; - LL_GPIO_StructInit(&pinInit); - - pinInit.Pin = ADC_GPIO_PIN_RAW1; - pinInit.Mode = LL_GPIO_MODE_ANALOG; - pinInit.Pull = LL_GPIO_PULL_NO; - stm32_gpio_enable_clock(ADC_GPIO_RAW1); - LL_GPIO_Init(ADC_GPIO_RAW1, &pinInit); - - // Init ADC clock - uint32_t adc_idx = (((uint32_t) ADC_MAIN) - ADC1_BASE) / 0x100UL; - uint32_t adc_msk = RCC_APB2ENR_ADC1EN << adc_idx; - LL_APB2_GRP1_EnableClock(adc_msk); - - // Init common to all ADCs - LL_ADC_CommonInitTypeDef commonInit; - LL_ADC_CommonStructInit(&commonInit); - - commonInit.CommonClock = LL_ADC_CLOCK_SYNC_PCLK_DIV4; - LL_ADC_CommonInit(__LL_ADC_COMMON_INSTANCE(ADC_MAIN), &commonInit); - - // ADC must be disabled for the functions used here - LL_ADC_Disable(ADC_MAIN); - - LL_ADC_InitTypeDef adcInit; - LL_ADC_StructInit(&adcInit); - adcInit.SequencersScanMode = LL_ADC_SEQ_SCAN_DISABLE; - adcInit.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; - adcInit.Resolution = LL_ADC_RESOLUTION_12B; - LL_ADC_Init(ADC_MAIN, &adcInit); - - LL_ADC_REG_InitTypeDef adcRegInit; - LL_ADC_REG_StructInit(&adcRegInit); - adcRegInit.TriggerSource = LL_ADC_REG_TRIG_SOFTWARE; - adcRegInit.ContinuousMode = LL_ADC_REG_CONV_SINGLE; - LL_ADC_REG_Init(ADC_MAIN, &adcRegInit); - - // Enable ADC - LL_ADC_Enable(ADC_MAIN); + _adc_driver.init(); #endif } #if defined(BOOT) -uint16_t _adcRead() -{ - // Configure ADC channel - LL_ADC_REG_SetSequencerRanks(ADC_MAIN, LL_ADC_REG_RANK_1, ADC_CHANNEL_RAW1); - LL_ADC_SetChannelSamplingTime(ADC_MAIN, ADC_CHANNEL_RAW1, LL_ADC_SAMPLINGTIME_3CYCLES); - - // Start ADC conversion - LL_ADC_REG_StartConversionSWStart(ADC_MAIN); +static uint16_t _adc_values[MAX_ADC_INPUTS]; - // Wait until ADC conversion is complete - while (!LL_ADC_IsActiveFlag_EOCS(ADC_MAIN)); +uint16_t* getAnalogValues() { return _adc_values; } - // Read ADC converted value - return LL_ADC_REG_ReadConversionData12(ADC_MAIN); +static uint16_t _adcRead(uint8_t index) +{ + if (!_adc_driver.start_conversion()) { + return ADC_MAX_VALUE / 2; + } + _adc_driver.wait_completion(); + return _adc_values[4]; } #endif uint32_t readKeys() { + uint16_t value; uint32_t result = 0; #if defined(BOOT) - uint16_t value = _adcRead(); - if (value >= 3584) - result |= 1 << KEY_EXIT; - else if (value < 512) - result |= 1 << KEY_ENTER; + value = _adcRead(ADC_KEYS_INDEX); #else - uint16_t value = getAnalogValue(4); + value = getAnalogValue(ADC_KEYS_INDEX); +#endif + if (value >= 3584) result |= 1 << KEY_EXIT; else if (value < 512) result |= 1 << KEY_ENTER; -#endif return result; } @@ -142,12 +105,12 @@ uint32_t readTrims() uint32_t result = 0; #if defined(BOOT) - uint16_t value = _adcRead(); + uint16_t value = _adcRead(ADC_KEYS_INDEX); if (value >= 1536 && value < 2560) result = BOOTLOADER_KEYS; #else - uint16_t tr1Val = getAnalogValue(6); - uint16_t tr2Val = getAnalogValue(7); + uint16_t tr1Val = getAnalogValue(6); // TODO: define constant + uint16_t tr2Val = getAnalogValue(7); // TODO: define constant if (tr1Val < 500) // Physical TR1 Left // result |= 1 << TR1L; ; @@ -171,4 +134,4 @@ uint32_t readTrims() #endif return result; -} \ No newline at end of file +} diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index b55d12cdea2..35408687bcf 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -5,8 +5,27 @@ if(NOT SIMU_TARGET) return() endif() +if(MINGW) + # struct packing breaks on MinGW w/out -mno-ms-bitfields: + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 + # http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw + # + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields") +endif() + +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") + +if(ASAN AND NOT WASI) + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") +endif() + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") + set(SIMU_DRIVERS - simpgmspace.cpp + simulib.cpp simufatfs.cpp simudisk.cpp simulcd.cpp @@ -20,10 +39,9 @@ set(SIMU_DRIVERS bt_driver.cpp timers_driver.cpp abnormal_reboot.cpp - ) +) set(HW_DESC_JSON ${FLAVOUR}.json) -AddHardwareDefTarget(${HW_DESC_JSON}) AddHWGenTarget(${HW_DESC_JSON} simu_keys simu_keys.inc) AddHWGenTarget(${HW_DESC_JSON} simu_switches simu_switches.inc) AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) @@ -32,35 +50,21 @@ set(SIMU_DRIVERS ${SIMU_DRIVERS} ${CMAKE_CURRENT_BINARY_DIR}/simu_keys.inc ${CMAKE_CURRENT_BINARY_DIR}/simu_switches.inc ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/${HW_DESC_JSON} - ) -include_directories(${CMAKE_CURRENT_BINARY_DIR}) +) -if(SIMU_LUA_COMPILER) - add_definitions(-DLUA_COMPILER) -endif() - -if(SIMU_BOOTLOADER) - add_definitions(-DSIMU_BOOTLOADER) - set(SIMU_DRIVERS ${SIMU_DRIVERS} - ../../bootloader/bin_files.cpp - ../../bootloader/boot.cpp - # TODO - how to handle this for B&W (not currently used)? - ../../gui/colorlcd/boot_menu.cpp - ../../thirdparty/lz4/lz4.c - ) -endif() +include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Pack all simu driver sources into an object lib add_library(simu_drivers OBJECT EXCLUDE_FROM_ALL - ${SIMU_DRIVERS}) + ${SIMU_DRIVERS} +) get_property(SIMU_SRC_OPTIONS TARGET radiolib_native - PROPERTY INTERFACE_COMPILE_OPTIONS) + PROPERTY INTERFACE_COMPILE_OPTIONS +) target_compile_options(simu_drivers PRIVATE ${SIMU_SRC_OPTIONS}) - set_property(TARGET simu_drivers PROPERTY POSITION_INDEPENDENT_CODE ON) if(SIMU_AUX) @@ -71,101 +75,61 @@ endif() set(SIMU_SRC $ $ - ) +) set(SIMU_SRC ${SIMU_SRC} PARENT_SCOPE) # Set the options as well in parent scope to be used by unit tests set(SIMU_SRC_OPTIONS ${SIMU_SRC_OPTIONS} PARENT_SCOPE) -if(Qt6Widgets_FOUND) - set(SIMULATOR_FLAVOUR edgetx-${FLAVOUR}) - set(SIMULATOR_TARGET ${SIMULATOR_FLAVOUR}-simulator) - - add_definitions(-DSIMULATOR_FLAVOUR="${SIMULATOR_FLAVOUR}") - include_directories(${COMPANION_SRC_DIRECTORY} ${COMPANION_SRC_DIRECTORY}/simulation) - - qt_wrap_cpp(SIMULATOR_SRC - ${COMPANION_SRC_DIRECTORY}/simulation/simulatorinterface.h - opentxsimulator.h +if(WASI) + # strip debug info in Release builds + list(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE + -Wl,--strip-debug ) - list(APPEND SIMULATOR_SRC ${SIMU_SRC} opentxsimulator.cpp) - add_library(${SIMULATOR_TARGET} SHARED ${SIMULATOR_SRC}) - set_target_properties(${SIMULATOR_TARGET} PROPERTIES PREFIX "lib") + set(WASI_COMPILE_OPTIONS + -Os + -fno-exceptions + -fno-rtti + -ffunction-sections + -fdata-sections + # setjmp / longjmp handling + -mllvm -wasm-enable-sjlj + ) - if(TARGET SDL2::SDL2) - set(SDL2_LIBRARIES SDL2::SDL2) - target_sources(${SIMULATOR_TARGET} PRIVATE simuaudio.cpp) - else() - target_sources(${SIMULATOR_TARGET} PRIVATE no_audio.cpp) + if(USE_LTO) + list(APPEND WASI_COMPILE_OPTIONS -flto=thin) endif() - target_compile_options(${SIMULATOR_TARGET} PRIVATE ${SIMU_SRC_OPTIONS}) - target_compile_definitions(${SIMULATOR_TARGET} PUBLIC ${APP_COMMON_DEFINES}) - target_link_libraries(${SIMULATOR_TARGET} ${SDL2_LIBRARIES} Qt::Core Qt::SerialPort) + target_compile_options(radiolib_native PUBLIC ${WASI_COMPILE_OPTIONS}) + target_compile_options(simu_drivers PUBLIC ${WASI_COMPILE_OPTIONS}) - # Remove debug symbols on release builds - if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") - add_custom_command(TARGET ${SIMULATOR_TARGET} POST_BUILD - COMMAND ${CMAKE_STRIP} -x $) - endif() - - add_custom_command( - TARGET ${SIMULATOR_TARGET} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/plugins/ - COMMAND ${CMAKE_COMMAND} -E copy - $ ${CMAKE_BINARY_DIR}/plugins/ + add_executable(wasi-module EXCLUDE_FROM_ALL + ${SIMU_SRC} + ) + set_target_properties(wasi-module PROPERTIES SUFFIX ".wasm") + + target_compile_options(wasi-module PUBLIC ${WASI_COMPILE_OPTIONS}) + + target_link_options(wasi-module PRIVATE + -Wl,--import-memory + -Wl,--export-memory + -Wl,--max-memory=2147483648 + -Wl,--gc-sections + # enable runtime to check stack / heap + -Wl,--export=__heap_base,--export=__data_end + -Wl,--export=malloc -Wl,--export=free + # no main() + -mexec-model=reactor + # setjmp / longjmp + -Wl,-mllvm,-wasm-enable-sjlj + -lsetjmp ) - # Introduced at 2.5 - TODO replace with a code change - # When compiled shared simulators using libopenui and Companion have classes named MainWindow - # When the simulator is launched from Companion the runtime dynamic linking can result in Companion overiding the simulator - # and crashing the simulator under some OSes - # The flag forces the runtime linker to always look for references in the simulator first - if (NOT CLANG) - target_link_options(${SIMULATOR_TARGET} PRIVATE "LINKER:-Bsymbolic") + if(USE_LTO) + target_link_options(wasi-module PRIVATE -Wl,--thinlto-jobs=all) endif() - # - add_custom_target(libsimulator DEPENDS ${SIMULATOR_TARGET}) - - # Prepare the "all-simu-libs" target to build simulator libraries for *every* supported PCB type (PCB_TYPES list) - # (a fast build machine or corresponding amount of patience is recommended for this target). - if(${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles$") - # Ensure parallel builds with GCC make (try with MAKEFLAGS but this seems to be getting clobbered somewhere). - # otherwise 'make' may complain: "warning: jobserver unavailable: using -j1..." and build single-threaded. (Ninja always rocks this.) - set(mkflags "$ENV{MAKEFLAGS}") - if (mkflags STREQUAL "") - set(mkflags "-j") - endif() - endif() - set(all_libs_cmd ${CMAKE_COMMAND} -E echo "Building all simulator libraries") - foreach(pcb ${PCB_TYPES}) - set(pcbrev "") - if(pcb STREQUAL X12S) - set(pcbrev "-DPCBREV=13") - endif() - set(all_libs_cmd ${all_libs_cmd} && ${CMAKE_COMMAND} -DPCB=${pcb} ${pcbrev} -Wno-dev ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} && ${CMAKE_COMMAND} --build . --target libsimulator -- ${mkflags}) - endforeach() - add_custom_target(all-simu-libs COMMAND ${all_libs_cmd} USES_TERMINAL WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -endif() - -if(MINGW) - # struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields") -endif() - -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") - -if(ASAN) - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address") -endif() - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}") - -if(TARGET SDL2::SDL2) +else() add_executable(simu EXCLUDE_FROM_ALL ${SIMU_SRC} @@ -177,15 +141,16 @@ if(TARGET SDL2::SDL2) sdl_simu.cpp ) - include(FetchImgui) target_compile_options(simu PUBLIC -DSIMU) add_png_target(image_assets "assets/images/*.png") add_dependencies(simu image_assets) + # STB set(STB_DIR ${RADIO_SRC_DIR}/thirdparty/stb) target_include_directories(simu PUBLIC ${STB_DIR}) - target_link_libraries(simu PUBLIC imgui) -endif() -PrintTargetReport("simu/libsimulator") + # ImGui + include(FetchImgui) + target_link_libraries(simu PRIVATE imgui) +endif() diff --git a/radio/src/targets/simu/adc_driver.cpp b/radio/src/targets/simu/adc_driver.cpp index dfb14291fbf..33c54162fff 100644 --- a/radio/src/targets/simu/adc_driver.cpp +++ b/radio/src/targets/simu/adc_driver.cpp @@ -19,15 +19,14 @@ * GNU General Public License for more details. */ +#include "simulib.h" #include "hal/adc_driver.h" -#include "definitions.h" +#include "definitions.h" #include "myeeprom.h" -#include "translations.h" +#include "translations.h" #include "hal_adc_inputs.inc" -#include "board.h" -#include "edgetx.h" void enableVBatBridge(){} void disableVBatBridge(){} @@ -44,19 +43,23 @@ uint16_t getRTCBatteryVoltage() return 300; } -extern uint16_t simu_get_analog(uint8_t idx); +extern uint16_t simuGetAnalog(uint8_t idx); static bool simu_start_conversion() { int max_input = adcGetInputOffset(ADC_INPUT_VBAT); for (int i = 0; i < max_input; i++) { - setAnalogValue(i, simu_get_analog(i)); + setAnalogValue(i, simuGetAnalog(i)); } // set batteries default voltages int i = adcGetInputOffset(ADC_INPUT_VBAT); if (i > 0) { - uint16_t volts = (uint16_t)((g_eeGeneral.vBatWarn > 0 ? g_eeGeneral.vBatWarn : BATTERY_WARN) + 5) * 10; // +0.5V and prec2 + // +0.5V and prec2 + uint16_t volts = (uint16_t)((g_eeGeneral.vBatWarn > 0 ? g_eeGeneral.vBatWarn + : BATTERY_WARN) + + 5) * + 10; setAnalogValue(i, volts * 2); } diff --git a/radio/src/targets/simu/audio_driver.cpp b/radio/src/targets/simu/audio_driver.cpp index 05e5be2fe2c..550f19f5f01 100644 --- a/radio/src/targets/simu/audio_driver.cpp +++ b/radio/src/targets/simu/audio_driver.cpp @@ -20,7 +20,7 @@ */ #include "audio.h" -#include "simuaudio.h" +#include "simulib.h" #if !defined(SOFTWARE_VOLUME) static int _simu_volume = 0; @@ -40,8 +40,6 @@ int simuAudioGetVolume() #endif } -void simuQueueAudio(const uint8_t* data, uint32_t len); - void audioConsumeCurrentBuffer() { auto& fifo = audioQueue.buffersFifo; diff --git a/radio/src/targets/simu/html/simu.html b/radio/src/targets/simu/html/simu.html new file mode 100644 index 00000000000..0838a6a8c17 --- /dev/null +++ b/radio/src/targets/simu/html/simu.html @@ -0,0 +1,52 @@ + + + + +
+ +
+ + + diff --git a/radio/src/targets/simu/interface.md b/radio/src/targets/simu/interface.md new file mode 100644 index 00000000000..0f7cd82782f --- /dev/null +++ b/radio/src/targets/simu/interface.md @@ -0,0 +1,47 @@ +# Simulator Plugin Interface + +## Methods + +```c + +/** + * Simu module functions + */ + +/* Simulator plugin name */ +const char* simu_get_name(); + +/* Start/stop */ +void simuInit(); +void simuStop(); // should be async but isn't +bool simuIsRunning(); + +/* Live data */ +unsigned int simu_get_num_outputs(); +const int16_t* simu_get_outputs(); + +unsigned int simu_get_num_channels(); +const int16_t* simu_get_channels(); + +unsigned int simu_get_num_logical_switches(); +uint32_t* simu_get_logical_switches(); + +uint8_t simu_get_flight_mode(); +uint8_t simu_get_trim_value(uint8_t flight_mode, uint8_t axis); + +uint8_t simu_get_stick_mode(); +uint16_t simu_get_trim_range(); + +void simu_get_flight_mode_name(uint8_t flight_mode, char* buffer, int buflen); + +// TODO: get GVar definitions + values + +/** + * Callbacks / native functions + */ +void simu_read_analogs(uint16_t* analogs, int num_analogs); +uint32_t simu_read_keys(); +uint32_t simu_read_trims(); +void simu_flush_display(bool backlight, uint8_t* buffer, int buflen); +``` + diff --git a/radio/src/targets/simu/led_driver.cpp b/radio/src/targets/simu/led_driver.cpp index 4201222da5d..645515182a4 100644 --- a/radio/src/targets/simu/led_driver.cpp +++ b/radio/src/targets/simu/led_driver.cpp @@ -83,3 +83,13 @@ uint32_t fsGetLedRGB(uint8_t index) { return rgbGetLedColor(index); } + +void fsLedOn(uint8_t idx) +{ + rgbSetLedColor(idx, 0xFF, 0xFF, 0xFF); +} + +void fsLedOff(uint8_t idx) +{ + rgbSetLedColor(idx, 0, 0, 0); +} diff --git a/radio/src/targets/simu/opentxsimulator.cpp b/radio/src/targets/simu/opentxsimulator.cpp index 1c96ef2b07b..3288f12e046 100644 --- a/radio/src/targets/simu/opentxsimulator.cpp +++ b/radio/src/targets/simu/opentxsimulator.cpp @@ -41,7 +41,7 @@ #define GET_SWITCH_BOOL(sw__) getSwitch((sw__), 0); -#define ETXS_DBG qDebug() << "(" << simuTimerMicros() << "us)" +#define ETXS_DBG qDebug() << "(" << time_get_ms() << "us)" int16_t g_anas[MAX_ANALOG_INPUTS]; QVector OpenTxSimulator::tracebackDevices; @@ -91,16 +91,6 @@ void firmwareTraceCb(const char * text) } } -void fsLedOn(uint8_t idx) -{ - rgbSetLedColor(idx, 0xFF, 0xFF, 0xFF); -} - -void fsLedOff(uint8_t idx) -{ - rgbSetLedColor(idx, 0, 0, 0); -} - // Serial port handling needs to know about OpenTxSimulator, so we we // need to update what's in simpgmspace.cpp when we have a simulator // to point at. @@ -284,8 +274,9 @@ void OpenTxSimulator::start(const char * filename, bool tests) QMutexLocker lckr(&m_mtxSimuMain); QMutexLocker slckr(&m_mtxSettings); simuAudioInit(); - simuStart(tests, simuSdDirectory.toLatin1().constData(), - simuSettingsDirectory.toLatin1().constData()); + simuFatfsSetPaths(simuSdDirectory.toLatin1().constData(), + simuSettingsDirectory.toLatin1().constData()); + simuStart(tests); emit started(); QTimer::singleShot(0, this, SLOT(run())); // old style for Qt < 5.4 @@ -421,6 +412,8 @@ extern volatile uint32_t rotencDt; void OpenTxSimulator::rotaryEncoderEvent(int steps) { + if (steps == 0) return; + #if defined(ROTARY_ENCODER_NAVIGATION) && !defined(USE_HATS_AS_KEYS) static uint32_t last_tick = 0; if (steps != 0) { @@ -434,22 +427,14 @@ void OpenTxSimulator::rotaryEncoderEvent(int steps) last_tick = now; } #else - // TODO : this should probably be handled in the GUI int key; -#if defined(PCBXLITE) - if (steps > 0) - key = KEY_DOWN; - else if (steps < 0) - key = KEY_UP; -#elif defined(KEYS_GPIO_REG_PLUS) && defined(KEYS_GPIO_REG_MINUS) - if (steps > 0) - key = KEY_MINUS; - else if (steps < 0) - key = KEY_PLUS; - else -#endif - // Should not happen but Clang complains that key is unset otherwise - return; + if (keyIsSupported(KEY_UP) | keyIsSupported(KEY_DOWN)) { + key = steps > 0 ? KEY_DOWN : KEY_UP; + } else if (keyIsSupported(KEY_PLUS) | keyIsSupported(KEY_MINUS)) { + key = steps > 0 ? KEY_MINUS : KEY_PLUS; + } else { + return; // not supposed to happen??? + } setKey(key, 1); QTimer::singleShot(10, [this, key]() { setKey(key, 0); }); @@ -749,12 +734,9 @@ void OpenTxSimulator::run() if (!loops) ts.start(); - if (isStopRequested()) { - return; - } + if (isStopRequested()) return; + if (!isRunning()) { - QString err(getError()); - emit runtimeError(err); emit stopped(); return; } @@ -769,7 +751,7 @@ void OpenTxSimulator::run() } if (!(loops % (SIMULATOR_INTERFACE_HEARTBEAT_PERIOD / 10))) { - emit heartbeat(loops, simuTimerMicros() / 1000); + emit heartbeat(loops, time_get_ms()); } } @@ -888,6 +870,7 @@ uint8_t OpenTxSimulator::getStickMode() return limit(0, g_eeGeneral.stickMode, 3); } +// TODO: remove this const char * OpenTxSimulator::getPhaseName(unsigned int phase) { static char buff[LEN_FLIGHT_MODE_NAME+1]; @@ -904,12 +887,6 @@ const QString OpenTxSimulator::getCurrentPhaseName() return name; } -const char * OpenTxSimulator::getError() -{ - return main_thread_error; -} - - /* * OpenTxSimulatorFactory */ diff --git a/radio/src/targets/simu/opentxsimulator.h b/radio/src/targets/simu/opentxsimulator.h index 4936d32129d..53a52a5b9c8 100644 --- a/radio/src/targets/simu/opentxsimulator.h +++ b/radio/src/targets/simu/opentxsimulator.h @@ -106,7 +106,6 @@ class DLLEXPORT OpenTxSimulator : public SimulatorInterface uint8_t getStickMode(); const char * getPhaseName(unsigned int phase); const QString getCurrentPhaseName(); - const char * getError(); QString simuSdDirectory; QString simuSettingsDirectory; diff --git a/radio/src/targets/simu/sdl_simu.cpp b/radio/src/targets/simu/sdl_simu.cpp index feb4fe02d81..e347ccf3510 100644 --- a/radio/src/targets/simu/sdl_simu.cpp +++ b/radio/src/targets/simu/sdl_simu.cpp @@ -38,6 +38,10 @@ #include "hal/rotary_encoder.h" #include "hal/switch_driver.h" +#ifdef __EMSCRIPTEN__ +#include +#endif + #if !SDL_VERSION_ATLEAST(2,0,19) #error This backend requires SDL 2.0.19+ because of SDL_RenderGeometryRaw() function #endif @@ -62,7 +66,7 @@ #include "display.h" #include "simuaudio.h" -#include "simpgmspace.h" +#include "simulib.h" #include "hal/key_driver.h" #include "hal/switch_driver.h" @@ -83,9 +87,11 @@ static SDL_Texture* screen_frame_buffer; static GimbalState stick_left = {{0.5f, 0.5f}, false}; static GimbalState stick_right = {{0.5f, 0.5f}, false}; +#if !defined(__EMSCRIPTEN__) static const unsigned char _icon_png[] = { #include "icon.lbm" }; +#endif #if defined(ROTARY_ENCODER_NAVIGATION) extern volatile rotenc_t rotencValue; @@ -292,7 +298,6 @@ static SDL_Texture* LoadTexture(SDL_Renderer* renderer, const unsigned char* pix return texture; } - static float switches_width() { const int max_sw_line = MAX_SWITCHES / 2; @@ -731,10 +736,12 @@ int main(int argc, char* argv[]) SDL_GetRendererInfo(renderer, &info); SDL_Log("Current SDL_Renderer: %s", info.name); +#if !defined(__EMSCRIPTEN__) SDL_Surface* icon = LoadImage(_icon_png, sizeof(_icon_png)); if (window && icon) { SDL_SetWindowIcon(window, icon); } +#endif // Setup Dear ImGui context IMGUI_CHECKVERSION(); @@ -779,8 +786,9 @@ int main(int argc, char* argv[]) // Init simulation simuInit(); - simuStart(true, args.getStoragePath().c_str(), - args.getSettingsPath().c_str()); + simuFatfsSetPaths(args.getStoragePath().c_str(), + args.getSettingsPath().c_str()); + simuStart(); // Main loop SDL_SetEventFilter([](void*, SDL_Event* event){ @@ -792,6 +800,9 @@ int main(int argc, char* argv[]) return 1; }, NULL); +#if defined(__EMSCRIPTEN__) + emscripten_set_main_loop([]() { handleEvents(); }, 0, true); +#else do { Uint64 start_ts = SDL_GetPerformanceCounter(); if (!handleEvents()) break; @@ -804,6 +815,7 @@ int main(int argc, char* argv[]) SDL_Delay(std::max(0,(int32_t)floor(16.666f - elapsedMS))); } while(true); +#endif // App cleanup simuStop(); @@ -816,14 +828,16 @@ int main(int argc, char* argv[]) SDL_DestroyTexture(screen_frame_buffer); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); +#if !defined(__EMSCRIPTEN__) SDL_FreeSurface(icon); +#endif SDL_CloseAudio(); SDL_Quit(); return 0; } -uint16_t simu_get_analog(uint8_t idx) +uint16_t simuGetAnalog(uint8_t idx) { auto max_sticks = adcGetMaxInputs(ADC_INPUT_MAIN); if (idx < max_sticks) { diff --git a/radio/src/targets/simu/simuaudio.cpp b/radio/src/targets/simu/simuaudio.cpp index 2503697aa34..6e4c84e9359 100644 --- a/radio/src/targets/simu/simuaudio.cpp +++ b/radio/src/targets/simu/simuaudio.cpp @@ -21,6 +21,7 @@ #include "audio.h" #include "simuaudio.h" +#include "simulib.h" #include #include diff --git a/radio/src/targets/simu/simuaudio.h b/radio/src/targets/simu/simuaudio.h index fa0b1c4f4d1..a1b0408c297 100644 --- a/radio/src/targets/simu/simuaudio.h +++ b/radio/src/targets/simu/simuaudio.h @@ -21,9 +21,6 @@ #pragma once -#include - bool simuAudioInit(); void simuAudioDeInit(); -void simuQueueAudio(const uint8_t* data, uint32_t len); int simuAudioGetVolume(); diff --git a/radio/src/targets/simu/simufatfs.cpp b/radio/src/targets/simu/simufatfs.cpp index 04782c5e3d5..330f75724b6 100644 --- a/radio/src/targets/simu/simufatfs.cpp +++ b/radio/src/targets/simu/simufatfs.cpp @@ -19,7 +19,7 @@ * GNU General Public License for more details. */ -#include "simpgmspace.h" +#include "simulib.h" #if !defined(SIMU_DISKIO) @@ -31,6 +31,7 @@ #include #include #include +#include #include namespace fs = std::filesystem; @@ -200,22 +201,17 @@ FRESULT file_stat(const std::string& realPath, FILINFO* fno) // Get last write time auto ftime = fs::last_write_time(fsPath, ec); if (!ec) { - try { - auto systime = ftime_to_systime(ftime); - auto time_t_val = std::chrono::system_clock::to_time_t(systime); - struct tm* ltime = localtime(&time_t_val); - - if (ltime) { - // Convert to FatFs format - fno->fdate = ((ltime->tm_year - 80) << 9) | - ((ltime->tm_mon + 1) << 5) | ltime->tm_mday; - fno->ftime = (ltime->tm_hour << 11) | (ltime->tm_min << 5) | - (ltime->tm_sec / 2); - } else { - fno->fdate = 0; - fno->ftime = 0; - } - } catch (...) { + auto systime = ftime_to_systime(ftime); + auto time_t_val = std::chrono::system_clock::to_time_t(systime); + struct tm* ltime = localtime(&time_t_val); + + if (ltime) { + // Convert to FatFs format + fno->fdate = ((ltime->tm_year - 80) << 9) | ((ltime->tm_mon + 1) << 5) | + ltime->tm_mday; + fno->ftime = + (ltime->tm_hour << 11) | (ltime->tm_min << 5) | (ltime->tm_sec / 2); + } else { fno->fdate = 0; fno->ftime = 0; } @@ -286,16 +282,12 @@ FRESULT f_open(FIL* fil, const TCHAR* name, BYTE flag) } } - try { - auto simuFil = new _simu_FIL(realPath, mode); - if (simuFil->stream->is_open()) { - fil->obj.fs = reinterpret_cast(simuFil); - return FR_OK; - } else { - delete simuFil; - return FR_INVALID_NAME; - } - } catch (...) { + auto simuFil = new _simu_FIL(realPath, mode); + if (simuFil->stream->is_open()) { + fil->obj.fs = reinterpret_cast(simuFil); + return FR_OK; + } else { + delete simuFil; return FR_INVALID_NAME; } } @@ -407,35 +399,20 @@ struct _simu_DIR { if (ec) { iter = end_iter; // Set to end if error } - skipDotEntries(); // TODO: check if necessary - } - - private: - void skipDotEntries() - { - while (iter != end_iter) { - std::string filename = iter->path().filename().string(); - if (filename != "." && filename != "..") { - break; - } - std::error_code ec; - ++iter; - } } public: bool hasNext() const { return iter != end_iter; } - fs::directory_entry getNext() + std::optional getNext() { if (iter == end_iter) { - throw std::runtime_error("No more entries"); + return std::nullopt; } auto current = *iter; std::error_code ec; ++iter; - skipDotEntries(); return current; } @@ -451,13 +428,8 @@ FRESULT f_opendir(DIR* rep, const TCHAR* name) return FR_NO_PATH; } - try { - rep->obj.fs = reinterpret_cast(new _simu_DIR(path)); - return FR_OK; - } catch (...) { - rep->obj.fs = nullptr; - return FR_NO_PATH; - } + rep->obj.fs = reinterpret_cast(new _simu_DIR(path)); + return FR_OK; } FRESULT f_closedir(DIR* rep) @@ -478,24 +450,24 @@ FRESULT f_readdir(DIR* rep, FILINFO* fil) return FR_NO_FILE; } - try { - auto entry = sd->getNext(); - - if (fil != nullptr) { - memset(fil->fname, 0, FF_MAX_LFN); + auto maybe_entry = sd->getNext(); + if (!maybe_entry.has_value()) { + return FR_NO_FILE; + } - std::string filename = entry.path().filename().string(); - size_t copyLen = std::min(filename.length(), size_t(FF_MAX_LFN - 1)); - strncpy(fil->fname, filename.c_str(), copyLen); + auto entry = maybe_entry.value(); + if (fil != nullptr) { + memset(fil->fname, 0, FF_MAX_LFN); - std::string fullPath = entry.path().string(); - return file_stat(fullPath, fil); - } + std::string filename = entry.path().filename().string(); + size_t copyLen = std::min(filename.length(), size_t(FF_MAX_LFN - 1)); + strncpy(fil->fname, filename.c_str(), copyLen); - return FR_OK; - } catch (...) { - return FR_NO_FILE; + std::string fullPath = entry.path().string(); + return file_stat(fullPath, fil); } + + return FR_OK; } FRESULT f_mkfs(const TCHAR* path, BYTE opt, DWORD au, void* work, UINT len) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simulib.cpp similarity index 90% rename from radio/src/targets/simu/simpgmspace.cpp rename to radio/src/targets/simu/simulib.cpp index 22b49c7a779..d4a6b1f95d0 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simulib.cpp @@ -19,29 +19,19 @@ * GNU General Public License for more details. */ -#include "board.h" -#define SIMPGMSPC_USE_QT 0 - -#include "edgetx.h" +#include "simulib.h" #include "simulcd.h" #include "hal/adc_driver.h" #include "hal/rotary_encoder.h" #include "hal/usb_driver.h" -#include "hal/audio_driver.h" #include "os/sleep.h" #include "os/task.h" -#include "os/timer_native_impl.h" -#include -#include -#include +#include "edgetx.h" -#if !defined (_MSC_VER) || defined (__GNUC__) - #include - #include -#endif +#include int g_snapshot_idx = 0; @@ -61,33 +51,10 @@ rotenc_t rotaryEncoderGetValue() return rotencValue / ROTARY_ENCODER_GRANULARITY; } -// TODO: remove all STM32 defs - extern const etx_hal_adc_driver_t simu_adc_driver; void lcdCopy(void * dest, void * src); -uint64_t simuTimerMicros(void) -{ - auto now = std::chrono::steady_clock::now(); - return (uint64_t) std::chrono::duration_cast(now.time_since_epoch()).count(); -} - -uint16_t getTmr16KHz() -{ - return simuTimerMicros() * 2 / 125; -} - -uint16_t getTmr2MHz() -{ - return simuTimerMicros() * 2; -} - -uint32_t timersGetMsTick(void) -{ - return simuTimerMicros() / 1000; -} - void simuInit() { #if defined(ROTARY_ENCODER_NAVIGATION) @@ -103,7 +70,6 @@ void simuInit() bool keysStates[MAX_KEYS] = { false }; void simuSetKey(uint8_t key, bool state) { - // TRACE("simuSetKey(%d, %d)", key, state); assert(key < DIM(keysStates)); keysStates[key] = state; } @@ -111,7 +77,6 @@ void simuSetKey(uint8_t key, bool state) bool trimsStates[MAX_TRIMS * 2] = { false }; void simuSetTrim(uint8_t trim, bool state) { - // TRACE("simuSetTrim(%d, %d)", trim, state); assert(trim < DIM(trimsStates)); trimsStates[trim] = state; } @@ -125,7 +90,7 @@ static void* bootloaderThread(void*) } #endif -void simuStart(bool tests, const char * sdPath, const char * settingsPath) +void simuStart(bool tests) { if (simu_running) return; @@ -137,8 +102,6 @@ void simuStart(bool tests, const char * sdPath, const char * settingsPath) startOptions = (tests ? 0 : OPENTX_START_NO_SPLASH | OPENTX_START_NO_CALIBRATION | OPENTX_START_NO_CHECKS); simu_shutdown = false; - simuFatfsSetPaths(sdPath, settingsPath); - /* g_tmr10ms must be non-zero otherwise some SF functions (that use this timer as a marker when it was last executed) will be executed twice on startup. Normal radio does not see this issue because g_tmr10ms is already a big number @@ -274,7 +237,6 @@ uint32_t readKeys() for (int i = 0; i < MAX_KEYS; i++) { if (keysStates[i]) { - // TRACE("key pressed %d", i); result |= 1 << i; } } @@ -288,7 +250,6 @@ uint32_t readTrims() for (int i = 0; i < keysGetMaxTrims() * 2; i++) { if (trimsStates[i]) { - // TRACE("trim pressed %d", i); trims |= 1 << i; } } diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simulib.h similarity index 52% rename from radio/src/targets/simu/simpgmspace.h rename to radio/src/targets/simu/simulib.h index ac17f9caa56..487ee6f2593 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simulib.h @@ -21,47 +21,43 @@ #pragma once -#include -#include +#include #include #include -#include #include -#define __disable_irq() -#define __enable_irq() - -extern char * main_thread_error; - -uint64_t simuTimerMicros(void); +#if __wasm__ +#define WASM_EXPORT_AS(name) __attribute__((export_name(name))) +#define WASM_EXPORT(symbol) WASM_EXPORT_AS(#symbol) symbol +#define WASM_IMPORT_AS(name) __attribute__((import_name(name))) +#define WASM_IMPORT(symbol) WASM_IMPORT_AS(#symbol) symbol +#else +#define WASM_EXPORT_AS(name) +#define WASM_EXPORT(symbol) symbol +#define WASM_IMPORT_AS(name) +#define WASM_IMPORT(symbol) symbol +#endif -void simuSetKey(uint8_t key, bool state); -void simuSetTrim(uint8_t trim, bool state); -void simuSetSwitch(uint8_t swtch, int8_t state); +// exports +void WASM_EXPORT(simuInit)(); +void WASM_EXPORT(simuStart)(bool tests = true); +void WASM_EXPORT(simuStop)(); +bool WASM_EXPORT(simuIsRunning)(); +void WASM_EXPORT(simuSetKey)(uint8_t key, bool state); +void WASM_EXPORT(simuSetTrim)(uint8_t trim, bool state); +void WASM_EXPORT(simuSetSwitch)(uint8_t swtch, int8_t state); +int WASM_EXPORT(simuAudioGetVolume)(); -#if defined(__cplusplus) -void simuInit(); -void simuStart(bool tests = true, const char * sdPath = nullptr, const char * settingsPath = nullptr); -void simuStop(); -bool simuIsRunning(); -void startEepromThread(const char * filename = "eeprom.bin"); -void stopEepromThread(); -#endif +// callbacks +uint16_t WASM_IMPORT(simuGetAnalog)(uint8_t idx); +void WASM_IMPORT(simuQueueAudio)(const uint8_t* buf, uint32_t len); void simuMain(); void simuFatfsSetPaths(const char * sdPath, const char * settingsPath); - std::string simuFatfsGetCurrentPath(); -std::string simuFatfsGetRealPath(const std::string &p); - -#if defined(TRACE_SIMPGMSPACE) - #undef TRACE_SIMPGMSPACE - #define TRACE_SIMPGMSPACE TRACE -#else - #define TRACE_SIMPGMSPACE(...) -#endif +std::string simuFatfsGetRealPath(const std::string& p); #if defined(HARDWARE_TOUCH) extern struct TouchState simTouchState; diff --git a/radio/src/targets/simu/switch_driver.cpp b/radio/src/targets/simu/switch_driver.cpp index b1a03134d33..f8bdbf20c68 100644 --- a/radio/src/targets/simu/switch_driver.cpp +++ b/radio/src/targets/simu/switch_driver.cpp @@ -19,6 +19,8 @@ * GNU General Public License for more details. */ +#include "simulib.h" + #include "hal/switch_driver.h" #include "definitions.h" #include "myeeprom.h" diff --git a/radio/src/targets/st16/CMakeLists.txt b/radio/src/targets/st16/CMakeLists.txt index d31133800cc..c764f197269 100644 --- a/radio/src/targets/st16/CMakeLists.txt +++ b/radio/src/targets/st16/CMakeLists.txt @@ -48,7 +48,6 @@ add_definitions(-DFIRMWARE_FORMAT_UF2) add_definitions(-DUSE_CUSTOM_EXTI_IRQ) set(FLAVOUR st16) -add_definitions(-DRADIO_ST16) # Defines internal modules for PL18 via UART7 # set(INTERNAL_MODULES MULTI CACHE STRING "Internal modules") diff --git a/radio/src/targets/st16/hal.h b/radio/src/targets/st16/hal.h index c32be675d8d..086c55a7927 100644 --- a/radio/src/targets/st16/hal.h +++ b/radio/src/targets/st16/hal.h @@ -44,198 +44,7 @@ #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -// Keys -#define KEYS_GPIO_REG_ENTER GPIOG -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_14 // PG.14 -#define KEYS_GPIO_REG_PAGEDN GPIOA -#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PA.08 -#define KEYS_GPIO_REG_EXIT GPIOC -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 - -// Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL - -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR - -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD - -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU - -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL - -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR - -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD - -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU - - -// function switches -#define FUNCTION_SWITCH_1 SK -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K PCA95XX_PIN_0 -#define SWITCHES_K_CFS_IDX 0 -#define FUNCTION_SWITCH_2 SL -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L PCA95XX_PIN_1 -#define SWITCHES_L_CFS_IDX 1 -#define FUNCTION_SWITCH_3 SM -#define SWITCHES_GPIO_REG_M -#define SWITCHES_GPIO_PIN_M PCA95XX_PIN_2 -#define SWITCHES_M_CFS_IDX 2 -#define FUNCTION_SWITCH_4 SN -#define SWITCHES_GPIO_REG_N -#define SWITCHES_GPIO_PIN_N PCA95XX_PIN_3 -#define SWITCHES_N_CFS_IDX 3 -#define FUNCTION_SWITCH_5 SO -#define SWITCHES_GPIO_REG_O -#define SWITCHES_GPIO_PIN_O PCA95XX_PIN_4 -#define SWITCHES_O_CFS_IDX 4 -#define FUNCTION_SWITCH_6 SP -#define SWITCHES_GPIO_REG_P -#define SWITCHES_GPIO_PIN_P PCA95XX_PIN_5 -#define SWITCHES_P_CFS_IDX 5 - -// Direct switches - -// Key 1 -#define STORAGE_SWITCH_G -#define HARDWARE_SWITCH_G -#define SWITCHES_G_2POS -#define SWITCHES_GPIO_REG_G -#define SWITCHES_GPIO_PIN_G PCA95XX_PIN_6 - -// Key 2 -#define STORAGE_SWITCH_H -#define HARDWARE_SWITCH_H -#define SWITCHES_H_2POS -#define SWITCHES_GPIO_REG_H -#define SWITCHES_GPIO_PIN_H PCA95XX_PIN_7 - - -// Key 3 -#define STORAGE_SWITCH_I -#define HARDWARE_SWITCH_I -#define SWITCHES_GPIO_REG_I GPIOI -#define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_3 // PI.03 - -// Key 4 -#define STORAGE_SWITCH_J -#define HARDWARE_SWITCH_J -#define SWITCHES_GPIO_REG_J GPIOI -#define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_11 // PI.11 - - -// ADC -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 VRA -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 VRB -#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_0 // PB.00 VRC/LS -#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_7 // PA.07 VRD/RS - -// If serial gimbals are used, we can reuse the channels -#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_0 // PA.00 EXT1 -#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_1 // PA.01 EXT2 -#define ADC_GPIO_PIN_EXT3 LL_GPIO_PIN_2 // PA.02 EXT3 -#define ADC_GPIO_PIN_EXT4 LL_GPIO_PIN_3 // PA.03 EXT4 - -#define ADC_GPIO_PIN_SWA LL_GPIO_PIN_2 // PC.02_C -#define ADC_GPIO_PIN_SWB LL_GPIO_PIN_3 // PC.03_C -#define ADC_GPIO_PIN_SWC LL_GPIO_PIN_9 // PF.09 -#define ADC_GPIO_PIN_SWD LL_GPIO_PIN_7 // PF.07 -#define ADC_GPIO_PIN_SWE LL_GPIO_PIN_8 // PF.08 -#define ADC_GPIO_PIN_SWF LL_GPIO_PIN_6 // PF.06 - -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_1 // PC.01 - -#define ADC_GPIOA_PINS \ - (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_STICK_LH | \ - ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV) - -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER1) - -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_SWA | ADC_GPIO_PIN_SWB | ADC_GPIO_PIN_BATT) - -#define ADC_GPIOF_PINS \ - (ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWD | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWF) - -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_14 // ADC12_INP14 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_16 // ADC12_INP16 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_17 // ADC12_INP17 - -// Each ADC cannot map more than 8 channels, otherwise it will cause problems -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_3 // ADC12_INP3 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_5 // ADC12_INP5 -#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_9 // ADC12_INP9 -#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC12_INP7 - -// Ext inputs: analog gimbal channel re-use -#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_14 // ADC12_INP14 -#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_15 // ADC12_INP15 -#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_16 // ADC12_INP16 -#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_17 // ADC12_INP17 - -// Analog switches -#define ADC_CHANNEL_SWA LL_ADC_CHANNEL_0 // ADC3_INP0 -#define ADC_CHANNEL_SWB LL_ADC_CHANNEL_1 // ADC3_INP1 -#define ADC_CHANNEL_SWC LL_ADC_CHANNEL_2 // ADC3_INP2 -#define ADC_CHANNEL_SWD LL_ADC_CHANNEL_3 // ADC3_INP3 -#define ADC_CHANNEL_SWE LL_ADC_CHANNEL_8 // ADC3_INP8 -#define ADC_CHANNEL_SWF LL_ADC_CHANNEL_7 // ADC3_INP7 - -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_11 // ADC123_INP11 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC12_IN16 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS \ - { \ - ADC_CHANNEL_SWA, ADC_CHANNEL_SWB, ADC_CHANNEL_SWC, ADC_CHANNEL_SWD, \ - ADC_CHANNEL_SWE, ADC_CHANNEL_SWF, ADC_CHANNEL_BATT \ - } - -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 - -#define ADC_VREF_PREC2 329 - -#define ADC_DIRECTION { \ - 0,0,0,0, /* gimbals */ \ - 0,0, /* pots */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - 0, /* SWA */ \ - 0, /* SWB */ \ - 0, /* SWC */ \ - 0, /* SWD */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } +#define ADC_VREF_PREC2 329 #define USE_EXTI9_5_IRQ // used for I2C port extender interrupt #define EXTI9_5_IRQ_Priority 5 diff --git a/radio/src/targets/stm32h7s78-dk/hal.h b/radio/src/targets/stm32h7s78-dk/hal.h index 1b8540a0751..d73d34c9e34 100644 --- a/radio/src/targets/stm32h7s78-dk/hal.h +++ b/radio/src/targets/stm32h7s78-dk/hal.h @@ -49,60 +49,8 @@ // ADC - #define ADC_VREF_PREC2 1024 // fake -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 -#define ADC_GPIO_PIN_STICK_RV -#define ADC_GPIO_PIN_STICK_RH -#define ADC_GPIO_PIN_BATT // fake - -// #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PA0_C VR1 -// #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PA1_C VR2 - -// #define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - -// Fake gimbal channels -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_10 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_12 -#define ADC_CHANNEL_STICK_RV -#define ADC_CHANNEL_STICK_RH -#define ADC_CHANNEL_BATT // fake -#define ADC_CHANNEL_RTC_BAT // fake - -// #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_0 // ADC12_INP0 -// #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_1 // ADC12_INP1 - -#define ADC_MAIN ADC1 -#define ADC_DMA GPDMA1 -#define ADC_DMA_CHANNEL LL_GPDMA1_REQUEST_ADC1 -#define ADC_DMA_STREAM LL_DMA_CHANNEL_0 -#define ADC_DMA_STREAM_IRQ GPDMA1_Channel0_IRQn -#define ADC_DMA_STREAM_IRQHandler GPDMA1_Channel0_IRQHandler - -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_92CYCLES_5 -#define ADC_DIRECTION {0,0,0,0,0,0} - -// Power -// #define PWR_SWITCH_GPIO GPIO_PIN(GPIOI, 11) // PI.11 -// #define PWR_ON_GPIO GPIO_PIN(GPIOI, 14) // PI.14 - -// Chargers (USB and wireless) -// #define UCHARGER_GPIO GPIO_PIN(GPIOB, 14) // PB.14 input -// #define UCHARGER_CHARGE_END_GPIO GPIO_PIN(GPIOB, 13) // PB.13 input -// #define UCHARGER_EN_GPIO GPIO_PIN(GPIOG, 3) // PG.03 output - -// #if defined (WIRELESS_CHARGER) -// #define WCHARGER_GPIO GPIO_PIN(GPIOI, 9) // PI.09 input -// #define WCHARGER_CHARGE_END_GPIO GPIO_PIN(GPIOI, 10) // PI.10 input -// #define WCHARGER_EN_GPIO GPIO_PIN(GPIOH, 4) // PH.04 output -// #define WCHARGER_I_CONTROL_GPIO GPIO_PIN(GPIOH, 13) // PH.13 output -// #endif - -// TODO! Check IOLL1 to PI.01 connectivity! - // S.Port update connector // #define SPORT_MAX_BAUDRATE 400000 // #define SPORT_UPDATE_RCC_AHB1Periph 0 diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 4ceec6dc045..495b32d62c4 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -63,7 +63,6 @@ elseif(PCB STREQUAL X9D+) set(FLAVOUR x9d+2019) set(CPU_TYPE_FULL STM32F407xE) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") - add_definitions(-DRADIO_X9DP2019) add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT) set(STATUS_LEDS YES) set(PXX2 ON) @@ -113,7 +112,6 @@ elseif(PCB STREQUAL X7) set(MODULE_SIZE_STD YES) set(FLAVOUR t12) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_T12) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_JUMPER) elseif(PCBREV STREQUAL TPRO) @@ -124,7 +122,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(CPU_TYPE_FULL STM32F205xE) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_TPRO) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL TPROV2) @@ -135,7 +132,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_TPROV2) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL TPROS) @@ -146,7 +142,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGE_LED YES) - add_definitions(-DRADIO_TPROS) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL BUMBLEBEE) @@ -158,7 +153,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(FUNCTION_SWITCHES YES) - add_definitions(-DRADIO_BUMBLEBEE) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") set(AUX_SERIAL ON) @@ -171,7 +165,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(PXX2 ON) set(USB_CHARGE_LED YES) - add_definitions(-DRADIO_T14) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif (PCBREV STREQUAL T12MAX) @@ -182,7 +175,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(USB_CHARGE_LED YES) set(CPU_TYPE_FULL STM32F407xG) - add_definitions(-DRADIO_T12MAX) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") elseif(PCBREV STREQUAL T20) @@ -194,7 +186,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(FLYSKY_GIMBAL ON) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_T20) add_definitions(-DRADIO_FAMILY_T20) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -208,7 +199,6 @@ elseif(PCB STREQUAL X7) set(FLYSKY_GIMBAL ON) set(PXX2 ON) set(FUNCTION_SWITCHES ON) - add_definitions(-DRADIO_T20V2) add_definitions(-DRADIO_FAMILY_T20) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -218,17 +208,6 @@ elseif(PCB STREQUAL X7) set(MODULE_SIZE_SML YES) set(FLAVOUR tlite) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_TLITE) - add_definitions(-DRADIO_FAMILY_JUMPER_T12) - add_definitions(-DMANUFACTURER_JUMPER) - set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") - elseif(PCBREV STREQUAL TLITEF4) - set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") - set(INTERNAL_MODULE_SERIAL YES) - set(MODULE_SIZE_SML YES) - set(FLAVOUR tlitef4) - set(CPU_TYPE_FULL STM32F407xE) # for size report - add_definitions(-DRADIO_TLITE) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_JUMPER) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -238,7 +217,6 @@ elseif(PCB STREQUAL X7) set(MODULE_SIZE_SML YES) set(FLAVOUR lr3pro) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_LR3PRO) add_definitions(-DRADIO_FAMILY_JUMPER_T12) add_definitions(-DMANUFACTURER_BETAFPV) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -251,7 +229,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER YES) set(BLUETOOTH NO) set(USB_CHARGER YES) - add_definitions(-DRADIO_TX12) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL TX12MK2) set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module") @@ -264,7 +241,6 @@ elseif(PCB STREQUAL X7) if (NOT BLUETOOTH) set(AUX_SERIAL ON) endif() - add_definitions(-DRADIO_TX12MK2) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -278,7 +254,6 @@ elseif(PCB STREQUAL X7) set(BLUETOOTH NO) set(USB_CHARGER YES) set(HELI NO) - add_definitions(-DRADIO_MT12) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -295,7 +270,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_BOXER) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -312,7 +286,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_GX12) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -331,7 +304,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_ZORRO) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -346,7 +318,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xE) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_POCKET) add_definitions(-DMANUFACTURER_RADIOMASTER) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -364,7 +335,6 @@ elseif(PCB STREQUAL X7) if(RADIOMASTER_RELEASE) set(BIND_KEY YES) endif() - add_definitions(-DRADIO_T8) add_definitions(-DMANUFACTURER_RADIOMASTER) elseif(PCBREV STREQUAL COMMANDO8) set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module") @@ -376,7 +346,6 @@ elseif(PCB STREQUAL X7) set(ROTARY_ENCODER NO) set(BLUETOOTH NO) set(USE_RTC_CLOCK NO) - add_definitions(-DRADIO_COMMANDO8) add_definitions(-DMUTUALLY_EXCLUSIVE_MODULES) add_definitions(-DMANUFACTURER_IFLIGHT) elseif(PCBREV STREQUAL ACCESS) @@ -385,7 +354,6 @@ elseif(PCB STREQUAL X7) set(MODULE_SIZE_STD YES) set(FLAVOUR x7access) set(CPU_TYPE_FULL STM32F407xE) - add_definitions(-DRADIO_X7ACCESS) add_definitions(-DPCBREV=${PCBREV}) add_definitions(-DPCBX7ACCESS) add_definitions(-DHARDWARE_POWER_MANAGEMENT_UNIT) @@ -402,7 +370,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_V12) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -418,7 +385,6 @@ elseif(PCB STREQUAL X7) set(CPU_TYPE_FULL STM32F407xG) set(ROTARY_ENCODER YES) set(USB_CHARGER YES) - add_definitions(-DRADIO_V14) add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) set(PXX2 ON) set(ENABLE_SERIAL_PASSTHROUGH ON CACHE BOOL "Enable serial passthrough") @@ -431,7 +397,6 @@ elseif(PCB STREQUAL X7) set(DEFAULT_INTERNAL_MODULE XJT_PXX1 CACHE STRING "Default internal module") set(FLAVOUR x7) set(CPU_TYPE_FULL STM32F205xE) - add_definitions(-DRADIO_X7) set(BLUETOOTH YES) add_definitions(-DBLUETOOTH_PROBE) set(ROTARY_ENCODER YES) diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 3c55039659d..08dd47bbb4e 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -110,7 +110,7 @@ enum { #endif -#if defined(ADC_GPIO_PIN_STICK_TH) +#if defined(RADIO_MT12) #define SURFACE_RADIO true #endif diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index e89d43e3e56..40846403350 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -44,210 +44,12 @@ #define TELEMETRY_EXTI_PRIO 0 // required for soft serial // Keys -#if defined(PCBX9E) - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_ENTER GPIOF - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_0 // PF.00 -#elif defined(PCBXLITE) - #define KEYS_GPIO_REG_SHIFT GPIOE - #define KEYS_GPIO_PIN_SHIFT LL_GPIO_PIN_8 // PE.08 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_7 // PE.07 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_UP GPIOE - #define KEYS_GPIO_PIN_UP LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_DOWN GPIOE - #define KEYS_GPIO_PIN_DOWN LL_GPIO_PIN_14 // PE.14 - #define KEYS_GPIO_REG_LEFT GPIOE - #define KEYS_GPIO_PIN_LEFT LL_GPIO_PIN_12 // PE.12 - #define KEYS_GPIO_REG_RIGHT GPIOE - #define KEYS_GPIO_PIN_RIGHT LL_GPIO_PIN_13 // PE.13 -#elif defined(RADIO_TPROS) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 -#elif defined(RADIO_FAMILY_JUMPER_T12) && !defined(RADIO_TPRO) && !defined(RADIO_TPROV2) - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_UP GPIOE - #define KEYS_GPIO_PIN_UP LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_DOWN GPIOE - #define KEYS_GPIO_PIN_DOWN LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_LEFT GPIOD - #define KEYS_GPIO_PIN_LEFT LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_RIGHT GPIOD - #define KEYS_GPIO_PIN_RIGHT LL_GPIO_PIN_3 // PD.03 -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_GX12) -#if defined(RADIO_MT12) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 -#else - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 -#endif -#if defined(RADIO_TX12) - #define KEYS_GPIO_REG_EXIT GPIOB - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PB.03 -#else - #define KEYS_GPIO_REG_EXIT GPIOC - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 -#endif -#if defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_GX12) - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PA.10 -#else - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 -#endif - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 -#elif defined(RADIO_T8) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOB - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PB.03 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_10 // PE.10 +#if defined(RADIO_T8) #define KEYS_GPIO_REG_BIND GPIOA #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_10 // PA.10 #elif defined(RADIO_COMMANDO8) - #define KEYS_GPIO_REG_PAGEUP GPIOE - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PAGEDN GPIOE - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_13 // PE.13 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_SYS GPIOD - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_1 // PD.01 - #define KEYS_GPIO_REG_MDL GPIOD - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_0 // PD.00 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_12 // PE.12 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_14 // PE.14 #define KEYS_GPIO_REG_BIND GPIOD #define KEYS_GPIO_PIN_BIND LL_GPIO_PIN_9 // PD.09 -#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_11 // PD.11 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_10 // PD.10 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_12 // PD.12 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_7 // PE.7 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_13 // PA.13 -#elif defined(RADIO_GX12) - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_ENTER GPIOA - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PA.10 - #define KEYS_GPIO_REG_EXIT GPIOC - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_5 // PC.05 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.07 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define KEYS_GPIO_REG_PAGEUP GPIOD - #define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_1 // PE.01 - #define KEYS_GPIO_REG_ENTER GPIOD - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PD.11 - #define KEYS_GPIO_REG_SYS GPIOB - #define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_4 // PB.04 - #define KEYS_GPIO_REG_MDL GPIOE - #define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_TELE GPIOD - #define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PD.02 -#elif defined(PCBX7) - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_10 // PE.10 -#elif defined(PCBX9LITE) - #define KEYS_GPIO_REG_PAGEDN GPIOE - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PE.08 - #define KEYS_GPIO_REG_MENU GPIOE - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PE.07 - #define KEYS_GPIO_REG_EXIT GPIOE - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_9 // PE.09 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_11 // PE.11 -#elif defined(RADIO_X9DP2019) - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PE.12 -#else - #define KEYS_GPIO_REG_MENU GPIOD - #define KEYS_GPIO_PIN_MENU LL_GPIO_PIN_7 // PD.07 - #define KEYS_GPIO_REG_EXIT GPIOD - #define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_2 // PD.02 - #define KEYS_GPIO_REG_PAGEDN GPIOD - #define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_3 // PD.03 - #define KEYS_GPIO_REG_PLUS GPIOE - #define KEYS_GPIO_PIN_PLUS LL_GPIO_PIN_10 // PE.10 - #define KEYS_GPIO_REG_MINUS GPIOE - #define KEYS_GPIO_PIN_MINUS LL_GPIO_PIN_11 // PE.11 - #define KEYS_GPIO_REG_ENTER GPIOE - #define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PE.12 #endif // Rotary Encoder @@ -352,1032 +154,6 @@ #define ROTARY_ENCODER_TIMER_IRQHandler TIM5_IRQHandler #endif -// Trims -#if defined(PCBX9E) - #define TRIMS_GPIO_REG_LHL GPIOG - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_1 // PG.01 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_0 // PG.00 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_13 // PC.13 -#elif defined(PCBXLITE) - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_4 // PC.04 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_5 // PC.05 - #define TRIMS_GPIO_REG_LVU GPIOB - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_0 // PB.00 - #define TRIMS_GPIO_REG_LVD GPIOB - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_1 // PB.01 - #define TRIMS_VIRTUAL_RV - #define TRIMS_VIRTUAL_RH -#elif defined(RADIO_X7ACCESS) - #define TRIMS_GPIO_REG_LHR GPIOD - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_4 // PE.04 -#elif defined(RADIO_FAMILY_T20) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03 - #define TRIMS_GPIO_REG_LVU GPIOD - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14 - #define TRIMS_GPIO_REG_RVD GPIOF - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RHR GPIOF - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01 - #define TRIMS_GPIO_REG_LSD GPIOG - #define TRIMS_GPIO_PIN_LSD LL_GPIO_PIN_9 // PG.09 - #define TRIMS_GPIO_REG_LSU GPIOG - #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_10 // PG.10 - #define TRIMS_GPIO_REG_RSD GPIOD - #define TRIMS_GPIO_PIN_RSD LL_GPIO_PIN_7 // PD.07 - #define TRIMS_GPIO_REG_RSU GPIOG - #define TRIMS_GPIO_PIN_RSU LL_GPIO_PIN_12 // PG.12 -#if defined(RADIO_T20V2) - #define TRIMS_GPIO_REG_T7L GPIOC - #define TRIMS_GPIO_PIN_T7L LL_GPIO_PIN_13 // PC.13 -#else - #define TRIMS_GPIO_REG_T7L GPIOB - #define TRIMS_GPIO_PIN_T7L LL_GPIO_PIN_3 // PB.03 -#endif - #define TRIMS_GPIO_REG_T7R GPIOG - #define TRIMS_GPIO_PIN_T7R LL_GPIO_PIN_15 // PG.15 - #define TRIMS_GPIO_REG_T8D GPIOG - #define TRIMS_GPIO_PIN_T8D LL_GPIO_PIN_13 // PG.13 - #define TRIMS_GPIO_REG_T8U GPIOB - #define TRIMS_GPIO_PIN_T8U LL_GPIO_PIN_4 // PB.04 -#elif defined(RADIO_MT12) - #define TRIMS_GPIO_REG_T1R GPIOE - #define TRIMS_GPIO_PIN_T1R LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_T1L GPIOE - #define TRIMS_GPIO_PIN_T1L LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_T2R GPIOC - #define TRIMS_GPIO_PIN_T2R LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_T2L GPIOC - #define TRIMS_GPIO_PIN_T2L LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_T3R GPIOE - #define TRIMS_GPIO_PIN_T3R LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_T3L GPIOE - #define TRIMS_GPIO_PIN_T3L LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_T4R GPIOE - #define TRIMS_GPIO_PIN_T4R LL_GPIO_PIN_7 // PE.07 - #define TRIMS_GPIO_REG_T4L GPIOE - #define TRIMS_GPIO_PIN_T4L LL_GPIO_PIN_8 // PE.08 - #define TRIMS_GPIO_REG_T5R GPIOE - #define TRIMS_GPIO_PIN_T5R LL_GPIO_PIN_15 // PE.15 - #define TRIMS_GPIO_REG_T5L GPIOE - #define TRIMS_GPIO_PIN_T5L LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_GX12) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 -#elif defined(RADIO_TPROS) - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RVU GPIOD - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_5 // PE.05 -#elif defined(RADIO_BUMBLEBEE) - #define TRIMS_GPIO_REG_LHR GPIOG - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_2 // PG.02 - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_13 // PD.13 - #define TRIMS_GPIO_REG_LVD GPIOG - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PG.03 - #define TRIMS_GPIO_REG_LVU GPIOD - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_14 // PD.14 - #define TRIMS_GPIO_REG_RVD GPIOF - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_2 // PF.02 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHR GPIOF - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PF.01 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVD GPIOC - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_LVU GPIOC - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RVD GPIOE - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PC.01 -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOD - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_0 // PD.00 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 -#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_4 // PE.04 -#elif defined(RADIO_COMMANDO8) - #define TRIMS_GPIO_REG_LHL GPIOD - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_15 // PD.15 - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_6 // PC.06 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_1 // PE.01 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOE - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_0 // PE.00 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_7 // PC.07 - #define TRIMS_GPIO_REG_RHR GPIOE - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_15 // PE.15 -#elif defined(PCBX9LITE) - #define TRIMS_GPIO_REG_LHR GPIOC - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PC.04 - #define TRIMS_GPIO_REG_LHL GPIOC - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_5 // PC.05 - #define TRIMS_GPIO_REG_LVU GPIOB - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_0 // PB.00 - #define TRIMS_GPIO_REG_LVD GPIOB - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_1 // PB.01 - #define TRIMS_GPIO_REG_RVU GPIOE - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_13 // PE.13 - #define TRIMS_GPIO_REG_RHR GPIOD - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_8 // PD.08 - #define TRIMS_GPIO_REG_RVD GPIOE - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_14 // PE.14 - #define TRIMS_GPIO_REG_RHL GPIOD - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_9 // PD.09 -#elif defined(RADIO_X9DP2019) - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_13 // PC.13 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_1 // PC.01 -#else - #define TRIMS_GPIO_REG_LHL GPIOE - #define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_4 // PE.04 - #define TRIMS_GPIO_REG_LHR GPIOE - #define TRIMS_GPIO_PIN_LHR LL_GPIO_PIN_3 // PE.03 - #define TRIMS_GPIO_REG_LVD GPIOE - #define TRIMS_GPIO_PIN_LVD LL_GPIO_PIN_6 // PE.06 - #define TRIMS_GPIO_REG_LVU GPIOE - #define TRIMS_GPIO_PIN_LVU LL_GPIO_PIN_5 // PE.05 - #define TRIMS_GPIO_REG_RVD GPIOC - #define TRIMS_GPIO_PIN_RVD LL_GPIO_PIN_3 // PC.03 - #define TRIMS_GPIO_REG_RHL GPIOC - #define TRIMS_GPIO_PIN_RHL LL_GPIO_PIN_1 // PC.01 - #define TRIMS_GPIO_REG_RVU GPIOC - #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_2 // PC.02 - #define TRIMS_GPIO_REG_RHR GPIOC - #define TRIMS_GPIO_PIN_RHR LL_GPIO_PIN_13 // PC.13 -#endif - -// Switches -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_10 // PD.10 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_14 // PD.14 -#elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_0 // PE.00 -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 -#elif defined(RADIO_GX12) - #define SWITCHES_A_2POS - #define SWITCHES_A_CFS_IDX 7 - #define SWITCHES_GPIO_REG_A - #define SWITCHES_GPIO_PIN_A PCA95XX_PIN_14 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_5 // PC.05 -#elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_A GPIOE - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_A GPIOE - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_3 // PE.03 -#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_A_L GPIOD - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_2 // PD.02 - #define SWITCHES_GPIO_REG_A_H GPIOD - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_1 // PD.01 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_A_INVERTED - #define SWITCHES_GPIO_REG_A GPIOD - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_0 // PD.00 -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define STORAGE_SWITCH_A - #define HARDWARE_SWITCH_A - #define SWITCHES_GPIO_REG_A GPIOC - #define SWITCHES_GPIO_PIN_A LL_GPIO_PIN_13 // PC.13 -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_A_H GPIOE - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_13 // PE.13 -#else - #define SWITCHES_GPIO_REG_A_H GPIOB - #define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_5 // PB.05 - #define SWITCHES_GPIO_REG_A_L GPIOE - #define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_0 // PE.00 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_B_H GPIOG - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_11 // PG.11 - #define SWITCHES_GPIO_REG_B_L GPIOG - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_10 // PG.10 -#elif defined(PCBXLITE) - #define SWITCHES_GPIO_REG_B_L GPIOA - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_6 // PA.06 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 -#elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_13 // PE.13 -#elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_5 // PE.05 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_4 // PE.04 -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_2 // PE.02 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_B_L GPIOA - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_15 // PE.15 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_1 // PE.01 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_B_INVERTED - #define SWITCHES_GPIO_REG_B GPIOE - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_2 // PE.02 -#elif (RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 -#elif defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_B GPIOE - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_B GPIOD - #define SWITCHES_GPIO_PIN_B LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_GX12) - #define SWITCHES_B_3POS - #define SWITCHES_GPIO_REG_B_H - #define SWITCHES_GPIO_PIN_B_H PCA95XX_PIN_10 - #define SWITCHES_GPIO_REG_B_L - #define SWITCHES_GPIO_PIN_B_L PCA95XX_PIN_11 -#elif defined(RADIO_V14) || defined(RADIO_V12) -// ADC based switch -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_B_H GPIOA - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PA.05 -#elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_B_L GPIOB - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_B_H GPIOB - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_5 // PB.05 -#else - #define SWITCHES_GPIO_REG_B_H GPIOE - #define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_B_L GPIOE - #define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_2 // PE.02 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_C_H GPIOF - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_13 // PF.13 - #define SWITCHES_GPIO_REG_C_L GPIOF - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_14 // PF.14 -#elif defined(PCBXLITE) || defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PE.02 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_3 // PE.03 -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_11 // PD.11 -#elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_C_L GPIOE - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PE.02 - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_1 // PE.01 -#elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_C_L GPIOC - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_4 // PC.04 - #define SWITCHES_GPIO_REG_C_H GPIOA - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_6 // PA.06 -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_C GPIOE - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_C GPIOE - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_8 // PE.08 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_C GPIOD - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_0 // PD.00 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_2 // PD.02 - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_1 // PD.01 -#elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_C GPIOC - #define SWITCHES_GPIO_PIN_C LL_GPIO_PIN_13 // PC.13 -#elif defined(RADIO_GX12) - #define SWITCHES_C_3POS - #define SWITCHES_GPIO_REG_C_H - #define SWITCHES_GPIO_PIN_C_H PCA95XX_PIN_5 - #define SWITCHES_GPIO_REG_C_L - #define SWITCHES_GPIO_PIN_C_L PCA95XX_PIN_4 -#elif defined(RADIO_V14) || defined(RADIO_V12) -// ADC based switch -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_C_L GPIOD - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_11 // PD.11 - #if defined(PCBX7ACCESS) - #define SWITCHES_GPIO_REG_C_H GPIOD - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_10 // PD.10 - #else - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_0 // PE.00 - #endif -#else - #define SWITCHES_GPIO_REG_C_H GPIOE - #define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_C_L GPIOA - #define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_5 // PA.05 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_2 // PE.02 -#elif defined(PCBX9DP) - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_13 // PE.13 -#elif defined(PCBXLITE) - #define SWITCHES_GPIO_REG_D_L GPIOB - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_D_H GPIOB - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_5 // PB.05 -#elif defined(RADIO_T8) - #define SWITCHES_GPIO_REG_D GPIOD - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14 -#elif defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D GPIOA - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_5 // PA.05 -#elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PE.08 -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_LR3PRO) - #define SWITCHES_GPIO_REG_D GPIOD - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_14 // PD.14 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_13// PC.13 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_D_L GPIOA - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_15 // PE.15 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_2 // PE.02 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_0 // PE.00 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_1 // PE.01 -#elif defined(RADIO_MT12) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_3 // PC.03 -#elif defined(RADIO_GX12) - #define SWITCHES_D_2POS - #define SWITCHES_D_CFS_IDX 6 - #define SWITCHES_GPIO_REG_D - #define SWITCHES_GPIO_PIN_D PCA95XX_PIN_1 -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define STORAGE_SWITCH_D - #define HARDWARE_SWITCH_D - #define SWITCHES_GPIO_REG_D GPIOE - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_8 // PE.08 -#elif defined(PCBX7) && !defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_2 // PE.02 -#elif defined(PCBX7) && defined(RADIO_COMMANDO8) - #define SWITCHES_GPIO_REG_D_L GPIOE - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_2 // PE.02 -#elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_D GPIOC - #define SWITCHES_GPIO_PIN_D LL_GPIO_PIN_13 // PC.13 -#else - #define SWITCHES_GPIO_REG_D_H GPIOE - #define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_D_L GPIOB - #define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_1 // PB.01 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_7 // PE.07 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_13 // PE.13 -#elif defined(PCBXLITES) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PE.05 -#elif defined(PCBXLITE) - // no SWE but we want to remain compatible with XLiteS -#elif defined(PCBX9LITE) - #define SWITCHES_GPIO_REG_E GPIOA - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PA.05 -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_TX12MK2) - #define SWITCHES_GPIO_REG_E_H GPIOE - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_E_L GPIOE - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_E GPIOC - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PC.05 -#elif defined(RADIO_TPRO) - #define SWITCHES_GPIO_REG_E GPIOG - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_10 // PG.10 -#elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_E GPIOG - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_0 // PG.00 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_E GPIOD - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_E GPIOE - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_8 // PE.08 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_E GPIOD - #define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_3 // PD.03 -#elif defined(RADIO_MT12) - // ADC based switch/pot -#elif defined(RADIO_GX12) - #define SWITCHES_E_3POS - #define SWITCHES_GPIO_REG_E_H - #define SWITCHES_GPIO_PIN_E_H PCA95XX_PIN_12 - #define SWITCHES_GPIO_REG_E_L - #define SWITCHES_GPIO_PIN_E_L PCA95XX_PIN_13 -#elif defined(RADIO_V14) || defined(RADIO_V12) - // ADC based switch -#elif defined(PCBX7) - // no SWE -#else - #define SWITCHES_GPIO_REG_E_H GPIOB - #define SWITCHES_GPIO_PIN_E_H LL_GPIO_PIN_3 // PB.03 - #define SWITCHES_GPIO_REG_E_L GPIOB - #define SWITCHES_GPIO_PIN_E_L LL_GPIO_PIN_4 // PB.04 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_11 // PE.11 -#elif defined(PCBXLITES) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PC.03 -#elif defined(PCBXLITE) - // no SWF but we want to remain compatible with XLiteS -#elif defined(PCBX9LITES) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_3 // PC.03 -#elif defined(PCBX9LITE) -// no SWF -#elif defined(RADIO_ZORRO) || defined(RADIO_BOXER) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PE.01 -#elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_F_L GPIOE - #define SWITCHES_GPIO_PIN_F_L LL_GPIO_PIN_1 // PE.01 - #define SWITCHES_GPIO_REG_F_H GPIOE - #define SWITCHES_GPIO_PIN_F_H LL_GPIO_PIN_2 // PE.02 -#elif defined(RADIO_TX12MK2) - #define SWITCHES_GPIO_REG_F_L GPIOD - #define SWITCHES_GPIO_PIN_F_L LL_GPIO_PIN_14 // PD.14 - #define SWITCHES_GPIO_REG_F_H GPIOE - #define SWITCHES_GPIO_PIN_F_H LL_GPIO_PIN_1 // PE.01 -#elif defined(RADIO_TPROS) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_7 // PE.07 -#elif defined(RADIO_TPRO) - #define SWITCHES_GPIO_REG_F GPIOG - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_9 // PG.09 -#elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_F GPIOG - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_1 // PG.01 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_F GPIOB - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) - #define SWITCHES_GPIO_REG_F GPIOC - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_13// PC.13 -#elif defined(RADIO_FAMILY_T20) - #define SWITCHES_GPIO_REG_F GPIOB - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_5 // PB.05 -#elif defined(RADIO_MT12) - // ADC based switch/pot -#elif defined(RADIO_T8) || defined(RADIO_TLITE) || defined(RADIO_COMMANDO8) || defined(RADIO_LR3PRO) || defined(RADIO_POCKET) - // no SWF -#elif defined(RADIO_T12) - // no SWF -#elif defined(RADIO_GX12) - #define SWITCHES_F_3POS - #define SWITCHES_GPIO_REG_F_H - #define SWITCHES_GPIO_PIN_F_H PCA95XX_PIN_3 - #define SWITCHES_GPIO_REG_F_L - #define SWITCHES_GPIO_PIN_F_L PCA95XX_PIN_2 -#elif defined(RADIO_V14) || defined(RADIO_V12) - // ADC based switch -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_14 // PE.14 -#else - #define SWITCHES_GPIO_REG_F GPIOE - #define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_14 // PE.14 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_G_H GPIOF - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_3 // PF.03 - #define SWITCHES_GPIO_REG_G_L GPIOF - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_4 // PF.04 -#elif defined(PCBX9LITES) - #define SWITCHES_GPIO_REG_G GPIOC - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_2 // PC.02 -#elif defined(RADIO_T12) || defined(RADIO_ZORRO) - #define SWITCHES_GPIO_REG_G GPIOE - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_14 // PE.14 -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_G GPIOG - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_10 // PG.10 -#elif defined(RADIO_TPRO) - // SW1 - #define FUNCTION_SWITCH_1 SG - #define SWITCHES_GPIO_REG_G GPIOG - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_G_CFS_IDX 0 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_G GPIOD - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15// PD.15 - Left trim push -#elif defined(RADIO_FAMILY_T20) - //TRIM left low - #define SWITCHES_GPIO_REG_G GPIOD - #define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_15 // PD.15 -#elif defined(RADIO_GX12) - #define SWITCHES_G_2POS - #define SWITCHES_GPIO_REG_G - #define SWITCHES_GPIO_PIN_G PCA95XX_PIN_15 -#elif defined(PCBX7) || defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_MT12) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) - // no SWG -#else - #define SWITCHES_GPIO_REG_G_H GPIOE - #define SWITCHES_GPIO_PIN_G_H LL_GPIO_PIN_9 // PE.09 - #define SWITCHES_GPIO_REG_G_L GPIOE - #define SWITCHES_GPIO_PIN_G_L LL_GPIO_PIN_8 // PE.08 -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_1 // PF.01 -#elif defined(PCBX9DP) - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_14 // PD.14 -#elif defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_POCKET) - // no SWH -#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) - // no SWH -#elif defined(RADIO_TX12) || defined(RADIO_MT12) -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_V14) || defined(RADIO_V12) -#elif defined(RADIO_TPROV2) - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_9 // PG.09 -#elif defined(RADIO_TPRO) - // SW2 - #define FUNCTION_SWITCH_2 SH - #define SWITCHES_GPIO_REG_H GPIOG - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_H_CFS_IDX 1 -#elif defined(RADIO_BUMBLEBEE) - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00 - Right trim push -#elif defined(RADIO_FAMILY_T20) - //TRIM right low - #define SWITCHES_GPIO_REG_H GPIOF - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_0 // PF.00 -#elif defined(RADIO_TLITE) || defined(RADIO_TPROS) || defined(RADIO_LR3PRO) - // no SWH -#elif defined(RADIO_GX12) - #define SWITCHES_H_2POS - #define SWITCHES_GPIO_REG_H - #define SWITCHES_GPIO_PIN_H PCA95XX_PIN_0 -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_H GPIOD - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_14 // PD.14 -#else - #define SWITCHES_GPIO_REG_H GPIOE - #define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_13 // PE.13 -#endif - -#if defined(RADIO_X9DP2019) - #define SWITCHES_GPIO_REG_I GPIOD - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_10 // PD.10 -#elif defined(PCBX9D) || defined(PCBX9DP) -#endif - -// X7 P400 P401 headers additionnal momentary switches -#if defined(PCBX7ACCESS) - #define SWITCHES_GPIO_REG_I GPIOC - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_13 // PC.13 -#elif defined(RADIO_T8) || defined(RADIO_COMMANDO8) - // no SWI/J -#elif defined(RADIO_TX12) - #define SWITCHES_GPIO_REG_I GPIOE - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_J GPIOD - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_14 // PD.14 -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_V14) || defined(RADIO_V12) - // no headers -#elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) - // no SWI - // no SWJ -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) -// No I/J -#elif defined(RADIO_TPROV2) - // SW1 - #define FUNCTION_SWITCH_1 SI - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_I_CFS_IDX 0 - // SW2 - #define FUNCTION_SWITCH_2 SJ - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_6 // PG.06 - #define SWITCHES_J_CFS_IDX 1 - // SW3 - #define FUNCTION_SWITCH_3 SK - #define SWITCHES_GPIO_REG_K GPIOG - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_5 // PG.05 - #define SWITCHES_K_CFS_IDX 2 - // SW4 - #define FUNCTION_SWITCH_4 SL - #define SWITCHES_GPIO_REG_L GPIOG - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_4 // PG.04 - #define SWITCHES_L_CFS_IDX 3 - // SW5 - #define FUNCTION_SWITCH_5 SM - #define SWITCHES_GPIO_REG_M GPIOG - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_M_CFS_IDX 4 - // SW6 - #define FUNCTION_SWITCH_6 SN - #define SWITCHES_GPIO_REG_N GPIOG - #define SWITCHES_GPIO_PIN_N LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_N_CFS_IDX 5 -#elif defined(RADIO_BUMBLEBEE) - // SW1 - #define FUNCTION_SWITCH_1 SJ - #define SWITCHES_GPIO_REG_J GPIOE - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_J_CFS_IDX 0 - // SW2 - #define FUNCTION_SWITCH_2 SK - #define SWITCHES_GPIO_REG_K GPIOE - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_K_CFS_IDX 1 - // SW3 - #define FUNCTION_SWITCH_3 SL - #define SWITCHES_GPIO_REG_L GPIOE - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_L_CFS_IDX 2 - // SW4 - #define FUNCTION_SWITCH_4 SM - #define SWITCHES_GPIO_REG_M GPIOE - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_M_CFS_IDX 3 - // SW5 - #define FUNCTION_SWITCH_5 SO - #define SWITCHES_GPIO_REG_O GPIOE - #define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_O_CFS_IDX 4 - // SW6 - #define FUNCTION_SWITCH_6 SP - #define SWITCHES_GPIO_REG_P GPIOE - #define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_12 // PE.12 - #define SWITCHES_P_CFS_IDX 5 -#elif defined(RADIO_TPRO) - // SW3 - #define FUNCTION_SWITCH_3 SI - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_5 // PG.05 - #define SWITCHES_I_CFS_IDX 2 - // SW4 - #define FUNCTION_SWITCH_4 SJ - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_4 // PG.04 - #define SWITCHES_J_CFS_IDX 3 - // SW5 - #define FUNCTION_SWITCH_5 SK - #define SWITCHES_GPIO_REG_K GPIOG - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_3 // PG.03 - #define SWITCHES_K_CFS_IDX 4 - // SW6 - #define FUNCTION_SWITCH_6 SL - #define SWITCHES_GPIO_REG_L GPIOG - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_2 // PG.02 - #define SWITCHES_L_CFS_IDX 5 -#elif defined(RADIO_FAMILY_T20) - //TRIM left up - #define SWITCHES_GPIO_REG_I GPIOG - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_11 // PG.11 - //TRIM right up - #define SWITCHES_GPIO_REG_J GPIOG - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_14 // PG.14 -#elif defined(RADIO_GX12) - // I and J are part of function switches bellow -#elif defined(PCBX7) - #define SWITCHES_GPIO_REG_I GPIOC - #define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_13 // PC.13 - #define SWITCHES_GPIO_REG_J GPIOD - #define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_10 // PD.10 -#endif - -#if defined(RADIO_FAMILY_T20) - //SW1 - #define FUNCTION_SWITCH_1 SK - #define SWITCHES_GPIO_REG_K GPIOE - #define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_K_CFS_IDX 0 - //SW2 - #define FUNCTION_SWITCH_2 SL - #define SWITCHES_GPIO_REG_L GPIOE - #define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_L_CFS_IDX 1 - //SW3 - #define FUNCTION_SWITCH_3 SM - #define SWITCHES_GPIO_REG_M GPIOE - #define SWITCHES_GPIO_PIN_M LL_GPIO_PIN_12 // PE.12 - #define SWITCHES_M_CFS_IDX 2 - //SW4 - #define FUNCTION_SWITCH_4 SN - #define SWITCHES_GPIO_REG_N GPIOE - #define SWITCHES_GPIO_PIN_N LL_GPIO_PIN_13 // PE.13 - #define SWITCHES_N_CFS_IDX 3 - //SW5 - #define FUNCTION_SWITCH_5 SO - #define SWITCHES_GPIO_REG_O GPIOE - #define SWITCHES_GPIO_PIN_O LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_O_CFS_IDX 4 - //SW6 - #define FUNCTION_SWITCH_6 SP - #define SWITCHES_GPIO_REG_P GPIOE - #define SWITCHES_GPIO_PIN_P LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_P_CFS_IDX 5 -#endif - -#if defined(RADIO_GX12) - //SW1 - #define SWITCHES_GPIO_REG_I - #define SWITCHES_GPIO_PIN_I PCA95XX_PIN_0 - #define SWITCHES_I_CFS_IDX 0 - #define FUNCTION_SWITCH_1 SI - //SW2 - #define SWITCHES_GPIO_REG_J - #define SWITCHES_GPIO_PIN_J PCA95XX_PIN_1 - #define SWITCHES_J_CFS_IDX 1 - #define FUNCTION_SWITCH_2 SJ - //SW3 - #define SWITCHES_GPIO_REG_K - #define SWITCHES_GPIO_PIN_K PCA95XX_PIN_2 - #define SWITCHES_K_CFS_IDX 2 - #define FUNCTION_SWITCH_3 SK - //SW4 - #define SWITCHES_GPIO_REG_L - #define SWITCHES_GPIO_PIN_L PCA95XX_PIN_3 - #define SWITCHES_L_CFS_IDX 3 - #define FUNCTION_SWITCH_4 SL - //SW5 - #define SWITCHES_GPIO_REG_M - #define SWITCHES_GPIO_PIN_M PCA95XX_PIN_4 - #define SWITCHES_M_CFS_IDX 4 - #define FUNCTION_SWITCH_5 SM - //SW6 - #define SWITCHES_GPIO_REG_N - #define SWITCHES_GPIO_PIN_N PCA95XX_PIN_5 - #define SWITCHES_N_CFS_IDX 5 - #define FUNCTION_SWITCH_6 SN -#endif - -#if defined(PCBX9E) - #define SWITCHES_GPIO_REG_I_H GPIOF - #define SWITCHES_GPIO_PIN_I_H LL_GPIO_PIN_15 // PF.15 - #define SWITCHES_GPIO_REG_I_L GPIOE - #define SWITCHES_GPIO_PIN_I_L LL_GPIO_PIN_14 // PE.14 - #define SWITCHES_GPIO_REG_J_H GPIOG - #define SWITCHES_GPIO_PIN_J_H LL_GPIO_PIN_7 // PG.07 - #define SWITCHES_GPIO_REG_J_L GPIOG - #define SWITCHES_GPIO_PIN_J_L LL_GPIO_PIN_8 // PG.08 - #define SWITCHES_GPIO_REG_K_H GPIOG - #define SWITCHES_GPIO_PIN_K_H LL_GPIO_PIN_13 // PG.13 - #define SWITCHES_GPIO_REG_K_L GPIOG - #define SWITCHES_GPIO_PIN_K_L LL_GPIO_PIN_12 // PG.12 - #define SWITCHES_GPIO_REG_L_H GPIOE - #define SWITCHES_GPIO_PIN_L_H LL_GPIO_PIN_9 // PE.09 - #define SWITCHES_GPIO_REG_L_L GPIOE - #define SWITCHES_GPIO_PIN_L_L LL_GPIO_PIN_8 // PE.08 - #define SWITCHES_GPIO_REG_M_H GPIOE - #define SWITCHES_GPIO_PIN_M_H LL_GPIO_PIN_15 // PE.15 - #define SWITCHES_GPIO_REG_M_L GPIOA - #define SWITCHES_GPIO_PIN_M_L LL_GPIO_PIN_5 // PA.05 - #define SWITCHES_GPIO_REG_N_H GPIOB - #define SWITCHES_GPIO_PIN_N_H LL_GPIO_PIN_3 // PB.03 - #define SWITCHES_GPIO_REG_N_L GPIOB - #define SWITCHES_GPIO_PIN_N_L LL_GPIO_PIN_4 // PB.04 - #define SWITCHES_GPIO_REG_O_H GPIOF - #define SWITCHES_GPIO_PIN_O_H LL_GPIO_PIN_7 // PF.07 - #define SWITCHES_GPIO_REG_O_L GPIOE - #define SWITCHES_GPIO_PIN_O_L LL_GPIO_PIN_10 // PE.10 - #define SWITCHES_GPIO_REG_P_H GPIOF - #define SWITCHES_GPIO_PIN_P_H LL_GPIO_PIN_11 // PF.11 - #define SWITCHES_GPIO_REG_P_L GPIOF - #define SWITCHES_GPIO_PIN_P_L LL_GPIO_PIN_12 // PF.12 - #define SWITCHES_GPIO_REG_Q_H GPIOF - #define SWITCHES_GPIO_PIN_Q_H LL_GPIO_PIN_5 // PF.05 - #define SWITCHES_GPIO_REG_Q_L GPIOF - #define SWITCHES_GPIO_PIN_Q_L LL_GPIO_PIN_6 // PF.06 - #define SWITCHES_GPIO_REG_R_H GPIOB - #define SWITCHES_GPIO_PIN_R_H LL_GPIO_PIN_5 // PB.05 - #define SWITCHES_GPIO_REG_R_L GPIOE - #define SWITCHES_GPIO_PIN_R_L LL_GPIO_PIN_0 // PE.00 -#endif - // 6POS SW #if defined(RADIO_V14) || defined(RADIO_V12) #define SIXPOS_SWITCH_INDEX 6 @@ -1386,107 +162,15 @@ #define SIXPOS_LED_BLUE 0 #endif -// ADC -#if !defined(RADIO_FAMILY_T20) && !defined(RADIO_BUMBLEBEE) - #define ADC_MAIN ADC1 - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_0 - #define ADC_DMA_STREAM LL_DMA_STREAM_4 - #define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#endif - -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_28CYCLES -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT - #if defined(PCBX9E) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define HARDWARE_POT3 - #define HARDWARE_POT4 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_8 // PF.08 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_POT4 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_10 // PF.10 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_9 // PF.09 - #define ADC_GPIO_PIN_SLIDER3 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_SLIDER4 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_SLIDER3) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER4) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_POT4 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 // ADC3_IN6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 // ADC1_IN8 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_15 // ADC1_IN15 - #define ADC_CHANNEL_POT4 LL_ADC_CHANNEL_14 // ADC1_IN14 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_8 // ADC3_IN8 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_7 // ADC3_IN7 - #define ADC_CHANNEL_SLIDER3 LL_ADC_CHANNEL_6 // ADC1_IN6 - #define ADC_CHANNEL_SLIDER4 LL_ADC_CHANNEL_9 // ADC1_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 - #define ADC_EXT ADC3 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_POT1, ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2 } - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(PCBX9DP) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define HARDWARE_POT3 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 #if PCBREV < 2019 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_9 #define ADC_VREF_PREC2 330 #else - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) - #define ADC_CHANNEL_POT3 0 #define ADC_VREF_PREC2 300 #endif - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_POT1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_14 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_15 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #elif defined(PCBXLITE) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 #define PWM_STICKS #define PWM_TIMER TIM5 #define PWM_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) @@ -1494,52 +178,12 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQHandler TIM5_IRQHandler #define PWM_IRQn TIM5_IRQn - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH) - #define STICK_PWM_CHANNEL_LH 0 - #define STICK_PWM_CHANNEL_LV 1 - #define STICK_PWM_CHANNEL_RV 3 - #define STICK_PWM_CHANNEL_RH 2 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_LH) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC1_IN11 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_12 // ADC1_IN12 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #define ADC_VREF_PREC2 330 #elif defined(RADIO_T8) - // No pots - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_COMMANDO8) - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_15 #define ADC_VREF_PREC2 320 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) #define PWM_STICKS #define PWM_TIMER TIM5 #define PWM_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) @@ -1547,380 +191,41 @@ #define PWM_GPIO_AF GPIO_AF2 #define PWM_IRQn TIM5_IRQn #define PWM_IRQHandler TIM5_IRQHandler - #define PWM_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define STICK_PWM_CHANNEL_LH 1 - #define STICK_PWM_CHANNEL_LV 0 - #define STICK_PWM_CHANNEL_RV 2 - #define STICK_PWM_CHANNEL_RH 3 + #define PWM_GPIOA_PINS (LL_GPIO_PIN_0 | LL_GPIO_PIN_1 | LL_GPIO_PIN_2 | LL_GPIO_PIN_3) #elif defined(RADIO_TLITE) || defined(RADIO_LR3PRO) - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS 0 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #elif defined(RADIO_T14) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPROS) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_T12MAX) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC12_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2) - #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT1 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 300 #elif defined(RADIO_BUMBLEBEE) - #define ADC_MAIN ADC3 - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC123_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC123_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_15 // ADC3_IN15 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_9 // ADC3_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_5 // PF.05 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PF.03 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_POT1, ADC_GPIO_PIN_POT2, ADC_GPIO_PIN_BATT) - #define ADC_EXT ADC1 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(RADIO_FAMILY_T20) - #define ADC_MAIN ADC3 - #define ADC_DMA DMA2 - #define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_1 // ADC123_IN1 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_0 // ADC123_IN0 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_3 // PC.03 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_2 // PC.02 - #define ADC_GPIO_PIN_SLIDER3 LL_GPIO_PIN_5 // PF.05 - #define ADC_GPIO_PIN_SLIDER4 LL_GPIO_PIN_3 // PF.03 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_4 // PF.04 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC123_IN11 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_13 // ADC123_IN13 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_12 // ADC123_IN12 - #define ADC_CHANNEL_SLIDER3 LL_ADC_CHANNEL_15 // ADC3_IN15 - #define ADC_CHANNEL_SLIDER4 LL_ADC_CHANNEL_9 // ADC3_IN9 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_IN14 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOF_PINS (ADC_GPIO_PIN_SLIDER3 | ADC_GPIO_PIN_SLIDER4 | ADC_GPIO_PIN_BATT) - #define ADC_EXT ADC1 - #define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BATT } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 300 #elif defined(RADIO_MT12) - #define ADC_GPIO_PIN_STICK_TH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_ST LL_GPIO_PIN_1 // PA.01 - #define ADC_CHANNEL_STICK_TH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_ST LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_POT4 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_5 // ADC12_IN5 - #define ADC_CHANNEL_POT4 LL_ADC_CHANNEL_6 // ADC12_IN6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_TH | ADC_GPIO_PIN_STICK_ST | ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_POT4) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_BATT) #define ADC_VREF_PREC2 330 #elif defined(RADIO_GX12) - // Serial gimbal only - #define ADC_GPIO_PIN_STICK_LH - #define ADC_GPIO_PIN_STICK_LV - #define ADC_GPIO_PIN_STICK_RV - #define ADC_GPIO_PIN_STICK_RH - #define ADC_CHANNEL_STICK_LH - #define ADC_CHANNEL_STICK_LV - #define ADC_CHANNEL_STICK_RV - #define ADC_CHANNEL_STICK_RH - // Analogs - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_3 // PA.03 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_2 // ADC123_IN2 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_3 // ADC123_IN3 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_8 // ADC12_IN8 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_5 // ADC12_IN6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC123_IN10 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SLIDER2) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_SLIDER1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_BATT) #define ADC_VREF_PREC2 330 #elif defined(RADIO_V12) || defined(RADIO_V14) - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC123_IN0 -> ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC123_IN1 -> ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_2 // PC.02 - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 // ADC12_IN8 -> ADC1_IN8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_6 // ADC12_IN6 -> ADC1_IN6 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_12 // ADC123_IN12 -> ADC1_IN12 - #define ADC_GPIO_PIN_SWE LL_GPIO_PIN_7 // PA.07 - #define ADC_GPIO_PIN_SWB LL_GPIO_PIN_5 // PA.05 - #define ADC_GPIO_PIN_SWC LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIO_PIN_SWF LL_GPIO_PIN_5 // PC.05 - #define ADC_CHANNEL_SWE LL_ADC_CHANNEL_7 // ADC12_IN7 -> ADC1_IN7 - #define ADC_CHANNEL_SWB LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5 - #define ADC_CHANNEL_SWC LL_ADC_CHANNEL_10 // ADC123_IN10 -> ADC1_IN10 - #define ADC_CHANNEL_SWF LL_ADC_CHANNEL_15 // ADC12_IN15 -> ADC1_IN15 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_SWE | ADC_GPIO_PIN_SWB) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT1) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SWC | ADC_GPIO_PIN_SWF) - #define ADC_EXT ADC3 - #define ADC_EXT_DMA DMA2 - #define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_2 - #define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 - #define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn - #define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler - #define ADC_EXT_CHANNELS { ADC_CHANNEL_POT3 } - #define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES #define ADC_VREF_PREC2 330 #elif defined(PCBX7) - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_0 // PB.00 -#if !defined(RADIO_POCKET) - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_6 // PA.06 -#endif - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 -#if defined(RADIO_BOXER) || defined(RADIO_V14) || defined(RADIO_V12) - #define HARDWARE_POT3 // 6 POS - #define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_5 // PA.05 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_5 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) - #define ADC_GPIOA_PINS_FS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3) -#else - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT2) -#endif - #define ADC_GPIOB_PINS ADC_GPIO_PIN_POT1 - #define ADC_GPIOC_PINS ADC_GPIO_PIN_BATT - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #elif defined(PCBX9LITE) - #define HARDWARE_POT1 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC1_IN11 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 // ADC1_IN10 #define ADC_VREF_PREC2 300 #else - #define HARDWARE_POT1 - #define HARDWARE_POT2 - #define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_0 // PA.00 - #define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_1 // PA.01 - #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_2 // PA.02 - #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 - #define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_0 // ADC1_IN0 - #define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_1 // ADC1_IN1 - #define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_2 // ADC1_IN2 - #define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_3 // ADC1_IN3 - #define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_6 // PA.06 - #define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_0 // PB.00 - #define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_4 // PC.04 - #define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_5 // PC.05 - #define ADC_GPIO_PIN_BATT LL_GPIO_PIN_0 // PC.00 - #define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_POT1) - #define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) - #define ADC_GPIOC_PINS (ADC_GPIO_PIN_SLIDER1 | ADC_GPIO_PIN_SLIDER2 | ADC_GPIO_PIN_BATT) - #define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_6 - #define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_8 - #define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_9 - #define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_14 - #define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_15 - #define ADC_CHANNEL_BATT LL_ADC_CHANNEL_10 #define ADC_VREF_PREC2 330 #endif -#if defined(PCBX9E) - #if defined(HORUS_STICKS) - #define ADC_DIRECTION { 1,-1,1,-1,-1,-1,-1,1, -1,1,1,-1, -1,-1 } - #else - #define ADC_DIRECTION { 1,1,-1,-1,-1,-1,-1,1, -1,1,1,-1, -1,-1 } - #endif // HORUS_STICKS -#elif defined(PCBX9DP) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,-1, 1,1, 1, 1} -#elif defined(PCBX9D) - #define ADC_DIRECTION {1,-1,1,-1, 1,1,0, 1,1, 1, 1} -#elif defined(RADIO_TX12) - #define ADC_DIRECTION {-1,1,-1,1, -1,-1, 1, 1} -#elif defined(RADIO_TX12MK2) - #define ADC_DIRECTION {-1,1,-1,1, 1,-1} -#elif defined(RADIO_BOXER) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1, 1} -#elif defined(RADIO_ZORRO) - #define ADC_DIRECTION {-1, 1, 1, -1, -1, 1, 1, 1} -#elif defined(RADIO_POCKET) - #define ADC_DIRECTION {-1, 1, 1, -1, -1} -#elif defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) - #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1, 1} -#elif defined(RADIO_T14) - #define ADC_DIRECTION {1, -1, 1, -1, 1, 1, 1} -#elif defined(RADIO_T12MAX) - #define ADC_DIRECTION {-1, 1, -1, 1, 1, 1, 1} -#elif defined(RADIO_BUMBLEBEE) - #define ADC_DIRECTION {1,-1,1,-1, 1,1, 1} -#elif defined(RADIO_FAMILY_T20) - #define ADC_DIRECTION {1,-1,1,-1, -1,1,-1,-1,-1,-1} -#elif defined(RADIO_MT12) - #define ADC_DIRECTION {1,-1, -1,-1, 0, 0, 0, 0} -#elif defined(RADIO_GX12) - #define ADC_DIRECTION {1,1,1,1, -1,-1, 1,-1} -#elif defined(RADIO_V14) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1,1, 0, 1,1,1,1 } -#elif defined(RADIO_V12) - #define ADC_DIRECTION {1,-1,1,-1, -1,-1,1, 0, 1,1,1,1 } -#elif defined(PCBX7) - #define ADC_DIRECTION {-1,1,-1,1, 1,1, 1, 1} -#elif defined(PCBX9LITE) - #define ADC_DIRECTION {-1,1,-1,1, 1,1, 1} -#elif defined(PCBXLITE) - #define ADC_DIRECTION {1,-1,-1,1, -1,1, 1, 1} -#endif - #if defined(RADIO_BOXER) #define DEFAULT_6POS_CALIB {5, 13, 22, 31, 40} #define DEFAULT_6POS_IDX 6 #endif // PWR and LED driver - #if defined(PCBX9LITE) #define PWR_SWITCH_GPIO GPIO_PIN(GPIOA, 7) // PA.07 #define PWR_ON_GPIO GPIO_PIN(GPIOA, 6) // PA.06 diff --git a/radio/src/targets/tx15/CMakeLists.txt b/radio/src/targets/tx15/CMakeLists.txt index 8a31b9d8559..e98c8f7221e 100644 --- a/radio/src/targets/tx15/CMakeLists.txt +++ b/radio/src/targets/tx15/CMakeLists.txt @@ -49,7 +49,6 @@ add_definitions(-DUSE_CUSTOM_EXTI_IRQ) add_definitions(-DUSB_CHARGER) set(FLAVOUR tx15) -add_definitions(-DRADIO_TX15) add_definitions(-DMANUFACTURER_RADIOMASTER) # defines existing internal modules diff --git a/radio/src/targets/tx15/hal.h b/radio/src/targets/tx15/hal.h index 83b70b7ebe3..a6da11febef 100644 --- a/radio/src/targets/tx15/hal.h +++ b/radio/src/targets/tx15/hal.h @@ -70,109 +70,6 @@ TIM17: ROTARY_ENCODER_TIMER #define TIMER_MULT_APB1 2 #define TIMER_MULT_APB2 2 -// Keys -#define KEYS_GPIO_REG_PAGEDN GPIOA -#define KEYS_GPIO_PIN_PAGEDN LL_GPIO_PIN_8 // PA.08 -#define KEYS_GPIO_REG_PAGEUP GPIOG -#define KEYS_GPIO_PIN_PAGEUP LL_GPIO_PIN_7 // PG.07 -#define KEYS_GPIO_REG_SYS GPIOB -#define KEYS_GPIO_PIN_SYS LL_GPIO_PIN_2 // PB.02 -#define KEYS_GPIO_REG_ENTER GPIOG -#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_12 // PG.12 -#define KEYS_GPIO_REG_MDL GPIOE -#define KEYS_GPIO_PIN_MDL LL_GPIO_PIN_3 // PE.03 -#define KEYS_GPIO_REG_EXIT GPIOG -#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_3 // PG.03 -#define KEYS_GPIO_REG_TELE GPIOG -#define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_2 // PG.02 - -// Trims -#define TRIMS_GPIO_REG_LHL -#define TRIMS_GPIO_PIN_LHL - -#define TRIMS_GPIO_REG_LHR -#define TRIMS_GPIO_PIN_LHR - -#define TRIMS_GPIO_REG_LVD -#define TRIMS_GPIO_PIN_LVD - -#define TRIMS_GPIO_REG_LVU -#define TRIMS_GPIO_PIN_LVU - -#define TRIMS_GPIO_REG_RHL -#define TRIMS_GPIO_PIN_RHL - -#define TRIMS_GPIO_REG_RHR -#define TRIMS_GPIO_PIN_RHR - -#define TRIMS_GPIO_REG_RVD -#define TRIMS_GPIO_PIN_RVD - -#define TRIMS_GPIO_REG_RVU -#define TRIMS_GPIO_PIN_RVU - - -// function switches -//SW1 -#define SWITCHES_GPIO_REG_G -#define SWITCHES_GPIO_PIN_G PCA95XX_P0 -#define SWITCHES_G_CFS_IDX 0 -#define FUNCTION_SWITCH_1 SG -//SW2 -#define SWITCHES_GPIO_REG_H -#define SWITCHES_GPIO_PIN_H PCA95XX_P1 -#define SWITCHES_H_CFS_IDX 1 -#define FUNCTION_SWITCH_2 SH -//SW3 -#define SWITCHES_GPIO_REG_I -#define SWITCHES_GPIO_PIN_I PCA95XX_P2 -#define SWITCHES_I_CFS_IDX 2 -#define FUNCTION_SWITCH_3 SI -//SW4 -#define SWITCHES_GPIO_REG_J -#define SWITCHES_GPIO_PIN_J PCA95XX_P3 -#define SWITCHES_J_CFS_IDX 3 -#define FUNCTION_SWITCH_4 SJ -//SW5 -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K PCA95XX_P4 -#define SWITCHES_K_CFS_IDX 4 -#define FUNCTION_SWITCH_5 SK -//SW6 -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L PCA95XX_P5 -#define SWITCHES_L_CFS_IDX 5 -#define FUNCTION_SWITCH_6 SL - -// Extender Switches -#define SWITCHES_A_3POS -#define SWITCHES_GPIO_REG_A_H -#define SWITCHES_GPIO_PIN_A_H PCA95XX_P15 -#define SWITCHES_GPIO_REG_A_L -#define SWITCHES_GPIO_PIN_A_L PCA95XX_P14 -#define SWITCHES_B_3POS -#define SWITCHES_GPIO_REG_B_H -#define SWITCHES_GPIO_PIN_B_H PCA95XX_P13 -#define SWITCHES_GPIO_REG_B_L -#define SWITCHES_GPIO_PIN_B_L PCA95XX_P12 -#define SWITCHES_C_3POS -#define SWITCHES_GPIO_REG_C_H -#define SWITCHES_GPIO_PIN_C_H PCA95XX_P11 -#define SWITCHES_GPIO_REG_C_L -#define SWITCHES_GPIO_PIN_C_L PCA95XX_P10 -#define SWITCHES_D_3POS -#define SWITCHES_GPIO_REG_D_H -#define SWITCHES_GPIO_PIN_D_H PCA95XX_P7 -#define SWITCHES_GPIO_REG_D_L -#define SWITCHES_GPIO_PIN_D_L PCA95XX_P6 -#define SWITCHES_E_2POS -#define SWITCHES_GPIO_REG_E -#define SWITCHES_GPIO_PIN_E PCA95XX_P16 -#define SWITCHES_F_2POS -#define SWITCHES_GPIO_REG_F -#define SWITCHES_GPIO_PIN_F PCA95XX_P4 - - // Expanders #define IO_INT_GPIO GPIO_PIN(GPIOD, 3) #define IO_RESET_GPIO GPIO_PIN(GPIOG, 10) @@ -182,65 +79,8 @@ TIM17: ROTARY_ENCODER_TIMER #endif // ADC -#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_6 // PA.06 -#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PC.03 -#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_4 // PC.04 -#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_5 // PC.05 - -#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_1 // PC.01 POT1 -#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PB.01 POT2 -#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_3 // PH.03 - -#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH) -#define ADC_GPIOB_PINS (ADC_GPIO_PIN_POT2) -#define ADC_GPIOC_PINS (ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_POT1) -#define ADC_GPIOH_PINS (ADC_GPIO_PIN_BATT) - - -#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_3 // ADC12_INP3 -#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_13 // ADC12_INP13 -#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_4 // ADC12_INP4 -#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_8 // ADC12_INP8 - -// Each ADC cannot map more than 8 channels, otherwise it will cause problems -#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_11 // ADC12_INP11 -#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_5 // ADC12_INP5 -#define ADC_CHANNEL_BATT LL_ADC_CHANNEL_14 // ADC3_INP14 -#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC3_INP17 - -#define ADC_MAIN ADC1 -#define ADC_DMA DMA2 -#define ADC_DMA_CHANNEL LL_DMAMUX1_REQ_ADC1 -#define ADC_DMA_STREAM LL_DMA_STREAM_4 -#define ADC_DMA_STREAM_IRQ DMA2_Stream4_IRQn -#define ADC_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler -#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_8CYCLES_5 - -#define ADC_EXT ADC3 -#define ADC_EXT_CHANNELS { ADC_CHANNEL_BATT , ADC_CHANNEL_RTC_BAT } -#define ADC_EXT_DMA DMA2 -#define ADC_EXT_DMA_CHANNEL LL_DMAMUX1_REQ_ADC3 -#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_0 -#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream0_IRQn -#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler -#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_64CYCLES_5 // No hardware oversampling on ADC3 - #define ADC_VREF_PREC2 330 -#define ADC_DIRECTION { \ - 0,-1,0,-1, /* gimbals */ \ - -1,-1, /* pots */ \ - 0,0, /* sliders */ \ - 0, /* vbat */ \ - 0, /* rtc_bat */ \ - 0, /* SWA */ \ - 0, /* SWB */ \ - 0, /* SWC */ \ - 0, /* SWD */ \ - 0, /* SWE */ \ - 0 /* SWF */ \ - } - // Serial gimbal sync port #define HALL_SYNC GPIO_PIN(GPIOH, 11) @@ -261,19 +101,19 @@ TIM17: ROTARY_ENCODER_TIMER #define HAS_SPORT_UPDATE_CONNECTOR() (false) // Telemetry - #define TELEMETRY_SET_INPUT 0 - #define TELEMETRY_TX_GPIO GPIO_PIN(GPIOA, 9) - #define TELEMETRY_RX_GPIO GPIO_UNDEF - #define TELEMETRY_USART USART1 - #define TELEMETRY_USART_IRQn USART1_IRQn - #define TELEMETRY_DMA DMA1 - #define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_7 - #define TELEMETRY_DMA_Channel_TX LL_DMAMUX1_REQ_USART1_TX - #define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream7_IRQn - #define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler - #define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_3 - #define TELEMETRY_DMA_Channel_RX LL_DMAMUX1_REQ_USART1_RX - #define TELEMETRY_USART_IRQHandler USART1_IRQHandler +#define TELEMETRY_SET_INPUT 0 +#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOA, 9) +#define TELEMETRY_RX_GPIO GPIO_UNDEF +#define TELEMETRY_USART USART1 +#define TELEMETRY_USART_IRQn USART1_IRQn +#define TELEMETRY_DMA DMA1 +#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_7 +#define TELEMETRY_DMA_Channel_TX LL_DMAMUX1_REQ_USART1_TX +#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream7_IRQn +#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler +#define TELEMETRY_DMA_Stream_RX LL_DMA_STREAM_3 +#define TELEMETRY_DMA_Channel_RX LL_DMAMUX1_REQ_USART1_RX +#define TELEMETRY_USART_IRQHandler USART1_IRQHandler // Software IRQ (Prio 5 -> FreeRTOS compatible) #define TELEMETRY_USE_CUSTOM_EXTI diff --git a/radio/src/tests/gtests.cpp b/radio/src/tests/gtests.cpp index 5f53be78b0f..f646e361453 100644 --- a/radio/src/tests/gtests.cpp +++ b/radio/src/tests/gtests.cpp @@ -122,20 +122,8 @@ class TersePrinter : public EmptyTestEventListener { int32_t lastAct = 0; -uint16_t simu_get_analog(uint8_t idx) -{ - return 0; -} - -void simuQueueAudio(const uint8_t*, uint32_t) {} - -void fsLedOn(uint8_t idx) -{ -} - -void fsLedOff(uint8_t idx) -{ -} +uint16_t simuGetAnalog(uint8_t) { return 0; } +void simuQueueAudio(const uint8_t *, uint32_t) {} static char _stringResult[200]; diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index af213581bed..74f3bb74d40 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -25,6 +25,7 @@ #include #include "edgetx.h" +#include "simulib.h" #include "model_init.h" #include "switches.h" #include "hal/switch_driver.h" diff --git a/radio/src/tests/lcd.cpp b/radio/src/tests/lcd.cpp index 03a96092cb7..5bb577ad8b0 100644 --- a/radio/src/tests/lcd.cpp +++ b/radio/src/tests/lcd.cpp @@ -25,7 +25,7 @@ #include #if !defined(COLORLCD) -#include "simpgmspace.h" +#include "simulib.h" #include "simulcd.h" #include "common/stdlcd/draw_functions.h" diff --git a/radio/src/tests/lcd_480x272.cpp b/radio/src/tests/lcd_480x272.cpp index 880699bc3b0..5ada643b8cc 100644 --- a/radio/src/tests/lcd_480x272.cpp +++ b/radio/src/tests/lcd_480x272.cpp @@ -24,7 +24,7 @@ #if defined(COLORLCD) -#include "simpgmspace.h" +#include "simulib.h" #include "bitmaps.h" #define STB_IMAGE_WRITE_IMPLEMENTATION diff --git a/radio/src/thirdparty/Lua/src/luaconf.h b/radio/src/thirdparty/Lua/src/luaconf.h index 158f6408106..4f679b03237 100644 --- a/radio/src/thirdparty/Lua/src/luaconf.h +++ b/radio/src/thirdparty/Lua/src/luaconf.h @@ -20,6 +20,10 @@ // #include "user_config.h" +#if __wasm__ + #define l_signalT long +#endif + // prevent localeconv() #define getlocaledecpoint() ('.') diff --git a/radio/util/hw_defs/README.md b/radio/util/hw_defs/README.md index 3b34f0a38e6..a053402bf78 100644 --- a/radio/util/hw_defs/README.md +++ b/radio/util/hw_defs/README.md @@ -41,3 +41,21 @@ Once the format is stable enough and does not require editing each target separa to add or rename each attribute, the JSON definition for each target will be generated and added to version control. Then the Python scripts will obsoleted and removed. The target's `hal.h` should be cleaned-up as well with the definitions present in JSON removed. + +## Removing parsed defines from `hal.h` + +As we now have JSON files for some parts of the hardware definitions, it would be +good to remove these redundant definitions and use only the JSON files. + +For a smooth transition, the removal and checks should happen as automated as possible. + +This includes: +- logging which defines are used from `hal.h`: [logging_dict.py](logging_dict.py) +- the output is then sorted and duplicates removed: +``` +./tools/generate-hw-defs.sh 2>hw_defs.log +cat hw_defs.log | sort -u | grep -v -E 'None|LL_GPIO|PWM_STICKS' > hw_defs.sorted +rm hw_defs.log +``` +- `hw_defs.sorted` can then be used to remove the definitions with [define_remover.py](../../../define_remover.py). +- a report about the usage of the removed definition is generated with [define_usage_checker.py](../../../define_usage_checker.py). diff --git a/radio/util/hw_defs/generator.py b/radio/util/hw_defs/generator.py index 616ed5302c9..a9ba622bfae 100644 --- a/radio/util/hw_defs/generator.py +++ b/radio/util/hw_defs/generator.py @@ -1,101 +1,77 @@ - import json import jinja2 import legacy_names import json_index +from models import KeyEnum + MAIN_CONTROL_LUT = { # 2 Gimbal radios - "LH": { "str": "Rud", "local": "STR_STICK_NAMES0" }, - "LV": { "str": "Ele", "local": "STR_STICK_NAMES1" }, - "RV": { "str": "Thr", "local": "STR_STICK_NAMES2" }, - "RH": { "str": "Ail", "local": "STR_STICK_NAMES3" }, + "LH": {"str": "Rud", "local": "STR_STICK_NAMES0"}, + "LV": {"str": "Ele", "local": "STR_STICK_NAMES1"}, + "RV": {"str": "Thr", "local": "STR_STICK_NAMES2"}, + "RH": {"str": "Ail", "local": "STR_STICK_NAMES3"}, # Surface radios - "ST": { "str": "ST", "local": "STR_SURFACE_NAMES0" }, - "TH": { "str": "TH", "local": "STR_SURFACE_NAMES1" }, + "ST": {"str": "ST", "local": "STR_SURFACE_NAMES0"}, + "TH": {"str": "TH", "local": "STR_SURFACE_NAMES1"}, } -# MUST be the same order as 'EnumKeys' -KEYS_LUT = [ - "KEY_MENU", - "KEY_EXIT", - "KEY_ENTER", - - "KEY_PAGEUP", - "KEY_PAGEDN", - - "KEY_UP", - "KEY_DOWN", - - "KEY_LEFT", - "KEY_RIGHT", - - "KEY_PLUS", - "KEY_MINUS", - - "KEY_MODEL", - "KEY_TELE", - "KEY_SYS", - - "KEY_SHIFT", - "KEY_BIND", -] - # def eprint(*args, **kwargs): # from sys import stderr # print(*args, file=stderr, **kwargs) -def is_ext_input(input): - if input.get('type') != 'FLEX': +def is_ext_input(input): + if input.get("type") != "FLEX": return False - name = input.get('name') - if name and name.startswith('EXT'): + name = input.get("name") + if name and name.startswith("EXT"): return True return False def generate_from_template(json_filename, template_filename, target): - with open(json_filename) as json_file: with open(template_filename) as template_file: - root_obj = json.load(json_file) - adc_inputs = root_obj.get('adc_inputs') + adc_inputs = root_obj.get("adc_inputs") adc_index = json_index.build_adc_index(adc_inputs) adc_gpios = json_index.build_adc_gpio_port_index(adc_inputs) - switches = root_obj.get('switches') + switches = root_obj.get("switches") switch_gpios = json_index.build_switch_gpio_port_index(switches) - keys = root_obj.get('keys') + keys = root_obj.get("keys") key_gpios = json_index.build_key_gpio_port_index(keys) - trims = root_obj.get('trims') + trims = root_obj.get("trims") trim_gpios = json_index.build_trim_gpio_port_index(trims) - + legacy_inputs = legacy_names.inputs_by_target(target) - - env = jinja2.Environment( - lstrip_blocks=True, - trim_blocks=True - ) - env.tests['ext_input'] = is_ext_input + env = jinja2.Environment(lstrip_blocks=True, trim_blocks=True) + + env.tests["ext_input"] = is_ext_input template_str = template_file.read() template = env.from_string(template_str) - print(template.render(root_obj, - adc_index=adc_index, - adc_gpios=adc_gpios, - switch_gpios=switch_gpios, - key_gpios=key_gpios, - trim_gpios=trim_gpios, - legacy_inputs=legacy_inputs, - main_labels=MAIN_CONTROL_LUT, - key_index=KEYS_LUT)) + key_index = list([str(i) for i in KeyEnum]) + + print( + template.render( + root_obj, + adc_index=adc_index, + adc_gpios=adc_gpios, + switch_gpios=switch_gpios, + key_gpios=key_gpios, + trim_gpios=trim_gpios, + legacy_inputs=legacy_inputs, + main_labels=MAIN_CONTROL_LUT, + key_index=key_index, + ) + ) diff --git a/radio/util/hw_defs/hal_adc.py b/radio/util/hw_defs/hal_adc.py deleted file mode 100644 index 52aaef29047..00000000000 --- a/radio/util/hw_defs/hal_adc.py +++ /dev/null @@ -1,286 +0,0 @@ -from pot_config import pot_cfg_by_target - -MAX_POTS = 4 -MAX_SLIDERS = 4 -MAX_EXTS = 4 -MAX_RAWS = 4 - - -def eprint(*args, **kwargs): - from sys import stderr - print(*args, file=stderr, **kwargs) - -class ADCInput: - - TYPE_STICK = 'STICK' - TYPE_FLEX = 'FLEX' - TYPE_SWITCH = 'SWITCH' - TYPE_RAW = 'RAW' - # TYPE_BATT = 'BATT' - - def __init__(self, name, adc_input_type, adc, gpio, pin, channel): - self.name = name - self.type = adc_input_type - self.adc = adc - self.gpio = gpio - self.pin = pin - self.channel = channel - -class SPI_ADCInput: - - def __init__(self, name, adc_input_type, channel): - self.name = name - self.type = adc_input_type - self.adc = 'SPI' - self.channel = channel - -class ADC: - def __init__(self, name, adc): - self.name = name - self.adc = adc - -class MouseName: - AXIS = ['x','y'] - def format(self, idx): - axis = self.AXIS[idx - 1] - return f'JS{axis}' - -def AZ_seq(): - return [chr(i) for i in range(ord('A'), ord('Z') + 1)] - -class ADCInputParser: - - ADC_MAIN = 'MAIN' - ADC_EXT = 'EXT' - - ADC_INPUTS = [ - { - 'range': ['LH','LV','RV','RH','ST','TH'], - 'type': ADCInput.TYPE_STICK, - 'suffix': 'STICK_{}', - 'name': '{}', - }, - { - 'range': range(1, MAX_POTS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'POT{}', - 'name': 'P{}', - }, - { - 'range': range(1, MAX_SLIDERS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'SLIDER{}', - 'name': 'SL{}', - }, - { - 'range': range(1, MAX_EXTS + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'EXT{}', - 'name': 'EXT{}', - }, - { - 'range': range(1, MAX_RAWS + 1), - 'type': ADCInput.TYPE_RAW, - 'suffix': 'RAW{}', - 'name': 'RAW{}', - }, - { - 'range': range(1, 2 + 1), - 'type': ADCInput.TYPE_FLEX, - 'suffix': 'MOUSE{}', - 'name': MouseName(), - }, - { - 'type': 'VBAT', - 'name': 'VBAT', - 'suffix': 'BATT', - }, - { - 'type': 'RTC_BAT', - 'name': 'RTC_BAT', - 'suffix': 'RTC_BAT', - }, - { - 'range': AZ_seq(), - 'type': ADCInput.TYPE_SWITCH, - 'suffix': 'SW{}', - 'name': 'SW{}', - }, - ] - - - def __init__(self, target, hw_defs, labels): - self.target = target - self.hw_defs = hw_defs - self.labels = labels - self.regs = self._parse_regs() - self.dirs = self._parse_dirs() - self.adcs = [] - - def _parse_regs(self): - - regs = {} - for reg in AZ_seq(): - reg = f'GPIO{reg}' - pins_def = f'ADC_{reg}_PINS' - if pins_def in self.hw_defs: - regs[reg] = self.hw_defs[pins_def] - - return regs - - def _parse_dirs(self): - - ret = [] - dirs = self.hw_defs.get('ADC_DIRECTION') or '' - if dirs: - dirs = dirs.strip('{} ').split(',') - # eprint(dirs) - for i in dirs: - ret.append(int(i)) - - return ret - - def _find_adc(self, channel_def): - - if (self.ext_list is None) or (channel_def not in self.ext_list): - return self.ADC_MAIN - else: - return self.ADC_EXT - - def _find_gpio(self, pin): - gpio = None - for reg, pins_def in self.regs.items(): - if pins_def and (pin in pins_def): - gpio = reg - - return gpio - - - def _parse_adc(self, name, periph, prefix): - - adc_periph = self.hw_defs.get(periph) - if not adc_periph: - return None - - adc = ADC(name, adc_periph) - adc.dma = self.hw_defs.get(f'{prefix}_DMA') - if adc.dma: - adc.dma_channel = self.hw_defs[f'{prefix}_DMA_CHANNEL'] - adc.dma_stream = self.hw_defs[f'{prefix}_DMA_STREAM'] - adc.dma_stream_irq = self.hw_defs[f'{prefix}_DMA_STREAM_IRQ'] - adc.dma_stream_irq_handler = self.hw_defs[f'{prefix}_DMA_STREAM_IRQHandler'] - - adc.sample_time = self.hw_defs[f'{prefix}_SAMPTIME'] - return adc - - def _parse_adcs(self): - - adcs = [] - - adc_spi = self.hw_defs.get('ADC_SPI') - if adc_spi: - #eprint('## Found SPI ADC') - adc = ADC('SPI', adc_spi) - adc.gpio_pin_miso = self.hw_defs['ADC_SPI_GPIO_PIN_MISO'] - adc.gpio_pin_mosi = self.hw_defs['ADC_SPI_GPIO_PIN_MOSI'] - adc.gpio_pin_sck = self.hw_defs['ADC_SPI_GPIO_PIN_SCK'] - adc.gpio_pin_cs = self.hw_defs['ADC_SPI_GPIO_PIN_CS'] - adcs.append(adc) - - adc_main = self._parse_adc('MAIN', 'ADC_MAIN', 'ADC') - if adc_main: - adcs.append(adc_main) - - self.ext_list = None - adc_ext = self._parse_adc('EXT', 'ADC_EXT', 'ADC_EXT') - if adc_ext: - self.ext_list = self.hw_defs['ADC_EXT_CHANNELS'] - adcs.append(adc_ext) - - return adcs - - def _parse_input_type(self, input_type, name, suffix): - - gpio = None - pin = None - d = 1 # non-inverted - - # search for SPI input first - spi_def = f'ADC_SPI_{suffix}' - if spi_def in self.hw_defs: - #eprint('## Found SPI ADC Input:', spi_def) - channel = self.hw_defs[spi_def] - return SPI_ADCInput(name, input_type, channel) - - if name != 'RTC_BAT': - pin_def = f'ADC_GPIO_PIN_{suffix}' - pin = self.hw_defs[pin_def] - gpio = self._find_gpio(pin_def) - - # check if 'pin' is maybe an alias - alias = self.hw_defs.get(pin) - if alias is not None: - alias_gpio = self._find_gpio(pin) - gpio = alias_gpio if alias_gpio else gpio - pin = alias - - channel_def = f'ADC_CHANNEL_{suffix}' - channel = self.hw_defs[channel_def] - adc = self._find_adc(channel_def) - - return ADCInput(name, input_type, adc, gpio, pin, channel) - - def _add_input(self, adc_input): - if adc_input is not None: - idx = len(self.inputs) - if adc_input.type == 'STICK': - if 'PWM_STICKS' in self.hw_defs: - ch = self.hw_defs.get(f'STICK_PWM_CHANNEL_{adc_input.name}') - adc_input.pwm_channel = idx if ch is None else ch - if adc_input.type != 'VBAT' and adc_input.type != 'RTC_BAT': - d = self.dirs[idx] - if d < 0: - adc_input.inverted = True - if adc_input.type == 'FLEX': - input_labels = self.labels[adc_input.name] - adc_input.label = input_labels.get('label') - adc_input.short_label = input_labels.get('short_label') - cfg = pot_cfg_by_target(self.target,adc_input.name) - if cfg: - adc_input.default = cfg.get('default') - - self.inputs.append(adc_input) - - def parse_inputs(self): - - self.adcs = self._parse_adcs() - self.inputs = [] - - for adc_input in self.ADC_INPUTS: - input_type = adc_input['type'] - input_range = adc_input.get('range') - - if input_range is not None: - for i in input_range: - name = adc_input['name'].format(i) - suffix = adc_input['suffix'].format(i) - try: - self._add_input(self._parse_input_type(input_type, name, suffix)) - except KeyError: - pass - else: - # type, name, suffix - name = adc_input['name'] - suffix = adc_input['suffix'] - try: - self._add_input(self._parse_input_type(input_type, name, suffix)) - except KeyError: - pass - - return { 'adcs': self.adcs, 'inputs': self.inputs } - - def find_input(self, name): - for adc_input in self.inputs: - if adc_input.name == name: - return adc_input - return None diff --git a/radio/util/hw_defs/hal_json.py b/radio/util/hw_defs/hal_json.py index b803ba4f8f1..1a43695eadc 100644 --- a/radio/util/hw_defs/hal_json.py +++ b/radio/util/hw_defs/hal_json.py @@ -1,44 +1,38 @@ - import re import sys -import json - -from hal_switches import Switch, parse_switches -from hal_adc import ADCInput, SPI_ADCInput, ADC, ADCInputParser -from hal_keys import Key, Trim, parse_trims, parse_keys -import legacy_names # # Return a file handle or STDIN # def open_file(filename): - - if filename and not filename == '-': + if filename and not filename == "-": return open(filename) else: return sys.stdin + # # Read lines of defines into a dictionary # def parse_hw_defs(filename): - hw_defs = {} with open_file(filename) as file: for line in file.readlines(): - m = re.match(r'#define ([^\s]*)\s*(.*)', line.rstrip()) - name = m.group(1) - value = m.group(2) - if value.isnumeric(): - value = int(value) - elif not value: - value = None - hw_defs[name] = value + m = re.match(r"#define ([^\s]*)\s*(.*)", line.rstrip()) + if m: + name = m.group(1) + value = m.group(2) + if value.isnumeric(): + value = int(value) + elif not value: + value = None + hw_defs[name] = value return hw_defs + def prune_dict(d): # ret = {} # for k, v in d.items(): @@ -47,47 +41,32 @@ def prune_dict(d): # return ret return d -class DictEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, Switch): - return prune_dict(obj.__dict__) - if isinstance(obj, ADCInput): - return prune_dict(obj.__dict__) - if isinstance(obj, SPI_ADCInput): - return prune_dict(obj.__dict__) - if isinstance(obj, ADC): - return prune_dict(obj.__dict__) - if isinstance(obj, Trim): - return prune_dict(obj.__dict__) - if isinstance(obj, Key): - return prune_dict(obj.__dict__) +# class DictEncoder(json.JSONEncoder): +# def default(self, o): +# if isinstance(o, Switch): +# return prune_dict(o.__dict__) +# if isinstance(o, ADCInput): +# return prune_dict(o.__dict__) +# if isinstance(o, SPI_ADCInput): +# return prune_dict(o.__dict__) +# if isinstance(o, ADC): +# return prune_dict(o.__dict__) +# if isinstance(o, Trim): +# return prune_dict(o.__dict__) +# if isinstance(o, Key): +# return prune_dict(o.__dict__) + +# # Let the base class default method raise the TypeError +# return json.JSONEncoder.default(self, o) - # Let the base class default method raise the TypeError - return json.JSONEncoder.default(self, obj) # # Parse HAL defines into JSON # def parse_defines(filename, target): - - hw_defs = parse_hw_defs(filename) - out_defs = {} - - # parse ADC first, we might have switches using ADC - legacy_inputs = legacy_names.inputs_by_target(target) - adc_parser = ADCInputParser(target,hw_defs,legacy_inputs) - adc_inputs = adc_parser.parse_inputs() - out_defs["adc_inputs"] = adc_inputs - - switches = parse_switches(target, hw_defs, adc_parser) - out_defs["switches"] = switches - - keys = parse_keys(target, hw_defs) - out_defs["keys"] = keys - - trims = parse_trims(hw_defs) - out_defs["trims"] = trims - - print(json.dumps(out_defs, cls=DictEncoder, indent=2)) - + # hw_defs = LoggingDict(parse_hw_defs(filename)) + # out_defs = {} + # + # print(json.dumps(out_defs, cls=DictEncoder, indent=2)) + pass diff --git a/radio/util/hw_defs/hal_keys.py b/radio/util/hw_defs/hal_keys.py deleted file mode 100644 index 8a00b0a311a..00000000000 --- a/radio/util/hw_defs/hal_keys.py +++ /dev/null @@ -1,226 +0,0 @@ - -# Trims: -# TRIMS_GPIO_REG_[trim] -# TRIMS_GPIO_PIN_[trim] -# -# where 'trim' is one of: -# -# (-) (+) -# 'LHL', 'LHR', -# 'LVD', 'LVU', -# 'RVD', 'RVU', -# 'RHL', 'RHR', -# 'LSD', 'LSU', T4 -# 'RSD', 'RSU', T5 - -TRIMS = [ - # Air - { "name": "T1", "dec": "LHL", "inc": "LHR", "input": "LH" }, - { "name": "T2", "dec": "LVD", "inc": "LVU", "input": "LV" }, - { "name": "T3", "dec": "RVD", "inc": "RVU", "input": "RV" }, - { "name": "T4", "dec": "RHL", "inc": "RHR", "input": "RH" }, - { "name": "T5", "dec": "LSD", "inc": "LSU" }, - { "name": "T6", "dec": "RSD", "inc": "RSU" }, - { "name": "T7", "dec": "T7L", "inc": "T7R" }, - { "name": "T8", "dec": "T8D", "inc": "T8U" }, - # Surface - { "name": "T1", "dec": "T1L", "inc": "T1R", "input": "ST" }, - { "name": "T2", "dec": "T2L", "inc": "T2R", "input": "TH" }, - { "name": "T3", "dec": "T3L", "inc": "T3R"}, - { "name": "T4", "dec": "T4L", "inc": "T4R"}, - { "name": "T5", "dec": "T5L", "inc": "T5R" }, - { "name": "T6", "dec": "T6D", "inc": "T6U" }, -] - -KEYS = [ - { "name": "MENU", "key": "KEY_MENU", "label": "MENU" }, - { "name": "EXIT", "key": "KEY_EXIT", "label": "EXIT" }, - { "name": "ENTER", "key": "KEY_ENTER", "label": "Enter" }, - - { "name": "PAGEUP", "key": "KEY_PAGEUP", "label": "PAGE<" }, - { "name": "PAGEDN", "key": "KEY_PAGEDN", "label": "PAGE>" }, - - { "name": "UP", "key": "KEY_UP", "label": "Up" }, - { "name": "DOWN", "key": "KEY_DOWN", "label": "Down" }, - - { "name": "LEFT", "key": "KEY_LEFT", "label": "Left" }, - { "name": "RIGHT", "key": "KEY_RIGHT", "label": "Right" }, - - { "name": "PLUS", "key": "KEY_PLUS", "label": "(+)" }, - { "name": "MINUS", "key": "KEY_MINUS", "label": "(-)" }, - - { "name": "MDL", "key": "KEY_MODEL", "label": "MDL" }, - { "name": "TELE", "key": "KEY_TELE", "label": "TELE" }, - { "name": "SYS", "key": "KEY_SYS", "label": "SYS" }, - - { "name": "SHIFT", "key": "KEY_SHIFT", "label": "Shift" } -] - -KEY_LABELS = [ - { - "targets": {"boxer", "f16", "mt12", "gx12", "pocket", "tx12", "tx12mk2", "tx16s", "v16", "zorro"}, - "keys": { - "EXIT": { "label": "RTN" } - } - }, - { - "targets": {"bumblebee", "t12max", "t14", "t15", "t20", "t20v2", "tpro", "tpros", "tprov2"}, - "keys": { - "PAGEDN": { "label": "" }, - } - }, - { - "targets": {"x7", "x7access", "x9e"}, - "keys": { - "PAGEDN": { "label": "PAGE" }, - } - }, - { - "targets": {"t16", "t18"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEDN": {"label": "PAGE" } - } - }, - { - "targets": {"x9d", "x9d+", "x9d+2019"}, - "keys": { - "ENTER": { "label": "ENT" }, - "PAGEDN": { "label": "PAGE" } - } - }, - { - "targets": {"x10", "x10express"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEDN": { "label": "PgUp/Dn" } - } - }, - { - "targets": {"x12s"}, - "keys": { - "EXIT": { "label": "RTN" }, - "PAGEUP": { "label": "PgUp" }, - "PAGEDN": { "label": "PgDn" } - } - }, - { - "targets": {"t8"}, - "keys": { - "EXIT": { "label": "RTN" }, - "ENTER": { "label": "ENT" } - } - }, - { - "targets": {"tlite"}, - "keys": { - "EXIT": { "label": "RTN" }, - "ENTER": { "label": "ENT" }, - "LEFT": { "label": "Left/SYS" }, - "RIGHT": { "label": "Right/MDL" } - } - }, - { - "targets": {"commando8"}, - "keys": { - "EXIT": { "label": "BCK" }, - "PAGEUP": { "label": "Left" }, - "PAGEDN": { "label": "Right" }, - "PLUS": { "label": "Up" }, - "MINUS": { "label": "Down" }, - "MENU": { "label": "Menu" } - } - }, - { - "targets": {"st16"}, - "keys": { - "PAGEDN": { "label": "MENU" } - } - }, -] - -class Key: - - def __init__(self, gpio, pin): - self.gpio = gpio - self.pin = pin - self.active_low = True - -class Trim: - - def __init__(self, name, dec, inc): - self.name = name - if dec and dec.gpio and inc and inc.gpio: - self.dec = dec - self.inc = inc - self.active_low = True - -def get_trim_switch(hw_defs, tag): - - gpio = f'TRIMS_GPIO_REG_{tag}' - pin = f'TRIMS_GPIO_PIN_{tag}' - - if (gpio in hw_defs) and (pin in hw_defs): - key = Key(hw_defs[gpio], hw_defs[pin]) - if 'TRIMS_GPIO_ACTIVE_HIGH' in hw_defs: - key.active_low = False - return key - - return None - - -def parse_trims(hw_defs): - - trims = [] - for t in TRIMS: - - name = t['name'] - dec = get_trim_switch(hw_defs, t['dec']) - inc = get_trim_switch(hw_defs, t['inc']) - - if dec and inc: - trims.append(Trim(name, dec, inc)) - - elif t.get('input'): - input = t['input'] - if f'TRIMS_VIRTUAL_{input}' in hw_defs: - trims.append(Trim(name, None, None)) - - return trims - - -def key_label(target, name): - for d in KEY_LABELS: - if target in d['targets']: - keys = d.get('keys') - key = keys.get(name) - if key: - return key['label'] - - return None - - -def parse_keys(target, hw_defs): - - keys = [] - - for k in KEYS: - - name = k['name'] - gpio = f'KEYS_GPIO_REG_{name}' - pin = f'KEYS_GPIO_PIN_{name}' - - if (gpio in hw_defs) and (pin in hw_defs): - key = Key(hw_defs[gpio], hw_defs[pin]) - key.key = k['key'] - key.name = name - label = key_label(target, name) - if label: - key.label = label - else: - key.label = k['label'] - if 'KEYS_GPIO_ACTIVE_HIGH' in hw_defs: - key.active_low = False - keys.append(key) - - return keys diff --git a/radio/util/hw_defs/hal_switches.py b/radio/util/hw_defs/hal_switches.py deleted file mode 100644 index 7d1a40fb511..00000000000 --- a/radio/util/hw_defs/hal_switches.py +++ /dev/null @@ -1,140 +0,0 @@ -from switch_config import switch_cfg_by_target - -class Switch: - TYPE_2POS = "2POS" - TYPE_3POS = "3POS" - TYPE_ADC = "ADC" - - def __init__(self, name, sw_type, flags): - self.name = name - self.type = sw_type - self.flags = flags - self.inverted = False - self.default = None - self.display = None - - -class Switch2POS(Switch): - def __init__(self, name, gpio, pin, flags=0): - super(Switch2POS, self).__init__(name, Switch.TYPE_2POS, flags) - self.gpio = gpio - self.pin = pin - - -class Switch3POS(Switch): - def __init__(self, name, gpio_high, pin_high, gpio_low, pin_low, flags=0): - super(Switch3POS, self).__init__(name, Switch.TYPE_3POS, flags) - self.gpio_high = gpio_high - self.pin_high = pin_high - self.gpio_low = gpio_low - self.pin_low = pin_low - - -class SwitchADC(Switch): - def __init__(self, name, adc_input, flags=0): - super(SwitchADC, self).__init__(name, Switch.TYPE_ADC, flags) - self.adc_input = adc_input - - -class SwitchCustom(Switch): - def __init__(self, name, type, flags=0): - super(SwitchCustom, self).__init__(name, type, flags) - - -def AZ_seq(): - return [chr(i) for i in range(ord("A"), ord("Z") + 1)] - - -def eprint(*args, **kwargs): - from sys import stderr - - print(*args, file=stderr, **kwargs) - - -def prefixsearch(dictionary, prefix): - for k in dictionary.keys(): - if k.startswith(prefix): - return k[len(prefix) :] - - return None - - -# switches from A to Z -def parse_switches(target, hw_defs, adc_parser): - switches = [] - - def find_switch(name): - for sw in switches: - if name == sw.name: - return sw - return None - - for s in AZ_seq(): - name = f"S{s}" - - reg = f"SWITCHES_GPIO_REG_{s}" - reg_high = f"{reg}_H" - reg_low = f"{reg}_L" - - pin = f"SWITCHES_GPIO_PIN_{s}" - pin_high = f"{pin}_H" - pin_low = f"{pin}_L" - - inverted = f"SWITCHES_{s}_INVERTED" - - adc_input_name = f"SW{s}" - custom = f"SWITCHES_{s}_" - - cfs_idx = f"SWITCHES_{s}_CFS_IDX" - - switch = None - if reg in hw_defs: - # 2POS switch - reg = hw_defs[reg] - pin = hw_defs[pin] - switch = Switch2POS(name, reg, pin) - elif (reg_high in hw_defs) and (reg_low in hw_defs): - # 3POS switch - reg_high = hw_defs[reg_high] - pin_high = hw_defs[pin_high] - reg_low = hw_defs[reg_low] - pin_low = hw_defs[pin_low] - switch = Switch3POS(name, reg_high, pin_high, reg_low, pin_low) - elif adc_parser.find_input(adc_input_name): - # ADC switch - switch = SwitchADC(name, adc_input_name) - else: - type = prefixsearch(hw_defs, custom) - if type is not None: - switch = SwitchCustom(name, type) - - if switch: - if inverted in hw_defs: - switch.inverted = True - - if cfs_idx in hw_defs: - switch.is_cfs = True - switch.cfs_idx = hw_defs[cfs_idx] - else: - switch.is_cfs = False - - cfg = switch_cfg_by_target(target, name) - if cfg: - switch.default = cfg.get("default") - switch.display = cfg.get("display") - else: - switch.default = "NONE" - - switches.append(switch) - - for i in range(1, 6 + 1): - f_sw_marker = f"FUNCTION_SWITCH_{i}" - if f_sw_marker in hw_defs: - switch = find_switch(hw_defs[f_sw_marker]) - if switch: - switch.name = f"SW{i}" - else: - switch = SwitchCustom(f"SW{i}", Switch.TYPE_2POS) - switches.append(switch) - - return switches diff --git a/radio/util/hw_defs/json_validator.py b/radio/util/hw_defs/json_validator.py new file mode 100644 index 00000000000..4bb57e09c84 --- /dev/null +++ b/radio/util/hw_defs/json_validator.py @@ -0,0 +1,116 @@ +from json import JSONDecodeError +from pathlib import Path +from typing import List, Tuple +from typing_extensions import Type + +from pydantic import BaseModel, ValidationError + + +def validate_json_files( + directory: str, model_class: Type[BaseModel] +) -> Tuple[List[str], List[Tuple[str, str]]]: + """ + Validate all JSON files in a directory against a Pydantic model. + + Args: + directory: Path to the directory containing JSON files + model_class: Pydantic model class to validate against + + Returns: + Tuple of (valid_files, invalid_files_with_errors) + """ + directory_path = Path(directory) + + if not directory_path.exists(): + raise FileNotFoundError(f"Directory {directory} does not exist") + + valid_files = [] + invalid_files = [] + + # Find all JSON files in the directory + json_files = list(directory_path.glob("*.json")) + + if not json_files: + print(f"No JSON files found in {directory}") + return valid_files, invalid_files + + print(f"Found {len(json_files)} JSON files to validate") + + for json_file in json_files: + try: + # Read the JSON file + with open(json_file, "r", encoding="utf-8") as f: + json_data = f.read() + + # Validate against given model + model_class.model_validate_json(json_data) + + valid_files.append(str(json_file)) + print(f"✓ {json_file.name} - Valid") + + except ValidationError as e: + error_msg = str(e) + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - Validation Error:") + print(f" {error_msg}") + + except JSONDecodeError as e: + error_msg = f"Invalid JSON syntax: {e}" + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - JSON Decode Error:") + print(f" {error_msg}") + + except Exception as e: + error_msg = f"Unexpected error: {e}" + invalid_files.append((str(json_file), error_msg)) + print(f"✗ {json_file.name} - Unexpected Error:") + print(f" {error_msg}") + + return valid_files, invalid_files + + +def main(): + """Main function to run the validation""" + import argparse + + parser = argparse.ArgumentParser( + description="Validate JSON files against HardwareDefinition model" + ) + parser.add_argument( + "-v", "--verbose", action="store_true", help="Show detailed error messages" + ) + parser.add_argument( + "directory", help="Path to directory containing JSON files to validate" + ) + + args = parser.parse_args() + + try: + from models import HardwareDefinition + + valid_files, invalid_files = validate_json_files( + args.directory, HardwareDefinition + ) + + print("\n=== Validation Summary ===") + print(f"Total files processed: {len(valid_files) + len(invalid_files)}") + print(f"Valid files: {len(valid_files)}") + print(f"Invalid files: {len(invalid_files)}") + + if invalid_files: + print("\nInvalid files:") + for file_path, error in invalid_files: + if args.verbose: + print(f" - {Path(file_path).name}: {error}") + else: + print(f" - {Path(file_path).name}") + + return 0 if not invalid_files else 1 + + except Exception as e: + print(f"Error during validation: {e}") + return 1 + + +if __name__ == "__main__": + exit(main()) diff --git a/radio/util/hw_defs/legacy_names.py b/radio/util/hw_defs/legacy_names.py index d9ee464da12..04dfd2dae45 100644 --- a/radio/util/hw_defs/legacy_names.py +++ b/radio/util/hw_defs/legacy_names.py @@ -484,7 +484,7 @@ "lr3pro", "nv14", "el18", "t8", "t12", - "tlite", "tlitef4", "tpro", "tprov2", "tpros", "bumblebee", + "tlite", "tpro", "tprov2", "tpros", "bumblebee", "tx12", "tx12mk2", "x7", "x7access", "xlite", "xlites", diff --git a/radio/util/hw_defs/logging_dict.py b/radio/util/hw_defs/logging_dict.py new file mode 100644 index 00000000000..f3b0bf75aaa --- /dev/null +++ b/radio/util/hw_defs/logging_dict.py @@ -0,0 +1,98 @@ +import sys +from typing import Any, Dict, Iterator, KeysView, Optional, ValuesView, ItemsView + + +class LoggingDict: + """A dictionary wrapper that logs all lookups to stderr.""" + + def __init__(self, data: Optional[Dict[Any, Any]] = None): + self._data = data if data is not None else {} + + def __getitem__(self, key: Any) -> Any: + """Log the lookup and return the value.""" + print(f"{str(key)}", file=sys.stderr) + return self._data[key] + + def __setitem__(self, key: Any, value: Any) -> None: + """Set an item in the dictionary.""" + self._data[key] = value + + def __delitem__(self, key: Any) -> None: + """Delete an item from the dictionary.""" + del self._data[key] + + def __contains__(self, key: Any) -> bool: + """Check if key exists (this is also a lookup, so log it).""" + print(f"{str(key)}", file=sys.stderr) + return key in self._data + + def __len__(self) -> int: + """Return the length of the dictionary.""" + return len(self._data) + + def __iter__(self) -> Iterator: + """Return an iterator over the keys.""" + return iter(self._data) + + def __repr__(self) -> str: + """Return a string representation.""" + return f"LoggingDict({self._data})" + + def get(self, key: Any, default: Any = None) -> Any: + """Get a value with optional default (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + return self._data.get(key, default) + + def keys(self) -> KeysView: + """Return dictionary keys.""" + return self._data.keys() + + def values(self) -> ValuesView: + """Return dictionary values.""" + return self._data.values() + + def items(self) -> ItemsView: + """Return dictionary items.""" + return self._data.items() + + def update(self, other: Dict[Any, Any]) -> None: + """Update the dictionary with another dictionary.""" + self._data.update(other) + + def clear(self) -> None: + """Clear all items from the dictionary.""" + self._data.clear() + + def pop(self, key: Any, default: Any = None) -> Any: + """Remove and return a value (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + if default is None: + return self._data.pop(key) + return self._data.pop(key, default) + + def setdefault(self, key: Any, default: Any = None) -> Any: + """Get a value or set/return default (logs the lookup).""" + print(f"{str(key)}", file=sys.stderr) + return self._data.setdefault(key, default) + + +# Example usage +if __name__ == "__main__": + # Create a logging dictionary + d = LoggingDict({"a": 1, "b": 2, "c": 3}) + + # These operations will be logged to stderr + print("Value of 'a':", d["a"]) + print("Value of 'b':", d.get("b")) + print("Does 'c' exist?", "c" in d) + print("Does 'd' exist?", "d" in d) + + # Add new items + d["d"] = 4 + d["e"] = 5 + + # More logged lookups + print("Value of 'd':", d["d"]) + print("Popped 'e':", d.pop("e")) + + print("Final dictionary:", d) diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py new file mode 100644 index 00000000000..0210bb02fc1 --- /dev/null +++ b/radio/util/hw_defs/models.py @@ -0,0 +1,297 @@ +from enum import Enum +from typing_extensions import List, Literal, Optional, Tuple, Union + +from pydantic import BaseModel, model_validator +from pydantic_core import from_json, PydanticCustomError + + +class StrEnum(str, Enum): + @staticmethod + def _generate_next_value_(name, start, count, last_values): + return name + + def __str__(self) -> str: + return self.value + + +ADCNameType = Literal["MAIN", "EXT", "SPI"] + + +class ADC(BaseModel): + name: ADCNameType + adc: str + sample_time: Optional[str] = None + dma: Optional[str] = None + dma_channel: Optional[str] = None + dma_stream: Optional[str] = None + dma_stream_irq: Optional[str] = None + dma_stream_irq_handler: Optional[str] = None + + +StickEnum = StrEnum( + "StickEnum", + ( + # 2 Gimbal radios + "LH", + "LV", + "RV", + "RH", + # Surface radios + "ST", + "TH", + ), +) + +MAX_POTS = 8 +MAX_SLIDERS = 8 +MAX_EXT = 16 +MAX_RAW = 8 + +FlexInputEnum = StrEnum( + "FlexInputEnum", + ( + [f"P{i}" for i in range(1, MAX_POTS)] + + [f"SL{i}" for i in range(1, MAX_SLIDERS)] + + [f"EXT{i}" for i in range(1, MAX_EXT)] + + ["JSx", "JSy"] + ), +) + +SwitchInputEnum = StrEnum( + "SwitchInputEnum", + list([f"SW{chr(i)}" for i in range(ord("A"), ord("Z") + 1)]), +) + +RawInputEnum = StrEnum("RawInputEnum", list([f"RAW{i}" for i in range(1, MAX_RAW)])) + +InputNameType = Union[StickEnum, FlexInputEnum, SwitchInputEnum, RawInputEnum] + +InputType = StrEnum( + "InputType", + ( + "STICK", + "FLEX", + "SWITCH", + "VBAT", + "RTC_BAT", + "RAW", + ), +) + +FlexType = StrEnum( + "FlexType", + ( + "NONE", + "POT", + "POT_CENTER", + "SLIDER", + "MULTIPOS", + "AXIS_X", + "AXIS_Y", + ), +) + + +class StickInput(BaseModel): + name: StickEnum + type: Literal["STICK"] + adc: Optional[ADCNameType] = None + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + + +class FlexInput(BaseModel): + name: FlexInputEnum + type: Literal["FLEX"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + default: Optional[FlexType] = FlexType.NONE + label: Optional[str] = None + short_label: Optional[str] = None + + +class SwitchInput(BaseModel): + name: SwitchInputEnum + type: Literal["SWITCH"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + inverted: Optional[bool] = False + + +class RawInput(BaseModel): + name: RawInputEnum + type: Literal["RAW"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + + +class VBatInput(BaseModel): + name: Literal["VBAT"] + type: Literal["VBAT"] + adc: ADCNameType + gpio: Optional[str] = None + pin: Optional[str] = None + channel: Optional[Union[str, int]] = None + + +class RTCBatInput(BaseModel): + name: Literal["RTC_BAT"] + type: Literal["RTC_BAT"] + adc: Literal["MAIN", "EXT"] + channel: str + + +Input = Union[StickInput, FlexInput, SwitchInput, RawInput, VBatInput, RTCBatInput] + + +class ADCInputs(BaseModel): + adcs: List[ADC] + inputs: List[Input] + + +# MUST be the same order as 'EnumKeys' +KeyEnum = StrEnum( + "KeyEnum", + ( + "KEY_MENU", + "KEY_EXIT", + "KEY_ENTER", + "KEY_PAGEUP", + "KEY_PAGEDN", + "KEY_UP", + "KEY_DOWN", + "KEY_LEFT", + "KEY_RIGHT", + "KEY_PLUS", + "KEY_MINUS", + "KEY_MODEL", + "KEY_TELE", + "KEY_SYS", + "KEY_SHIFT", + "KEY_BIND", + ), +) + + +class Key(BaseModel): + name: str + label: str + key: KeyEnum + active_low: Optional[bool] = False + gpio: Optional[str] = None + pin: Optional[str] = None + + @model_validator(mode="after") + def check_hardware(self: "Key") -> "Key": + if bool(self.gpio) != bool(self.pin): + raise PydanticCustomError( + "KeyHardwareError", + "Key missing either 'gpio' or 'pin'", + ) + + return self + + +SwitchHardwareTypeEnum = StrEnum( + "SwitchTypeEnum", + ( + "2POS", + "3POS", + "ADC", + "FSWITCH", + ), +) + +SwitchTypeEnum = StrEnum( + "SwitchTypeEnum", + ( + "2POS", + "3POS", + "TOGGLE", + "NONE", + ), +) + +SwitchDisplayType = Union[Tuple[int, int], Tuple] + + +class Switch(BaseModel): + name: str + type: SwitchHardwareTypeEnum + default: Optional[SwitchTypeEnum] = SwitchTypeEnum.NONE + flags: Optional[int] = 0 + inverted: Optional[bool] = False + adc_input: Optional[str] = None + gpio: Optional[str] = None + pin: Optional[str] = None + gpio_high: Optional[str] = None + pin_high: Optional[str] = None + gpio_low: Optional[str] = None + pin_low: Optional[str] = None + display: Optional[SwitchDisplayType] = None + + def _uses_single_gpio(self: "Switch") -> bool: + return bool(self.pin) + + def _uses_two_gpios(self: "Switch") -> bool: + return bool(self.pin_high or self.pin_low) + + def _uses_gpio(self: "Switch") -> bool: + return bool(self.gpio_high or self.gpio_low or self.gpio) + + @model_validator(mode="after") + def check_hardware(self: "Switch") -> "Switch": + if bool(self.adc_input) == self._uses_gpio(): + if self.adc_input: + raise PydanticCustomError( + "SwitchHardwareError", + "A switch is either using ADC or it's own GPIO pin(s)", + ) + + if self._uses_gpio() and (self._uses_single_gpio() == self._uses_two_gpios()): + raise PydanticCustomError( + "SwitchHardwareError", + "A switch based on GPIO pin(s) uses either a single or two GPIOs", + ) + + if self._uses_single_gpio(): + if str(self.type) not in ["2POS", "FSWITCH"]: + raise PydanticCustomError( + "SwitchHardwareError", + "Single GPIO switch type is either '2POS' or 'FSWITCH'", + ) + # TODO: check 'default' as well? + + if self._uses_two_gpios(): + if not self.pin_high or not self.pin_low: + raise PydanticCustomError( + "SwitchHardwareError", + "Switch missing 'pin_high' or 'pin_low'", + ) + if str(self.type) != "3POS": + raise PydanticCustomError( + "SwitchHardwareError", + "Dual GPIO switch type is always '3POS", + ) + # TODO: check 'default' as well? + + return self + + +class HardwareDefinition(BaseModel): + adc_inputs: ADCInputs + switches: List[Switch] + keys: List[Key] + + @staticmethod + def from_json(data: Union[str, bytes, bytearray]) -> "HardwareDefinition": + return HardwareDefinition.model_validate(from_json(data)) diff --git a/radio/util/hw_defs/pot_config.py b/radio/util/hw_defs/pot_config.py deleted file mode 100644 index 174a9f7cf50..00000000000 --- a/radio/util/hw_defs/pot_config.py +++ /dev/null @@ -1,280 +0,0 @@ -"""Default configuration of pots and sliders for each target.""" - -POT_CONFIG = { - "boxer": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "MULTIPOS"} - }, - "gx12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "el18": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "nv14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "pl18": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "pl18ev": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "EXT1": {"default": "POT_CENTER"}, - "EXT2": {"default": "POT_CENTER"}, - "EXT3": {"default": "MULTIPOS"}, - "EXT4": {"default": "MULTIPOS"} - }, - "pl18u": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "nb4p": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "v12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "MULTIPOS"}, - }, - "v14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "MULTIPOS"}, - }, - "v16": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "mt12": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "P3": {"default": "NONE"}, - "P4": {"default": "NONE"} - }, - "tpro": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tprov2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tpros": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "bumblebee": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t20": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - }, - "t20v2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - }, - "t12": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "t12max": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t14": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tx12": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "tx12mk2": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"} - }, - "t15": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - }, - "t16": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "t18": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "tx15": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - }, - "tx16s": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "f16": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x7": { - "P1": {"default": "POT"}, - "P2": {"default": "POT_CENTER"} - }, - "x7access": { - "P1": {"default": "POT"}, - "P2": {"default": "POT_CENTER"} - }, - "x9d": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9d+": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9d+2019": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x9e": { - "P1": {"default": "POT_CENTER"}, - "P2": {"default": "POT_CENTER"}, - "P3": {"default": "NONE"}, - "P4": {"default": "NONE"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"} - }, - "x10": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x10express": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"} - }, - "x12s": { - "P1": {"default": "POT"}, - "P2": {"default": "MULTIPOS"}, - "P3": {"default": "POT_CENTER"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - "SL3": {"default": "SLIDER"}, - "SL4": {"default": "SLIDER"}, - "JSx": {"default": "AXIS_X"}, - "JSy": {"default": "AXIS_Y"} - }, - "xlite": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "xlites": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "x9lite": { - "P1": {"default": "POT_CENTER"}, - }, - "x9lites": { - "P1": {"default": "POT_CENTER"}, - }, - "zorro": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"} - }, - "pocket": { - "P1": {"default": "POT"} - }, - "st16": { - "P1": {"default": "POT"}, - "P2": {"default": "POT"}, - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - }, - "pa01": { - "SL1": {"default": "SLIDER"}, - "SL2": {"default": "SLIDER"}, - }, -} - - -def pot_cfg_by_target(target, name): - """Retrieve default pot config. - - Parameters - ---------- - target: str - Name of the target - name: str - Canonical name of the pot (Px where 'x' is a number) - or slider (SLx where 'x' is a number) - - Returns - ------- - dict - a dictionary with one key for each pot or slider that mapped - to another dictionary with a single attribute ("default") containing - the default configuration for a pot or slider - """ - sw = POT_CONFIG.get(target) - if sw: - return sw.get(name) - - return None diff --git a/radio/util/hw_defs/switch_config.py b/radio/util/hw_defs/switch_config.py deleted file mode 100644 index f12011f9145..00000000000 --- a/radio/util/hw_defs/switch_config.py +++ /dev/null @@ -1,636 +0,0 @@ -"""Default switches configurations and display positions.""" - -SWITCH_CONFIG = { - "boxer": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SG": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - "SH": {"default": "2POS", "display": [1, 3]}, - }, - "gx12": { - # left side - "SA": {"default": "TOGGLE"}, - "SB": {"default": "3POS", "display": [0, 0]}, - "SE": {"default": "3POS", "display": [0, 1]}, - "SG": {"default": "TOGGLE", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE"}, - "SF": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # custom switches - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "commando8": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "el18": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "2POS" }, - "SE": { "default": "2POS" }, - "SF": { "default": "3POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "pl18": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "2POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "pl18ev": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "2POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "3POS" }, - "SI": { "default": "3POS" }, - "SJ": { "default": "3POS" } - }, - "pl18u": { - "SA": { "default": "3POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "3POS" }, - "SE": { "default": "3POS" }, - "SF": { "default": "3POS" }, - "SG": { "default": "3POS" }, - "SH": { "default": "TOGGLE" } - }, - "nb4p": { - "SA" : { "default": "TOGGLE" }, - "SB" : { "default": "TOGGLE" } - }, - "st16": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "2POS" }, - "SE": { "default": "2POS" }, - "SF": { "default": "2POS" }, - "SG": { "default": "TOGGLE" }, - "SH": { "default": "TOGGLE" }, - "SI": { "default": "TOGGLE" }, - "SJ": { "default": "TOGGLE" }, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "pa01": { - "SA": { "default": "2POS" }, - "SB": { "default": "3POS" }, - "SC": { "default": "3POS" }, - "SD": { "default": "TOGGLE" }, - "SE": { "default": "TOGGLE" }, - "SF": { "default": "TOGGLE" }, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "lr3pro": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "nv14": { - "SA": {"default": "2POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "TOGGLE"}, - "SD": {"default": "2POS"}, - "SE": {"default": "TOGGLE"}, - "SF": {"default": "3POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "v12": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - }, - "v14": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]}, - }, - "v16": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "mt12": { - # left side - "SA": { "default": "3POS", "display": [ 0, 0 ] }, - "SB": { "default": "TOGGLE", "display": [ 0, 1 ] }, - # right side - "SC": { "default": "TOGGLE", "display": [ 1, 0 ] }, - "SD": { "default": "TOGGLE", "display": [ 1, 1 ] }, - }, - "t8": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "t12": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SG": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "2POS", "display": [1, 2]} - }, - "t12max": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]} - }, - "t14": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]} - }, - "t15": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "2POS"}, - "SF": {"default": "2POS"}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "t16": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "t18": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "tlite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "2POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "tlitef4": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "2POS", "display": [0, 1]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "tpro": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "NONE", "display": [0, 2]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "NONE", "display": [1, 2]}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "tprov2": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "NONE", "display": [0, 3]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "NONE", "display": [1, 3]}, - # custom switches - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - }, - "tpros": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - }, - "bumblebee": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SB": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - # custom switches - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "t20": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - "SJ": {"default": "TOGGLE", "display": [1, 4]}, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "t20v2": { - # left side - "SA": {"default": "2POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - "SJ": {"default": "TOGGLE", "display": [1, 4]}, - # custom switches - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - "SM": {"default": "2POS"}, - "SN": {"default": "2POS"}, - "SO": {"default": "2POS"}, - "SP": {"default": "2POS"}, - }, - "tx12": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SG": {"default": "NONE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "NONE", "display": [1, 3]} - }, - "tx15": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "2POS"}, - "SF": {"default": "TOGGLE"}, - # custom switches - "SG": {"default": "2POS"}, - "SH": {"default": "2POS"}, - "SI": {"default": "2POS"}, - "SJ": {"default": "2POS"}, - "SK": {"default": "2POS"}, - "SL": {"default": "2POS"}, - }, - "tx16s": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "f16": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "tx12mk2": { - # left side - "SA": {"default": "TOGGLE", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "3POS", "display": [1, 2]}, - }, - "x7": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SF": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # optional - "SI": {"default": "NONE", "display": [0, 3]}, - "SJ": {"default": "NONE", "display": [0, 3]}, - }, - "x7access": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SF": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "TOGGLE", "display": [1, 2]}, - # optional - "SI": {"default": "NONE", "display": [0, 3]}, - "SJ": {"default": "NONE", "display": [0, 3]}, - }, - "x9d": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9d+": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9d+2019": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - "SI": {"default": "TOGGLE", "display": [0, 4]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SG": {"default": "3POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]} - }, - "x9e": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "3POS", "display": [0, 2]}, - "SF": {"default": "2POS", "display": [0, 3]}, - # extra - "SI": {"default": "NONE", "display": [0, 4]}, - "SK": {"default": "NONE", "display": [0, 5]}, - "SM": {"default": "NONE", "display": [0, 6]}, - "SO": {"default": "NONE", "display": [0, 7]}, - "SQ": {"default": "NONE", "display": [0, 8]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "3POS", "display": [1, 1]}, - "SH": {"default": "3POS", "display": [1, 2]}, - "SG": {"default": "TOGGLE", "display": [1, 3]}, - # extra - "SJ": {"default": "NONE", "display": [1, 4]}, - "SL": {"default": "NONE", "display": [1, 5]}, - "SN": {"default": "NONE", "display": [1, 6]}, - "SP": {"default": "NONE", "display": [1, 7]}, - "SR": {"default": "NONE", "display": [1, 8]} - }, - "xlite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]} - }, - "xlites": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SC": {"default": "3POS", "display": [0, 1]}, - "SE": {"default": "TOGGLE", "display": [0, 2]}, - # right side - "SB": {"default": "2POS", "display": [1, 0]}, - "SD": {"default": "2POS", "display": [1, 1]}, - "SF": {"default": "TOGGLE", "display": [1, 2]} - }, - "x9lite": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SD": {"default": "2POS", "display": [0, 2]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SE": {"default": "TOGGLE", "display": [1, 1]} - }, - "x9lites": { - # left side - "SA": {"default": "3POS", "display": [0, 0]}, - "SB": {"default": "3POS", "display": [0, 1]}, - "SD": {"default": "2POS", "display": [0, 2]}, - "SF": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 1]}, - "SE": {"default": "TOGGLE", "display": [1, 2]}, - "SG": {"default": "TOGGLE", "display": [1, 3]} - }, - "x10": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"}, - "SI": {"default": "NONE"}, - "SJ": {"default": "NONE"} - }, - "x12s": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"}, - "SI": {"default": "NONE"}, - "SJ": {"default": "NONE"} - }, - "x10express": { - "SA": {"default": "3POS"}, - "SB": {"default": "3POS"}, - "SC": {"default": "3POS"}, - "SD": {"default": "3POS"}, - "SE": {"default": "3POS"}, - "SF": {"default": "2POS"}, - "SG": {"default": "3POS"}, - "SH": {"default": "TOGGLE"} - }, - "zorro": { - # left side - "SB": {"default": "3POS", "display": [0, 0]}, - "SA": {"default": "TOGGLE", "display": [0, 1]}, - "SE": {"default": "2POS", "display": [0, 2]}, - "SG": {"default": "TOGGLE", "display": [0, 3]}, - # right side - "SC": {"default": "3POS", "display": [1, 0]}, - "SD": {"default": "TOGGLE", "display": [1, 1]}, - "SF": {"default": "2POS", "display": [1, 2]}, - "SH": {"default": "TOGGLE", "display": [1, 3]}, - }, - "pocket": { - # left side - "SA": { "default": "2POS", "display": [ 0, 0 ] }, - "SB": { "default": "3POS", "display": [ 0, 1 ] }, - "SE": { "default": "TOGGLE", "display": [ 0, 2 ] }, - # right side - "SD": { "default": "2POS", "display": [ 1, 0 ] }, - "SC": { "default": "3POS", "display": [ 1, 1 ] }, - }, -} - - -def switch_cfg_by_target(target, name): - """Retrieve default switches config. - - Parameters - ---------- - target: str - Name of the target - name: str - Canonical switch name (Sx where 'x' is a capital letter) - - Returns - ------- - dict - a dictionary with one key for each pot or slider that mapped - to another dictionary with a "default" attribute containing - the default switches configuration. On 'stdlcd' targets, a - 'display' 2 dimensional array defining the switch's position - on screen. - """ - sw = SWITCH_CONFIG.get(target) - if sw: - return sw.get(name) - - return None diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000000..92612f89787 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +clang +jinja2 +pillow +lz4 +pydantic diff --git a/tools/build-common.sh b/tools/build-common.sh index 40d2d088ea6..1039405e10f 100644 --- a/tools/build-common.sh +++ b/tools/build-common.sh @@ -44,9 +44,6 @@ get_target_build_options() { tlite) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TLITE" ;; - tlitef4) - BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TLITEF4" - ;; tpro) BUILD_OPTIONS+="-DPCB=X7 -DPCBREV=TPRO" ;; diff --git a/tools/build-companion.sh b/tools/build-companion.sh index 10bb1892d62..b374862e1aa 100755 --- a/tools/build-companion.sh +++ b/tools/build-companion.sh @@ -14,17 +14,21 @@ if [[ -z ${OUTDIR} ]]; then OUTDIR="$(pwd)/output" fi +if [[ ! -d "${OUTDIR}" ]]; then + mkdir -p "${OUTDIR}" +fi + QUIET_FLAGS="" if [[ "$CMAKE_GENERATOR" == "Ninja" ]]; then - QUIET_FLAGS="-- --quiet" + QUIET_FLAGS="-- --quiet" else - # Assume Makefile generator for non-Ninja builds - COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" + # Assume Makefile generator for non-Ninja builds + COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" fi -COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev -DGVARS=YES -DHELI=YES -DLUA=YES" +COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev" if [ "$(uname)" = "Darwin" ]; then - COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_OSX_DEPLOYMENT_TARGET='10.15'" + COMMON_OPTIONS="${COMMON_OPTIONS} -DCMAKE_OSX_DEPLOYMENT_TARGET='10.15'" fi # Generate EDGETX_VERSION_SUFFIX if not already set @@ -45,8 +49,8 @@ if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then fi fi -if [ "$(uname)" = "Linux" ] && [ -n "$GITHUB_ACTIONS" ]; then - MAX_JOBS=3 +if [[ -n "$GITHUB_ACTIONS" ]]; then + MAX_JOBS=${MAX_JOBS:-3} fi rm -rf build && mkdir build && cd build @@ -94,7 +98,7 @@ run_pipeline() { output_error_log "$log_file" "$context (Configuration)" return 1 fi - if ! execute_with_output "🔧 Native config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then + if ! execute_with_output "🔧 CMake config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then output_error_log "$log_file" "$context (Native Configure)" return 1 fi @@ -104,16 +108,18 @@ run_pipeline() { fi ;; "final") - if ! execute_with_output "🔧 Final config" "cmake --build . --target native-configure ${cmake_opts}" "$log_file" "$show_details"; then - output_error_log "$log_file" "Final Configuration" + BUILD_OPTIONS="${COMMON_OPTIONS} -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" + clean_build && mkdir -p native/plugins + if ! execute_with_output "🔧 CMake config" "cmake -S ${SRCDIR} -B native --toolchain cmake/toolchain/native.cmake ${BUILD_OPTIONS}" "$log_file" "$show_details"; then + output_error_log "$log_file" "CMake Configuration" return 1 fi if ! execute_with_output "📦 Building companion" "cmake --build native --target companion ${cmake_opts}" "$log_file" "$show_details"; then - output_error_log "$log_file" "$context (Companion Build)" + output_error_log "$log_file" "Companion Build" return 1 fi if ! execute_with_output "📦 Packaging" "cmake --build native --target ${PACKAGE_TARGET}" "$log_file" "true"; then - output_error_log "$log_file" "Final Packaging" + output_error_log "$log_file" "Packaging" return 1 fi ;; @@ -203,16 +209,16 @@ build_plugin() { } declare -a simulator_plugins=( - x9lite x9lites x9d x9dp x9dp2019 x9e - x7 x7access - t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 - xlite xlites - x10 x10express x12s - zorro tx16s tx15 - commando8 boxer pocket mt12 gx12 - tlite tpro tprov2 tpros bumblebee lr3pro t14 - nv14 el18 pl18 pl18ev pl18u st16 pa01 - f16 v14 v16 + # x9lite x9lites x9d x9dp x9dp2019 x9e + # x7 x7access + # t8 t12 t12max tx12 tx12mk2 t15 t16 t18 t20 t20v2 + # xlite xlites + # x10 x10express x12s + # zorro tx16s tx15 + # commando8 boxer pocket mt12 gx12 + # tlite tpro tprov2 tpros bumblebee lr3pro t14 + # nv14 el18 pl18 pl18ev pl18u st16 pa01 + # f16 v14 v16 ) get_platform_config diff --git a/tools/build-jumper.py b/tools/build-jumper.py index fa6c0bd05bd..9801b8e055b 100755 --- a/tools/build-jumper.py +++ b/tools/build-jumper.py @@ -14,11 +14,6 @@ "PCBREV": "TLITE", "DEFAULT_MODE": "2", }, - "TLITEF4": { - "PCB": "X7", - "PCBREV": "TLITEF4", - "DEFAULT_MODE": "2", - }, "TPRO": { "PCB": "X7", "PCBREV": "TPRO", diff --git a/tools/build-wasm-modules.sh b/tools/build-wasm-modules.sh new file mode 100755 index 00000000000..750e7a3758d --- /dev/null +++ b/tools/build-wasm-modules.sh @@ -0,0 +1,243 @@ +#!/bin/bash + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +. "$SCRIPT_DIR/build-common.sh" + +SRCDIR=$1 +OUTDIR=$2 + +if [[ -z ${SRCDIR} ]]; then + SRCDIR="$(pwd)" +fi + +if [[ -z ${OUTDIR} ]]; then + OUTDIR="$(pwd)/output" +fi + +if [[ ! -d "${OUTDIR}" ]]; then + mkdir -p "${OUTDIR}" +fi + +QUIET_FLAGS="" +if [[ "$CMAKE_GENERATOR" == "Ninja" ]]; then + QUIET_FLAGS="-- --quiet" +else + # Assume Makefile generator for non-Ninja builds + COMMON_OPTIONS="-DCMAKE_RULE_MESSAGES=OFF" +fi + +COMMON_OPTIONS+=" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MESSAGE_LOG_LEVEL=WARNING -Wno-dev" +COMMON_OPTIONS+=" -DCMAKE_MODULE_PATH=/opt/wasi-sdk/share/cmake/" +COMMON_OPTIONS+=" -DEdgeTX_SUPERBUILD:BOOL=0 -DNATIVE_BUILD:BOOL=1" + +# Generate EDGETX_VERSION_SUFFIX if not already set +if [[ -z ${EDGETX_VERSION_SUFFIX} ]]; then + gh_type=$(echo "$GITHUB_REF" | awk -F / '{print $2}') #heads|tags|pull + if [[ $gh_type = "tags" ]]; then + # tags: refs/tags/ + gh_tag=${GITHUB_REF##*/} + export EDGETX_VERSION_TAG=$gh_tag + elif [[ $gh_type = "pull" ]]; then + # pull: refs/pull//merge + gh_pull_number=PR$(echo "$GITHUB_REF" | awk -F / '{print $3}') + export EDGETX_VERSION_SUFFIX=$gh_pull_number + elif [[ $gh_type = "heads" ]]; then + # heads: refs/heads/ + gh_branch=${GITHUB_REF##*/} + export EDGETX_VERSION_SUFFIX=$gh_branch + fi +fi + +if [[ -n "$GITHUB_ACTIONS" ]]; then + MAX_JOBS=${MAX_JOBS:-3} +fi + +rm -rf build && mkdir build && cd build + +# Function to output error logs (works in both GitHub Actions and terminal) +output_error_log() { + local log_file="$1" + local context="$2" + + if [[ -f "$log_file" ]]; then + echo "------------------------------------------" + echo " Full error output from $log_file:" + echo "------------------------------------------" + cat "$log_file" + else + echo "⚠️ Warning: Log file $log_file not found for $context" + fi +} + +# Function to show last N lines of a log file for warnings +show_log_summary() { + local log_file="$1" + local lines="${2:-50}" + local context="$3" + + if [[ -f "$log_file" ]]; then + echo "------------------------------------------" + echo "Last $lines lines from $log_file:" + echo "------------------------------------------" + tail -n "$lines" "$log_file" + fi +} + +run_pipeline() { + local log_file="${1:-/dev/null}" + local context="$2" + local show_details="${3:-false}" + local cmake_opts="--parallel ${MAX_JOBS} ${QUIET_FLAGS}" + local wasi_toolchain="/opt/wasi-sdk/share/cmake/wasi-sdk-pthread.cmake" + + clean_build + if ! execute_with_output "🔧 CMake config" "cmake -S ${SRCDIR} -B wasm --toolchain ${wasi_toolchain} ${BUILD_OPTIONS}" "$log_file" "$show_details"; then + output_error_log "$log_file" "$context (Configuration)" + return 1 + fi + if ! execute_with_output "📦 Building WASM module" "cmake --build wasm --target wasi-module ${cmake_opts}" "$log_file" "$show_details"; then + output_error_log "$log_file" "$context (Library Build)" + return 1 + fi + + return 0 +} + +execute_with_output() { + local description="$1" + local command="$2" + local log_file="$3" + local show_output="${4:-false}" + + if [[ "$show_output" == "true" && "$log_file" != "/dev/null" ]]; then + echo " $description..." + fi + + eval "$command" >> "$log_file" 2>&1 +} + +clean_build() { + rm -f CMakeCache.txt native/CMakeCache.txt +} + +# Enhanced plugin builder with better error handling +build_plugin() { + local plugin="$1" + local log_file="build_${plugin}.log" + local verbose="${2:-false}" + + BUILD_OPTIONS="${COMMON_OPTIONS} " + + if ! get_target_build_options "$plugin" >> "$log_file" 2>&1; then + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::error::Failed to get build options for $plugin" + fi + output_error_log "$log_file" "$plugin (Build Options)" + return 1 + fi + + # Only show detailed output in GitHub Actions or if verbose is requested + local show_details="false" + if [[ -n "$GITHUB_ACTIONS" || "$verbose" == "true" ]]; then + show_details="true" + fi + + if ! run_pipeline "$log_file" "$plugin" "$show_details"; then + return 1 + fi + + if [[ -f "wasm/wasi-module.wasm" ]]; then + cp "wasm/wasi-module.wasm" "${OUTDIR}/${plugin}.wasm" 2>/dev/null + fi + + # Check for warnings and show summary if found + if grep -q -i "warning" "$log_file"; then + echo " ⚠️ $plugin completed with warnings" + if [[ "$show_details" == "true" ]]; then + show_log_summary "$log_file" 50 "$plugin (Warnings)" + fi + return 0 + fi + + echo " ✅ $plugin completed successfully" + return 0 +} + +if [[ -n "$FLAVOR" ]]; then + # Convert semicolon-separated string to array + IFS=';' read -ra temp_array <<< "$FLAVOR" + plugins=() + for item in "${temp_array[@]}"; do + plugins+=($(echo "$item" | tr '[:upper:]' '[:lower:]')) + done +else + declare -a plugins=( + # monochrom + boxer bumblebee commando8 + gx12 mt12 pocket t12max + t14 t20 t20v2 tpros tprov2 + tx12mk2 zorro v14 + x7access x9dp2019 x9e + # colour + el18 nv14 st16 pa01 + pl18 pl18ev pl18u + t15 t16 t18 + tx15 tx16s f16 v16 + x10 x10express x12s + ) +fi + +TOTAL=${#plugins[@]} +FAILED_PLUGINS=() + +echo "🔨 Building $TOTAL Plugins" + +for i in "${!plugins[@]}"; do + plugin="${plugins[$i]}" + current=$((i + 1)) + percent=$((current * 100 / TOTAL)) + + # For terminal output, put each plugin on its own line for cleaner display + if [[ -n "$GITHUB_ACTIONS" ]]; then + printf "::group::📦 %-12s [%2d/%2d] %3d%%\n" "$plugin" "$current" "$TOTAL" "$percent" + else + echo "🔨 [$current/$TOTAL] ($percent%) Building $plugin..." + fi + + error_status=0 + if ! build_plugin "$plugin"; then + FAILED_PLUGINS+=("$plugin") + error_status=1 + fi + + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::endgroup::" + fi + + if [ $error_status -ne 0 ]; then + # TODO: if not '--build-all' used + exit 1 + fi +done + +# Show summary of any failures (if using continue-on-error approach) +if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::group::❌ Build Failures Summary" + else + echo "❌ Build Failures Summary" + echo "==========================================" + fi + + echo "The following plugins failed to build:" + for failed_plugin in "${FAILED_PLUGINS[@]}"; do + echo " ❌ $failed_plugin" + done + + if [[ -n "$GITHUB_ACTIONS" ]]; then + echo "::endgroup::" + else + echo "==========================================" + fi + exit 1 +fi diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index c5ce23576c0..305f95dc7c0 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -78,13 +78,8 @@ do fi cmake ${BUILD_OPTIONS} "${SRCDIR}" - - cmake --build . --target arm-none-eabi-configure - cmake --build arm-none-eabi -j"${CORES}" --target ${FIRMARE_TARGET} - cmake --build . --target native-configure - cmake --build native -j"${CORES}" --target libsimulator cmake --build native -j"${CORES}" --target tests-radio - rm -f CMakeCache.txt native/CMakeCache.txt arm-none-eabi/CMakeCache.txt + rm -f CMakeCache.txt native/CMakeCache.txt done diff --git a/tools/generate-hw-defs.sh b/tools/generate-hw-defs.sh index 9fc027acfbf..65d4dd7af1f 100755 --- a/tools/generate-hw-defs.sh +++ b/tools/generate-hw-defs.sh @@ -9,7 +9,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" : "${SRCDIR:=$(dirname "$(pwd)/$0")/..}" -: ${FLAVOR:="nv14;el18;pl18;pl18ev;nb4p;st16;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v14;v12;tx15"} +: ${FLAVOR:="nv14;el18;pl18;pl18ev;pl18u;nb4p;st16;t12;t12max;t15;t16;t18;t8;zorro;pocket;commando8;tlite;tpro;tprov2;tpros;bumblebee;t20;t20v2;t14;lr3pro;mt12;gx12;tx12;tx12mk2;boxer;tx16s;x10;x10express;x12s;x7;x7access;x9d;x9dp;x9dp2019;x9e;x9lite;x9lites;xlite;xlites;f16;v16;v14;v12;pa01;tx15"} : ${COMMON_OPTIONS:="-DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_RULE_MESSAGES=OFF -Wno-dev -DCMAKE_MESSAGE_LOG_LEVEL=WARNING"} # wipe build directory clean @@ -17,8 +17,6 @@ rm -rf build && mkdir -p build && cd build target_names=$(echo "$FLAVOR" | tr '[:upper:]' '[:lower:]' | tr ';' '\n') -TARGET_DIR="${SRCDIR}/radio/src/targets/hw_defs" - for target_name in $target_names do BUILD_OPTIONS=${COMMON_OPTIONS} @@ -35,8 +33,5 @@ do cmake --build . --target arm-none-eabi-configure cmake --build arm-none-eabi --target hardware_defs - mkdir -p ${TARGET_DIR} - mv arm-none-eabi/radio/src/*.json* ${TARGET_DIR} - rm -f CMakeCache.txt arm-none-eabi/CMakeCache.txt done