diff --git a/.github/workflows/python_code_quality.yml b/.github/workflows/python_code_quality.yml index 0d5183c06..6d765ea48 100644 --- a/.github/workflows/python_code_quality.yml +++ b/.github/workflows/python_code_quality.yml @@ -1,5 +1,8 @@ name: Python Code Quality -on: [pull_request] +on: + pull_request: + paths: + - radio/** jobs: build: diff --git a/.github/workflows/python_tests.yml b/.github/workflows/python_tests.yml index 2c864b719..fd73e0357 100644 --- a/.github/workflows/python_tests.yml +++ b/.github/workflows/python_tests.yml @@ -5,10 +5,14 @@ on: branches: - main - release-* + paths: + - radio/** pull_request: branches: - main - release-* + paths: + - radio/** jobs: build: diff --git a/.vscode/launch.json b/.vscode/launch.json index e69de29bb..320cb1e93 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "configurations": [ + { + "name": "Python Debugger: Backend", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/radio/app.py", + "console": "integratedTerminal" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 519424e1f..8729fded1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,18 @@ { "cSpell.words": [ + "ardupilot", "ARSP", "centered", + "chancount", "Crosshair", "falcongrey", "falconred", + "frametype", + "frametypename", "maplibre", "maptilers", "mavutil", + "Motortestpanel", "pymavlink", "PYQT", "RSSI", diff --git a/README.md b/README.md index 2d2294d7a..6191bb956 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -# FGCS - -Falcon Ground Control Station. +# FGCS - Falcon Ground Control Station > Learn more on our [website](https://fgcs.projectfalcon.uk)! @@ -10,152 +8,20 @@ Falcon Ground Control Station. ## How to run -
Windows - Installation - -1. Go to [releases](https://github.com/Avis-Drone-Labs/FGCS/releases) and download the most recent versions `.exe` file -2. Run the downloaded file, you may have to click "more" then "run anyway" if windows defender blocks it +1. Go to [releases](https://github.com/Avis-Drone-Labs/FGCS/releases) and download the latest installer for your system +2. Run the downloaded installer, you may have to click "more" then "run anyway" if windows defender or any other firewall blocks it 3. Once installed it should be accessible via the start menu as "FGCS" -
- -
Windows - Manually - -### Prerequisites - -1. Ensure npm is installed, to do so follow [this guide](https://kinsta.com/blog/how-to-install-node-js/). Note: node version must be >= v20.10.0 -2. Ensure yarn is installed, to do so run `npm install --global yarn` or follow [this guide](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable) -3. Install `python 3.11.9` (this can be found [here](https://www.python.org/downloads/release/python-3119/)) then create a virtual environment for it (see [Creating a virtual environment](#creating-a-virtual-environment) for help) - -#### Creating a virtual environment - -Create a new Python virtual environment using `python -m venv venv`. This can then be activated using `./venv/scripts/activate`. - -> NOTE: To enter the virtual environment you will need to run `venv/Scripts/activate` on windows, to learn more please read: [how to make venv for linux and windows](https://www.geeksforgeeks.org/creating-python-virtual-environment-windows-linux/) or [what is a virtual environment?](https://docs.python.org/3/library/venv.html) - - -
Running with bat file - -1. If this is your first time running, please create a venv (see [Creating a virtual environment](#creating-a-virtual-environment)) and then run `./run.bat /path/to/venv update` -2. After this you can run `./run.bat /path/to/venv` (without the word update after) - -
- -
Running independently - -### Frontend - -1. `cd gcs` -2. `yarn` (to install dependencies) -3. Create a `.env` file and add these two entries or rename `.env_sample` and populate the values: - - `VITE_MAPTILER_API_KEY=` + Your maptiler API key (can be generated [on maptilers website](https://cloud.maptiler.com/account/keys)) - - `VITE_BACKEND_URL=http://127.0.0.1:4237` (if you want to change the port and host see: [Configuration > Changing Ports](#Configuration)) -5. `yarn dev` - -### Backend - -1. `cd radio` -2. Make sure you're in a virtual environment (see [Creating a virtual environment](#creating-a-virtual-environment)) -3. Install requirements `pip install -r requirements.txt` -4. `python app.py` - -
- --- -
- -
Mac/Linux - -We currently don't have instructions or releases for mac or linux, we will in future releases. It does run on ubuntu and mac as members of the team use it, but we want to test the instructions before releasing them. However, you can still run both the frontend and backend individually by following the windows version with slight alterations to the commands. - -
- ---- - -## Development Info - -
Stack - -- GUI - - Electron + Vite + React (JavaScript) -- Backend - - Flask + Pymavlink (Python) - -
- -
Running tests - -## Backend - -For running Python tests, first make sure you're in the `radio` directory. By default the tests will attempt to connect to the simulator running within Docker. To run the tests simply run `pytest`. To use a physical device connected to your computer, you can use `pytest --fc -s` and a prompt will display to select the correct COM port for the device. - -
- -
SITL with Docker - -To run the SITL simulator within Docker, first pull the docker image with `docker pull kushmakkapati/ardupilot_sitl`. Once pulled, you can start the container with `docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl`. This will expose port 5760 for you to connect to over TCP on 127.0.0.1 (the connection string is `tcp:127.0.0.1:5760`). You can also open up port 5763 for running other scripts on the simulator whilst a GCS is connected. - -By default the vehicle type will be ArduCopter, however you can tell the SITL to use a custom vehicle by providing it as a named argument at the end of the run command, e.g. `docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl VEHICLE=ArduPlane`. You can also set the starting LAT, LON, ALT and DIR using the named arguments. - -If you want to upload a custom parameter file or custom mission waypoint to the simulator then you must have a `custom_params.parm` or `mission.txt` file in your current working directory. These can then be uploaded to the simulator on run by specifying a bind mount with `-v .:/sitl_setup/custom` (note that the destination path must be `sitl_setup/custom`). E.g. `docker run -it --rm -p 5760:5760 -p 5763:5763 -v .:/sitl_setup/custom ardupilot_sitl VEHICLE=ArduPlane`. - -Note: Steps to push an updated image to docker hub: - -```plaintext -docker build . -t ardupilot_sitl -docker tag ardupilot_sitl:latest kushmakkapati/ardupilot_sitl:latest -docker push kushmakkapati/ardupilot_sitl:latest -``` - -
- -
Python - -## Version - -We are going to be using **python 3.11.x** so please install that on your computer from [Python's website](https://www.python.org/downloads/). Please try to use a virtual environment when programming, if you don't know how to do this please message me (Julian)! Name the folder either "env" or "venv" so its in the .gitignore as we don't want to be uploading that to github. - -## Code Style - -We will be using `ruff` as the code style for python, please look at the documentation found [here](https://docs.astral.sh/ruff/). When pushing code we have an action to check if it is in the correct code style, if it is not in the correct style it will fail the run and you will need to fix it by running `python -m ruff format .` in your virtual environment (or something `ruff format .` works on different systems); this should automatically reformat everything so you can push it again! - -
- -
Pre-Commit - -When cloning the repo for the first time, please install `pre-commit`. This can be done with a simple `pip install pre-commit` and then `pre-commit install`. Our pre-commit hooks will run every time you try to push something, if any of the checks fail then you will not be able to push that commit and receive an error message, often the files will be fixed but not staged, so make sure to re-stage and retry the with pushing commit. - -
- -
Packaging - -## Backend - -From within the `radio` folder run `pyinstaller --paths .\venv\Lib\site-packages\ --add-data=".\venv\Lib\site-packages\pymavlink\message_definitions\:message_definitions" --add-data=".\venv\Lib\site-packages\pymavlink\:pymavlink" --hidden-import pymavlink --hidden-import engineio.async_drivers.threading .\app.py -n fgcs_backend`. This will create an exe and folder within the `dist/fgcs_backend/` folder. - -On Mac: -From within the `radio` folder run -`pyinstaller --paths ./venv/lib/python3.11/site-packages/ --add-data="./venv/lib/python*/site-packages/pymavlink/message_definitions:message_definitions" --add-data="./venv/lib/python*/site-packages/pymavlink:pymavlink" --hidden-import pymavlink --hidden-import engineio.async_drivers.threading --windowed --name fgcs_backend ./app.py`. -This will create the `dist/fgcs_backend.app/` folder. - -## Frontend - -After compiling the backend, place the contents of `radio/dist/fgcs_backend` into a folder in `gcs/extras`. Then from within the `gcs` folder run `yarn build`. - -On Mac: -After compiling the backend, copy the `radio/dist/fgcs_backend.app` directory and move it to `gcs/extras`. Then from within the `gcs` folder run `yarn build`. Install from the .dmg file. - -
- -### Configuration - -
Changing Ports - -We have an `.env` file located in `gcs/.env`. To change the host and port for the backend, please edit `VITE_BACKEND_URL`. +## πŸ“š Documentation -> Note: The default host and port is `http://127.0.0.1:4237`. +For developers and advanced users, some technical documentation is available: -
+- **[πŸ“– Complete Documentation Index](docs/README.md)** - Overview of all documentation +- **[πŸš€ Development Guide](docs/DEVELOPMENT_GUIDE.md)** - Complete setup, testing, and best practices +- **[πŸ”§ Backend Architecture](docs/BACKEND_ARCHITECTURE.md)** - Controllers and system design +- **[πŸ–₯️ Frontend Architecture](docs/FRONTEND_ARCHITECTURE.md)** - Project structure, Redux state management --- diff --git a/building/windows/build.ps1 b/building/windows/build.ps1 index 398461d55..77314af67 100644 --- a/building/windows/build.ps1 +++ b/building/windows/build.ps1 @@ -31,7 +31,11 @@ if (Test-Path ..\gcs\extras) { Move-Item .\dist\fgcs_backend\ ..\gcs\extras Write-Output "Building frontend" -Set-Location ../gcs +Set-Location ../gcs/data +python generate_param_definitions.py +Write-Output "Generated param definitions" + +Set-Location ../ yarn yarn version --new-version $Version --no-git-tag-version --no-commit-hooks yarn build @@ -40,4 +44,3 @@ Write-Output "Going back to building\windows from gcs" Set-Location ..\building\windows Write-Output "Done!" - diff --git a/docs/BACKEND_ARCHITECTURE.md b/docs/BACKEND_ARCHITECTURE.md new file mode 100644 index 000000000..b93cba542 --- /dev/null +++ b/docs/BACKEND_ARCHITECTURE.md @@ -0,0 +1,135 @@ +# Backend Architecture Guide + +The FGCS backend is a Python Flask application that handles communication between the frontend and the drone via the MAVLink protocol. + +## Overview + +```bash +Frontend (React/Electron) + ↕ (Socket.IO/HTTP) +Backend (Flask/Socket.IO) + ↕ (MAVLink/Serial/TCP) +Drone (ArduPilot/PX4) +``` + +## Core Components + +### 1. Main Application (`app.py`) + +- Flask application with Socket.IO integration +- Handles drone connection management +- Routes HTTP requests and Socket.IO events +- Manages application state and logging + +### 2. Drone Class (`app/drone.py`) + +The central class that manages drone communication and state: + +```python +class Drone: + def __init__(self, port, baud=57600, wireless=False, ...): + # Core MAVLink connection + self.master = mavutil.mavlink_connection(...) + + # Controller instances + self.paramsController = ParamsController(self) + self.armController = ArmController(self) + self.flightModesController = FlightModesController(self) + # ... other controllers +``` + +**Key Responsibilities:** + +- Establish and maintain MAVLink connection +- Initialize all controller instances +- Handle data stream management +- Process incoming MAVLink messages +- Manage connection state and error handling + +### 3. Data Streams + +The drone class sets up various MAVLink data streams to receive telemetry: + +```python +DATASTREAM_RATES_WIRED = { + mavutil.mavlink.MAV_DATA_STREAM_RAW_SENSORS: 2, + mavutil.mavlink.MAV_DATA_STREAM_EXTENDED_STATUS: 2, + mavutil.mavlink.MAV_DATA_STREAM_RC_CHANNELS: 2, + mavutil.mavlink.MAV_DATA_STREAM_POSITION: 3, + mavutil.mavlink.MAV_DATA_STREAM_EXTRA1: 10, + mavutil.mavlink.MAV_DATA_STREAM_EXTRA2: 10, + mavutil.mavlink.MAV_DATA_STREAM_EXTRA3: 2, +} +``` + +**Stream Types and Messages:** + +- **RAW_SENSORS**: IMU data, pressure sensors +- **EXTENDED_STATUS**: System status, GPS, mission info +- **RC_CHANNELS**: Radio control inputs and servo outputs +- **POSITION**: Local and global position data +- **EXTRA1**: Attitude data (roll, pitch, yaw) +- **EXTRA2**: VFR HUD data (airspeed, groundspeed, etc.) +- **EXTRA3**: Battery status, system time, vibration + +### 4. The Command Lock + +The command lock is a thread synchronization mechanism (typically implemented using Python’s `threading.Lock`) that ensures only one command is sent to the drone at a time. This is crucial because the MAVLink protocol and ArduPilot expect commands to be sent and acknowledged sequentially. Sending multiple commands simultaneously can lead to race conditions, command collisions, or unexpected drone behavior. + +**In practice:** +Whenever a controller needs to send a command to the drone (e.g., change mode, set a parameter, arm/disarm), it acquires the command lock, sends the command, waits for a response, and then releases the lock. This guarantees orderly and reliable communication with the drone. This can be achieved either manually by acquiring and releasing the lock, or by using the `sendingCommandLock` decorator. + +**Note:** +If you acquire a lock inside a function which then uses another function which acquires the lock as well this will lead to the program halting. Ensure that the lock is released before any other function acquires it. + +## Controllers Architecture + +Controllers encapsulate specific drone functionality and handle related MAVLink commands: + +### Parameters Controller (`paramsController.py`) + +Manages drone parameter operations and provides methods for: + +- Retrieving individual parameters +- Fetching all parameters from drone +- Setting single or multiple parameter values + +### Arm Controller (`armController.py`) + +Handles drone arming and disarming operations. + +### Flight Modes Controller (`flightModesController.py`) + +Provides functionality for setting flight modes, retrieving current mode, and listing available modes for the connected vehicle type. + +### Mission Controller (`missionController.py`) + +Handles mission planning and execution with features including: + +- Mission upload/download with progress tracking +- Saving and importing missions to/from files +- Starting, stopping and restarting missions + +### Motor Test Controller (`motorTestController.py`) + +Provides motor testing capabilities. + +### Navigation Controller (`navController.py`) + +Handles guided mode navigation including: + +- Waypoint navigation commands +- Takeoff and landing commands +- Home position related operations + +### RC Controller (`rcController.py`) + +Manages radio control inputs and channel mapping including. + +### Frame Controller (`frameController.py`) + +Handles vehicle frame type detection. + +### Gripper Controller (`gripperController.py`) + +Controls a gripper/payload release mechanism. diff --git a/docs/DEVELOPMENT_GUIDE.md b/docs/DEVELOPMENT_GUIDE.md new file mode 100644 index 000000000..fd5aff382 --- /dev/null +++ b/docs/DEVELOPMENT_GUIDE.md @@ -0,0 +1,240 @@ +# Development Guide + +This comprehensive guide covers the development workflow, coding standards, testing practices, and deployment procedures for the FGCS project. + +## Quick Start for New Developers + +### Prerequisites + +1. **Node.js** (version >= 20.10.0) + - Download from [nodejs.org](https://nodejs.org/) + - Verify: `node --version` + +2. **Yarn** (package manager) + - Install: `npm install --global yarn` + - Verify: `yarn --version` + +3. **Python 3.11.9** + - Download from [python.org](https://www.python.org/downloads/release/python-3119/) + - Verify: `python --version` + +4. **Docker** (for SITL simulator) + - Download from [docker.com](https://www.docker.com/) + - Verify: `docker --version` + +### Initial Setup + +1. **Clone the repository:** + + ```bash + git clone https://github.com/Avis-Drone-Labs/FGCS.git + cd FGCS + ``` + +2. **Install pre-commit hooks:** + + ```bash + pip install pre-commit + pre-commit install + ``` + +3. **Set up Python virtual environment:** + + ```bash + cd radio + python -m venv venv + + # Windows + venv\Scripts\activate + + # Linux/Mac + source venv/bin/activate + + pip install -r requirements.txt + ``` + +4. **Install Node.js dependencies:** + + ```bash + cd ../gcs + yarn install + ``` + +5. **Configure environment variables:** + + ```bash + cp .env_sample .env + ``` + +6. **Add Maptiler API key**: +Edit the `.env` file to include your Maptiler API key, it can be generated [on maptilers website](https://cloud.maptiler.com/account/keys). + +7. **Generate param definitions:** + + ```bash + cd data + python generate_param_definitions.py + ``` + +### Running the Application + +#### Method 1: Using Scripts (Recommended) + +**Windows:** + +```bash +# First time setup +./run.bat /path/to/venv update + +# Subsequent runs +./run.bat /path/to/venv +``` + +**Linux/Mac:** + +```bash +./run.bash +``` + +#### Method 2: Manual Start + +**Terminal 1 - Backend:** + +```bash +cd radio +source venv/bin/activate # or venv\Scripts\activate on Windows +python app.py +``` + +**Terminal 2 - Frontend:** + +```bash +cd gcs +yarn dev +``` + +**Terminal 3 - SITL Simulator (Optional):** + +```bash +docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl +``` + +### Running the Simulator + +#### Quick Start with Docker + +1. **Pull the SITL image:** + + ```bash + docker pull kushmakkapati/ardupilot_sitl + ``` + +2. **Start basic simulator (ArduCopter):** + + ```bash + docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl + ``` + +3. **Connect FGCS to simulator:** + - Backend connection string: `tcp:127.0.0.1:5760` + - This exposes the MAVLink connection on port 5760 + +#### Advanced SITL Configuration + +##### Different Vehicle Types + +```bash +# ArduPlane +docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl VEHICLE=ArduPlane + +# ArduRover +docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl VEHICLE=ArduRover +``` + +##### Custom Starting Location + +```bash +docker run -it --rm -p 5760:5760 kushmakkapati/ardupilot_sitl \ + VEHICLE=ArduCopter LAT=-35.363261 LON=149.165230 ALT=584 DIR=353 +``` + +##### Multiple Ports (for concurrent connections) + +```bash +docker run -it --rm -p 5760:5760 -p 5763:5763 kushmakkapati/ardupilot_sitl +``` + +##### Custom Parameters and Missions + +1. **Create files in your working directory:** + - `custom_params.parm` - Custom parameter file + - `mission.txt` - Mission waypoints file + +2. **Mount files into container:** + + ```bash + docker run -it --rm -p 5760:5760 -p 5763:5763 \ + -v .:/sitl_setup/custom kushmakkapati/ardupilot_sitl VEHICLE=ArduPlane + ``` + +## Code Standards + +### Python Code Style + +We use **Ruff** for Python code formatting and linting: + +```bash +# Format code +ruff format . + +# Check for linting issues +ruff check . + +# Fix auto-fixable issues +ruff check --fix . +``` + +### JavaScript/TypeScript Code Style + +We use **Prettier** and **ESLint**: + +```bash +cd gcs + +# Format code +yarn format + +# Check linting +yarn lint + +# Fix auto-fixable issues +yarn lint:fix +``` + +## Testing + +### Backend Testing + +Backend tests use **pytest** with MAVLink simulation: + +```bash +cd radio + +# Run all tests +pytest + +# Run with verbose output +pytest -v + +# Run specific test file +pytest tests/test_params.py + +# Run with physical device +pytest --fc -s + +# Run specific test +pytest -k "test_param_set" + +# Generate coverage report +pytest --cov=app --cov-report=html +``` diff --git a/docs/FRONTEND_ARCHITECTURE.md b/docs/FRONTEND_ARCHITECTURE.md new file mode 100644 index 000000000..151f7dc69 --- /dev/null +++ b/docs/FRONTEND_ARCHITECTURE.md @@ -0,0 +1,74 @@ +# Frontend Architecture Guide + +The FGCS frontend is an Electron application built with React, Vite, and Redux Toolkit. + +## Technology Stack + +- **Electron**: Desktop application framework +- **React**: UI component library +- **Vite**: Build tool and development server +- **Redux Toolkit**: State management +- **Mantine**: Component library +- **Socket.IO Client**: Real-time communication with backend + +## Project Structure + +``` bash +gcs/ +β”œβ”€β”€ electron/ # Electron related files +β”‚ β”œβ”€β”€ modules/ # Popout windows +β”‚ β”œβ”€β”€ main.ts # Main process entry point +β”‚ └── preload.js # Preload scripts +β”œβ”€β”€ src/ # React application source +β”‚ β”œβ”€β”€ components/ # React components +β”‚ β”œβ”€β”€ redux/ # Redux store and slices +β”‚ β”œβ”€β”€ helpers/ # Utility functions +β”‚ └── css/ # Stylesheets +β”œβ”€β”€ public/ # Static assets +└── data/ # Generated data +``` + +## Redux State Management + +### Store Structure (`src/redux/store.js`) + +```javascript +import { configureStore } from '@reduxjs/toolkit' +import droneConnectionSlice from './slices/droneConnectionSlice' +import droneInfoSlice from './slices/droneInfoSlice' +import missionSlice from './slices/missionSlice' +import paramsSlice from './slices/paramsSlice' +import socketSlice from './slices/socketSlice' +import statusTextSlice from './slices/statusTextSlice' + +export const store = configureStore({ + reducer: { + droneConnection: droneConnectionSlice.reducer, + droneInfo: droneInfoSlice.reducer, + mission: missionSlice.reducer, + params: paramsSlice.reducer, + socket: socketSlice.reducer, + statusText: statusTextSlice.reducer, + }, +}) +``` + +### Redux Architecture Overview + +The application uses Redux Toolkit with multiple slices to manage different aspects of the application state: + +#### State Organization + +- **Connection Management**: Handles drone connection status, port selection, and network configuration +- **Drone Data**: Manages real-time telemetry data including attitude, GPS, battery, and system status +- **Mission Planning**: Stores mission waypoints, upload progress, and execution state +- **Parameters**: Manages drone parameter data, modifications, and synchronization +- **Socket Communication**: Handles Socket.IO connection state and event management +- **UI State**: Manages notifications, status messages, and user interface state +- **etc** + +#### Redux Patterns + +- **Slice-based Organization**: Each major feature area has its own slice with dedicated actions and reducers +- **Memoized Selectors**: Performance-optimized selectors using `createSelector` for derived state +- **Real-time Updates**: Socket.IO events automatically dispatch Redux actions to update state diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..7d26e7e7e --- /dev/null +++ b/docs/README.md @@ -0,0 +1,21 @@ +# FGCS Developer Documentation + +## Documentation Overview + +- **[Development Guide](DEVELOPMENT_GUIDE.md)** - Complete setup, testing, and best practices +- **[Backend Architecture](BACKEND_ARCHITECTURE.md)** - Backend system design and components +- **[Frontend Architecture](FRONTEND_ARCHITECTURE.md)** - Frontend system design + +## Contributing + +1. **Read the Documentation**: Start with the development guide +2. **Follow Conventions**: Adhere to coding standards +3. **Write Tests**: Include tests for new functionality +4. **Update Docs**: Keep documentation current with changes +5. **Code Review**: Participate in the review process + +## Need Help? + +- **GitHub Discussions**: [Project Discussions](https://github.com/Avis-Drone-Labs/FGCS/discussions) +- **Issues**: [Bug Reports and Feature Requests](https://github.com/Avis-Drone-Labs/FGCS/issues) +- **Documentation Issues**: Create an issue if docs are unclear or incomplete diff --git a/gcs/.gitignore b/gcs/.gitignore index bc7a87db8..cf347d939 100644 --- a/gcs/.gitignore +++ b/gcs/.gitignore @@ -35,3 +35,7 @@ yarn.lock /playwright-report/ /blob-report/ /playwright/.cache/ + +# Generated parameter files +gen_apm_params_def_copter.json +gen_apm_params_def_plane.json diff --git a/gcs/aboutWindow.html b/gcs/aboutWindow.html new file mode 100644 index 000000000..5e196680d --- /dev/null +++ b/gcs/aboutWindow.html @@ -0,0 +1,13 @@ + + + + + + + About FGCS + + +
+ + + diff --git a/gcs/data/default_settings.json b/gcs/data/default_settings.json index 9078b4453..addfd7af1 100644 --- a/gcs/data/default_settings.json +++ b/gcs/data/default_settings.json @@ -35,6 +35,40 @@ "display": "Sync Dashboard and Missions Map Viewstate" } }, + "Dashboard": { + "maxAltitudeAlert": { + "description": "You'll be notified when the relative altitude of a drone exceeds this value.", + "default": 120, + "type": "number", + "range": [ + 0, + 100000 + ], + "display": "Maximum Altitude Alert", + "suffix": "m" + }, + "minAltitudeAlerts": { + "description": "You'll be notified when the relative altitude of a drone goes below these values.", + "default": [], + "type": "extendableNumber", + "range": [ + 0, + 100000 + ], + "display": "Minimum Altitude Alerts", + "suffix": "m" + }, + "batteryAlert": { + "description": "You'll be notified when the battery percentage falls below these values.", + "default": [50, 20, 10], + "type": "extendableNumber", + "range": [ + 0, 100 + ], + "display": "Battery Alert", + "suffix": "%" + } + }, "Params": {}, "Config": {}, "FGCS": {} diff --git a/gcs/data/gen_apm_params_def_copter.json b/gcs/data/gen_apm_params_def_copter.json deleted file mode 100644 index 6bfd4ecd9..000000000 --- a/gcs/data/gen_apm_params_def_copter.json +++ /dev/null @@ -1 +0,0 @@ -{"ACRO_BAL_PITCH":{"Description":"rate at which pitch angle returns to level in acro and sport mode. A higher value causes the vehicle to return to level faster. For helicopter sets the decay rate of the virtual flybar in the pitch axis. A higher value causes faster decay of desired to actual attitude.","DisplayName":"Acro Balance Pitch","Increment":"0.1","Range":{"high":"3","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Acro Balance Pitch\n // @Description: rate at which pitch angle returns to level in acro and sport mode. A higher value causes the vehicle to return to level faster. For helicopter sets the decay rate of the virtual flybar in the pitch axis. A higher value causes faster decay of desired to actual attitude.\n // @Range: 0 3\n // @Increment: 0.1\n // @User: Advanced"},"ACRO_BAL_ROLL":{"Description":"rate at which roll angle returns to level in acro and sport mode. A higher value causes the vehicle to return to level faster. For helicopter sets the decay rate of the virtual flybar in the roll axis. A higher value causes faster decay of desired to actual attitude.","DisplayName":"Acro Balance Roll","Increment":"0.1","Range":{"high":"3","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Acro Balance Roll\n // @Description: rate at which roll angle returns to level in acro and sport mode. A higher value causes the vehicle to return to level faster. For helicopter sets the decay rate of the virtual flybar in the roll axis. A higher value causes faster decay of desired to actual attitude.\n // @Range: 0 3\n // @Increment: 0.1\n // @User: Advanced"},"ACRO_OPTIONS":{"Bitmask":{"0":"Air-mode","1":"Rate Loop Only"},"Description":"A range of options that can be applied to change acro mode behaviour. Air-mode enables ATC_THR_MIX_MAN at all times (air-mode has no effect on helicopters). Rate Loop Only disables the use of angle stabilization and uses angular rate stabilization only.","DisplayName":"Acro mode options","User":"Advanced","__field_text":"\n // @DisplayName: Acro mode options\n // @Description: A range of options that can be applied to change acro mode behaviour. Air-mode enables ATC_THR_MIX_MAN at all times (air-mode has no effect on helicopters). Rate Loop Only disables the use of angle stabilization and uses angular rate stabilization only.\n // @Bitmask: 0:Air-mode,1:Rate Loop Only\n // @User: Advanced"},"ACRO_RP_EXPO":{"Description":"Acro roll/pitch Expo to allow faster rotation when stick at edges","DisplayName":"Acro Roll/Pitch Expo","Range":{"high":"0.95","low":"-0.5"},"User":"Advanced","Values":{"0":"Disabled","0.1":"Very Low","0.2":"Low","0.3":"Medium","0.4":"High","0.5":"Very High"},"__field_text":"\n // @DisplayName: Acro Roll/Pitch Expo\n // @Description: Acro roll/pitch Expo to allow faster rotation when stick at edges\n // @Values: 0:Disabled,0.1:Very Low,0.2:Low,0.3:Medium,0.4:High,0.5:Very High\n // @Range: -0.5 0.95\n // @User: Advanced"},"ACRO_RP_RATE":{"Description":"Acro mode maximum roll and pitch rate. Higher values mean faster rate of rotation","DisplayName":"Acro Roll and Pitch Rate","Range":{"high":"1080","low":"1"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Acro Roll and Pitch Rate\n // @Description: Acro mode maximum roll and pitch rate. Higher values mean faster rate of rotation\n // @Units: deg/s\n // @Range: 1 1080\n // @User: Standard"},"ACRO_RP_RATE_TC":{"Description":"Acro roll and pitch rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response","DisplayName":"Acro roll/pitch rate control input time constant","Increment":"0.01","Range":{"high":"1","low":"0"},"Units":"s","User":"Standard","Values":{"0.05":"Very Crisp","0.1":"Crisp","0.15":"Medium","0.2":"Soft","0.5":"Very Soft"},"__field_text":"\n // @DisplayName: Acro roll/pitch rate control input time constant\n // @Description: Acro roll and pitch rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response\n // @Units: s\n // @Range: 0 1\n // @Increment: 0.01\n // @Values: 0.5:Very Soft, 0.2:Soft, 0.15:Medium, 0.1:Crisp, 0.05:Very Crisp\n // @User: Standard"},"ACRO_THR_MID":{"Description":"Acro Throttle Mid","DisplayName":"Acro Thr Mid","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Acro Thr Mid\n // @Description: Acro Throttle Mid\n // @Range: 0 1\n // @User: Advanced"},"ACRO_TRAINER":{"Description":"Type of trainer used in acro mode","DisplayName":"Acro Trainer","User":"Advanced","Values":{"0":"Disabled","1":"Leveling","2":"Leveling and Limited"},"__field_text":"\n // @DisplayName: Acro Trainer\n // @Description: Type of trainer used in acro mode\n // @Values: 0:Disabled,1:Leveling,2:Leveling and Limited\n // @User: Advanced"},"ACRO_Y_EXPO":{"Description":"Acro yaw expo to allow faster rotation when stick at edges","DisplayName":"Acro Yaw Expo","Range":{"high":"0.95","low":"-1.0"},"User":"Advanced","Values":{"0":"Disabled","0.1":"Very Low","0.2":"Low","0.3":"Medium","0.4":"High","0.5":"Very High"},"__field_text":"\n // @DisplayName: Acro Yaw Expo\n // @Description: Acro yaw expo to allow faster rotation when stick at edges\n // @Values: 0:Disabled,0.1:Very Low,0.2:Low,0.3:Medium,0.4:High,0.5:Very High\n // @Range: -1.0 0.95\n // @User: Advanced"},"ACRO_Y_RATE":{"Description":"Acro mode maximum yaw rate. Higher value means faster rate of rotation","DisplayName":"Acro Yaw Rate","Range":{"high":"360","low":"1"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Acro Yaw Rate\n // @Description: Acro mode maximum yaw rate. Higher value means faster rate of rotation\n // @Units: deg/s\n // @Range: 1 360\n // @User: Standard"},"ACRO_Y_RATE_TC":{"Description":"Acro yaw rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response","DisplayName":"Acro yaw rate control input time constant","Increment":"0.01","Range":{"high":"1","low":"0"},"Units":"s","User":"Standard","Values":{"0.05":"Very Crisp","0.1":"Crisp","0.15":"Medium","0.2":"Soft","0.5":"Very Soft"},"__field_text":"\n // @DisplayName: Acro yaw rate control input time constant\n // @Description: Acro yaw rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response\n // @Units: s\n // @Range: 0 1\n // @Increment: 0.01\n // @Values: 0.5:Very Soft, 0.2:Soft, 0.15:Medium, 0.1:Crisp, 0.05:Very Crisp\n // @User: Standard"},"ADSB_EMIT_TYPE":{"Description":"ADSB classification for the type of vehicle emitting the transponder signal. Default value is 14 (UAV).","DisplayName":"Emitter type","User":"Advanced","Values":{"0":"NoInfo","1":"Light","2":"Small","3":"Large","4":"HighVortexlarge","5":"Heavy","6":"HighlyManuv","7":"Rotocraft","8":"RESERVED","9":"Glider","10":"LightAir","11":"Parachute","12":"UltraLight","13":"RESERVED","14":"UAV","15":"Space","16":"RESERVED","17":"EmergencySurface","18":"ServiceSurface","19":"PointObstacle"},"__field_text":"\n // @DisplayName: Emitter type\n // @Description: ADSB classification for the type of vehicle emitting the transponder signal. Default value is 14 (UAV).\n // @Values: 0:NoInfo,1:Light,2:Small,3:Large,4:HighVortexlarge,5:Heavy,6:HighlyManuv,7:Rotocraft,8:RESERVED,9:Glider,10:LightAir,11:Parachute,12:UltraLight,13:RESERVED,14:UAV,15:Space,16:RESERVED,17:EmergencySurface,18:ServiceSurface,19:PointObstacle\n // @User: Advanced"},"ADSB_ICAO_ID":{"Description":"ICAO_ID unique vehicle identification number of this aircraft. This is an integer limited to 24bits. If set to 0 then one will be randomly generated. If set to -1 then static information is not sent, transceiver is assumed pre-programmed.","DisplayName":"ICAO_ID vehicle identification number","Range":{"high":"16777215","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: ICAO_ID vehicle identification number\n // @Description: ICAO_ID unique vehicle identification number of this aircraft. This is an integer limited to 24bits. If set to 0 then one will be randomly generated. If set to -1 then static information is not sent, transceiver is assumed pre-programmed.\n // @Range: -1 16777215\n // @User: Advanced"},"ADSB_ICAO_SPECL":{"Description":"ICAO_ID of special vehicle that ignores ADSB_LIST_RADIUS and ADSB_LIST_ALT. The vehicle is always tracked. Use 0 to disable.","DisplayName":"ICAO_ID of special vehicle","User":"Advanced","__field_text":"\n // @DisplayName: ICAO_ID of special vehicle\n // @Description: ICAO_ID of special vehicle that ignores ADSB_LIST_RADIUS and ADSB_LIST_ALT. The vehicle is always tracked. Use 0 to disable.\n // @User: Advanced"},"ADSB_LEN_WIDTH":{"Description":"Aircraft length and width dimension options in Length and Width in meters. In most cases, use a value of 1 for smallest size.","DisplayName":"Aircraft length and width","User":"Advanced","Values":{"0":"NO_DATA","1":"L15W23","2":"L25W28P5","3":"L25W34","4":"L35W33","5":"L35W38","6":"L45W39P5","7":"L45W45","8":"L55W45","9":"L55W52","10":"L65W59P5","11":"L65W67","12":"L75W72P5","13":"L75W80","14":"L85W80","15":"L85W90"},"__field_text":"\n // @DisplayName: Aircraft length and width\n // @Description: Aircraft length and width dimension options in Length and Width in meters. In most cases, use a value of 1 for smallest size.\n\t// @Values: 0:NO_DATA,1:L15W23,2:L25W28P5,3:L25W34,4:L35W33,5:L35W38,6:L45W39P5,7:L45W45,8:L55W45,9:L55W52,10:L65W59P5,11:L65W67,12:L75W72P5,13:L75W80,14:L85W80,15:L85W90\n // @User: Advanced"},"ADSB_LIST_ALT":{"Description":"ADSB vehicle list altitude filter. Vehicles detected above this altitude will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.","DisplayName":"ADSB vehicle list altitude filter","Range":{"high":"32767","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: ADSB vehicle list altitude filter\n // @Description: ADSB vehicle list altitude filter. Vehicles detected above this altitude will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.\n // @Range: 0 32767\n // @User: Advanced\n // @Units: m"},"ADSB_LIST_MAX":{"Description":"ADSB list size of nearest vehicles. Longer lists take longer to refresh with lower SRx_ADSB values.","DisplayName":"ADSB vehicle list size","Range":{"high":"100","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: ADSB vehicle list size\n // @Description: ADSB list size of nearest vehicles. Longer lists take longer to refresh with lower SRx_ADSB values.\n // @Range: 1 100\n // @User: Advanced\n // @RebootRequired: True"},"ADSB_LIST_RADIUS":{"Description":"ADSB vehicle list radius filter. Vehicles detected outside this radius will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.","DisplayName":"ADSB vehicle list radius filter","Range":{"high":"100000","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: ADSB vehicle list radius filter\n // @Description: ADSB vehicle list radius filter. Vehicles detected outside this radius will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.\n // @Range: 0 100000\n // @User: Advanced\n // @Units: m"},"ADSB_LOG":{"Description":"0: no logging, 1: log only special ID, 2:log all","DisplayName":"ADS-B logging","User":"Advanced","Values":{"0":"no logging","1":"log only special ID","2":"log all"},"__field_text":"\n // @DisplayName: ADS-B logging\n // @Description: 0: no logging, 1: log only special ID, 2:log all\n // @Values: 0:no logging,1:log only special ID,2:log all\n // @User: Advanced"},"ADSB_OFFSET_LAT":{"Description":"GPS antenna lateral offset. This describes the physical location offset from center of the GPS antenna on the aircraft.","DisplayName":"GPS antenna lateral offset","User":"Advanced","Values":{"0":"NoData","1":"Left2m","2":"Left4m","3":"Left6m","4":"Center","5":"Right2m","6":"Right4m","7":"Right6m"},"__field_text":"\n // @DisplayName: GPS antenna lateral offset\n // @Description: GPS antenna lateral offset. This describes the physical location offset from center of the GPS antenna on the aircraft.\n\t// @Values: 0:NoData,1:Left2m,2:Left4m,3:Left6m,4:Center,5:Right2m,6:Right4m,7:Right6m\n // @User: Advanced"},"ADSB_OFFSET_LON":{"Description":"GPS antenna longitudinal offset. This is usually set to 1, Applied By Sensor","DisplayName":"GPS antenna longitudinal offset","User":"Advanced","Values":{"0":"NO_DATA","1":"AppliedBySensor"},"__field_text":"\n // @DisplayName: GPS antenna longitudinal offset\n // @Description: GPS antenna longitudinal offset. This is usually set to 1, Applied By Sensor\n // @Values: 0:NO_DATA,1:AppliedBySensor\n // @User: Advanced"},"ADSB_OPTIONS":{"Bitmask":{"0":"Ping200X Send GPS","1":"Squawk 7400 on RC failsafe","2":"Squawk 7400 on GCS failsafe","3":"Sagetech MXS use External Config"},"Description":"Options for emergency failsafe codes and device capabilities","DisplayName":"ADS-B Options","User":"Advanced","__field_text":"\n // @DisplayName: ADS-B Options\n // @Description: Options for emergency failsafe codes and device capabilities\n // @Bitmask: 0:Ping200X Send GPS,1:Squawk 7400 on RC failsafe,2:Squawk 7400 on GCS failsafe,3:Sagetech MXS use External Config\n // @User: Advanced"},"ADSB_RF_CAPABLE":{"Bitmask":{"0":"UAT_in","1":"1090ES_in","2":"UAT_out","3":"1090ES_out"},"Description":"Describes your hardware RF In/Out capabilities.","DisplayName":"RF capabilities","User":"Advanced","__field_text":"\n // @DisplayName: RF capabilities\n // @Description: Describes your hardware RF In/Out capabilities.\n // @Bitmask: 0:UAT_in,1:1090ES_in,2:UAT_out,3:1090ES_out\n // @User: Advanced"},"ADSB_RF_SELECT":{"Bitmask":{"0":"Rx","1":"Tx"},"Description":"Transceiver RF selection for Rx enable and/or Tx enable. This only effects devices that can Tx and/or Rx. Rx-only devices should override this to always be Rx-only.","DisplayName":"Transceiver RF selection","User":"Advanced","__field_text":"\n // @DisplayName: Transceiver RF selection\n // @Description: Transceiver RF selection for Rx enable and/or Tx enable. This only effects devices that can Tx and/or Rx. Rx-only devices should override this to always be Rx-only.\n // @Bitmask: 0:Rx,1:Tx\n // @User: Advanced"},"ADSB_SQUAWK":{"Description":"VFR squawk (Mode 3/A) code is a pre-programmed default code when the pilot is flying VFR and not in contact with ATC. In the USA, the VFR squawk code is octal 1200 (hex 0x280, decimal 640) and in most parts of Europe the VFR squawk code is octal 7000. If an invalid octal number is set then it will be reset to 1200.","DisplayName":"Squawk code","Range":{"high":"7777","low":"0"},"Units":"octal","User":"Advanced","__field_text":"\n // @DisplayName: Squawk code\n // @Description: VFR squawk (Mode 3/A) code is a pre-programmed default code when the pilot is flying VFR and not in contact with ATC. In the USA, the VFR squawk code is octal 1200 (hex 0x280, decimal 640) and in most parts of Europe the VFR squawk code is octal 7000. If an invalid octal number is set then it will be reset to 1200.\n // @Range: 0 7777\n // @Units: octal\n // @User: Advanced"},"ADSB_TYPE":{"Description":"Type of ADS-B hardware for ADSB-in and ADSB-out configuration and operation. If any type is selected then MAVLink based ADSB-in messages will always be enabled","DisplayName":"ADSB Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"uAvionix-MAVLink","2":"Sagetech","3":"uAvionix-UCP","4":"Sagetech MX Series"},"__field_text":"\n // @DisplayName: ADSB Type\n // @Description: Type of ADS-B hardware for ADSB-in and ADSB-out configuration and operation. If any type is selected then MAVLink based ADSB-in messages will always be enabled\n // @Values: 0:Disabled,1:uAvionix-MAVLink,2:Sagetech,3:uAvionix-UCP,4:Sagetech MX Series\n // @User: Standard\n // @RebootRequired: True"},"AEROM_ALT_ABORT":{"Description":"Maximum allowable loss in altitude during a trick or sequence from its starting altitude.","DisplayName":"Altitude Abort","Units":"m","__field_text":"\n // @DisplayName: Altitude Abort\n // @Description: Maximum allowable loss in altitude during a trick or sequence from its starting altitude.\n // @Units: m"},"AEROM_ANG_ACCEL":{"Description":"Maximum angular acceleration in maneuvers","DisplayName":"Angular acceleration limit","Units":"deg/s/s","__field_text":"\n // @DisplayName: Angular acceleration limit\n // @Description: Maximum angular acceleration in maneuvers\n // @Units: deg/s/s"},"AEROM_ANG_TC":{"Description":"This is the time over which we filter the desired roll to smooth it","DisplayName":"Roll control filtertime constant","Units":"s","__field_text":"\n // @DisplayName: Roll control filtertime constant\n // @Description: This is the time over which we filter the desired roll to smooth it\n // @Units: s"},"AEROM_BOX_WIDTH":{"Description":"Length of aerobatic \"box\" ","DisplayName":"Box Width","Units":"m","__field_text":"\n // @DisplayName: Box Width\n // @Description: Length of aerobatic \"box\" \n // @Units: m"},"AEROM_DEBUG":{"Description":"This controls the printing of extra debug information on paths","DisplayName":"Debug control","__field_text":"\n // @DisplayName: Debug control\n // @Description: This controls the printing of extra debug information on paths"},"AEROM_ENTRY_RATE":{"Description":"This controls how rapidly we roll into a new orientation","DisplayName":"The roll rate to use when entering a roll maneuver","Units":"deg/s","__field_text":"\n // @DisplayName: The roll rate to use when entering a roll maneuver\n // @Description: This controls how rapidly we roll into a new orientation\n // @Units: deg/s"},"AEROM_ERR_COR_D":{"Description":"This controls how rapidly we correct back onto the desired path","DisplayName":"D gain for path error corrections","__field_text":"\n // @DisplayName: D gain for path error corrections\n // @Description: This controls how rapidly we correct back onto the desired path"},"AEROM_ERR_COR_P":{"Description":"This controls how rapidly we correct back onto the desired path","DisplayName":"P gain for path error corrections","__field_text":"\n // @DisplayName: P gain for path error corrections\n // @Description: This controls how rapidly we correct back onto the desired path"},"AEROM_KE_RUDD":{"Description":"Percent of rudder normally uses to sustain knife-edge at trick speed","DisplayName":"KnifeEdge Rudder","Units":"%","__field_text":"\n // @DisplayName: KnifeEdge Rudder\n // @Description: Percent of rudder normally uses to sustain knife-edge at trick speed\n // @Units: %"},"AEROM_KE_RUDD_LK":{"Description":"Time to look ahead in the path to calculate rudder correction for bank angle","DisplayName":"KnifeEdge Rudder lookahead","Units":"s","__field_text":"\n // @DisplayName: KnifeEdge Rudder lookahead\n // @Description: Time to look ahead in the path to calculate rudder correction for bank angle\n // @Units: s"},"AEROM_LKAHD":{"Description":"This is how much time to look ahead in the path for calculating path rates","DisplayName":"Lookahead","Units":"s","__field_text":"\n // @DisplayName: Lookahead\n // @Description: This is how much time to look ahead in the path for calculating path rates\n // @Units: s"},"AEROM_MIS_ANGLE":{"Description":"When set to a non-zero value, this is the assumed direction of the mission. Otherwise the waypoint angle is used","DisplayName":"Mission angle","Units":"deg","__field_text":"\n // @DisplayName: Mission angle\n // @Description: When set to a non-zero value, this is the assumed direction of the mission. Otherwise the waypoint angle is used\n // @Units: deg"},"AEROM_OPTIONS":{"Bitmask":{"0":"UseRTLOnAbort","1":"AddAtToMessages","2":"DualAircraftSynchronised"},"Description":"Options to control aerobatic behavior","DisplayName":"Aerobatic options","Units":"deg","__field_text":"\n // @DisplayName: Aerobatic options\n // @Description: Options to control aerobatic behavior\n // @Bitmask: 0:UseRTLOnAbort, 1:AddAtToMessages, 2:DualAircraftSynchronised\n // @Units: deg"},"AEROM_PATH_SCALE":{"Description":"Scale factor for Path/Box size. 0.5 would half the distances in maneuvers. Radii are unaffected.","DisplayName":"Path Scale","Range":{"high":"100","low":"0.1"},"__field_text":"\n // @DisplayName: Path Scale\n // @Description: Scale factor for Path/Box size. 0.5 would half the distances in maneuvers. Radii are unaffected.\n // @Range: 0.1 100"},"AEROM_ROL_COR_TC":{"Description":"This is the time constant for correcting roll errors. A smaller value leads to faster roll corrections","DisplayName":"Roll control time constant","Units":"s","__field_text":"\n // @DisplayName: Roll control time constant\n // @Description: This is the time constant for correcting roll errors. A smaller value leads to faster roll corrections\n // @Units: s"},"AEROM_SPD_I":{"Description":"This controls how rapidly the throttle is raised to compensate for a speed error","DisplayName":"I gain for speed controller","Units":"%","__field_text":"\n // @DisplayName: I gain for speed controller\n // @Description: This controls how rapidly the throttle is raised to compensate for a speed error\n // @Units: %"},"AEROM_SPD_P":{"Description":"This controls how rapidly the throttle is raised to compensate for a speed error","DisplayName":"P gain for speed controller","Units":"%","__field_text":"\n // @DisplayName: P gain for speed controller\n // @Description: This controls how rapidly the throttle is raised to compensate for a speed error\n // @Units: %"},"AEROM_STALL_PIT":{"Description":"Pitch threashold for moving to final stage of stall turn","DisplayName":"Stall turn pitch threshold","Units":"deg","__field_text":"\n // @DisplayName: Stall turn pitch threshold\n // @Description: Pitch threashold for moving to final stage of stall turn\n // @Units: deg"},"AEROM_STALL_THR":{"Description":"Amount of throttle to reduce to for a stall turn","DisplayName":"Stall turn throttle","Units":"%","__field_text":"\n // @DisplayName: Stall turn throttle\n // @Description: Amount of throttle to reduce to for a stall turn\n // @Units: %"},"AEROM_THR_BOOST":{"Description":"This is the extra throttle added in schedule elements marked as needing a throttle boost","DisplayName":"Throttle boost","Units":"%","__field_text":"\n // @DisplayName: Throttle boost\n // @Description: This is the extra throttle added in schedule elements marked as needing a throttle boost\n // @Units: %"},"AEROM_THR_LKAHD":{"Description":"This controls how far ahead we look in time along the path for the target throttle","DisplayName":"The lookahead for throttle control","Units":"s","__field_text":"\n // @DisplayName: The lookahead for throttle control\n // @Description: This controls how far ahead we look in time along the path for the target throttle\n // @Units: s"},"AEROM_THR_MIN":{"Description":"Lowest throttle used during maneuvers","DisplayName":"Minimum Throttle","Units":"%","__field_text":"\n // @DisplayName: Minimum Throttle\n // @Description: Lowest throttle used during maneuvers\n // @Units: %"},"AEROM_THR_PIT_FF":{"Description":"This controls how much extra throttle to add based on pitch ange. The value is for 90 degrees and is applied in proportion to pitch","DisplayName":"Throttle feed forward from pitch","Units":"%","__field_text":"\n // @DisplayName: Throttle feed forward from pitch\n // @Description: This controls how much extra throttle to add based on pitch ange. The value is for 90 degrees and is applied in proportion to pitch\n // @Units: %"},"AEROM_TIME_COR_P":{"Description":"This is the time constant for correcting path position errors","DisplayName":"Time constant for correction of our distance along the path","Units":"s","__field_text":"\n // @DisplayName: Time constant for correction of our distance along the path\n // @Description: This is the time constant for correcting path position errors\n // @Units: s"},"AEROM_TS_I":{"Description":"This controls how rapidly two aircraft are brought back into time sync","DisplayName":"Timesync I gain","__field_text":"\n // @DisplayName: Timesync I gain\n // @Description: This controls how rapidly two aircraft are brought back into time sync"},"AEROM_TS_P":{"Description":"This controls how rapidly two aircraft are brought back into time sync","DisplayName":"Timesync P gain","__field_text":"\n // @DisplayName: Timesync P gain\n // @Description: This controls how rapidly two aircraft are brought back into time sync"},"AEROM_TS_RATE":{"Description":"This sets the rate we send data for time sync between aircraft","DisplayName":"Timesync rate of send of NAMED_VALUE_FLOAT data","Units":"Hz","__field_text":"\n // @DisplayName: Timesync rate of send of NAMED_VALUE_FLOAT data\n // @Description: This sets the rate we send data for time sync between aircraft\n // @Units: Hz"},"AEROM_TS_SPDMAX":{"Description":"This sets the maximum speed adjustment for time sync between aircraft","DisplayName":"Timesync speed max","Units":"m/s","__field_text":"\n // @DisplayName: Timesync speed max\n // @Description: This sets the maximum speed adjustment for time sync between aircraft\n // @Units: m/s"},"AEROM_YAW_ACCEL":{"Description":"This is maximum yaw acceleration to use","DisplayName":"Yaw acceleration","Units":"deg/s/s","__field_text":"\n // @DisplayName: Yaw acceleration\n // @Description: This is maximum yaw acceleration to use\n // @Units: deg/s/s"},"AFS_AMSL_ERR_GPS":{"Description":"This sets margin for error in GPS derived altitude limit. This error margin is only used if the barometer has failed. If the barometer fails then the GPS will be used to enforce the AMSL_LIMIT, but this margin will be subtracted from the AMSL_LIMIT first, to ensure that even with the given amount of GPS altitude error the pressure altitude is not breached. OBC users should set this to comply with their D2 safety case. A value of -1 will mean that barometer failure will lead to immediate termination.","DisplayName":"Error margin for GPS based AMSL limit","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Error margin for GPS based AMSL limit\n // @Description: This sets margin for error in GPS derived altitude limit. This error margin is only used if the barometer has failed. If the barometer fails then the GPS will be used to enforce the AMSL_LIMIT, but this margin will be subtracted from the AMSL_LIMIT first, to ensure that even with the given amount of GPS altitude error the pressure altitude is not breached. OBC users should set this to comply with their D2 safety case. A value of -1 will mean that barometer failure will lead to immediate termination.\n // @User: Advanced\n // @Units: m"},"AFS_AMSL_LIMIT":{"Description":"This sets the AMSL (above mean sea level) altitude limit. If the pressure altitude determined by QNH exceeds this limit then flight termination will be forced. Note that this limit is in meters, whereas pressure altitude limits are often quoted in feet. A value of zero disables the pressure altitude limit.","DisplayName":"AMSL limit","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: AMSL limit\n // @Description: This sets the AMSL (above mean sea level) altitude limit. If the pressure altitude determined by QNH exceeds this limit then flight termination will be forced. Note that this limit is in meters, whereas pressure altitude limits are often quoted in feet. A value of zero disables the pressure altitude limit.\n // @User: Advanced\n // @Units: m"},"AFS_DUAL_LOSS":{"Description":"This enables the dual loss termination part of the AFS system. If this parameter is 1 and both GPS and the ground control station fail simultaneously, this will be considered a \"dual loss\" and cause termination.","DisplayName":"Enable dual loss terminate due to failure of both GCS and GPS simultaneously","User":"Advanced","__field_text":"\n // @DisplayName: Enable dual loss terminate due to failure of both GCS and GPS simultaneously\n // @Description: This enables the dual loss termination part of the AFS system. If this parameter is 1 and both GPS and the ground control station fail simultaneously, this will be considered a \"dual loss\" and cause termination.\n // @User: Advanced"},"AFS_ENABLE":{"Description":"This enables the advanced failsafe system. If this is set to zero (disable) then all the other AFS options have no effect","DisplayName":"Enable Advanced Failsafe","User":"Advanced","__field_text":"\n // @DisplayName: Enable Advanced Failsafe\n // @Description: This enables the advanced failsafe system. If this is set to zero (disable) then all the other AFS options have no effect\n // @User: Advanced"},"AFS_GCS_TIMEOUT":{"Description":"The time (in seconds) of persistent data link loss before GCS failsafe occurs. ","DisplayName":"GCS timeout","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: GCS timeout\n // @Description: The time (in seconds) of persistent data link loss before GCS failsafe occurs. \n // @User: Advanced\n // @Units: s"},"AFS_GEOFENCE":{"Description":"This enables the geofence part of the AFS. Will only be in effect if AFS_ENABLE is also 1","DisplayName":"Enable geofence Advanced Failsafe","User":"Advanced","__field_text":"\n // @DisplayName: Enable geofence Advanced Failsafe\n // @Description: This enables the geofence part of the AFS. Will only be in effect if AFS_ENABLE is also 1\n // @User: Advanced"},"AFS_HB_PIN":{"Description":"This sets a digital output pin which is cycled at 10Hz when termination is not activated. Note that if a FS_TERM_PIN is set then the heartbeat pin will continue to cycle at 10Hz when termination is activated, to allow the termination board to distinguish between autopilot crash and termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Heartbeat Pin","User":"Advanced","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","-1":"Disabled"},"__field_text":"\n // @DisplayName: Heartbeat Pin\n // @Description: This sets a digital output pin which is cycled at 10Hz when termination is not activated. Note that if a FS_TERM_PIN is set then the heartbeat pin will continue to cycle at 10Hz when termination is activated, to allow the termination board to distinguish between autopilot crash and termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Advanced\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5"},"AFS_MAN_PIN":{"Description":"This sets a digital output pin to set high when in manual mode. See the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Manual Pin","User":"Advanced","__field_text":"\n // @DisplayName: Manual Pin\n // @Description: This sets a digital output pin to set high when in manual mode. See the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Advanced"},"AFS_MAX_COM_LOSS":{"Description":"Maximum number of comms loss events before the aircraft stops returning to mission on comms recovery. Use zero to allow for any number of comms loss events.","DisplayName":"Maximum number of comms loss events","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of comms loss events\n // @Description: Maximum number of comms loss events before the aircraft stops returning to mission on comms recovery. Use zero to allow for any number of comms loss events.\n // @User: Advanced"},"AFS_MAX_GPS_LOSS":{"Description":"Maximum number of GPS loss events before the aircraft stops returning to mission on GPS recovery. Use zero to allow for any number of GPS loss events.","DisplayName":"Maximum number of GPS loss events","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of GPS loss events\n // @Description: Maximum number of GPS loss events before the aircraft stops returning to mission on GPS recovery. Use zero to allow for any number of GPS loss events.\n // @User: Advanced"},"AFS_MAX_RANGE":{"Description":"This is the maximum range of the vehicle in kilometers from first arming. If the vehicle goes beyond this range then the TERM_ACTION is performed. A value of zero disables this feature.","DisplayName":"Max allowed range","Units":"km","User":"Advanced","__field_text":"\n // @DisplayName: Max allowed range\n // @Description: This is the maximum range of the vehicle in kilometers from first arming. If the vehicle goes beyond this range then the TERM_ACTION is performed. A value of zero disables this feature.\n // @User: Advanced\n // @Units: km"},"AFS_OPTIONS":{"Bitmask":{"0":"Continue the mission even after comms are recovered (does not go to the mission item at the time comms were lost)","1":"Enable AFS for all autonomous modes (not just AUTO)"},"Description":"See description for each bitmask bit description","DisplayName":"AFS options","__field_text":"\n // @DisplayName: AFS options\n // @Description: See description for each bitmask bit description\n // @Bitmask: 0: Continue the mission even after comms are recovered (does not go to the mission item at the time comms were lost)\n // @Bitmask: 1: Enable AFS for all autonomous modes (not just AUTO) "},"AFS_QNH_PRESSURE":{"Description":"This sets the QNH pressure in millibars to be used for pressure altitude in the altitude limit. A value of zero disables the altitude limit.","DisplayName":"QNH pressure","Units":"hPa","User":"Advanced","__field_text":"\n // @DisplayName: QNH pressure\n // @Description: This sets the QNH pressure in millibars to be used for pressure altitude in the altitude limit. A value of zero disables the altitude limit.\n // @Units: hPa\n // @User: Advanced"},"AFS_RC":{"Description":"This enables the RC part of the AFS. Will only be in effect if AFS_ENABLE is also 1","DisplayName":"Enable RC Advanced Failsafe","User":"Advanced","__field_text":"\n // @DisplayName: Enable RC Advanced Failsafe\n // @Description: This enables the RC part of the AFS. Will only be in effect if AFS_ENABLE is also 1\n // @User: Advanced"},"AFS_RC_FAIL_TIME":{"Description":"This is the time in seconds in manual mode that failsafe termination will activate if RC input is lost. For the OBC rules this should be (1.5). Use 0 to disable.","DisplayName":"RC failure time","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: RC failure time\n // @Description: This is the time in seconds in manual mode that failsafe termination will activate if RC input is lost. For the OBC rules this should be (1.5). Use 0 to disable.\n // @User: Advanced\n // @Units: s"},"AFS_RC_MAN_ONLY":{"Description":"If this parameter is set to 1, then an RC loss will only cause the plane to terminate in manual control modes. If it is 0, then the plane will terminate in any flight mode.","DisplayName":"Enable RC Termination only in manual control modes","User":"Advanced","__field_text":"\n // @DisplayName: Enable RC Termination only in manual control modes\n // @Description: If this parameter is set to 1, then an RC loss will only cause the plane to terminate in manual control modes. If it is 0, then the plane will terminate in any flight mode.\n // @User: Advanced"},"AFS_TERMINATE":{"Description":"Can be set in flight to force termination of the heartbeat signal","DisplayName":"Force Terminate","User":"Advanced","__field_text":"\n // @DisplayName: Force Terminate\n // @Description: Can be set in flight to force termination of the heartbeat signal\n // @User: Advanced"},"AFS_TERM_ACTION":{"Description":"This can be used to force an action on flight termination. Normally this is handled by an external failsafe board, but you can setup ArduPilot to handle it here. Please consult the wiki for more information on the possible values of the parameter","DisplayName":"Terminate action","User":"Advanced","__field_text":"\n // @DisplayName: Terminate action\n // @Description: This can be used to force an action on flight termination. Normally this is handled by an external failsafe board, but you can setup ArduPilot to handle it here. Please consult the wiki for more information on the possible values of the parameter\n // @User: Advanced"},"AFS_TERM_PIN":{"Description":"This sets a digital output pin to set high on flight termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Terminate Pin","User":"Advanced","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","-1":"Disabled"},"__field_text":"\n // @DisplayName: Terminate Pin\n // @Description: This sets a digital output pin to set high on flight termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Advanced\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5"},"AFS_WP_COMMS":{"Description":"Waypoint number to navigate to on comms loss","DisplayName":"Comms Waypoint","User":"Advanced","__field_text":"\n // @DisplayName: Comms Waypoint\n // @Description: Waypoint number to navigate to on comms loss\n // @User: Advanced"},"AFS_WP_GPS_LOSS":{"Description":"Waypoint number to navigate to on GPS lock loss","DisplayName":"GPS Loss Waypoint","User":"Advanced","__field_text":"\n // @DisplayName: GPS Loss Waypoint\n // @Description: Waypoint number to navigate to on GPS lock loss\n // @User: Advanced"},"AHRS_COMP_BETA":{"Description":"This controls the time constant for the cross-over frequency used to fuse AHRS (airspeed and heading) and GPS data to estimate ground velocity. Time constant is 0.1/beta. A larger time constant will use GPS data less and a small time constant will use air data less.","DisplayName":"AHRS Velocity Complementary Filter Beta Coefficient","Increment":".01","Range":{"high":"0.5","low":"0.001"},"User":"Advanced","__field_text":"\n // @DisplayName: AHRS Velocity Complementary Filter Beta Coefficient\n // @Description: This controls the time constant for the cross-over frequency used to fuse AHRS (airspeed and heading) and GPS data to estimate ground velocity. Time constant is 0.1/beta. A larger time constant will use GPS data less and a small time constant will use air data less.\n // @Range: 0.001 0.5\n // @Increment: .01\n // @User: Advanced"},"AHRS_CUSTOM_PIT":{"Description":"Autopilot mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.","DisplayName":"Board orientation pitch offset","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Board orientation pitch offset\n // @Description: Autopilot mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @User: Advanced"},"AHRS_CUSTOM_ROLL":{"Description":"Autopilot mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.","DisplayName":"Board orientation roll offset","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Board orientation roll offset\n // @Description: Autopilot mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @User: Advanced"},"AHRS_CUSTOM_YAW":{"Description":"Autopilot mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.","DisplayName":"Board orientation yaw offset","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Board orientation yaw offset\n // @Description: Autopilot mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @User: Advanced"},"AHRS_EKF_TYPE":{"Description":"This controls which NavEKF Kalman filter version is used for attitude and position estimation","DisplayName":"Use NavEKF Kalman filter for attitude and position estimation","User":"Advanced","Values":{"0":"Disabled","2":"Enable EKF2","3":"Enable EKF3","11":"ExternalAHRS"},"__field_text":"\n // @DisplayName: Use NavEKF Kalman filter for attitude and position estimation\n // @Description: This controls which NavEKF Kalman filter version is used for attitude and position estimation\n // @Values: 0:Disabled,2:Enable EKF2,3:Enable EKF3,11:ExternalAHRS\n // @User: Advanced"},"AHRS_GPS_GAIN":{"Description":"This controls how much to use the GPS to correct the attitude. This should never be set to zero for a plane as it would result in the plane losing control in turns. For a plane please use the default value of 1.0.","DisplayName":"AHRS GPS gain","Increment":".01","Range":{"high":"1.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: AHRS GPS gain\n // @Description: This controls how much to use the GPS to correct the attitude. This should never be set to zero for a plane as it would result in the plane losing control in turns. For a plane please use the default value of 1.0.\n // @Range: 0.0 1.0\n // @Increment: .01\n // @User: Advanced"},"AHRS_GPS_MINSATS":{"Description":"Minimum number of satellites visible to use GPS for velocity based corrections attitude correction. This defaults to 6, which is about the point at which the velocity numbers from a GPS become too unreliable for accurate correction of the accelerometers.","DisplayName":"AHRS GPS Minimum satellites","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: AHRS GPS Minimum satellites\n // @Description: Minimum number of satellites visible to use GPS for velocity based corrections attitude correction. This defaults to 6, which is about the point at which the velocity numbers from a GPS become too unreliable for accurate correction of the accelerometers.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"AHRS_GPS_USE":{"Description":"This controls whether to use dead-reckoning or GPS based navigation. If set to 0 then the GPS won't be used for navigation, and only dead reckoning will be used. A value of zero should never be used for normal flight. Currently this affects only the DCM-based AHRS: the EKF uses GPS according to its own parameters. A value of 2 means to use GPS for height as well as position - both in DCM estimation and when determining altitude-above-home.","DisplayName":"AHRS use GPS for DCM navigation and position-down","User":"Advanced","Values":{"0":"Disabled","1":"Use GPS for DCM position","2":"Use GPS for DCM position and height"},"__field_text":"\n // @DisplayName: AHRS use GPS for DCM navigation and position-down\n // @Description: This controls whether to use dead-reckoning or GPS based navigation. If set to 0 then the GPS won't be used for navigation, and only dead reckoning will be used. A value of zero should never be used for normal flight. Currently this affects only the DCM-based AHRS: the EKF uses GPS according to its own parameters. A value of 2 means to use GPS for height as well as position - both in DCM estimation and when determining altitude-above-home.\n // @Values: 0:Disabled,1:Use GPS for DCM position,2:Use GPS for DCM position and height\n // @User: Advanced"},"AHRS_OPTIONS":{"Bitmask":{"0":"DisableDCMFallbackFW","1":"DisableDCMFallbackVTOL"},"Description":"This controls optional AHRS behaviour. Setting DisableDCMFallbackFW will change the AHRS behaviour for fixed wing aircraft in fly-forward flight to not fall back to DCM when the EKF stops navigating. Setting DisableDCMFallbackVTOL will change the AHRS behaviour for fixed wing aircraft in non fly-forward (VTOL) flight to not fall back to DCM when the EKF stops navigating. ","DisplayName":"Optional AHRS behaviour","User":"Advanced","__field_text":"\n // @DisplayName: Optional AHRS behaviour\n // @Description: This controls optional AHRS behaviour. Setting DisableDCMFallbackFW will change the AHRS behaviour for fixed wing aircraft in fly-forward flight to not fall back to DCM when the EKF stops navigating. Setting DisableDCMFallbackVTOL will change the AHRS behaviour for fixed wing aircraft in non fly-forward (VTOL) flight to not fall back to DCM when the EKF stops navigating. \n // @Bitmask: 0:DisableDCMFallbackFW, 1:DisableDCMFallbackVTOL\n // @User: Advanced"},"AHRS_ORIENTATION":{"Description":"Overall board orientation relative to the standard orientation for the board type. This rotates the IMU and compass readings to allow the board to be oriented in your vehicle at any 90 or 45 degree angle. The label for each option is specified in the order of rotations for that orientation. This option takes affect on next boot. After changing you will need to re-level your vehicle. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the AHRS_CUSTOM_ROLL/PIT/YAW angles for AHRS orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_ROT1_ROLL/PIT/YAW or CUST_ROT2_ROLL/PIT/YAW angles.","DisplayName":"Board Orientation","User":"Advanced","Values":{"0":"None","1":"Yaw45","2":"Yaw90","3":"Yaw135","4":"Yaw180","5":"Yaw225","6":"Yaw270","7":"Yaw315","8":"Roll180","9":"Yaw45Roll180","10":"Yaw90Roll180","11":"Yaw135Roll180","12":"Pitch180","13":"Yaw225Roll180","14":"Yaw270Roll180","15":"Yaw315Roll180","16":"Roll90","17":"Yaw45Roll90","18":"Yaw90Roll90","19":"Yaw135Roll90","20":"Roll270","21":"Yaw45Roll270","22":"Yaw90Roll270","23":"Yaw135Roll270","24":"Pitch90","25":"Pitch270","26":"Yaw90Pitch180","27":"Yaw270Pitch180","28":"Pitch90Roll90","29":"Pitch90Roll180","30":"Pitch90Roll270","31":"Pitch180Roll90","32":"Pitch180Roll270","33":"Pitch270Roll90","34":"Pitch270Roll180","35":"Pitch270Roll270","36":"Yaw90Pitch180Roll90","37":"Yaw270Roll90","38":"Yaw293Pitch68Roll180","39":"Pitch315","40":"Pitch315Roll90","42":"Roll45","43":"Roll315","100":"Custom 4.1 and older","101":"Custom 1","102":"Custom 2"},"__field_text":"\n // @DisplayName: Board Orientation\n // @Description: Overall board orientation relative to the standard orientation for the board type. This rotates the IMU and compass readings to allow the board to be oriented in your vehicle at any 90 or 45 degree angle. The label for each option is specified in the order of rotations for that orientation. This option takes affect on next boot. After changing you will need to re-level your vehicle. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the AHRS_CUSTOM_ROLL/PIT/YAW angles for AHRS orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_ROT1_ROLL/PIT/YAW or CUST_ROT2_ROLL/PIT/YAW angles.\n // @Values: 0:None,1:Yaw45,2:Yaw90,3:Yaw135,4:Yaw180,5:Yaw225,6:Yaw270,7:Yaw315,8:Roll180,9:Yaw45Roll180,10:Yaw90Roll180,11:Yaw135Roll180,12:Pitch180,13:Yaw225Roll180,14:Yaw270Roll180,15:Yaw315Roll180,16:Roll90,17:Yaw45Roll90,18:Yaw90Roll90,19:Yaw135Roll90,20:Roll270,21:Yaw45Roll270,22:Yaw90Roll270,23:Yaw135Roll270,24:Pitch90,25:Pitch270,26:Yaw90Pitch180,27:Yaw270Pitch180,28:Pitch90Roll90,29:Pitch90Roll180,30:Pitch90Roll270,31:Pitch180Roll90,32:Pitch180Roll270,33:Pitch270Roll90,34:Pitch270Roll180,35:Pitch270Roll270,36:Yaw90Pitch180Roll90,37:Yaw270Roll90,38:Yaw293Pitch68Roll180,39:Pitch315,40:Pitch315Roll90,42:Roll45,43:Roll315,100:Custom 4.1 and older,101:Custom 1,102:Custom 2\n // @User: Advanced"},"AHRS_RP_P":{"Description":"This controls how fast the accelerometers correct the attitude","DisplayName":"AHRS RP_P","Increment":".01","Range":{"high":"0.4","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: AHRS RP_P\n // @Description: This controls how fast the accelerometers correct the attitude\n // @Range: 0.1 0.4\n // @Increment: .01\n // @User: Advanced"},"AHRS_TRIM_X":{"Description":"Compensates for the roll angle difference between the control board and the frame. Positive values make the vehicle roll right.","DisplayName":"AHRS Trim Roll","Increment":"0.01","Range":{"high":"+0.1745","low":"-0.1745"},"Units":"rad","User":"Standard","__field_text":"\n // @DisplayName: AHRS Trim Roll\n // @Description: Compensates for the roll angle difference between the control board and the frame. Positive values make the vehicle roll right.\n // @Units: rad\n // @Range: -0.1745 +0.1745\n // @Increment: 0.01\n // @User: Standard"},"AHRS_TRIM_Y":{"Description":"Compensates for the pitch angle difference between the control board and the frame. Positive values make the vehicle pitch up/back.","DisplayName":"AHRS Trim Pitch","Increment":"0.01","Range":{"high":"+0.1745","low":"-0.1745"},"Units":"rad","User":"Standard","__field_text":"\n // @DisplayName: AHRS Trim Pitch\n // @Description: Compensates for the pitch angle difference between the control board and the frame. Positive values make the vehicle pitch up/back.\n // @Units: rad\n // @Range: -0.1745 +0.1745\n // @Increment: 0.01\n // @User: Standard"},"AHRS_TRIM_Z":{"Description":"Not Used","DisplayName":"AHRS Trim Yaw","Increment":"0.01","Range":{"high":"+0.1745","low":"-0.1745"},"Units":"rad","User":"Advanced","__field_text":"\n // @DisplayName: AHRS Trim Yaw\n // @Description: Not Used\n // @Units: rad\n // @Range: -0.1745 +0.1745\n // @Increment: 0.01\n // @User: Advanced"},"AHRS_WIND_MAX":{"Description":"This sets the maximum allowable difference between ground speed and airspeed. A value of zero means to use the airspeed as is. This allows the plane to cope with a failing airspeed sensor by clipping it to groundspeed plus/minus this limit. See ARSPD_OPTIONS and ARSPD_WIND_MAX to disable airspeed sensors.","DisplayName":"Maximum wind","Increment":"1","Range":{"high":"127","low":"0"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Maximum wind\n // @Description: This sets the maximum allowable difference between ground speed and airspeed. A value of zero means to use the airspeed as is. This allows the plane to cope with a failing airspeed sensor by clipping it to groundspeed plus/minus this limit. See ARSPD_OPTIONS and ARSPD_WIND_MAX to disable airspeed sensors.\n // @Range: 0 127\n // @Units: m/s\n // @Increment: 1\n // @User: Advanced"},"AHRS_YAW_P":{"Description":"This controls the weight the compass or GPS has on the heading. A higher value means the heading will track the yaw source (GPS or compass) more rapidly.","DisplayName":"Yaw P","Increment":".01","Range":{"high":"0.4","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw P\n // @Description: This controls the weight the compass or GPS has on the heading. A higher value means the heading will track the yaw source (GPS or compass) more rapidly.\n // @Range: 0.1 0.4\n // @Increment: .01\n // @User: Advanced"},"AIS_LIST_MAX":{"Description":"AIS list size of nearest vessels. Longer lists take longer to refresh with lower SRx_ADSB values.","DisplayName":"AIS vessel list size","Range":{"high":"100","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: AIS vessel list size\n // @Description: AIS list size of nearest vessels. Longer lists take longer to refresh with lower SRx_ADSB values.\n // @Range: 1 100\n // @User: Advanced"},"AIS_LOGGING":{"Bitmask":{"0":"Log all AIVDM messages","1":"Log only unsupported AIVDM messages","2":"Log decoded messages"},"Description":"Bitmask of AIS logging options","DisplayName":"AIS logging options","User":"Advanced","__field_text":"\n // @DisplayName: AIS logging options\n // @Description: Bitmask of AIS logging options\n // @Bitmask: 0:Log all AIVDM messages,1:Log only unsupported AIVDM messages,2:Log decoded messages\n // @User: Advanced"},"AIS_TIME_OUT":{"Description":"if no updates are received in this time a vessel will be removed from the list","DisplayName":"AIS vessel time out","Range":{"high":"2000","low":"1"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: AIS vessel time out\n // @Description: if no updates are received in this time a vessel will be removed from the list\n // @Units: s\n // @Range: 1 2000\n // @User: Advanced"},"AIS_TYPE":{"Description":"AIS receiver type","DisplayName":"AIS receiver type","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"NMEA AIVDM message"},"__field_text":"\n // @DisplayName: AIS receiver type\n // @Description: AIS receiver type\n // @Values: 0:None,1:NMEA AIVDM message\n // @User: Standard\n // @RebootRequired: True"},"ANGLE_MAX":{"Description":"Maximum lean angle in all flight modes","DisplayName":"Angle Max","Increment":"10","Range":{"high":"8000","low":"1000"},"Units":"cdeg","User":"Advanced","__field_text":"\n // @DisplayName: Angle Max\n // @Description: Maximum lean angle in all flight modes\n // @Units: cdeg\n // @Increment: 10\n // @Range: 1000 8000\n // @User: Advanced"},"ARMING_ACCTHRESH":{"Description":"Accelerometer error threshold used to determine inconsistent accelerometers. Compares this error range to other accelerometers to detect a hardware or calibration error. Lower value means tighter check and harder to pass arming check. Not all accelerometers are created equal.","DisplayName":"Accelerometer error threshold","Range":{"high":"3.0","low":"0.25"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer error threshold\n // @Description: Accelerometer error threshold used to determine inconsistent accelerometers. Compares this error range to other accelerometers to detect a hardware or calibration error. Lower value means tighter check and harder to pass arming check. Not all accelerometers are created equal.\n // @Units: m/s/s\n // @Range: 0.25 3.0\n // @User: Advanced"},"ARMING_CHECK":{"Bitmask":{"0":"All","1":"Barometer","2":"Compass","3":"GPS lock","4":"INS","5":"Parameters","6":"RC Channels","7":"Board voltage","8":"Battery Level","10":"Logging Available","11":"Hardware safety switch","12":"GPS Configuration","13":"System","14":"Mission","15":"Rangefinder","16":"Camera","17":"AuxAuth","18":"VisualOdometry","19":"FFT"},"Description":"Checks prior to arming motor. This is a bitmask of checks that will be performed before allowing arming. For most users it is recommended to leave this at the default of 1 (all checks enabled). You can select whatever checks you prefer by adding together the values of each check type to set this parameter. For example, to only allow arming when you have GPS lock and no RC failsafe you would set ARMING_CHECK to 72.","DisplayName":"Arm Checks to Perform (bitmask)","User":"Standard","__field_text":"\n // @DisplayName: Arm Checks to Perform (bitmask)\n // @Description: Checks prior to arming motor. This is a bitmask of checks that will be performed before allowing arming. For most users it is recommended to leave this at the default of 1 (all checks enabled). You can select whatever checks you prefer by adding together the values of each check type to set this parameter. For example, to only allow arming when you have GPS lock and no RC failsafe you would set ARMING_CHECK to 72.\n // @Bitmask: 0:All,1:Barometer,2:Compass,3:GPS lock,4:INS,5:Parameters,6:RC Channels,7:Board voltage,8:Battery Level,10:Logging Available,11:Hardware safety switch,12:GPS Configuration,13:System,14:Mission,15:Rangefinder,16:Camera,17:AuxAuth,18:VisualOdometry,19:FFT\n // @Bitmask{Plane}: 0:All,1:Barometer,2:Compass,3:GPS lock,4:INS,5:Parameters,6:RC Channels,7:Board voltage,8:Battery Level,9:Airspeed,10:Logging Available,11:Hardware safety switch,12:GPS Configuration,13:System,14:Mission,15:Rangefinder,16:Camera,17:AuxAuth,19:FFT\n // @User: Standard"},"ARMING_MAGTHRESH":{"Description":"Compass magnetic field strength error threshold vs earth magnetic model. X and y axis are compared using this threhold, Z axis uses 2x this threshold. 0 to disable check","DisplayName":"Compass magnetic field strength error threshold vs earth magnetic model","Range":{"high":"500","low":"0"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass magnetic field strength error threshold vs earth magnetic model\n // @Description: Compass magnetic field strength error threshold vs earth magnetic model. X and y axis are compared using this threhold, Z axis uses 2x this threshold. 0 to disable check\n // @Units: mGauss\n // @Range: 0 500\n // @User: Advanced"},"ARMING_MIS_ITEMS":{"Bitmask":{"0":"Land","1":"VTOL Land","2":"DO_LAND_START","3":"Takeoff","4":"VTOL Takeoff","5":"Rallypoint","6":"RTL"},"Description":"Bitmask of mission items that are required to be planned in order to arm the aircraft","DisplayName":"Required mission items","User":"Advanced","__field_text":"\n // @DisplayName: Required mission items\n // @Description: Bitmask of mission items that are required to be planned in order to arm the aircraft\n // @Bitmask: 0:Land,1:VTOL Land,2:DO_LAND_START,3:Takeoff,4:VTOL Takeoff,5:Rallypoint,6:RTL\n // @User: Advanced"},"ARMING_OPTIONS":{"Description":"Options that can be applied to change arming behaviour","DisplayName":"Arming options","User":"Advanced","Values":{"0":"None","1":"Disable prearm display","2":"Do not send status text on state change"},"__field_text":"\n // @DisplayName: Arming options\n // @Description: Options that can be applied to change arming behaviour\n // @Values: 0:None,1:Disable prearm display,2:Do not send status text on state change\n // @User: Advanced"},"ARMING_RUDDER":{"Description":"Allow arm/disarm by rudder input. When enabled arming can be done with right rudder, disarming with left rudder. Rudder arming only works with throttle at zero +- deadzone (RCx_DZ). Depending on vehicle type, arming in certain modes is prevented. See the wiki for each vehicle. Caution is recommended when arming if it is allowed in an auto-throttle mode!","DisplayName":"Arming with Rudder enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"ArmingOnly","2":"ArmOrDisarm"},"__field_text":"\n // @DisplayName: Arming with Rudder enable/disable\n // @Description: Allow arm/disarm by rudder input. When enabled arming can be done with right rudder, disarming with left rudder. Rudder arming only works with throttle at zero +- deadzone (RCx_DZ). Depending on vehicle type, arming in certain modes is prevented. See the wiki for each vehicle. Caution is recommended when arming if it is allowed in an auto-throttle mode!\n // @Values: 0:Disabled,1:ArmingOnly,2:ArmOrDisarm\n // @User: Advanced"},"AROT_AS_ACC_MAX":{"Description":"Maximum forward acceleration to apply in speed controller.","DisplayName":"Forward Acceleration Limit","Increment":"10","Range":{"high":"60","low":"30"},"Units":"cm/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Forward Acceleration Limit\n // @Description: Maximum forward acceleration to apply in speed controller.\n // @Units: cm/s/s\n // @Range: 30 60\n // @Increment: 10\n // @User: Advanced"},"AROT_BAIL_TIME":{"Description":"Time in seconds from bail out initiated to the exit of autorotation flight mode.","DisplayName":"Bail Out Timer","Increment":"0.1","Range":{"high":"4","low":"0.5"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Bail Out Timer\n // @Description: Time in seconds from bail out initiated to the exit of autorotation flight mode.\n // @Units: s\n // @Range: 0.5 4\n // @Increment: 0.1\n // @User: Advanced"},"AROT_COL_FILT_E":{"Description":"Cut-off frequency for collective low pass filter. For the entry phase. Acts as a following trim. Must be higher than AROT_COL_FILT_G.","DisplayName":"Entry Phase Collective Filter","Increment":"0.01","Range":{"high":"0.5","low":"0.2"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Entry Phase Collective Filter\n // @Description: Cut-off frequency for collective low pass filter. For the entry phase. Acts as a following trim. Must be higher than AROT_COL_FILT_G.\n // @Units: Hz\n // @Range: 0.2 0.5\n // @Increment: 0.01\n // @User: Advanced"},"AROT_COL_FILT_G":{"Description":"Cut-off frequency for collective low pass filter. For the glide phase. Acts as a following trim. Must be lower than AROT_COL_FILT_E.","DisplayName":"Glide Phase Collective Filter","Increment":"0.01","Range":{"high":"0.15","low":"0.03"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Glide Phase Collective Filter\n // @Description: Cut-off frequency for collective low pass filter. For the glide phase. Acts as a following trim. Must be lower than AROT_COL_FILT_E.\n // @Units: Hz\n // @Range: 0.03 0.15\n // @Increment: 0.01\n // @User: Advanced"},"AROT_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the autonomous autorotation capability.","DisplayName":"Enable settings for RSC Setpoint","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable settings for RSC Setpoint\n // @Description: Allows you to enable (1) or disable (0) the autonomous autorotation capability.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"AROT_FW_V_FF":{"Description":"Velocity (horizontal) input filter. Corrects the target acceleration proportionally to the desired velocity.","DisplayName":"Velocity (horizontal) feed forward","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) feed forward\n // @Description: Velocity (horizontal) input filter. Corrects the target acceleration proportionally to the desired velocity.\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Advanced"},"AROT_FW_V_P":{"Description":"Velocity (horizontal) P gain. Determines the proportion of the target acceleration based on the velocity error.","DisplayName":"Velocity (horizontal) P gain","Increment":"0.1","Range":{"high":"6.0","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) P gain\n // @Description: Velocity (horizontal) P gain. Determines the proportion of the target acceleration based on the velocity error.\n // @Range: 0.1 6.0\n // @Increment: 0.1\n // @User: Advanced"},"AROT_HS_P":{"Description":"Increase value to increase sensitivity of head speed controller during autonomous autorotation.","DisplayName":"P gain for head speed controller","Increment":"0.01","Range":{"high":"1","low":"0.3"},"User":"Advanced","__field_text":"\n // @DisplayName: P gain for head speed controller\n // @Description: Increase value to increase sensitivity of head speed controller during autonomous autorotation.\n // @Range: 0.3 1\n // @Increment: 0.01\n // @User: Advanced"},"AROT_HS_SENSOR":{"Description":"Allocate the RPM sensor instance to use for measuring head speed. RPM1 = 0. RPM2 = 1.","DisplayName":"Main Rotor RPM Sensor ","Increment":"0.1","Range":{"high":"3","low":"0.5"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Main Rotor RPM Sensor \n // @Description: Allocate the RPM sensor instance to use for measuring head speed. RPM1 = 0. RPM2 = 1.\n // @Units: s\n // @Range: 0.5 3\n // @Increment: 0.1\n // @User: Advanced"},"AROT_HS_SET_PT":{"Description":"The target head speed in RPM during autorotation. Start by setting to desired hover speed and tune from there as necessary.","DisplayName":"Target Head Speed","Increment":"1","Range":{"high":"2800","low":"1000"},"Units":"RPM","User":"Advanced","__field_text":"\n // @DisplayName: Target Head Speed\n // @Description: The target head speed in RPM during autorotation. Start by setting to desired hover speed and tune from there as necessary.\n // @Units: RPM\n // @Range: 1000 2800\n // @Increment: 1\n // @User: Advanced"},"AROT_TARG_SP":{"Description":"Target ground speed in cm/s for the autorotation controller to try and achieve/ maintain during the glide phase.","DisplayName":"Target Glide Ground Speed","Increment":"50","Range":{"high":"2000","low":"800"},"Units":"cm/s","User":"Advanced","__field_text":"\n // @DisplayName: Target Glide Ground Speed\n // @Description: Target ground speed in cm/s for the autorotation controller to try and achieve/ maintain during the glide phase.\n // @Units: cm/s\n // @Range: 800 2000\n // @Increment: 50\n // @User: Advanced"},"ARSPD2_AUTOCAL":{"Description":"Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.","DisplayName":"This parameter and function is not used by this vehicle. Always set to 0.","User":"Advanced","__field_text":"\n // @DisplayName: Automatic airspeed ratio calibration\n // @DisplayName{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle. Always set to 0.\n // @Description: Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.\n // @User: Advanced"},"ARSPD2_BUS":{"Description":"Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.","DisplayName":"Airspeed I2C bus","RebootRequired":"True","User":"Advanced","Values":{"0":"Bus0","1":"Bus1","2":"Bus2"},"__field_text":"\n // @DisplayName: Airspeed I2C bus\n // @Description: Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.\n // @Values: 0:Bus0,1:Bus1,2:Bus2\n // @RebootRequired: True\n // @User: Advanced"},"ARSPD2_DEVID":{"Description":"Airspeed sensor ID, taking into account its type, bus and instance","DisplayName":"Airspeed ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ID\n // @Description: Airspeed sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"ARSPD2_OFFSET":{"Description":"Airspeed calibration offset","DisplayName":"Airspeed offset","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed offset\n // @Description: Airspeed calibration offset\n // @Increment: 0.1\n // @User: Advanced"},"ARSPD2_PIN":{"Description":"The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. ","DisplayName":"Airspeed pin","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed pin\n // @Description: The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. \n // @User: Advanced"},"ARSPD2_PSI_RANGE":{"Description":"This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device","DisplayName":"The PSI range of the device","User":"Advanced","__field_text":"\n // @DisplayName: The PSI range of the device\n // @Description: This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device\n // @User: Advanced"},"ARSPD2_RATIO":{"Description":"Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.","DisplayName":"Airspeed ratio","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ratio\n // @Description: Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.\n // @Increment: 0.1\n // @User: Advanced"},"ARSPD2_SKIP_CAL":{"Description":"This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.","DisplayName":"Skip airspeed offset calibration on startup","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Skip airspeed offset calibration on startup\n // @Description: This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.\n // @Values: 0:Disable,1:Enable\n // @User: Advanced"},"ARSPD2_TUBE_ORDR":{"Description":"This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.","DisplayName":"Control pitot tube order","User":"Advanced","Values":{"0":"Normal","1":"Swapped","2":"Auto Detect"},"__field_text":"\n // @DisplayName: Control pitot tube order\n // @Description: This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.\n // @User: Advanced\n // @Values: 0:Normal,1:Swapped,2:Auto Detect"},"ARSPD2_TYPE":{"Description":"Type of airspeed sensor","DisplayName":"Airspeed type","User":"Standard","Values":{"0":"None","1":"I2C-MS4525D0","2":"Analog","3":"I2C-MS5525","4":"I2C-MS5525 (0x76)","5":"I2C-MS5525 (0x77)","6":"I2C-SDP3X","7":"I2C-DLVR-5in","8":"DroneCAN","9":"I2C-DLVR-10in","10":"I2C-DLVR-20in","11":"I2C-DLVR-30in","12":"I2C-DLVR-60in","13":"NMEA water speed","14":"MSP","15":"ASP5033","16":"ExternalAHRS","100":"SITL"},"__field_text":"\n // @DisplayName: Airspeed type\n // @Description: Type of airspeed sensor\n // @Values: 0:None,1:I2C-MS4525D0,2:Analog,3:I2C-MS5525,4:I2C-MS5525 (0x76),5:I2C-MS5525 (0x77),6:I2C-SDP3X,7:I2C-DLVR-5in,8:DroneCAN,9:I2C-DLVR-10in,10:I2C-DLVR-20in,11:I2C-DLVR-30in,12:I2C-DLVR-60in,13:NMEA water speed,14:MSP,15:ASP5033,16:ExternalAHRS,100:SITL\n // @User: Standard"},"ARSPD2_USE":{"Description":"This parameter is not used by this vehicle. Always set to 0.","DisplayName":"Airspeed use","User":"Standard","Values":{"0":"DoNotUse","1":"Use","2":"UseWhenZeroThrottle"},"__field_text":"\n // @DisplayName: Airspeed use\n // @Description: Enables airspeed use for automatic throttle modes and replaces control from THR_TRIM. Continues to display and log airspeed if set to 0. Uses airspeed for control if set to 1. Only uses airspeed when throttle = 0 if set to 2 (useful for gliders with airspeed sensors behind propellers).\n // @Description{Copter, Blimp, Rover, Sub}: This parameter is not used by this vehicle. Always set to 0.\n // @Values: 0:DoNotUse,1:Use,2:UseWhenZeroThrottle\n // @User: Standard"},"ARSPD_AUTOCAL":{"Description":"Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.","DisplayName":"This parameter and function is not used by this vehicle. Always set to 0.","User":"Advanced","__field_text":"\n // @DisplayName: Automatic airspeed ratio calibration\n // @DisplayName{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle. Always set to 0.\n // @Description: Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.\n // @User: Advanced"},"ARSPD_BUS":{"Description":"Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.","DisplayName":"Airspeed I2C bus","RebootRequired":"True","User":"Advanced","Values":{"0":"Bus0","1":"Bus1","2":"Bus2"},"__field_text":"\n // @DisplayName: Airspeed I2C bus\n // @Description: Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.\n // @Values: 0:Bus0,1:Bus1,2:Bus2\n // @RebootRequired: True\n // @User: Advanced"},"ARSPD_DEVID":{"Description":"Airspeed sensor ID, taking into account its type, bus and instance","DisplayName":"Airspeed ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ID\n // @Description: Airspeed sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"ARSPD_ENABLE":{"Description":"Enable airspeed sensor support","DisplayName":"Airspeed Enable","User":"Standard","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Airspeed Enable\n // @Description: Enable airspeed sensor support\n // @Values: 0:Disable, 1:Enable\n // @User: Standard"},"ARSPD_OFFSET":{"Description":"Airspeed calibration offset","DisplayName":"Airspeed offset","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed offset\n // @Description: Airspeed calibration offset\n // @Increment: 0.1\n // @User: Advanced"},"ARSPD_OFF_PCNT":{"Description":"The maximum percentage speed change in airspeed reports that is allowed due to offset changes between calibrations before a warning is issued. This potential speed error is in percent of ASPD_FBW_MIN. 0 disables. Helps warn of calibrations without pitot being covered.","DisplayName":"Maximum offset cal speed error ","Range":{"high":"10.0","low":"0.0"},"Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: Maximum offset cal speed error \n // @Description: The maximum percentage speed change in airspeed reports that is allowed due to offset changes between calibrations before a warning is issued. This potential speed error is in percent of ASPD_FBW_MIN. 0 disables. Helps warn of calibrations without pitot being covered.\n // @Range: 0.0 10.0\n // @Units: %\n // @User: Advanced"},"ARSPD_OPTIONS":{"Bitmask":{"0":"SpeedMismatchDisable","1":"AllowSpeedMismatchRecovery","2":"DisableVoltageCorrection","3":"UseEkf3Consistency"},"Description":"This parameter and function is not used by this vehicle. Always set to 0.","DisplayName":"Airspeed options bitmask","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed options bitmask\n // @Description: Bitmask of options to use with airspeed. 0:Disable use based on airspeed/groundspeed mismatch (see ARSPD_WIND_MAX), 1:Automatically reenable use based on airspeed/groundspeed mismatch recovery (see ARSPD_WIND_MAX) 2:Disable voltage correction, 3:Check that the airspeed is statistically consistent with the navigation EKF vehicle and wind velocity estimates using EKF3 (requires AHRS_EKF_TYPE = 3)\n // @Description{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle. Always set to 0.\n // @Bitmask: 0:SpeedMismatchDisable, 1:AllowSpeedMismatchRecovery, 2:DisableVoltageCorrection, 3:UseEkf3Consistency\n // @User: Advanced"},"ARSPD_PIN":{"Description":"The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. ","DisplayName":"Airspeed pin","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed pin\n // @Description: The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. \n // @User: Advanced"},"ARSPD_PRIMARY":{"Description":"This selects which airspeed sensor will be the primary if multiple sensors are found","DisplayName":"Primary airspeed sensor","User":"Advanced","Values":{"0":"FirstSensor","1":"2ndSensor"},"__field_text":"\n // @DisplayName: Primary airspeed sensor\n // @Description: This selects which airspeed sensor will be the primary if multiple sensors are found\n // @Values: 0:FirstSensor,1:2ndSensor\n // @User: Advanced"},"ARSPD_PSI_RANGE":{"Description":"This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device","DisplayName":"The PSI range of the device","User":"Advanced","__field_text":"\n // @DisplayName: The PSI range of the device\n // @Description: This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device\n // @User: Advanced"},"ARSPD_RATIO":{"Description":"Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.","DisplayName":"Airspeed ratio","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ratio\n // @Description: Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.\n // @Increment: 0.1\n // @User: Advanced"},"ARSPD_SKIP_CAL":{"Description":"This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.","DisplayName":"Skip airspeed offset calibration on startup","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Skip airspeed offset calibration on startup\n // @Description: This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.\n // @Values: 0:Disable,1:Enable\n // @User: Advanced"},"ARSPD_TUBE_ORDER":{"Description":"This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.","DisplayName":"Control pitot tube order","User":"Advanced","Values":{"0":"Normal","1":"Swapped","2":"Auto Detect"},"__field_text":"\n // @DisplayName: Control pitot tube order\n // @Description: This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.\n // @User: Advanced\n // @Values: 0:Normal,1:Swapped,2:Auto Detect"},"ARSPD_TUBE_ORDR":{"Description":"This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.","DisplayName":"Control pitot tube order","User":"Advanced","Values":{"0":"Normal","1":"Swapped","2":"Auto Detect"},"__field_text":"\n // @DisplayName: Control pitot tube order\n // @Description: This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.\n // @User: Advanced\n // @Values: 0:Normal,1:Swapped,2:Auto Detect"},"ARSPD_TYPE":{"Description":"Type of airspeed sensor","DisplayName":"Airspeed type","User":"Standard","Values":{"0":"None","1":"I2C-MS4525D0","2":"Analog","3":"I2C-MS5525","4":"I2C-MS5525 (0x76)","5":"I2C-MS5525 (0x77)","6":"I2C-SDP3X","7":"I2C-DLVR-5in","8":"DroneCAN","9":"I2C-DLVR-10in","10":"I2C-DLVR-20in","11":"I2C-DLVR-30in","12":"I2C-DLVR-60in","13":"NMEA water speed","14":"MSP","15":"ASP5033","16":"ExternalAHRS","100":"SITL"},"__field_text":"\n // @DisplayName: Airspeed type\n // @Description: Type of airspeed sensor\n // @Values: 0:None,1:I2C-MS4525D0,2:Analog,3:I2C-MS5525,4:I2C-MS5525 (0x76),5:I2C-MS5525 (0x77),6:I2C-SDP3X,7:I2C-DLVR-5in,8:DroneCAN,9:I2C-DLVR-10in,10:I2C-DLVR-20in,11:I2C-DLVR-30in,12:I2C-DLVR-60in,13:NMEA water speed,14:MSP,15:ASP5033,16:ExternalAHRS,100:SITL\n // @User: Standard"},"ARSPD_USE":{"Description":"This parameter is not used by this vehicle. Always set to 0.","DisplayName":"Airspeed use","User":"Standard","Values":{"0":"DoNotUse","1":"Use","2":"UseWhenZeroThrottle"},"__field_text":"\n // @DisplayName: Airspeed use\n // @Description: Enables airspeed use for automatic throttle modes and replaces control from THR_TRIM. Continues to display and log airspeed if set to 0. Uses airspeed for control if set to 1. Only uses airspeed when throttle = 0 if set to 2 (useful for gliders with airspeed sensors behind propellers).\n // @Description{Copter, Blimp, Rover, Sub}: This parameter is not used by this vehicle. Always set to 0.\n // @Values: 0:DoNotUse,1:Use,2:UseWhenZeroThrottle\n // @User: Standard"},"ARSPD_WIND_GATE":{"Description":"This parameter and function is not used by this vehicle.","DisplayName":"Re-enable Consistency Check Gate Size","Range":{"high":"10.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Re-enable Consistency Check Gate Size\n // @Description: Number of standard deviations applied to the re-enable EKF consistency check that is used when ARSPD_OPTIONS bit position 3 is set. Larger values will make the re-enabling of the airspeed sensor faster, but increase the likelihood of re-enabling a degraded sensor. The value can be tuned by using the ARSP.TR log message by setting ARSPD_WIND_GATE to a value that is higher than the value for ARSP.TR observed with a healthy airspeed sensor. Occasional transients in ARSP.TR above the value set by ARSPD_WIND_GATE can be tolerated provided they are less than 5 seconds in duration and less than 10% duty cycle.\n // @Description{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle.\n // @Range: 0.0 10.0\n // @User: Advanced"},"ARSPD_WIND_MAX":{"Description":"This parameter and function is not used by this vehicle. Always set to 0.","DisplayName":"Maximum airspeed and ground speed difference","Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Maximum airspeed and ground speed difference\n // @Description: If the difference between airspeed and ground speed is greater than this value the sensor will be marked unhealthy. Using ARSPD_OPTION this health value can be used to disable the sensor.\n // @Description{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle. Always set to 0.\n // @Units: m/s\n // @User: Advanced"},"ARSPD_WIND_WARN":{"Description":"This parameter and function is not used by this vehicle. Always set to 0.","DisplayName":"Airspeed and GPS speed difference that gives a warning","Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed and GPS speed difference that gives a warning\n // @Description: If the difference between airspeed and GPS speed is greater than this value the sensor will issue a warning. If 0 ARSPD_WIND_MAX is used.\n // @Description{Copter, Blimp, Rover, Sub}: This parameter and function is not used by this vehicle. Always set to 0.\n // @Units: m/s\n // @User: Advanced"},"ATC_ACCEL_P_MAX":{"Description":"Maximum acceleration in pitch axis","DisplayName":"Acceleration Max for Pitch","Increment":"1000","Range":{"high":"180000","low":"0"},"Units":"cdeg/s/s","User":"Advanced","Values":{"0":"Disabled","30000":"VerySlow","72000":"Slow","108000":"Medium","162000":"Fast"},"__field_text":"\n // @DisplayName: Acceleration Max for Pitch\n // @Description: Maximum acceleration in pitch axis\n // @Units: cdeg/s/s\n // @Range: 0 180000\n // @Increment: 1000\n // @Values: 0:Disabled, 30000:VerySlow, 72000:Slow, 108000:Medium, 162000:Fast\n // @User: Advanced"},"ATC_ACCEL_R_MAX":{"Description":"Maximum acceleration in roll axis","DisplayName":"Acceleration Max for Roll","Increment":"1000","Range":{"high":"180000","low":"0"},"Units":"cdeg/s/s","User":"Advanced","Values":{"0":"Disabled","30000":"VerySlow","72000":"Slow","108000":"Medium","162000":"Fast"},"__field_text":"\n // @DisplayName: Acceleration Max for Roll\n // @Description: Maximum acceleration in roll axis\n // @Units: cdeg/s/s\n // @Range: 0 180000\n // @Increment: 1000\n // @Values: 0:Disabled, 30000:VerySlow, 72000:Slow, 108000:Medium, 162000:Fast\n // @User: Advanced"},"ATC_ACCEL_Y_MAX":{"Description":"Maximum acceleration in yaw axis","DisplayName":"Acceleration Max for Yaw","Increment":"1000","Range":{"high":"72000","low":"0"},"Units":"cdeg/s/s","User":"Advanced","Values":{"0":"Disabled","9000":"VerySlow","18000":"Slow","36000":"Medium","54000":"Fast"},"__field_text":"\n // @DisplayName: Acceleration Max for Yaw\n // @Description: Maximum acceleration in yaw axis\n // @Units: cdeg/s/s\n // @Range: 0 72000\n // @Values: 0:Disabled, 9000:VerySlow, 18000:Slow, 36000:Medium, 54000:Fast\n // @Increment: 1000\n // @User: Advanced"},"ATC_ANGLE_BOOST":{"Description":"Angle Boost increases output throttle as the vehicle leans to reduce loss of altitude","DisplayName":"Angle Boost","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Angle Boost\n // @Description: Angle Boost increases output throttle as the vehicle leans to reduce loss of altitude\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"ATC_ANG_LIM_TC":{"Description":"Angle Limit (to maintain altitude) Time Constant","DisplayName":"Angle Limit (to maintain altitude) Time Constant","Range":{"high":"10.0","low":"0.5"},"User":"Advanced","__field_text":"\n // @DisplayName: Angle Limit (to maintain altitude) Time Constant\n // @Description: Angle Limit (to maintain altitude) Time Constant\n // @Range: 0.5 10.0\n // @User: Advanced"},"ATC_ANG_PIT_P":{"Description":"Pitch axis angle controller P gain. Converts the error between the desired pitch angle and actual angle to a desired pitch rate","DisplayName":"Pitch axis angle controller P gain","Range":{"high":"12.000","low":"3.000"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis angle controller P gain\n // @Description: Pitch axis angle controller P gain. Converts the error between the desired pitch angle and actual angle to a desired pitch rate\n // @Range: 3.000 12.000\n // @Range{Sub}: 0.0 12.000\n // @User: Standard"},"ATC_ANG_RLL_P":{"Description":"Roll axis angle controller P gain. Converts the error between the desired roll angle and actual angle to a desired roll rate","DisplayName":"Roll axis angle controller P gain","Range":{"high":"12.000","low":"3.000"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis angle controller P gain\n // @Description: Roll axis angle controller P gain. Converts the error between the desired roll angle and actual angle to a desired roll rate\n // @Range: 3.000 12.000\n // @Range{Sub}: 0.0 12.000\n // @User: Standard"},"ATC_ANG_YAW_P":{"Description":"Yaw axis angle controller P gain. Converts the error between the desired yaw angle and actual angle to a desired yaw rate","DisplayName":"Yaw axis angle controller P gain","Range":{"high":"12.000","low":"3.000"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis angle controller P gain\n // @Description: Yaw axis angle controller P gain. Converts the error between the desired yaw angle and actual angle to a desired yaw rate\n // @Range: 3.000 12.000\n // @Range{Sub}: 0.0 6.000\n // @User: Standard"},"ATC_HOVR_ROL_TRM":{"Description":"Trim the hover roll angle to counter tail rotor thrust in a hover","DisplayName":"Hover Roll Trim","Increment":"10","Range":{"high":"1000","low":"0"},"Units":"cdeg","User":"Advanced","__field_text":"\n // @DisplayName: Hover Roll Trim\n // @Description: Trim the hover roll angle to counter tail rotor thrust in a hover\n // @Units: cdeg\n // @Increment: 10\n // @Range: 0 1000\n // @User: Advanced"},"ATC_INPUT_TC":{"Description":"Attitude control input time constant. Low numbers lead to sharper response, higher numbers to softer response","DisplayName":"Attitude control input time constant","Increment":"0.01","Range":{"high":"1","low":"0"},"Units":"s","User":"Standard","Values":{"0.05":"Very Crisp","0.1":"Crisp","0.15":"Medium","0.2":"Soft","0.5":"Very Soft"},"__field_text":"\n // @DisplayName: Attitude control input time constant\n // @Description: Attitude control input time constant. Low numbers lead to sharper response, higher numbers to softer response\n // @Units: s\n // @Range: 0 1\n // @Increment: 0.01\n // @Values: 0.5:Very Soft, 0.2:Soft, 0.15:Medium, 0.1:Crisp, 0.05:Very Crisp\n // @User: Standard"},"ATC_PIRO_COMP":{"Description":"Pirouette compensation enabled","DisplayName":"Piro Comp Enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Piro Comp Enable\n // @Description: Pirouette compensation enabled\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"ATC_RATE_FF_ENAB":{"Description":"Controls whether body-frame rate feedforward is enabled or disabled","DisplayName":"Rate Feedforward Enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Rate Feedforward Enable\n // @Description: Controls whether body-frame rate feedforward is enabled or disabled\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"ATC_RATE_P_MAX":{"Description":"Maximum angular velocity in pitch axis","DisplayName":"Angular Velocity Max for Pitch","Increment":"1","Range":{"high":"1080","low":"0"},"Units":"deg/s","User":"Advanced","Values":{"0":"Disabled","60":"Slow","180":"Medium","360":"Fast"},"__field_text":"\n // @DisplayName: Angular Velocity Max for Pitch\n // @Description: Maximum angular velocity in pitch axis\n // @Units: deg/s\n // @Range: 0 1080\n // @Increment: 1\n // @Values: 0:Disabled, 60:Slow, 180:Medium, 360:Fast\n // @User: Advanced"},"ATC_RATE_R_MAX":{"Description":"Maximum angular velocity in roll axis","DisplayName":"Angular Velocity Max for Roll","Increment":"1","Range":{"high":"1080","low":"0"},"Units":"deg/s","User":"Advanced","Values":{"0":"Disabled","60":"Slow","180":"Medium","360":"Fast"},"__field_text":"\n // @DisplayName: Angular Velocity Max for Roll\n // @Description: Maximum angular velocity in roll axis\n // @Units: deg/s\n // @Range: 0 1080\n // @Increment: 1\n // @Values: 0:Disabled, 60:Slow, 180:Medium, 360:Fast\n // @User: Advanced"},"ATC_RATE_Y_MAX":{"Description":"Maximum angular velocity in yaw axis","DisplayName":"Angular Velocity Max for Yaw","Increment":"1","Range":{"high":"1080","low":"0"},"Units":"deg/s","User":"Advanced","Values":{"0":"Disabled","60":"Slow","180":"Medium","360":"Fast"},"__field_text":"\n // @DisplayName: Angular Velocity Max for Yaw\n // @Description: Maximum angular velocity in yaw axis\n // @Units: deg/s\n // @Range: 0 1080\n // @Increment: 1\n // @Values: 0:Disabled, 60:Slow, 180:Medium, 360:Fast\n // @User: Advanced"},"ATC_RAT_PIT_D":{"Description":"Pitch axis rate controller D gain. Compensates for short-term change in desired pitch rate vs actual pitch rate","DisplayName":"Pitch axis rate controller D gain","Increment":"0.001","Range":{"high":"0.03","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller D gain\n // @Description: Pitch axis rate controller D gain. Compensates for short-term change in desired pitch rate vs actual pitch rate\n // @Range: 0.0 0.03\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_D_FF":{"Description":"FF D Gain which produces an output that is proportional to the rate of change of the target","DisplayName":"Pitch Derivative FeedForward Gain","Increment":"0.0001","Range":{"high":"0.02","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pitch Derivative FeedForward Gain\n // @Description: FF D Gain which produces an output that is proportional to the rate of change of the target\n // @Range: 0 0.02\n // @Increment: 0.0001\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_FF":{"Description":"Pitch axis rate controller feed forward","DisplayName":"Pitch axis rate controller feed forward","Increment":"0.001","Range":{"high":"0.5","low":"0.05"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller feed forward\n // @Description: Pitch axis rate controller feed forward\n // @Range: 0.05 0.5\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_FLTD":{"Description":"Pitch axis rate controller derivative frequency in Hz","DisplayName":"Pitch axis rate controller derivative frequency in Hz","Increment":"1","Range":{"high":"50","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller derivative frequency in Hz\n // @Description: Pitch axis rate controller derivative frequency in Hz\n // @Range: 0 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_FLTE":{"Description":"Pitch axis rate controller error frequency in Hz","DisplayName":"Pitch axis rate controller error frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller error frequency in Hz\n // @Description: Pitch axis rate controller error frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_FLTT":{"Description":"Pitch axis rate controller target frequency in Hz","DisplayName":"Pitch axis rate controller target frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller target frequency in Hz\n // @Description: Pitch axis rate controller target frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_I":{"Description":"Pitch axis rate controller I gain. Corrects long-term difference in desired pitch rate vs actual pitch rate","DisplayName":"Pitch axis rate controller I gain","Increment":"0.01","Range":{"high":"0.6","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller I gain\n // @Description: Pitch axis rate controller I gain. Corrects long-term difference in desired pitch rate vs actual pitch rate\n // @Range: 0.0 0.6\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_ILMI":{"Description":"Point below which I-term will not leak down","DisplayName":"Pitch axis rate controller I-term leak minimum","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pitch axis rate controller I-term leak minimum\n // @Description: Point below which I-term will not leak down\n // @Range: 0 1\n // @User: Advanced"},"ATC_RAT_PIT_IMAX":{"Description":"Pitch axis rate controller I gain maximum. Constrains the maximum that the I term will output","DisplayName":"Pitch axis rate controller I gain maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller I gain maximum\n // @Description: Pitch axis rate controller I gain maximum. Constrains the maximum that the I term will output\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_NEF":{"Description":"Pitch Error notch filter index","DisplayName":"Pitch Error notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Pitch Error notch filter index\n // @Description: Pitch Error notch filter index\n // @Range: 1 8\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_NTF":{"Description":"Pitch Target notch filter index","DisplayName":"Pitch Target notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Pitch Target notch filter index\n // @Description: Pitch Target notch filter index\n // @Range: 1 8\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_P":{"Description":"Pitch axis rate controller P gain. Corrects in proportion to the difference between the desired pitch rate vs actual pitch rate","DisplayName":"Pitch axis rate controller P gain","Increment":"0.005","Range":{"high":"0.35","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Pitch axis rate controller P gain\n // @Description: Pitch axis rate controller P gain. Corrects in proportion to the difference between the desired pitch rate vs actual pitch rate\n // @Range: 0.0 0.35\n // @Increment: 0.005\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_PIT_PDMX":{"Description":"Pitch axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output","DisplayName":"Pitch axis rate controller PD sum maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"__field_text":"\n // @DisplayName: Pitch axis rate controller PD sum maximum\n // @Description: Pitch axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output\n // @Range: 0 1\n // @Increment: 0.01"},"ATC_RAT_PIT_SMAX":{"Description":"Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.","DisplayName":"Pitch slew rate limit","Increment":"0.5","Range":{"high":"200","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pitch slew rate limit\n // @Description: Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.\n // @Range: 0 200\n // @Increment: 0.5\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_D":{"Description":"Roll axis rate controller D gain. Compensates for short-term change in desired roll rate vs actual roll rate","DisplayName":"Roll axis rate controller D gain","Increment":"0.001","Range":{"high":"0.03","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller D gain\n // @Description: Roll axis rate controller D gain. Compensates for short-term change in desired roll rate vs actual roll rate\n // @Range: 0.0 0.03\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_D_FF":{"Description":"FF D Gain which produces an output that is proportional to the rate of change of the target","DisplayName":"Roll Derivative FeedForward Gain","Increment":"0.0001","Range":{"high":"0.02","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Roll Derivative FeedForward Gain\n // @Description: FF D Gain which produces an output that is proportional to the rate of change of the target\n // @Range: 0 0.02\n // @Increment: 0.0001\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_FF":{"Description":"Roll axis rate controller feed forward","DisplayName":"Roll axis rate controller feed forward","Increment":"0.001","Range":{"high":"0.5","low":"0.05"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller feed forward\n // @Description: Roll axis rate controller feed forward\n // @Range: 0.05 0.5\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_FLTD":{"Description":"Roll axis rate controller derivative frequency in Hz","DisplayName":"Roll axis rate controller derivative frequency in Hz","Increment":"1","Range":{"high":"50","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller derivative frequency in Hz\n // @Description: Roll axis rate controller derivative frequency in Hz\n // @Range: 0 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_FLTE":{"Description":"Roll axis rate controller error frequency in Hz","DisplayName":"Roll axis rate controller error frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller error frequency in Hz\n // @Description: Roll axis rate controller error frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_FLTT":{"Description":"Roll axis rate controller target frequency in Hz","DisplayName":"Roll axis rate controller target frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller target frequency in Hz\n // @Description: Roll axis rate controller target frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_I":{"Description":"Roll axis rate controller I gain. Corrects long-term difference in desired roll rate vs actual roll rate","DisplayName":"Roll axis rate controller I gain","Increment":"0.01","Range":{"high":"0.6","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller I gain\n // @Description: Roll axis rate controller I gain. Corrects long-term difference in desired roll rate vs actual roll rate\n // @Range: 0.0 0.6\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_ILMI":{"Description":"Point below which I-term will not leak down","DisplayName":"Roll axis rate controller I-term leak minimum","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Roll axis rate controller I-term leak minimum\n // @Description: Point below which I-term will not leak down\n // @Range: 0 1\n // @User: Advanced"},"ATC_RAT_RLL_IMAX":{"Description":"Roll axis rate controller I gain maximum. Constrains the maximum that the I term will output","DisplayName":"Roll axis rate controller I gain maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller I gain maximum\n // @Description: Roll axis rate controller I gain maximum. Constrains the maximum that the I term will output\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_NEF":{"Description":"Roll Error notch filter index","DisplayName":"Roll Error notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Roll Error notch filter index\n // @Description: Roll Error notch filter index\n // @Range: 1 8\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_NTF":{"Description":"Roll Target notch filter index","DisplayName":"Roll Target notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Roll Target notch filter index\n // @Description: Roll Target notch filter index\n // @Range: 1 8\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_P":{"Description":"Roll axis rate controller P gain. Corrects in proportion to the difference between the desired roll rate vs actual roll rate","DisplayName":"Roll axis rate controller P gain","Increment":"0.005","Range":{"high":"0.35","low":"0.0"},"User":"Standard","__field_text":"\n // @DisplayName: Roll axis rate controller P gain\n // @Description: Roll axis rate controller P gain. Corrects in proportion to the difference between the desired roll rate vs actual roll rate\n // @Range: 0.0 0.35\n // @Increment: 0.005\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_RLL_PDMX":{"Description":"Roll axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output","DisplayName":"Roll axis rate controller PD sum maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"__field_text":"\n // @DisplayName: Roll axis rate controller PD sum maximum\n // @Description: Roll axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output\n // @Range: 0 1\n // @Increment: 0.01"},"ATC_RAT_RLL_SMAX":{"Description":"Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.","DisplayName":"Roll slew rate limit","Increment":"0.5","Range":{"high":"200","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Roll slew rate limit\n // @Description: Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.\n // @Range: 0 200\n // @Increment: 0.5\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_D":{"Description":"Yaw axis rate controller D gain. Compensates for short-term change in desired yaw rate vs actual yaw rate","DisplayName":"Yaw axis rate controller D gain","Increment":"0.001","Range":{"high":"0.02","low":"0.000"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller D gain\n // @Description: Yaw axis rate controller D gain. Compensates for short-term change in desired yaw rate vs actual yaw rate\n // @Range: 0.000 0.02\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_D_FF":{"Description":"FF D Gain which produces an output that is proportional to the rate of change of the target","DisplayName":"Yaw Derivative FeedForward Gain","Increment":"0.0001","Range":{"high":"0.02","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw Derivative FeedForward Gain\n // @Description: FF D Gain which produces an output that is proportional to the rate of change of the target\n // @Range: 0 0.02\n // @Increment: 0.0001\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_FF":{"Description":"Yaw axis rate controller feed forward","DisplayName":"Yaw axis rate controller feed forward","Increment":"0.001","Range":{"high":"0.5","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller feed forward\n // @Description: Yaw axis rate controller feed forward\n // @Range: 0 0.5\n // @Increment: 0.001\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_FLTD":{"Description":"Yaw axis rate controller derivative frequency in Hz","DisplayName":"Yaw axis rate controller derivative frequency in Hz","Increment":"1","Range":{"high":"50","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller derivative frequency in Hz\n // @Description: Yaw axis rate controller derivative frequency in Hz\n // @Range: 0 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_FLTE":{"Description":"Yaw axis rate controller error frequency in Hz","DisplayName":"Yaw axis rate controller error frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller error frequency in Hz\n // @Description: Yaw axis rate controller error frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_FLTT":{"Description":"Yaw axis rate controller target frequency in Hz","DisplayName":"Yaw axis rate controller target frequency in Hz","Increment":"1","Range":{"high":"50","low":"5"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller target frequency in Hz\n // @Description: Yaw axis rate controller target frequency in Hz\n // @Range: 5 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_I":{"Description":"Yaw axis rate controller I gain. Corrects long-term difference in desired yaw rate vs actual yaw rate","DisplayName":"Yaw axis rate controller I gain","Increment":"0.01","Range":{"high":"0.2","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller I gain\n // @Description: Yaw axis rate controller I gain. Corrects long-term difference in desired yaw rate vs actual yaw rate\n // @Range: 0.01 0.2\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_ILMI":{"Description":"Point below which I-term will not leak down","DisplayName":"Yaw axis rate controller I-term leak minimum","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw axis rate controller I-term leak minimum\n // @Description: Point below which I-term will not leak down\n // @Range: 0 1\n // @User: Advanced"},"ATC_RAT_YAW_IMAX":{"Description":"Yaw axis rate controller I gain maximum. Constrains the maximum that the I term will output","DisplayName":"Yaw axis rate controller I gain maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller I gain maximum\n // @Description: Yaw axis rate controller I gain maximum. Constrains the maximum that the I term will output\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_NEF":{"Description":"Yaw Error notch filter index","DisplayName":"Yaw Error notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw Error notch filter index\n // @Description: Yaw Error notch filter index\n // @Range: 1 8\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_NTF":{"Description":"Yaw Target notch filter index","DisplayName":"Yaw Target notch filter index","Range":{"high":"8","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Yaw Target notch filter index\n // @Description: Yaw Target notch filter index\n // @Range: 1 8\n // @Units: Hz\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_P":{"Description":"Yaw axis rate controller P gain. Corrects in proportion to the difference between the desired yaw rate vs actual yaw rate","DisplayName":"Yaw axis rate controller P gain","Increment":"0.005","Range":{"high":"0.60","low":"0.180"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw axis rate controller P gain\n // @Description: Yaw axis rate controller P gain. Corrects in proportion to the difference between the desired yaw rate vs actual yaw rate\n // @Range: 0.180 0.60\n // @Increment: 0.005\n // @User: Standard","path":"AC_AttitudeControl_Heli"},"ATC_RAT_YAW_PDMX":{"Description":"Yaw axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output","DisplayName":"Yaw axis rate controller PD sum maximum","Increment":"0.01","Range":{"high":"1","low":"0"},"__field_text":"\n // @DisplayName: Yaw axis rate controller PD sum maximum\n // @Description: Yaw axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output\n // @Range: 0 1\n // @Increment: 0.01"},"ATC_RAT_YAW_SMAX":{"Description":"Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.","DisplayName":"Yaw slew rate limit","Increment":"0.5","Range":{"high":"200","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw slew rate limit\n // @Description: Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.\n // @Range: 0 200\n // @Increment: 0.5\n // @User: Advanced","path":"AC_AttitudeControl_Heli"},"ATC_SLEW_YAW":{"Description":"Maximum rate the yaw target can be updated in Loiter, RTL, Auto flight modes","DisplayName":"Yaw target slew rate","Increment":"100","Range":{"high":"18000","low":"500"},"Units":"cdeg/s","User":"Advanced","__field_text":"\n // @DisplayName: Yaw target slew rate\n // @Description: Maximum rate the yaw target can be updated in Loiter, RTL, Auto flight modes\n // @Units: cdeg/s\n // @Range: 500 18000\n // @Increment: 100\n // @User: Advanced"},"ATC_THR_G_BOOST":{"Description":"Throttle-gain boost ratio. A value of 0 means no boosting is applied, a value of 1 means full boosting is applied. Describes the ratio increase that is applied to angle P and PD on pitch and roll.","DisplayName":"Throttle-gain boost","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle-gain boost\n // @Description: Throttle-gain boost ratio. A value of 0 means no boosting is applied, a value of 1 means full boosting is applied. Describes the ratio increase that is applied to angle P and PD on pitch and roll.\n // @Range: 0 1\n // @User: Advanced"},"ATC_THR_MIX_MAN":{"Description":"Throttle vs attitude control prioritisation used during manual flight (higher values mean we prioritise attitude control over throttle)","DisplayName":"Throttle Mix Manual","Range":{"high":"0.9","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle Mix Manual\n // @Description: Throttle vs attitude control prioritisation used during manual flight (higher values mean we prioritise attitude control over throttle)\n // @Range: 0.1 0.9\n // @User: Advanced"},"ATC_THR_MIX_MAX":{"Description":"Throttle vs attitude control prioritisation used during active flight (higher values mean we prioritise attitude control over throttle)","DisplayName":"Throttle Mix Maximum","Range":{"high":"0.9","low":"0.5"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle Mix Maximum\n // @Description: Throttle vs attitude control prioritisation used during active flight (higher values mean we prioritise attitude control over throttle)\n // @Range: 0.5 0.9\n // @User: Advanced"},"ATC_THR_MIX_MIN":{"Description":"Throttle vs attitude control prioritisation used when landing (higher values mean we prioritise attitude control over throttle)","DisplayName":"Throttle Mix Minimum","Range":{"high":"0.25","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle Mix Minimum\n // @Description: Throttle vs attitude control prioritisation used when landing (higher values mean we prioritise attitude control over throttle)\n // @Range: 0.1 0.25\n // @User: Advanced"},"AUTOTUNE_AGGR":{"Description":"Autotune aggressiveness. Defines the bounce back used to detect size of the D term.","DisplayName":"Autotune aggressiveness","Range":{"high":"0.10","low":"0.05"},"User":"Standard","__field_text":"\n // @DisplayName: Autotune aggressiveness\n // @Description: Autotune aggressiveness. Defines the bounce back used to detect size of the D term.\n // @Range: 0.05 0.10\n // @User: Standard"},"AUTOTUNE_AXES":{"Bitmask":{"0":"Roll","1":"Pitch","2":"Yaw"},"Description":"1-byte bitmap of axes to autotune","DisplayName":"Autotune axis bitmask","User":"Standard","__field_text":"\n // @DisplayName: Autotune axis bitmask\n // @Description: 1-byte bitmap of axes to autotune\n // @Bitmask: 0:Roll,1:Pitch,2:Yaw\n // @User: Standard","path":"AC_AutoTune_Heli"},"AUTOTUNE_FRQ_MAX":{"Description":"Defines the end frequency for sweeps and dwells","DisplayName":"AutoTune maximum sweep frequency","Range":{"high":"120","low":"50"},"User":"Standard","__field_text":"\n // @DisplayName: AutoTune maximum sweep frequency\n // @Description: Defines the end frequency for sweeps and dwells\n // @Range: 50 120\n // @User: Standard"},"AUTOTUNE_FRQ_MIN":{"Description":"Defines the start frequency for sweeps and dwells","DisplayName":"AutoTune minimum sweep frequency","Range":{"high":"30","low":"10"},"User":"Standard","__field_text":"\n // @DisplayName: AutoTune minimum sweep frequency\n // @Description: Defines the start frequency for sweeps and dwells\n // @Range: 10 30\n // @User: Standard"},"AUTOTUNE_GN_MAX":{"Description":"Defines the response gain (output/input) to tune","DisplayName":"AutoTune maximum response gain","Range":{"high":"2.5","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: AutoTune maximum response gain\n // @Description: Defines the response gain (output/input) to tune\n // @Range: 1 2.5\n // @User: Standard"},"AUTOTUNE_MIN_D":{"Description":"Defines the minimum D gain","DisplayName":"AutoTune minimum D","Range":{"high":"0.006","low":"0.001"},"User":"Standard","__field_text":"\n // @DisplayName: AutoTune minimum D\n // @Description: Defines the minimum D gain\n // @Range: 0.001 0.006\n // @User: Standard"},"AUTOTUNE_SEQ":{"Bitmask":{"0":"VFF","1":"Rate D/Rate P(incl max gain)","2":"Angle P","3":"Max Gain Only","4":"Tune Check"},"Description":"2-byte bitmask to select what tuning should be performed. Max gain automatically performed if Rate D is selected. Values: 7:All,1:VFF Only,2:Rate D/Rate P Only(incl max gain),4:Angle P Only,8:Max Gain Only,16:Tune Check,3:VFF and Rate D/Rate P(incl max gain),5:VFF and Angle P,6:Rate D/Rate P(incl max gain) and angle P","DisplayName":"AutoTune Sequence Bitmask","User":"Standard","__field_text":"\n // @DisplayName: AutoTune Sequence Bitmask\n // @Description: 2-byte bitmask to select what tuning should be performed. Max gain automatically performed if Rate D is selected. Values: 7:All,1:VFF Only,2:Rate D/Rate P Only(incl max gain),4:Angle P Only,8:Max Gain Only,16:Tune Check,3:VFF and Rate D/Rate P(incl max gain),5:VFF and Angle P,6:Rate D/Rate P(incl max gain) and angle P\n // @Bitmask: 0:VFF,1:Rate D/Rate P(incl max gain),2:Angle P,3:Max Gain Only,4:Tune Check\n // @User: Standard"},"AUTOTUNE_VELXY_P":{"Description":"Velocity xy P gain used to hold position during Max Gain, Rate P, and Rate D frequency sweeps","DisplayName":"AutoTune velocity xy P gain","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: AutoTune velocity xy P gain\n // @Description: Velocity xy P gain used to hold position during Max Gain, Rate P, and Rate D frequency sweeps\n // @Range: 0 1\n // @User: Standard"},"AUTO_OPTIONS":{"Bitmask":{"0":"Allow Arming","1":"Allow Takeoff Without Raising Throttle","2":"Ignore pilot yaw","7":"Allow weathervaning"},"Description":"A range of options that can be applied to change auto mode behaviour. Allow Arming allows the copter to be armed in Auto. Allow Takeoff Without Raising Throttle allows takeoff without the pilot having to raise the throttle. Ignore pilot yaw overrides the pilot's yaw stick being used while in auto.","DisplayName":"Auto mode options","User":"Advanced","__field_text":"\n // @DisplayName: Auto mode options\n // @Description: A range of options that can be applied to change auto mode behaviour. Allow Arming allows the copter to be armed in Auto. Allow Takeoff Without Raising Throttle allows takeoff without the pilot having to raise the throttle. Ignore pilot yaw overrides the pilot's yaw stick being used while in auto.\n // @Bitmask: 0:Allow Arming,1:Allow Takeoff Without Raising Throttle,2:Ignore pilot yaw,7:Allow weathervaning\n // @User: Advanced"},"AVD_ENABLE":{"Description":"Enable Avoidance using ADSB","DisplayName":"Enable Avoidance using ADSB","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable Avoidance using ADSB\n // @Description: Enable Avoidance using ADSB\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"AVD_F_ACTION":{"Description":"Specifies aircraft behaviour when a collision is imminent","DisplayName":"Collision Avoidance Behavior","User":"Advanced","Values":{"0":"None","1":"Report","2":"Climb Or Descend","3":"Move Horizontally","4":"Move Perpendicularly in 3D","5":"RTL","6":"Hover"},"__field_text":"\n // @DisplayName: Collision Avoidance Behavior\n // @Description: Specifies aircraft behaviour when a collision is imminent\n // @Values: 0:None,1:Report,2:Climb Or Descend,3:Move Horizontally,4:Move Perpendicularly in 3D,5:RTL,6:Hover\n // @User: Advanced"},"AVD_F_ALT_MIN":{"Description":"Minimum AMSL (above mean sea level) altitude for ADS-B avoidance. If the vehicle is below this altitude, no avoidance action will take place. Useful to prevent ADS-B avoidance from activating while below the tree line or around structures. Default of 0 is no minimum.","DisplayName":"ADS-B avoidance minimum altitude","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: ADS-B avoidance minimum altitude\n // @Description: Minimum AMSL (above mean sea level) altitude for ADS-B avoidance. If the vehicle is below this altitude, no avoidance action will take place. Useful to prevent ADS-B avoidance from activating while below the tree line or around structures. Default of 0 is no minimum.\n // @Units: m\n // @User: Advanced"},"AVD_F_DIST_XY":{"Description":"Closest allowed projected distance before F_ACTION is undertaken","DisplayName":"Distance Fail XY","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Distance Fail XY\n // @Description: Closest allowed projected distance before F_ACTION is undertaken\n // @Units: m\n // @User: Advanced"},"AVD_F_DIST_Z":{"Description":"Closest allowed projected distance before BEHAVIOUR_F is undertaken","DisplayName":"Distance Fail Z","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Distance Fail Z\n // @Description: Closest allowed projected distance before BEHAVIOUR_F is undertaken\n // @Units: m\n // @User: Advanced"},"AVD_F_RCVRY":{"Description":"Determines what the aircraft will do after a fail event is resolved","DisplayName":"Recovery behaviour after a fail event","User":"Advanced","Values":{"0":"Remain in AVOID_ADSB","1":"Resume previous flight mode","2":"RTL","3":"Resume if AUTO else Loiter"},"__field_text":"\n // @DisplayName: Recovery behaviour after a fail event\n // @Description: Determines what the aircraft will do after a fail event is resolved\n // @Values: 0:Remain in AVOID_ADSB,1:Resume previous flight mode,2:RTL,3:Resume if AUTO else Loiter\n // @User: Advanced"},"AVD_F_TIME":{"Description":"Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than F_DIST_XY or F_DIST_Z then F_ACTION is undertaken","DisplayName":"Time Horizon Fail","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Time Horizon Fail\n // @Description: Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than F_DIST_XY or F_DIST_Z then F_ACTION is undertaken\n // @Units: s\n // @User: Advanced"},"AVD_OBS_MAX":{"Description":"Maximum number of obstacles to track","DisplayName":"Maximum number of obstacles to track","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of obstacles to track\n // @Description: Maximum number of obstacles to track\n // @User: Advanced"},"AVD_W_ACTION":{"Description":"Specifies aircraft behaviour when a collision may occur","DisplayName":"Collision Avoidance Behavior - Warn","User":"Advanced","Values":{"0":"None","1":"Report"},"__field_text":"\n // @DisplayName: Collision Avoidance Behavior - Warn\n // @Description: Specifies aircraft behaviour when a collision may occur\n // @Values: 0:None,1:Report\n // @User: Advanced"},"AVD_W_DIST_XY":{"Description":"Closest allowed projected distance before W_ACTION is undertaken","DisplayName":"Distance Warn XY","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Distance Warn XY\n // @Description: Closest allowed projected distance before W_ACTION is undertaken\n // @Units: m\n // @User: Advanced"},"AVD_W_DIST_Z":{"Description":"Closest allowed projected distance before BEHAVIOUR_W is undertaken","DisplayName":"Distance Warn Z","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Distance Warn Z\n // @Description: Closest allowed projected distance before BEHAVIOUR_W is undertaken\n // @Units: m\n // @User: Advanced"},"AVD_W_TIME":{"Description":"Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than W_DIST_XY or W_DIST_Z then W_ACTION is undertaken (assuming F_ACTION is not undertaken)","DisplayName":"Time Horizon Warn","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Time Horizon Warn\n // @Description: Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than W_DIST_XY or W_DIST_Z then W_ACTION is undertaken (assuming F_ACTION is not undertaken)\n // @Units: s\n // @User: Advanced"},"AVOID_ACCEL_MAX":{"Description":"Maximum acceleration with which obstacles will be avoided with. Set zero to disable acceleration limits","DisplayName":"Avoidance maximum acceleration","Range":{"high":"9","low":"0"},"Units":"m/s/s","User":"Standard","__field_text":"\n // @DisplayName: Avoidance maximum acceleration\n // @Description: Maximum acceleration with which obstacles will be avoided with. Set zero to disable acceleration limits\n // @Units: m/s/s\n // @Range: 0 9\n // @User: Standard"},"AVOID_ALT_MIN":{"Description":"Minimum altitude above which proximity based avoidance will start working. This requires a valid downward facing rangefinder reading to work. Set zero to disable","DisplayName":"Avoidance minimum altitude","Range":{"high":"6","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Avoidance minimum altitude\n // @Description: Minimum altitude above which proximity based avoidance will start working. This requires a valid downward facing rangefinder reading to work. Set zero to disable\n // @Units: m\n // @Range: 0 6\n // @User: Standard"},"AVOID_ANGLE_MAX":{"Description":"Max lean angle used to avoid obstacles while in non-GPS modes","DisplayName":"Avoidance max lean angle in non-GPS flight modes","Increment":"10","Range":{"high":"4500","low":"0"},"Units":"cdeg","User":"Standard","__field_text":"\n // @DisplayName: Avoidance max lean angle in non-GPS flight modes\n // @Description: Max lean angle used to avoid obstacles while in non-GPS modes\n // @Units: cdeg\n // @Increment: 10\n // @Range: 0 4500\n // @User: Standard"},"AVOID_BACKUP_DZ":{"Description":"Distance beyond AVOID_MARGIN parameter, after which vehicle will backaway from obstacles. Increase this parameter if you see vehicle going back and forth in front of obstacle.","DisplayName":"Avoidance deadzone between stopping and backing away from obstacle","Range":{"high":"2","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Avoidance deadzone between stopping and backing away from obstacle\n // @Description: Distance beyond AVOID_MARGIN parameter, after which vehicle will backaway from obstacles. Increase this parameter if you see vehicle going back and forth in front of obstacle.\n // @Units: m\n // @Range: 0 2\n // @User: Standard"},"AVOID_BACKUP_SPD":{"Description":"Maximum speed that will be used to back away from obstacles in GPS modes (m/s). Set zero to disable","DisplayName":"Avoidance maximum backup speed","Range":{"high":"2","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Avoidance maximum backup speed\n // @Description: Maximum speed that will be used to back away from obstacles in GPS modes (m/s). Set zero to disable\n // @Units: m/s\n // @Range: 0 2\n // @User: Standard"},"AVOID_BEHAVE":{"Description":"Avoidance behaviour (slide or stop)","DisplayName":"Avoidance behaviour","User":"Standard","Values":{"0":"Slide","1":"Stop"},"__field_text":"\n // @DisplayName: Avoidance behaviour\n // @Description: Avoidance behaviour (slide or stop)\n // @Values: 0:Slide,1:Stop\n // @User: Standard"},"AVOID_DIST_MAX":{"Description":"Distance from object at which obstacle avoidance will begin in non-GPS modes","DisplayName":"Avoidance distance maximum in non-GPS flight modes","Range":{"high":"30","low":"1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Avoidance distance maximum in non-GPS flight modes\n // @Description: Distance from object at which obstacle avoidance will begin in non-GPS modes\n // @Units: m\n // @Range: 1 30\n // @User: Standard"},"AVOID_ENABLE":{"Bitmask":{"0":"UseFence","1":"UseProximitySensor","2":"UseBeaconFence"},"Description":"Enabled/disable avoidance input sources","DisplayName":"Avoidance control enable/disable","User":"Standard","__field_text":"\n // @DisplayName: Avoidance control enable/disable\n // @Description: Enabled/disable avoidance input sources\n // @Bitmask: 0:UseFence,1:UseProximitySensor,2:UseBeaconFence\n // @User: Standard"},"AVOID_MARGIN":{"Description":"Vehicle will attempt to stay at least this distance (in meters) from objects while in GPS modes","DisplayName":"Avoidance distance margin in GPS modes","Range":{"high":"10","low":"1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Avoidance distance margin in GPS modes\n // @Description: Vehicle will attempt to stay at least this distance (in meters) from objects while in GPS modes\n // @Units: m\n // @Range: 1 10\n // @User: Standard"},"BARO1_DEVID":{"Description":"Barometer sensor ID, taking into account its type, bus and instance","DisplayName":"Baro ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Baro ID\n // @Description: Barometer sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"BARO1_GND_PRESS":{"Description":"calibrated ground pressure in Pascals","DisplayName":"Ground Pressure","Increment":"1","ReadOnly":"True","Units":"Pa","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Ground Pressure\n // @Description: calibrated ground pressure in Pascals\n // @Units: Pa\n // @Increment: 1\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"BARO1_WCF_BCK":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative X direction (backwards)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative X direction (backwards)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO1_WCF_DN":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Z direction (down)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Z direction (down)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO1_WCF_ENABLE":{"Description":"This enables the use of wind coefficients for barometer compensation","DisplayName":"Wind coefficient enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Wind coefficient enable\n // @Description: This enables the use of wind coefficients for barometer compensation\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"BARO1_WCF_FWD":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive X direction (forward)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive X direction (forward)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO1_WCF_LFT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Y direction (left)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Y direction (left)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO1_WCF_RGT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Y direction (right)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Y direction (right)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO1_WCF_UP":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Z direction (up)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Z direction (up)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_DEVID":{"Description":"Barometer2 sensor ID, taking into account its type, bus and instance","DisplayName":"Baro ID2","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Baro ID2\n // @Description: Barometer2 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"BARO2_GND_PRESS":{"Description":"calibrated ground pressure in Pascals","DisplayName":"Ground Pressure","Increment":"1","ReadOnly":"True","Units":"Pa","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Ground Pressure\n // @Description: calibrated ground pressure in Pascals\n // @Units: Pa\n // @Increment: 1\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"BARO2_WCF_BCK":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative X direction (backwards)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative X direction (backwards)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_WCF_DN":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Z direction (down)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Z direction (down)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_WCF_ENABLE":{"Description":"This enables the use of wind coefficients for barometer compensation","DisplayName":"Wind coefficient enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Wind coefficient enable\n // @Description: This enables the use of wind coefficients for barometer compensation\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"BARO2_WCF_FWD":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive X direction (forward)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive X direction (forward)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_WCF_LFT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Y direction (left)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Y direction (left)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_WCF_RGT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Y direction (right)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Y direction (right)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO2_WCF_UP":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Z direction (up)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Z direction (up)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_DEVID":{"Description":"Barometer3 sensor ID, taking into account its type, bus and instance","DisplayName":"Baro ID3","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Baro ID3\n // @Description: Barometer3 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"BARO3_GND_PRESS":{"Description":"calibrated ground pressure in Pascals","DisplayName":"Absolute Pressure","Increment":"1","ReadOnly":"True","Units":"Pa","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Absolute Pressure\n // @Description: calibrated ground pressure in Pascals\n // @Units: Pa\n // @Increment: 1\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"BARO3_WCF_BCK":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative X direction (backwards)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative X direction (backwards)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_WCF_DN":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Z direction (down)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Z direction (down)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_WCF_ENABLE":{"Description":"This enables the use of wind coefficients for barometer compensation","DisplayName":"Wind coefficient enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Wind coefficient enable\n // @Description: This enables the use of wind coefficients for barometer compensation\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"BARO3_WCF_FWD":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive X direction (forward)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive X direction (forward)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_WCF_LFT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in negative Y direction (left)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in negative Y direction (left)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_WCF_RGT":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Y direction (right)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Y direction (right)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO3_WCF_UP":{"Description":"This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.","DisplayName":"Pressure error coefficient in positive Z direction (up)","Increment":"0.05","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Pressure error coefficient in positive Z direction (up)\n // @Description: This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.\n // @Range: -1.0 1.0\n // @Increment: 0.05\n // @User: Advanced"},"BARO_ALTERR_MAX":{"Description":"This is the maximum acceptable altitude discrepancy between GPS altitude and barometric presssure altitude calculated against a standard atmosphere for arming checks to pass. If you are getting an arming error due to this parameter then you may have a faulty or substituted barometer. A common issue is vendors replacing a MS5611 in a \"Pixhawk\" with a MS5607. If you have that issue then please see BARO_OPTIONS parameter to force the MS5611 to be treated as a MS5607. This check is disabled if the value is zero.","DisplayName":"Altitude error maximum","Increment":"1","Range":{"high":"5000","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Altitude error maximum\n // @Description: This is the maximum acceptable altitude discrepancy between GPS altitude and barometric presssure altitude calculated against a standard atmosphere for arming checks to pass. If you are getting an arming error due to this parameter then you may have a faulty or substituted barometer. A common issue is vendors replacing a MS5611 in a \"Pixhawk\" with a MS5607. If you have that issue then please see BARO_OPTIONS parameter to force the MS5611 to be treated as a MS5607. This check is disabled if the value is zero.\n // @Units: m\n // @Increment: 1\n // @Range: 0 5000\n // @User: Advanced"},"BARO_ALT_OFFSET":{"Description":"altitude offset in meters added to barometric altitude. This is used to allow for automatic adjustment of the base barometric altitude by a ground station equipped with a barometer. The value is added to the barometric altitude read by the aircraft. It is automatically reset to 0 when the barometer is calibrated on each reboot or when a preflight calibration is performed.","DisplayName":"altitude offset","Increment":"0.1","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: altitude offset\n // @Description: altitude offset in meters added to barometric altitude. This is used to allow for automatic adjustment of the base barometric altitude by a ground station equipped with a barometer. The value is added to the barometric altitude read by the aircraft. It is automatically reset to 0 when the barometer is calibrated on each reboot or when a preflight calibration is performed.\n // @Units: m\n // @Increment: 0.1\n // @User: Advanced"},"BARO_EXT_BUS":{"Description":"This selects the bus number for looking for an I2C barometer. When set to -1 it will probe all external i2c buses based on the BARO_PROBE_EXT parameter.","DisplayName":"External baro bus","User":"Advanced","Values":{"0":"Bus0","1":"Bus1","6":"Bus6","-1":"Disabled"},"__field_text":"\n // @DisplayName: External baro bus\n // @Description: This selects the bus number for looking for an I2C barometer. When set to -1 it will probe all external i2c buses based on the BARO_PROBE_EXT parameter.\n // @Values: -1:Disabled,0:Bus0,1:Bus1,6:Bus6\n // @User: Advanced"},"BARO_FIELD_ELV":{"Description":"User provided field elevation in meters. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. Changes to this parameter will only be used when disarmed. A value of 0 means the EKF origin height is used for takeoff height above sea level.","DisplayName":"field elevation","Increment":"0.1","Units":"m","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: field elevation\n // @Description: User provided field elevation in meters. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. Changes to this parameter will only be used when disarmed. A value of 0 means the EKF origin height is used for takeoff height above sea level.\n // @Units: m\n // @Increment: 0.1\n // @Volatile: True\n // @User: Advanced"},"BARO_FLTR_RNG":{"Description":"This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.","DisplayName":"Range in which sample is accepted","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","__field_text":"\n // @DisplayName: Range in which sample is accepted\n // @Description: This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.\n // @Units: %\n // @Range: 0 100\n // @Increment: 1"},"BARO_GND_TEMP":{"Description":"User provided ambient ground temperature in degrees Celsius. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. A value of 0 means use the internal measurement ambient temperature.","DisplayName":"ground temperature","Increment":"1","Units":"degC","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: ground temperature\n // @Description: User provided ambient ground temperature in degrees Celsius. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. A value of 0 means use the internal measurement ambient temperature.\n // @Units: degC\n // @Increment: 1\n // @Volatile: True\n // @User: Advanced"},"BARO_OPTIONS":{"Bitmask":{"0":"Treat MS5611 as MS5607"},"Description":"Barometer options","DisplayName":"Barometer options","User":"Advanced","__field_text":"\n // @DisplayName: Barometer options\n // @Description: Barometer options\n // @Bitmask: 0:Treat MS5611 as MS5607\n // @User: Advanced"},"BARO_PRIMARY":{"Description":"This selects which barometer will be the primary if multiple barometers are found","DisplayName":"Primary barometer","User":"Advanced","Values":{"0":"FirstBaro","1":"2ndBaro","2":"3rdBaro"},"__field_text":"\n // @DisplayName: Primary barometer\n // @Description: This selects which barometer will be the primary if multiple barometers are found\n // @Values: 0:FirstBaro,1:2ndBaro,2:3rdBaro\n // @User: Advanced"},"BARO_PROBE_EXT":{"Bitmask":{"0":"BMP085","1":"BMP280","2":"MS5611","3":"MS5607","4":"MS5637","5":"FBM320","6":"DPS280","7":"LPS25H","8":"Keller","9":"MS5837","10":"BMP388","11":"SPL06","12":"MSP"},"Description":"This sets which types of external i2c barometer to look for. It is a bitmask of barometer types. The I2C buses to probe is based on BARO_EXT_BUS. If BARO_EXT_BUS is -1 then it will probe all external buses, otherwise it will probe just the bus number given in BARO_EXT_BUS.","DisplayName":"External barometers to probe","User":"Advanced","__field_text":"\n // @DisplayName: External barometers to probe\n // @Description: This sets which types of external i2c barometer to look for. It is a bitmask of barometer types. The I2C buses to probe is based on BARO_EXT_BUS. If BARO_EXT_BUS is -1 then it will probe all external buses, otherwise it will probe just the bus number given in BARO_EXT_BUS.\n // @Bitmask: 0:BMP085,1:BMP280,2:MS5611,3:MS5607,4:MS5637,5:FBM320,6:DPS280,7:LPS25H,8:Keller,9:MS5837,10:BMP388,11:SPL06,12:MSP\n // @User: Advanced"},"BATT2_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT2_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT2_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT2__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT2_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT2_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT2_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT2__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT2_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT2_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT2_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT2_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT2_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT2_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT2_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT2_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT2_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT2_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT2_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT2_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT2_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT2_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT2_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT2_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT2_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT2_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT2_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT2_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT2_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT2_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT2_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT2_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT2_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT2_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT2_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT2_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT2_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT2_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT2_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT2_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT2_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT2_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT2_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT2_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT3_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT3_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT3_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT3__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT3_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT3_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT3_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT3__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT3_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT3_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT3_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT3_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT3_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT3_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT3_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT3_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT3_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT3_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT3_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT3_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT3_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT3_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT3_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT3_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT3_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT3_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT3_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT3_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT3_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT3_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT3_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT3_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT3_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT3_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT3_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT3_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT3_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT3_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT3_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT3_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT3_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT3_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT3_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT3_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT4_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT4_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT4_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT4__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT4_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT4_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT4_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT4__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT4_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT4_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT4_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT4_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT4_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT4_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT4_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT4_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT4_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT4_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT4_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT4_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT4_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT4_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT4_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT4_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT4_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT4_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT4_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT4_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT4_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT4_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT4_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT4_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT4_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT4_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT4_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT4_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT4_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT4_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT4_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT4_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT4_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT4_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT4_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT4_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT5_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT5_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT5_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT5__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT5_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT5_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT5_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT5__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT5_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT5_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT5_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT5_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT5_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT5_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT5_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT5_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT5_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT5_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT5_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT5_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT5_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT5_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT5_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT5_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT5_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT5_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT5_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT5_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT5_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT5_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT5_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT5_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT5_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT5_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT5_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT5_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT5_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT5_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT5_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT5_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT5_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT5_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT5_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT5_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT6_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT6_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT6_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT6__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT6_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT6_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT6_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT6__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT6_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT6_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT6_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT6_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT6_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT6_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT6_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT6_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT6_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT6_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT6_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT6_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT6_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT6_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT6_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT6_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT6_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT6_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT6_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT6_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT6_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT6_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT6_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT6_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT6_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT6_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT6_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT6_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT6_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT6_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT6_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT6_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT6_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT6_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT6_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT6_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT7_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT7_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT7_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT7__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT7_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT7_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT7_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT7__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT7_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT7_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT7_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT7_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT7_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT7_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT7_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT7_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT7_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT7_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT7_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT7_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT7_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT7_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT7_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT7_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT7_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT7_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT7_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT7_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT7_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT7_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT7_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT7_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT7_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT7_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT7_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT7_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT7_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT7_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT7_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT7_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT7_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT7_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT7_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT7_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT8_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT8_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT8_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT8__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT8_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT8_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT8_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT8__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT8_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT8_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT8_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT8_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT8_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT8_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT8_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT8_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT8_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT8_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT8_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT8_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT8_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT8_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT8_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT8_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT8_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT8_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT8_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT8_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT8_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT8_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT8_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT8_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT8_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT8_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT8_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT8_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT8_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT8_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT8_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT8_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT8_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT8_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT8_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT8_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT9_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT9_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT9_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT9__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT9_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT9_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT9_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT9__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT9_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT9_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT9_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT9_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT9_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT9_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT9_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT9_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT9_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT9_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT9_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT9_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT9_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT9_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT9_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT9_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT9_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT9_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT9_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT9_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT9_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT9_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT9_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT9_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT9_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT9_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT9_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT9_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT9_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT9_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT9_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT9_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT9_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT9_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT9_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT9_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTA_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTA_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTA_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTA__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTA_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTA_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTA_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTA__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTA_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTA_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTA_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTA_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTA_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTA_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTA_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTA_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTA_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTA_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTA_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTA_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTA_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTA_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTA_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTA_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTA_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTA_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTA_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTA_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTA_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTA_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTA_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTA_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTA_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTA_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTA_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTA_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTA_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTA_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTA_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTA_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTA_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTA_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTA_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTA_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTB_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTB_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTB_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTB__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTB_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTB_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTB_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTB__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTB_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTB_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTB_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTB_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTB_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTB_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTB_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTB_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTB_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTB_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTB_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTB_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTB_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTB_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTB_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTB_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTB_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTB_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTB_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTB_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTB_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTB_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTB_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTB_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTB_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTB_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTB_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTB_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTB_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTB_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTB_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTB_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTB_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTB_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTB_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTB_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTC_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTC_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTC_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTC__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTC_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTC_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTC_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTC__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTC_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTC_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTC_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTC_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTC_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTC_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTC_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTC_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTC_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTC_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTC_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTC_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTC_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTC_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTC_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTC_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTC_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTC_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTC_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTC_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTC_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTC_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTC_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTC_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTC_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTC_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTC_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTC_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTC_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTC_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTC_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTC_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTC_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTC_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTC_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTC_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTD_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTD_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTD_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTD__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTD_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTD_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTD_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTD__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTD_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTD_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTD_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTD_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTD_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTD_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTD_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTD_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTD_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTD_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTD_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTD_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTD_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTD_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTD_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTD_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTD_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTD_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTD_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTD_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTD_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTD_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTD_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTD_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTD_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTD_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTD_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTD_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTD_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTD_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTD_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTD_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTD_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTD_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTD_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTD_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTE_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTE_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTE_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTE__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTE_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTE_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTE_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTE__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTE_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTE_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTE_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTE_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTE_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTE_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTE_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTE_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTE_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTE_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTE_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTE_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTE_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTE_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTE_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTE_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTE_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTE_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTE_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTE_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTE_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTE_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTE_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTE_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTE_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTE_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTE_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTE_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTE_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTE_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTE_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTE_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTE_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTE_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTE_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTE_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTF_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTF_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTF_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTF__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTF_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTF_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTF_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTF__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTF_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTF_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTF_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTF_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTF_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTF_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTF_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTF_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTF_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTF_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTF_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTF_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTF_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTF_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTF_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTF_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTF_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTF_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTF_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTF_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTF_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTF_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTF_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTF_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTF_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTF_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTF_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTF_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTF_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTF_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTF_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTF_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTF_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTF_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTF_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTF_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTG_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATTG_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATTG_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTG__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATTG_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATTG_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTG_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTG__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTG_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTG_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTG_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTG_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATTG_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATTG_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATTG_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTG_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATTG_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTG_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTG_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATTG_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATTG_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATTG_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATTG_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTG_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATTG_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATTG_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTG_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATTG_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTG_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATTG_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATTG_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTG_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTG_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATTG_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATTG_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATTG_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATTG_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATTG_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATTG_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATTG_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATTG_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATTG_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATTG_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATTG_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT_AMP_OFFSET":{"Description":"Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.","DisplayName":"AMP offset","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: AMP offset\n // @Description: Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.\n // @Units: V\n // @User: Standard"},"BATT_AMP_PERVLT":{"Description":"Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.","DisplayName":"Amps per volt","Units":"A/V","User":"Standard","__field_text":"\n // @DisplayName: Amps per volt\n // @Description: Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.\n // @Units: A/V\n // @User: Standard"},"BATT_ANX_CANDRV":{"Description":"Set ANX CAN driver","DisplayName":"Set ANX CAN driver","User":"Standard","Values":{"0":"None","1":"1stCANDriver","2":"2ndCanDriver"},"__field_text":"\n // @DisplayName: Set ANX CAN driver\n // @Description: Set ANX CAN driver\n // @Values: 0:None,1:1stCANDriver,2:2ndCanDriver\n // @User: Standard"},"BATT_ANX_ENABLE":{"Description":"Enable ANX battery support","DisplayName":"Enable ANX battery support","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable ANX battery support\n // @Description: Enable ANX battery support\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"BATT_ANX_INDEX":{"Description":"ANX CAN battery index","DisplayName":"ANX CAN battery index","Range":{"high":"10","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: ANX CAN battery index\n // @Description: ANX CAN battery index\n // @Range: 1 10\n // @User: Standard"},"BATT_ANX_OPTIONS":{"Bitmask":{"0":"LogAllFrames"},"Description":"ANX CAN battery options","DisplayName":"ANX CAN battery options","User":"Advanced","__field_text":"\n // @DisplayName: ANX CAN battery options\n // @Description: ANX CAN battery options\n // @Bitmask: 0:LogAllFrames\n // @User: Advanced"},"BATT_ARM_MAH":{"Description":"Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT__ARM_VOLT parameter.","DisplayName":"Required arming remaining capacity","Increment":"50","Units":"mAh","User":"Advanced","__field_text":"\n // @DisplayName: Required arming remaining capacity\n // @Description: Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the @PREFIX@_ARM_VOLT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Advanced"},"BATT_ARM_VOLT":{"Description":"Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.","DisplayName":"Required arming voltage","Increment":"0.1","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Required arming voltage\n // @Description: Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.\n // @Units: V\n // @Increment: 0.1\n // @User: Advanced"},"BATT_CAPACITY":{"Description":"Capacity of the battery in mAh when full","DisplayName":"Battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery capacity\n // @Description: Capacity of the battery in mAh when full\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT_CRT_MAH":{"Description":"Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT__FS_CRT_ACT parameter.","DisplayName":"Battery critical capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Battery critical capacity\n // @Description: Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@_FS_CRT_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT_CRT_VOLT":{"Description":"Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT_FS_CRT_ACT parameter.","DisplayName":"Critical battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Critical battery voltage\n // @Description: Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_CRT_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT_CURR_MULT":{"Description":"Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications","DisplayName":"Scales reported power monitor current","Range":{"high":"10","low":".1"},"User":"Advanced","__field_text":"\n // @DisplayName: Scales reported power monitor current\n // @Description: Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications\n // @Range: .1 10\n // @User: Advanced"},"BATT_CURR_PIN":{"Description":"Sets the analog input pin that should be used for current monitoring.","DisplayName":"Battery Current sensing pin","RebootRequired":"True","User":"Standard","Values":{"3":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","4":"CubeOrange_PM2/Navigator","14":"Pixhawk2_PM2","15":"CubeOrange","17":"Durandal","101":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Current sensing pin\n // @Description: Sets the analog input pin that should be used for current monitoring.\n // @Values: -1:Disabled, 3:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 4:CubeOrange_PM2/Navigator, 14:Pixhawk2_PM2, 15:CubeOrange, 17:Durandal, 101:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BATT_ESC_INDEX":{"Description":"ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write to\n // @Description: ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"BATT_FL_FF":{"Description":"First order polynomial fit term","DisplayName":"First order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: First order term\n // @Description: First order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT_FL_FLTR":{"Description":"Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.","DisplayName":"Fuel level filter frequency","Range":{"high":"1","low":"-1"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Fuel level filter frequency\n // @Description: Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.\n // @Range: -1 1\n // @User: Advanced\n // @Units: Hz\n // @RebootRequired: True"},"BATT_FL_FS":{"Description":"Second order polynomial fit term","DisplayName":"Second order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Second order term\n // @Description: Second order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT_FL_FT":{"Description":"Third order polynomial fit term","DisplayName":"Third order term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Third order term\n // @Description: Third order polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT_FL_OFF":{"Description":"Offset polynomial fit term","DisplayName":"Offset term","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Offset term\n // @Description: Offset polynomial fit term\n // @Range: 0 10\n // @User: Advanced"},"BATT_FL_PIN":{"Description":"Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.","DisplayName":"Fuel level analog pin number","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Fuel level analog pin number\n // @Description: Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,103:Pixhawk SBUS"},"BATT_FL_VLT_MIN":{"Description":"The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Empty fuel level voltage","Range":{"high":"10","low":"0.01"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Empty fuel level voltage\n // @Description: The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @Units: V\n // @User: Advanced"},"BATT_FL_V_MULT":{"Description":"Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.","DisplayName":"Fuel level voltage multiplier","Range":{"high":"10","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: Fuel level voltage multiplier\n // @Description: Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.\n // @Range: 0.01 10\n // @User: Advanced"},"BATT_FS_CRT_ACT":{"Description":"What action the vehicle should perform if it hits a critical battery failsafe","DisplayName":"Critical battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Critical battery failsafe action\n // @Description: What action the vehicle should perform if it hits a critical battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,5:Parachute,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT_FS_LOW_ACT":{"Description":"What action the vehicle should perform if it hits a low battery failsafe","DisplayName":"Low battery failsafe action","User":"Standard","Values":{"0":"None","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Terminate","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: Low battery failsafe action\n // @Description: What action the vehicle should perform if it hits a low battery failsafe\n // @Values{Plane}: 0:None,1:RTL,2:Land,3:Terminate,4:QLand,6:Loiter to QLand\n // @Values{Copter}: 0:None,1:Land,2:RTL,3:SmartRTL or RTL,4:SmartRTL or Land,5:Terminate,6:Auto DO_LAND_START or RTL\n // @Values{Sub}: 0:None,2:Disarm,3:Enter surface mode\n // @Values{Rover}: 0:None,1:RTL,2:Hold,3:SmartRTL,4:SmartRTL or Hold,5:Terminate\n // @Values{Tracker}: 0:None\n // @Values{Blimp}: 0:None,1:Land\n // @User: Standard"},"BATT_FS_VOLTSRC":{"Description":"Voltage type used for detection of low voltage event","DisplayName":"Failsafe voltage source","User":"Advanced","Values":{"0":"Raw Voltage","1":"Sag Compensated Voltage"},"__field_text":"\n // @DisplayName: Failsafe voltage source\n // @Description: Voltage type used for detection of low voltage event\n // @Values: 0:Raw Voltage, 1:Sag Compensated Voltage\n // @User: Advanced"},"BATT_I2C_ADDR":{"Description":"Battery monitor I2C address. If this is zero then probe list of supported addresses","DisplayName":"Battery monitor I2C address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C address\n // @Description: Battery monitor I2C address. If this is zero then probe list of supported addresses\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT_I2C_BUS":{"Description":"Battery monitor I2C bus number","DisplayName":"Battery monitor I2C bus number","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor I2C bus number\n // @Description: Battery monitor I2C bus number\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True","path":"AP_BattMonitor_INA2xx"},"BATT_LOW_MAH":{"Description":"Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT_FS_LOW_ACT parameter.","DisplayName":"Low battery capacity","Increment":"50","Units":"mAh","User":"Standard","__field_text":"\n // @DisplayName: Low battery capacity\n // @Description: Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: mAh\n // @Increment: 50\n // @User: Standard"},"BATT_LOW_TIMER":{"Description":"This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.","DisplayName":"Low voltage timeout","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Low voltage timeout\n // @Description: This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.\n // @Units: s\n // @Increment: 1\n // @Range: 0 120\n // @User: Advanced"},"BATT_LOW_VOLT":{"Description":"Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT_FS_LOW_ACT parameter.","DisplayName":"Low battery voltage","Increment":"0.1","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Low battery voltage\n // @Description: Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the @PREFIX@LOW_TIMER parameter then the vehicle will perform the failsafe specified by the @PREFIX@FS_LOW_ACT parameter.\n // @Units: V\n // @Increment: 0.1\n // @User: Standard"},"BATT_MAX_AMPS":{"Description":"This controls the maximum current the INS2XX sensor will work with.","DisplayName":"Battery monitor max current","Range":{"high":"400","low":"1"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor max current\n // @Description: This controls the maximum current the INS2XX sensor will work with.\n // @Range: 1 400\n // @Units: A\n // @User: Advanced"},"BATT_MAX_VOLT":{"Description":"Maximum voltage of battery. Provides scaling of current versus voltage","DisplayName":"Maximum Battery Voltage","Range":{"high":"100","low":"7"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum Battery Voltage\n // @Description: Maximum voltage of battery. Provides scaling of current versus voltage\n // @Range: 7 100\n // @User: Advanced"},"BATT_MONITOR":{"Description":"Controls enabling monitoring of the battery's voltage and current","DisplayName":"Battery monitoring","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","3":"Analog Voltage Only","4":"Analog Voltage and Current","5":"Solo","6":"Bebop","7":"SMBus-Generic","8":"DroneCAN-BatteryInfo","9":"ESC","10":"Sum Of Selected Monitors","11":"FuelFlow","12":"FuelLevelPWM","13":"SMBUS-SUI3","14":"SMBUS-SUI6","15":"NeoDesign","16":"SMBus-Maxell","17":"Generator-Elec","18":"Generator-Fuel","19":"Rotoye","20":"MPPT","21":"INA2XX","22":"LTC2946","23":"Torqeedo","24":"FuelLevelAnalog","25":"Synthetic Current and Analog Voltage","26":"INA239_SPI","27":"EFI","28":"AD7091R5","29":"Scripting"},"__field_text":"\n // @DisplayName: Battery monitoring\n // @Description: Controls enabling monitoring of the battery's voltage and current\n // @Values: 0:Disabled,3:Analog Voltage Only,4:Analog Voltage and Current,5:Solo,6:Bebop,7:SMBus-Generic,8:DroneCAN-BatteryInfo,9:ESC,10:Sum Of Selected Monitors,11:FuelFlow,12:FuelLevelPWM,13:SMBUS-SUI3,14:SMBUS-SUI6,15:NeoDesign,16:SMBus-Maxell,17:Generator-Elec,18:Generator-Fuel,19:Rotoye,20:MPPT,21:INA2XX,22:LTC2946,23:Torqeedo,24:FuelLevelAnalog,25:Synthetic Current and Analog Voltage,26:INA239_SPI,27:EFI,28:AD7091R5,29:Scripting\n // @User: Standard\n // @RebootRequired: True"},"BATT_OPTIONS":{"Bitmask":{"0":"Ignore DroneCAN SoC","1":"MPPT reports input voltage and current","2":"MPPT Powered off when disarmed","3":"MPPT Powered on when armed","4":"MPPT Powered off at boot","5":"MPPT Powered on at boot","6":"Send resistance compensated voltage to GCS","7":"Allow DroneCAN InfoAux to be from a different CAN node"},"Description":"This sets options to change the behaviour of the battery monitor","DisplayName":"Battery monitor options","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor options\n // @Description: This sets options to change the behaviour of the battery monitor\n // @Bitmask: 0:Ignore DroneCAN SoC, 1:MPPT reports input voltage and current, 2:MPPT Powered off when disarmed, 3:MPPT Powered on when armed, 4:MPPT Powered off at boot, 5:MPPT Powered on at boot, 6:Send resistance compensated voltage to GCS, 7:Allow DroneCAN InfoAux to be from a different CAN node\n // @User: Advanced"},"BATT_SERIAL_NUM":{"Description":"Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.","DisplayName":"Battery serial number","User":"Advanced","__field_text":"\n // @DisplayName: Battery serial number\n // @Description: Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.\n // @User: Advanced"},"BATT_SHUNT":{"Description":"This sets the shunt resistor used in the device","DisplayName":"Battery monitor shunt resistor","Range":{"high":"0.01","low":"0.0001"},"Units":"Ohm","User":"Advanced","__field_text":"\n // @DisplayName: Battery monitor shunt resistor\n // @Description: This sets the shunt resistor used in the device\n // @Range: 0.0001 0.01\n // @Units: Ohm\n // @User: Advanced"},"BATT_SOC1_C1":{"Description":"Battery estimator coefficient1","DisplayName":"Battery estimator coefficient1","Range":{"high":"200","low":"100"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient1\n // @Description: Battery estimator coefficient1\n // @Range: 100 200\n // @User: Standard"},"BATT_SOC1_C2":{"Description":"Battery estimator coefficient2","DisplayName":"Battery estimator coefficient2","Range":{"high":"5","low":"2"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient2\n // @Description: Battery estimator coefficient2\n // @Range: 2 5\n // @User: Standard"},"BATT_SOC1_C3":{"Description":"Battery estimator coefficient3","DisplayName":"Battery estimator coefficient3","Range":{"high":"0.5","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient3\n // @Description: Battery estimator coefficient3\n // @Range: 0.01 0.5\n // @User: Standard"},"BATT_SOC1_IDX":{"Description":"Battery estimator index","DisplayName":"Battery estimator index","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator index\n // @Description: Battery estimator index\n // @Range: 0 4\n // @User: Standard"},"BATT_SOC1_NCELL":{"Description":"Battery estimator cell count","DisplayName":"Battery estimator cell count","Range":{"high":"48","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator cell count\n // @Description: Battery estimator cell count\n // @Range: 0 48\n // @User: Standard"},"BATT_SOC2_C1":{"Description":"Battery estimator coefficient1","DisplayName":"Battery estimator coefficient1","Range":{"high":"200","low":"100"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient1\n // @Description: Battery estimator coefficient1\n // @Range: 100 200\n // @User: Standard"},"BATT_SOC2_C2":{"Description":"Battery estimator coefficient2","DisplayName":"Battery estimator coefficient2","Range":{"high":"5","low":"2"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient2\n // @Description: Battery estimator coefficient2\n // @Range: 2 5\n // @User: Standard"},"BATT_SOC2_C3":{"Description":"Battery estimator coefficient3","DisplayName":"Battery estimator coefficient3","Range":{"high":"0.5","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient3\n // @Description: Battery estimator coefficient3\n // @Range: 0.01 0.5\n // @User: Standard"},"BATT_SOC2_IDX":{"Description":"Battery estimator index","DisplayName":"Battery estimator index","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator index\n // @Description: Battery estimator index\n // @Range: 0 4\n // @User: Standard"},"BATT_SOC2_NCELL":{"Description":"Battery estimator cell count","DisplayName":"Battery estimator cell count","Range":{"high":"48","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator cell count\n // @Description: Battery estimator cell count\n // @Range: 0 48\n // @User: Standard"},"BATT_SOC3_C1":{"Description":"Battery estimator coefficient1","DisplayName":"Battery estimator coefficient1","Range":{"high":"200","low":"100"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient1\n // @Description: Battery estimator coefficient1\n // @Range: 100 200\n // @User: Standard"},"BATT_SOC3_C2":{"Description":"Battery estimator coefficient2","DisplayName":"Battery estimator coefficient2","Range":{"high":"5","low":"2"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient2\n // @Description: Battery estimator coefficient2\n // @Range: 2 5\n // @User: Standard"},"BATT_SOC3_C3":{"Description":"Battery estimator coefficient3","DisplayName":"Battery estimator coefficient3","Range":{"high":"0.5","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient3\n // @Description: Battery estimator coefficient3\n // @Range: 0.01 0.5\n // @User: Standard"},"BATT_SOC3_IDX":{"Description":"Battery estimator index","DisplayName":"Battery estimator index","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator index\n // @Description: Battery estimator index\n // @Range: 0 4\n // @User: Standard"},"BATT_SOC3_NCELL":{"Description":"Battery estimator cell count","DisplayName":"Battery estimator cell count","Range":{"high":"48","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator cell count\n // @Description: Battery estimator cell count\n // @Range: 0 48\n // @User: Standard"},"BATT_SOC4_C1":{"Description":"Battery estimator coefficient1","DisplayName":"Battery estimator coefficient1","Range":{"high":"200","low":"100"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient1\n // @Description: Battery estimator coefficient1\n // @Range: 100 200\n // @User: Standard"},"BATT_SOC4_C2":{"Description":"Battery estimator coefficient2","DisplayName":"Battery estimator coefficient2","Range":{"high":"5","low":"2"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient2\n // @Description: Battery estimator coefficient2\n // @Range: 2 5\n // @User: Standard"},"BATT_SOC4_C3":{"Description":"Battery estimator coefficient3","DisplayName":"Battery estimator coefficient3","Range":{"high":"0.5","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator coefficient3\n // @Description: Battery estimator coefficient3\n // @Range: 0.01 0.5\n // @User: Standard"},"BATT_SOC4_IDX":{"Description":"Battery estimator index","DisplayName":"Battery estimator index","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator index\n // @Description: Battery estimator index\n // @Range: 0 4\n // @User: Standard"},"BATT_SOC4_NCELL":{"Description":"Battery estimator cell count","DisplayName":"Battery estimator cell count","Range":{"high":"48","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Battery estimator cell count\n // @Description: Battery estimator cell count\n // @Range: 0 48\n // @User: Standard"},"BATT_SOC_COUNT":{"Description":"Number of battery SOC estimators","DisplayName":"Count of SOC estimators","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Count of SOC estimators\n // @Description: Number of battery SOC estimators\n // @Range: 0 4\n // @User: Standard"},"BATT_SUM_MASK":{"Bitmask":{"0":"monitor 1","1":"monitor 2","2":"monitor 3","3":"monitor 4","4":"monitor 5","5":"monitor 6","6":"monitor 7","7":"monitor 8","8":"monitor 9"},"Description":"0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.","DisplayName":"Battery Sum mask","User":"Standard","__field_text":"\n // @DisplayName: Battery Sum mask\n // @Description: 0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.\n // @Bitmask: 0:monitor 1, 1:monitor 2, 2:monitor 3, 3:monitor 4, 4:monitor 5, 5:monitor 6, 6:monitor 7, 7:monitor 8, 8:monitor 9\n // @User: Standard"},"BATT_VLT_OFFSET":{"Description":"Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.","DisplayName":"Voltage offset","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Voltage offset\n // @Description: Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.\n // @Units: V\n // @User: Advanced"},"BATT_VOLT_MULT":{"Description":"Used to convert the voltage of the voltage sensing pin (BATT_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.","DisplayName":"Voltage Multiplier","User":"Advanced","__field_text":"\n // @DisplayName: Voltage Multiplier\n // @Description: Used to convert the voltage of the voltage sensing pin (@PREFIX@VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.\n // @User: Advanced"},"BATT_VOLT_PIN":{"Description":"Sets the analog input pin that should be used for voltage monitoring.","DisplayName":"Battery Voltage sensing pin","RebootRequired":"True","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Battery Voltage sensing pin\n // @Description: Sets the analog input pin that should be used for voltage monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard\n // @RebootRequired: True"},"BCN_ALT":{"Description":"Beacon origin's altitude above sealevel in meters","DisplayName":"Beacon origin's altitude above sealevel in meters","Increment":"1","Range":{"high":"10000","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Beacon origin's altitude above sealevel in meters\n // @Description: Beacon origin's altitude above sealevel in meters\n // @Units: m\n // @Increment: 1\n // @Range: 0 10000\n // @User: Advanced"},"BCN_LATITUDE":{"Description":"Beacon origin's latitude","DisplayName":"Beacon origin's latitude","Increment":"0.000001","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Beacon origin's latitude\n // @Description: Beacon origin's latitude\n // @Units: deg\n // @Increment: 0.000001\n // @Range: -90 90\n // @User: Advanced"},"BCN_LONGITUDE":{"Description":"Beacon origin's longitude","DisplayName":"Beacon origin's longitude","Increment":"0.000001","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Beacon origin's longitude\n // @Description: Beacon origin's longitude\n // @Units: deg\n // @Increment: 0.000001\n // @Range: -180 180\n // @User: Advanced"},"BCN_ORIENT_YAW":{"Description":"Beacon systems rotation from north in degrees","DisplayName":"Beacon systems rotation from north in degrees","Increment":"1","Range":{"high":"+180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Beacon systems rotation from north in degrees\n // @Description: Beacon systems rotation from north in degrees\n // @Units: deg\n // @Increment: 1\n // @Range: -180 +180\n // @User: Advanced"},"BCN_TYPE":{"Description":"What type of beacon based position estimation device is connected","DisplayName":"Beacon based position estimation device type","User":"Advanced","Values":{"0":"None","1":"Pozyx","2":"Marvelmind","3":"Nooploop","10":"SITL"},"__field_text":"\n // @DisplayName: Beacon based position estimation device type\n // @Description: What type of beacon based position estimation device is connected\n // @Values: 0:None,1:Pozyx,2:Marvelmind,3:Nooploop,10:SITL\n // @User: Advanced"},"BRD_ALT_CONFIG":{"Description":"Select an alternative hardware configuration. A value of zero selects the default configuration for this board. Other values are board specific. Please see the documentation for your board for details on any alternative configuration values that may be available.","DisplayName":"Alternative HW config","Increment":"1","Range":{"high":"10","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Alternative HW config\n // @Description: Select an alternative hardware configuration. A value of zero selects the default configuration for this board. Other values are board specific. Please see the documentation for your board for details on any alternative configuration values that may be available.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"BRD_BOOT_DELAY":{"Description":"This adds a delay in milliseconds to boot to ensure peripherals initialise fully","DisplayName":"Boot delay","Range":{"high":"10000","low":"0"},"Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Boot delay\n // @Description: This adds a delay in milliseconds to boot to ensure peripherals initialise fully\n // @Range: 0 10000\n // @Units: ms\n // @User: Advanced"},"BRD_HEAT_I":{"Description":"Board Heater integrator gain","DisplayName":"Board Heater I gain","Increment":"0.1","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Board Heater I gain\n // @Description: Board Heater integrator gain\n // @Range: 0 1\n // @Increment: 0.1\n // @User: Advanced"},"BRD_HEAT_IMAX":{"Description":"Board Heater integrator maximum","DisplayName":"Board Heater IMAX","Increment":"1","Range":{"high":"100","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Board Heater IMAX\n // @Description: Board Heater integrator maximum\n // @Range: 0 100\n // @Increment: 1\n // @User: Advanced"},"BRD_HEAT_LOWMGN":{"Description":"Arming check will fail if temp is lower than this margin below BRD_HEAT_TARG. 0 disables the low temperature check","DisplayName":"Board heater temp lower margin","Range":{"high":"20","low":"0"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Board heater temp lower margin\n // @Description: Arming check will fail if temp is lower than this margin below BRD_HEAT_TARG. 0 disables the low temperature check\n // @Range: 0 20\n // @Units: degC\n // @User: Advanced"},"BRD_HEAT_P":{"Description":"Board Heater P gain","DisplayName":"Board Heater P gain","Increment":"1","Range":{"high":"500","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Board Heater P gain\n // @Description: Board Heater P gain\n // @Range: 1 500\n // @Increment: 1\n // @User: Advanced"},"BRD_HEAT_TARG":{"Description":"Board heater target temperature for boards with controllable heating units. Set to -1 to disable the heater, please reboot after setting to -1.","DisplayName":"Board heater temperature target","Range":{"high":"80","low":"-1"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Board heater temperature target\n // @Description: Board heater target temperature for boards with controllable heating units. Set to -1 to disable the heater, please reboot after setting to -1.\n // @Range: -1 80\n // @Units: degC\n // @User: Advanced"},"BRD_IO_DSHOT":{"Description":"This loads the DShot firmware on the IO co-processor","DisplayName":"Load DShot FW on IO","RebootRequired":"True","User":"Advanced","Values":{"0":"StandardFW","1":"DshotFW"},"__field_text":"\n // @DisplayName: Load DShot FW on IO\n // @Description: This loads the DShot firmware on the IO co-processor\n // @Values: 0:StandardFW,1:DshotFW\n // @RebootRequired: True\n // @User: Advanced"},"BRD_IO_ENABLE":{"Description":"This allows for the IO co-processor on boards with an IOMCU to be disabled. Setting to 2 will enable the IOMCU but not attempt to update firmware on startup","DisplayName":"Enable IO co-processor","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"EnableNoFWUpdate"},"__field_text":"\n // @DisplayName: Enable IO co-processor\n // @Description: This allows for the IO co-processor on boards with an IOMCU to be disabled. Setting to 2 will enable the IOMCU but not attempt to update firmware on startup\n // @Values: 0:Disabled,1:Enabled,2:EnableNoFWUpdate\n // @RebootRequired: True\n // @User: Advanced"},"BRD_OPTIONS":{"Bitmask":{"0":"Enable hardware watchdog","1":"Disable MAVftp","2":"Enable set of internal parameters","3":"Enable Debug Pins","4":"Unlock flash on reboot","5":"Write protect firmware flash on reboot","6":"Write protect bootloader flash on reboot","7":"Skip board validation","8":"Disable board arming gpio output change on arm/disarm"},"Description":"Board specific option flags","DisplayName":"Board options","User":"Advanced","__field_text":"\n // @DisplayName: Board options\n // @Description: Board specific option flags\n // @Bitmask: 0:Enable hardware watchdog, 1:Disable MAVftp, 2:Enable set of internal parameters, 3:Enable Debug Pins, 4:Unlock flash on reboot, 5:Write protect firmware flash on reboot, 6:Write protect bootloader flash on reboot, 7:Skip board validation, 8:Disable board arming gpio output change on arm/disarm\n // @User: Advanced"},"BRD_PWM_VOLT_SEL":{"Description":"This sets the voltage max for PWM output pulses. 0 for 3.3V and 1 for 5V output. On boards with an IOMCU that support this parameter this option only affects the 8 main outputs, not the 6 auxiliary outputs. Using 5V output can help to reduce the impact of ESC noise interference corrupting signals to the ESCs.","DisplayName":"Set PWM Out Voltage","User":"Advanced","Values":{"0":"3.3V","1":"5V"},"__field_text":"\n // @DisplayName: Set PWM Out Voltage\n // @Description: This sets the voltage max for PWM output pulses. 0 for 3.3V and 1 for 5V output. On boards with an IOMCU that support this parameter this option only affects the 8 main outputs, not the 6 auxiliary outputs. Using 5V output can help to reduce the impact of ESC noise interference corrupting signals to the ESCs.\n // @Values: 0:3.3V,1:5V\n // @User: Advanced"},"BRD_RADIO_ABLVL":{"Description":"This sets the minimum RSSI of an auto-bind packet for it to be accepted. This should be set so that auto-bind will only happen at short range to minimise the change of an auto-bind happening accidentially","DisplayName":"Auto-bind level","Range":{"high":"31","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Auto-bind level\n // @Description: This sets the minimum RSSI of an auto-bind packet for it to be accepted. This should be set so that auto-bind will only happen at short range to minimise the change of an auto-bind happening accidentially\n // @Range: 0 31\n // @User: Advanced"},"BRD_RADIO_ABTIME":{"Description":"When non-zero this sets the time with no transmitter packets before we start looking for auto-bind packets.","DisplayName":"Auto-bind time","Range":{"high":"120","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Auto-bind time\n // @Description: When non-zero this sets the time with no transmitter packets before we start looking for auto-bind packets.\n // @Range: 0 120\n // @User: Advanced"},"BRD_RADIO_BZOFS":{"Description":"Set transmitter buzzer note adjustment (adjust frequency up)","DisplayName":"Transmitter buzzer adjustment","Range":{"high":"40","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Transmitter buzzer adjustment\n // @Description: Set transmitter buzzer note adjustment (adjust frequency up)\n // @Range: 0 40\n // @User: Advanced"},"BRD_RADIO_DEBUG":{"Description":"radio debug level","DisplayName":"debug level","Range":{"high":"4","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: debug level\n // @Description: radio debug level\n // @Range: 0 4\n // @User: Advanced"},"BRD_RADIO_DISCRC":{"Description":"disable receive CRC (for debug)","DisplayName":"disable receive CRC","User":"Advanced","Values":{"0":"NotDisabled","1":"Disabled"},"__field_text":"\n // @DisplayName: disable receive CRC\n // @Description: disable receive CRC (for debug)\n // @Values: 0:NotDisabled,1:Disabled\n // @User: Advanced"},"BRD_RADIO_FCCTST":{"Description":"If this is enabled then the radio will continuously transmit as required for FCC testing. The transmit channel is set by the value of the parameter. The radio will not work for RC input while this is enabled","DisplayName":"Put radio into FCC test mode","User":"Advanced","Values":{"0":"Disabled","1":"MinChannel","2":"MidChannel","3":"MaxChannel","4":"MinChannelCW","5":"MidChannelCW","6":"MaxChannelCW"},"__field_text":"\n // @DisplayName: Put radio into FCC test mode\n // @Description: If this is enabled then the radio will continuously transmit as required for FCC testing. The transmit channel is set by the value of the parameter. The radio will not work for RC input while this is enabled\n // @Values: 0:Disabled,1:MinChannel,2:MidChannel,3:MaxChannel,4:MinChannelCW,5:MidChannelCW,6:MaxChannelCW\n // @User: Advanced"},"BRD_RADIO_PPSCH":{"Description":"Channel to show received packet-per-second rate, or zero for disabled","DisplayName":"Packet rate channel","Range":{"high":"16","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Packet rate channel\n // @Description: Channel to show received packet-per-second rate, or zero for disabled\n // @Range: 0 16\n // @User: Advanced"},"BRD_RADIO_PROT":{"Description":"Select air protocol","DisplayName":"protocol","User":"Advanced","Values":{"0":"Auto","1":"DSM2","2":"DSMX"},"__field_text":"\n // @DisplayName: protocol\n // @Description: Select air protocol\n // @Values: 0:Auto,1:DSM2,2:DSMX\n // @User: Advanced"},"BRD_RADIO_SIGCH":{"Description":"Channel to show receive RSSI signal strength, or zero for disabled","DisplayName":"RSSI signal strength","Range":{"high":"16","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RSSI signal strength\n // @Description: Channel to show receive RSSI signal strength, or zero for disabled\n // @Range: 0 16\n // @User: Advanced"},"BRD_RADIO_STKMD":{"Description":"This selects between different stick input modes. The default is mode2, which has throttle on the left stick and pitch on the right stick. You can instead set mode1, which has throttle on the right stick and pitch on the left stick.","DisplayName":"Stick input mode","User":"Advanced","Values":{"1":"Mode1","2":"Mode2"},"__field_text":"\n // @DisplayName: Stick input mode\n // @Description: This selects between different stick input modes. The default is mode2, which has throttle on the left stick and pitch on the right stick. You can instead set mode1, which has throttle on the right stick and pitch on the left stick.\n // @Values: 1:Mode1,2:Mode2\n // @User: Advanced"},"BRD_RADIO_TELEM":{"Description":"If this is non-zero then telemetry packets will be sent over DSM","DisplayName":"Enable telemetry","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable telemetry\n // @Description: If this is non-zero then telemetry packets will be sent over DSM\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"BRD_RADIO_TESTCH":{"Description":"This sets the radio to a fixed test channel for factory testing. Using a fixed channel avoids the need for binding in factory testing.","DisplayName":"Set radio to factory test channel","User":"Advanced","Values":{"0":"Disabled","1":"TestChan1","2":"TestChan2","3":"TestChan3","4":"TestChan4","5":"TestChan5","6":"TestChan6","7":"TestChan7","8":"TestChan8"},"__field_text":"\n // @DisplayName: Set radio to factory test channel\n // @Description: This sets the radio to a fixed test channel for factory testing. Using a fixed channel avoids the need for binding in factory testing.\n // @Values: 0:Disabled,1:TestChan1,2:TestChan2,3:TestChan3,4:TestChan4,5:TestChan5,6:TestChan6,7:TestChan7,8:TestChan8\n // @User: Advanced"},"BRD_RADIO_TPPSCH":{"Description":"Channel to show telemetry packets-per-second value, as received at TX","DisplayName":"Telemetry PPS channel","Range":{"high":"16","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Telemetry PPS channel\n // @Description: Channel to show telemetry packets-per-second value, as received at TX\n // @Range: 0 16\n // @User: Advanced"},"BRD_RADIO_TSIGCH":{"Description":"Channel to show telemetry RSSI value as received by TX","DisplayName":"RSSI value channel for telemetry data on transmitter","Range":{"high":"16","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RSSI value channel for telemetry data on transmitter\n // @Description: Channel to show telemetry RSSI value as received by TX\n // @Range: 0 16\n // @User: Advanced"},"BRD_RADIO_TXMAX":{"Description":"Set transmitter maximum transmit power (from 1 to 8)","DisplayName":"Transmitter transmit power","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Transmitter transmit power\n // @Description: Set transmitter maximum transmit power (from 1 to 8)\n // @Range: 1 8\n // @User: Advanced"},"BRD_RADIO_TXPOW":{"Description":"Set telemetry transmit power. This is the power level (from 1 to 8) for telemetry packets sent from the RX to the TX","DisplayName":"Telemetry Transmit power","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Telemetry Transmit power\n // @Description: Set telemetry transmit power. This is the power level (from 1 to 8) for telemetry packets sent from the RX to the TX\n // @Range: 1 8\n // @User: Advanced"},"BRD_RADIO_TYPE":{"Description":"This enables support for direct attached radio receivers","DisplayName":"Set type of direct attached radio","Values":{"0":"None","1":"CYRF6936","2":"CC2500","3":"BK2425"},"__field_text":"\n // @DisplayName: Set type of direct attached radio\n // @Description: This enables support for direct attached radio receivers\n // @Values: 0:None,1:CYRF6936,2:CC2500,3:BK2425"},"BRD_RTC_TYPES":{"Bitmask":{"0":"GPS","1":"MAVLINK_SYSTEM_TIME","2":"HW"},"Description":"Specifies which sources of UTC time will be accepted","DisplayName":"Allowed sources of RTC time","User":"Advanced","__field_text":"\n // @DisplayName: Allowed sources of RTC time\n // @Description: Specifies which sources of UTC time will be accepted\n // @Bitmask: 0:GPS,1:MAVLINK_SYSTEM_TIME,2:HW\n // @User: Advanced"},"BRD_RTC_TZ_MIN":{"Description":"Adds offset in +- minutes from UTC to calculate local time","DisplayName":"Timezone offset from UTC","Range":{"high":"+840","low":"-720"},"User":"Advanced","__field_text":"\n // @DisplayName: Timezone offset from UTC\n // @Description: Adds offset in +- minutes from UTC to calculate local time\n // @Range: -720 +840\n // @User: Advanced"},"BRD_SAFETYOPTION":{"Bitmask":{"0":"ActiveForSafetyDisable","1":"ActiveForSafetyEnable","2":"ActiveWhenArmed","3":"Force safety on when the aircraft disarms"},"Description":"This controls the activation of the safety button. It allows you to control if the safety button can be used for safety enable and/or disable, and whether the button is only active when disarmed","DisplayName":"Options for safety button behavior","User":"Standard","__field_text":"\n // @DisplayName: Options for safety button behavior\n // @Description: This controls the activation of the safety button. It allows you to control if the safety button can be used for safety enable and/or disable, and whether the button is only active when disarmed\n // @Bitmask: 0:ActiveForSafetyDisable,1:ActiveForSafetyEnable,2:ActiveWhenArmed,3:Force safety on when the aircraft disarms\n // @User: Standard"},"BRD_SAFETY_DEFLT":{"Description":"This controls the default state of the safety switch at startup. When set to 1 the safety switch will start in the safe state (flashing) at boot. When set to zero the safety switch will start in the unsafe state (solid) at startup. Note that if a safety switch is fitted the user can still control the safety state after startup using the switch. The safety state can also be controlled in software using a MAVLink message.","DisplayName":"Sets default state of the safety switch","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Sets default state of the safety switch\n // @Description: This controls the default state of the safety switch at startup. When set to 1 the safety switch will start in the safe state (flashing) at boot. When set to zero the safety switch will start in the unsafe state (solid) at startup. Note that if a safety switch is fitted the user can still control the safety state after startup using the switch. The safety state can also be controlled in software using a MAVLink message.\n // @Values: 0:Disabled,1:Enabled\n // @RebootRequired: True\n // @User: Standard"},"BRD_SAFETY_MASK":{"Bitmask":{"0":"Output1","1":"Output2","2":"Output3","3":"Output4","4":"Output5","5":"Output6","6":"Output7","7":"Output8","8":"Output9","9":"Output10","10":"Output11","11":"Output12","12":"Output13","13":"Output14"},"Description":"A bitmask which controls what outputs can move while the safety switch has not been pressed","DisplayName":"Outputs which ignore the safety switch state","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Outputs which ignore the safety switch state\n // @Description: A bitmask which controls what outputs can move while the safety switch has not been pressed\n // @Bitmask: 0:Output1,1:Output2,2:Output3,3:Output4,4:Output5,5:Output6,6:Output7,7:Output8,8:Output9,9:Output10,10:Output11,11:Output12,12:Output13,13:Output14\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SBUS_OUT":{"Description":"This sets the SBUS output frame rate in Hz","DisplayName":" SBUS output rate","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"50Hz","2":"75Hz","3":"100Hz","4":"150Hz","5":"200Hz","6":"250Hz","7":"300Hz"},"__field_text":"\n // @DisplayName: SBUS output rate\n // @Description: This sets the SBUS output frame rate in Hz\n // @Values: 0:Disabled,1:50Hz,2:75Hz,3:100Hz,4:150Hz,5:200Hz,6:250Hz,7:300Hz\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SD_MISSION":{"Description":"This sets the amount of storage in kilobytes reserved on the microsd card in mission.stg for waypoint storage. Each waypoint uses 15 bytes.","DisplayName":" SDCard Mission size","Range":{"high":"64","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: SDCard Mission size\n // @Description: This sets the amount of storage in kilobytes reserved on the microsd card in mission.stg for waypoint storage. Each waypoint uses 15 bytes.\n // @Range: 0 64\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SD_SLOWDOWN":{"Description":"This is a scaling factor to slow down microSD operation. It can be used on flight board and microSD card combinations where full speed is not reliable. For normal full speed operation a value of 0 should be used.","DisplayName":"microSD slowdown","Increment":"1","Range":{"high":"32","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: microSD slowdown\n // @Description: This is a scaling factor to slow down microSD operation. It can be used on flight board and microSD card combinations where full speed is not reliable. For normal full speed operation a value of 0 should be used.\n // @Range: 0 32\n // @Increment: 1\n // @User: Advanced"},"BRD_SER1_RTSCTS":{"Description":"Enable flow control on serial 1 (telemetry 1). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup. Note that the PX4v1 does not have hardware flow control pins on this port, so you should leave this disabled.","DisplayName":"Serial 1 flow control","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Auto"},"__field_text":"\n // @DisplayName: Serial 1 flow control\n // @Description: Enable flow control on serial 1 (telemetry 1). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup. Note that the PX4v1 does not have hardware flow control pins on this port, so you should leave this disabled.\n // @Values: 0:Disabled,1:Enabled,2:Auto\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SER2_RTSCTS":{"Description":"Enable flow control on serial 2 (telemetry 2). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.","DisplayName":"Serial 2 flow control","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Auto"},"__field_text":"\n // @DisplayName: Serial 2 flow control\n // @Description: Enable flow control on serial 2 (telemetry 2). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.\n // @Values: 0:Disabled,1:Enabled,2:Auto\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SER3_RTSCTS":{"Description":"Enable flow control on serial 3. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.","DisplayName":"Serial 3 flow control","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Auto"},"__field_text":"\n // @DisplayName: Serial 3 flow control\n // @Description: Enable flow control on serial 3. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.\n // @Values: 0:Disabled,1:Enabled,2:Auto\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SER4_RTSCTS":{"Description":"Enable flow control on serial 4. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.","DisplayName":"Serial 4 flow control","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Auto"},"__field_text":"\n // @DisplayName: Serial 4 flow control\n // @Description: Enable flow control on serial 4. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.\n // @Values: 0:Disabled,1:Enabled,2:Auto\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SER5_RTSCTS":{"Description":"Enable flow control on serial 5. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.","DisplayName":"Serial 5 flow control","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Auto"},"__field_text":"\n // @DisplayName: Serial 5 flow control\n // @Description: Enable flow control on serial 5. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.\n // @Values: 0:Disabled,1:Enabled,2:Auto\n // @RebootRequired: True\n // @User: Advanced"},"BRD_SERIAL_NUM":{"Description":"User-defined serial number of this vehicle, it can be any arbitrary number you want and has no effect on the autopilot","DisplayName":"User-defined serial number","Range":{"high":"8388607","low":"-8388608"},"User":"Standard","__field_text":"\n // @DisplayName: User-defined serial number\n // @Description: User-defined serial number of this vehicle, it can be any arbitrary number you want and has no effect on the autopilot\n // @Range: -8388608 8388607\n // @User: Standard"},"BRD_TYPE":{"Description":"This allows selection of a PX4 or VRBRAIN board type. If set to zero then the board type is auto-detected (PX4)","DisplayName":"Board type","RebootRequired":"True","User":"Advanced","Values":{"0":"AUTO","1":"PX4V1","2":"Pixhawk","3":"Cube/Pixhawk2","4":"Pixracer","5":"PixhawkMini","6":"Pixhawk2Slim","13":"Intel Aero FC","14":"Pixhawk Pro","20":"AUAV2.1","21":"PCNC1","22":"MINDPXV2","23":"SP01","24":"CUAVv5/FMUV5","30":"VRX BRAIN51","32":"VRX BRAIN52","33":"VRX BRAIN52E","34":"VRX UBRAIN51","35":"VRX UBRAIN52","36":"VRX CORE10","38":"VRX BRAIN54","39":"PX4 FMUV6","100":"PX4 OLDDRIVERS"},"__field_text":"\n // @DisplayName: Board type\n // @Description: This allows selection of a PX4 or VRBRAIN board type. If set to zero then the board type is auto-detected (PX4)\n // @Values: 0:AUTO,1:PX4V1,2:Pixhawk,3:Cube/Pixhawk2,4:Pixracer,5:PixhawkMini,6:Pixhawk2Slim,13:Intel Aero FC,14:Pixhawk Pro,20:AUAV2.1,21:PCNC1,22:MINDPXV2,23:SP01,24:CUAVv5/FMUV5,30:VRX BRAIN51,32:VRX BRAIN52,33:VRX BRAIN52E,34:VRX UBRAIN51,35:VRX UBRAIN52,36:VRX CORE10,38:VRX BRAIN54,39:PX4 FMUV6,100:PX4 OLDDRIVERS\n // @RebootRequired: True\n // @User: Advanced"},"BRD_VBUS_MIN":{"Description":"Minimum voltage on the autopilot power rail to allow the aircraft to arm. 0 to disable the check.","DisplayName":"Autopilot board voltage requirement","Increment":"0.1","Range":{"high":"5.5","low":"4.0"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Autopilot board voltage requirement\n // @Description: Minimum voltage on the autopilot power rail to allow the aircraft to arm. 0 to disable the check.\n // @Units: V\n // @Range: 4.0 5.5\n // @Increment: 0.1\n // @User: Advanced"},"BRD_VSERVO_MIN":{"Description":"Minimum voltage on the servo rail to allow the aircraft to arm. 0 to disable the check.","DisplayName":"Servo voltage requirement","Increment":"0.1","Range":{"high":"12.0","low":"3.3"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Servo voltage requirement\n // @Description: Minimum voltage on the servo rail to allow the aircraft to arm. 0 to disable the check.\n // @Units: V\n // @Range: 3.3 12.0\n // @Increment: 0.1\n // @User: Advanced"},"BTN_ENABLE":{"Description":"This enables the button checking module. When this is disabled the parameters for setting button inputs are not visible","DisplayName":"Enable button reporting","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable button reporting\n // @Description: This enables the button checking module. When this is disabled the parameters for setting button inputs are not visible\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"BTN_FUNC1":{"Description":"Auxiliary RC Options function executed on pin change","DisplayName":"Button Pin 1 RC Channel function","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @CopyFieldsFrom: RC1_OPTION\n // @DisplayName: Button Pin 1 RC Channel function\n // @Description: Auxiliary RC Options function executed on pin change\n // @User: Standard"},"BTN_FUNC2":{"Description":"Auxiliary RC Options function executed on pin change","DisplayName":"Button Pin 2 RC Channel function","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @CopyFieldsFrom: BTN_FUNC1\n // @DisplayName: Button Pin 2 RC Channel function"},"BTN_FUNC3":{"Description":"Auxiliary RC Options function executed on pin change","DisplayName":"Button Pin 3 RC Channel function","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @CopyFieldsFrom: BTN_FUNC1\n // @DisplayName: Button Pin 3 RC Channel function"},"BTN_FUNC4":{"Description":"Auxiliary RC Options function executed on pin change","DisplayName":"Button Pin 4 RC Channel function","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @CopyFieldsFrom: BTN_FUNC1\n // @DisplayName: Button Pin 4 RC Channel function"},"BTN_OPTIONS1":{"Bitmask":{"0":"PWM Input","1":"InvertInput"},"Description":"Options for Pin 1. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.","DisplayName":"Button Pin 1 Options","User":"Standard","__field_text":"\n // @DisplayName: Button Pin 1 Options\n // @Description: Options for Pin 1. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.\n // @User: Standard\n // @Bitmask: 0:PWM Input,1:InvertInput"},"BTN_OPTIONS2":{"Bitmask":{"0":"PWM Input","1":"InvertInput"},"Description":"Options for Pin 2. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.","DisplayName":"Button Pin 2 Options","User":"Standard","__field_text":"\n // @DisplayName: Button Pin 2 Options\n // @Description: Options for Pin 2. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.\n // @User: Standard\n // @Bitmask: 0:PWM Input,1:InvertInput"},"BTN_OPTIONS3":{"Bitmask":{"0":"PWM Input","1":"InvertInput"},"Description":"Options for Pin 3. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.","DisplayName":"Button Pin 3 Options","__field_text":"\n // @DisplayName: Button Pin 3 Options\n // @Description: Options for Pin 3. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.\n // @Bitmask: 0:PWM Input,1:InvertInput"},"BTN_OPTIONS4":{"Bitmask":{"0":"PWM Input","1":"InvertInput"},"Description":"Options for Pin 4. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.","DisplayName":"Button Pin 4 Options","User":"Standard","__field_text":"\n // @DisplayName: Button Pin 4 Options\n // @Description: Options for Pin 4. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.\n // @User: Standard\n // @Bitmask: 0:PWM Input,1:InvertInput"},"BTN_PIN1":{"Description":"Digital pin number for first button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"First button Pin","User":"Standard","Values":{"50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","-1":"Disabled"},"__field_text":"\n // @DisplayName: First button Pin\n // @Description: Digital pin number for first button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Standard\n // @Values: -1:Disabled,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6"},"BTN_PIN2":{"Description":"Digital pin number for second button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Second button Pin","User":"Standard","Values":{"50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Second button Pin\n // @Description: Digital pin number for second button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Standard\n // @Values: -1:Disabled,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6"},"BTN_PIN3":{"Description":"Digital pin number for third button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Third button Pin","User":"Standard","Values":{"50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Third button Pin\n // @Description: Digital pin number for third button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Standard\n // @Values: -1:Disabled,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6"},"BTN_PIN4":{"Description":"Digital pin number for fourth button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Fourth button Pin","User":"Standard","Values":{"50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Fourth button Pin\n // @Description: Digital pin number for fourth button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @User: Standard\n // @Values: -1:Disabled,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6"},"BTN_REPORT_SEND":{"Description":"The duration in seconds that a BUTTON_CHANGE report is repeatedly sent to the GCS regarding a button changing state. Note that the BUTTON_CHANGE message is MAVLink2 only.","DisplayName":"Report send time","Range":{"high":"3600","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Report send time\n // @Description: The duration in seconds that a BUTTON_CHANGE report is repeatedly sent to the GCS regarding a button changing state. Note that the BUTTON_CHANGE message is MAVLink2 only.\n // @User: Standard\n // @Range: 0 3600"},"CAM1_DURATION":{"Description":"Duration in seconds that the camera shutter is held open","DisplayName":"Camera shutter duration held open","Range":{"high":"5","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Camera shutter duration held open\n // @Description: Duration in seconds that the camera shutter is held open\n // @Units: s\n // @Range: 0 5\n // @User: Standard"},"CAM1_FEEDBAK_PIN":{"Description":"pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.","DisplayName":"Camera feedback pin","RebootRequired":"True","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Camera feedback pin\n // @Description: pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard\n // @RebootRequired: True"},"CAM1_FEEDBAK_POL":{"Description":"Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low","DisplayName":"Camera feedback pin polarity","User":"Standard","Values":{"0":"TriggerLow","1":"TriggerHigh"},"__field_text":"\n // @DisplayName: Camera feedback pin polarity\n // @Description: Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low\n // @Values: 0:TriggerLow,1:TriggerHigh\n // @User: Standard"},"CAM1_HFOV":{"Description":"Camera horizontal field of view. 0 if unknown","DisplayName":"Camera horizontal field of view","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Camera horizontal field of view\n // @Description: Camera horizontal field of view. 0 if unknown\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"CAM1_INTRVAL_MIN":{"Description":"Postpone shooting if previous picture was taken less than this many seconds ago","DisplayName":"Camera minimum time interval between photos","Range":{"high":"10","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Camera minimum time interval between photos\n // @Description: Postpone shooting if previous picture was taken less than this many seconds ago\n // @Units: s\n // @Range: 0 10\n // @User: Standard"},"CAM1_MNT_INST":{"Description":"Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1","DisplayName":"Camera Mount instance","User":"Standard","__field_text":"\n // @DisplayName: Camera Mount instance\n // @Description: Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1\n // @User: Standard"},"CAM1_OPTIONS":{"Bitmask":{"0":"Recording Starts at arming and stops at disarming"},"Description":"Camera options bitmask","DisplayName":"Camera options","User":"Standard","__field_text":"\n // @DisplayName: Camera options\n // @Description: Camera options bitmask\n // @Bitmask: 0:Recording Starts at arming and stops at disarming\n // @User: Standard"},"CAM1_RELAY_ON":{"Description":"This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera","DisplayName":"Camera relay ON value","User":"Standard","Values":{"0":"Low","1":"High"},"__field_text":"\n // @DisplayName: Camera relay ON value\n // @Description: This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera\n // @Values: 0:Low,1:High\n // @User: Standard"},"CAM1_SERVO_OFF":{"Description":"PWM value in microseconds to move servo to when shutter is deactivated","DisplayName":"Camera servo OFF PWM value","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Camera servo OFF PWM value\n // @Description: PWM value in microseconds to move servo to when shutter is deactivated\n // @Units: PWM\n // @Range: 1000 2000\n // @User: Standard"},"CAM1_SERVO_ON":{"Description":"PWM value in microseconds to move servo to when shutter is activated","DisplayName":"Camera servo ON PWM value","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Camera servo ON PWM value\n // @Description: PWM value in microseconds to move servo to when shutter is activated\n // @Units: PWM\n // @Range: 1000 2000\n // @User: Standard"},"CAM1_TRIGG_DIST":{"Description":"Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.","DisplayName":"Camera trigger distance","Range":{"high":"1000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Camera trigger distance\n // @Description: Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.\n // @User: Standard\n // @Units: m\n // @Range: 0 1000"},"CAM1_TYPE":{"Description":"how to trigger the camera to take a picture","DisplayName":"Camera shutter (trigger) type","User":"Standard","Values":{"0":"None","1":"Servo","2":"Relay","3":"GoPro in Solo Gimbal","4":"Mount (Siyi)","5":"MAVLink","6":"MAVLinkCamV2","7":"Scripting"},"__field_text":"\n // @DisplayName: Camera shutter (trigger) type\n // @Description: how to trigger the camera to take a picture\n // @Values: 0:None, 1:Servo, 2:Relay, 3:GoPro in Solo Gimbal, 4:Mount (Siyi), 5:MAVLink, 6:MAVLinkCamV2, 7:Scripting\n // @User: Standard"},"CAM1_VFOV":{"Description":"Camera vertical field of view. 0 if unknown","DisplayName":"Camera vertical field of view","Range":{"high":"180","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Camera vertical field of view\n // @Description: Camera vertical field of view. 0 if unknown\n // @Units: deg\n // @Range: 0 180\n // @User: Standard"},"CAM2_DURATION":{"Description":"Duration in seconds that the camera shutter is held open","DisplayName":"Camera shutter duration held open","Range":{"high":"5","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Camera shutter duration held open\n // @Description: Duration in seconds that the camera shutter is held open\n // @Units: s\n // @Range: 0 5\n // @User: Standard"},"CAM2_FEEDBAK_PIN":{"Description":"pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.","DisplayName":"Camera feedback pin","RebootRequired":"True","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Camera feedback pin\n // @Description: pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard\n // @RebootRequired: True"},"CAM2_FEEDBAK_POL":{"Description":"Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low","DisplayName":"Camera feedback pin polarity","User":"Standard","Values":{"0":"TriggerLow","1":"TriggerHigh"},"__field_text":"\n // @DisplayName: Camera feedback pin polarity\n // @Description: Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low\n // @Values: 0:TriggerLow,1:TriggerHigh\n // @User: Standard"},"CAM2_HFOV":{"Description":"Camera horizontal field of view. 0 if unknown","DisplayName":"Camera horizontal field of view","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Camera horizontal field of view\n // @Description: Camera horizontal field of view. 0 if unknown\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"CAM2_INTRVAL_MIN":{"Description":"Postpone shooting if previous picture was taken less than this many seconds ago","DisplayName":"Camera minimum time interval between photos","Range":{"high":"10","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Camera minimum time interval between photos\n // @Description: Postpone shooting if previous picture was taken less than this many seconds ago\n // @Units: s\n // @Range: 0 10\n // @User: Standard"},"CAM2_MNT_INST":{"Description":"Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1","DisplayName":"Camera Mount instance","User":"Standard","__field_text":"\n // @DisplayName: Camera Mount instance\n // @Description: Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1\n // @User: Standard"},"CAM2_OPTIONS":{"Bitmask":{"0":"Recording Starts at arming and stops at disarming"},"Description":"Camera options bitmask","DisplayName":"Camera options","User":"Standard","__field_text":"\n // @DisplayName: Camera options\n // @Description: Camera options bitmask\n // @Bitmask: 0:Recording Starts at arming and stops at disarming\n // @User: Standard"},"CAM2_RELAY_ON":{"Description":"This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera","DisplayName":"Camera relay ON value","User":"Standard","Values":{"0":"Low","1":"High"},"__field_text":"\n // @DisplayName: Camera relay ON value\n // @Description: This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera\n // @Values: 0:Low,1:High\n // @User: Standard"},"CAM2_SERVO_OFF":{"Description":"PWM value in microseconds to move servo to when shutter is deactivated","DisplayName":"Camera servo OFF PWM value","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Camera servo OFF PWM value\n // @Description: PWM value in microseconds to move servo to when shutter is deactivated\n // @Units: PWM\n // @Range: 1000 2000\n // @User: Standard"},"CAM2_SERVO_ON":{"Description":"PWM value in microseconds to move servo to when shutter is activated","DisplayName":"Camera servo ON PWM value","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Camera servo ON PWM value\n // @Description: PWM value in microseconds to move servo to when shutter is activated\n // @Units: PWM\n // @Range: 1000 2000\n // @User: Standard"},"CAM2_TRIGG_DIST":{"Description":"Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.","DisplayName":"Camera trigger distance","Range":{"high":"1000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Camera trigger distance\n // @Description: Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.\n // @User: Standard\n // @Units: m\n // @Range: 0 1000"},"CAM2_TYPE":{"Description":"how to trigger the camera to take a picture","DisplayName":"Camera shutter (trigger) type","User":"Standard","Values":{"0":"None","1":"Servo","2":"Relay","3":"GoPro in Solo Gimbal","4":"Mount (Siyi)","5":"MAVLink","6":"MAVLinkCamV2","7":"Scripting"},"__field_text":"\n // @DisplayName: Camera shutter (trigger) type\n // @Description: how to trigger the camera to take a picture\n // @Values: 0:None, 1:Servo, 2:Relay, 3:GoPro in Solo Gimbal, 4:Mount (Siyi), 5:MAVLink, 6:MAVLinkCamV2, 7:Scripting\n // @User: Standard"},"CAM2_VFOV":{"Description":"Camera vertical field of view. 0 if unknown","DisplayName":"Camera vertical field of view","Range":{"high":"180","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Camera vertical field of view\n // @Description: Camera vertical field of view. 0 if unknown\n // @Units: deg\n // @Range: 0 180\n // @User: Standard"},"CAM_AUTO_ONLY":{"Description":"When enabled, trigging by distance is done in AUTO mode only.","DisplayName":"Distance-trigging in AUTO mode only","User":"Standard","Values":{"0":"Always","1":"Only when in AUTO"},"__field_text":"\n // @DisplayName: Distance-trigging in AUTO mode only\n // @Description: When enabled, trigging by distance is done in AUTO mode only.\n // @Values: 0:Always,1:Only when in AUTO\n // @User: Standard"},"CAM_MAX_ROLL":{"Description":"Postpone shooting if roll is greater than limit. (0=Disable, will shoot regardless of roll).","DisplayName":"Maximum photo roll angle.","Range":{"high":"180","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Maximum photo roll angle.\n // @Description: Postpone shooting if roll is greater than limit. (0=Disable, will shoot regardless of roll).\n // @User: Standard\n // @Units: deg\n // @Range: 0 180"},"CAM_RC_BTN_DELAY":{"Description":"Time it takes for the a RunCam button press to be actived in ms. If this is too short then commands can get out of sync.","DisplayName":"RunCam button delay before allowing further button presses","User":"Advanced","__field_text":"\n // @DisplayName: RunCam button delay before allowing further button presses\n // @Description: Time it takes for the a RunCam button press to be actived in ms. If this is too short then commands can get out of sync.\n // @User: Advanced"},"CAM_RC_BT_DELAY":{"Description":"Time it takes for the RunCam to become fully ready in ms. If this is too short then commands can get out of sync.","DisplayName":"RunCam boot delay before allowing updates","User":"Advanced","__field_text":"\n // @DisplayName: RunCam boot delay before allowing updates\n // @Description: Time it takes for the RunCam to become fully ready in ms. If this is too short then commands can get out of sync.\n // @User: Advanced"},"CAM_RC_CONTROL":{"Bitmask":{"0":"Stick yaw right","1":"Stick roll right","2":"3-position switch","3":"2-position switch","4":"Autorecording enabled"},"Description":"Specifies the allowed actions required to enter the OSD menu and other option like autorecording","DisplayName":"RunCam control option","User":"Advanced","__field_text":"\n // @DisplayName: RunCam control option\n // @Description: Specifies the allowed actions required to enter the OSD menu and other option like autorecording\n // @Bitmask: 0:Stick yaw right,1:Stick roll right,2:3-position switch,3:2-position switch,4:Autorecording enabled\n // @User: Advanced"},"CAM_RC_FEATURES":{"Bitmask":{"0":"Power Button","1":"WiFi Button","2":"Change Mode","3":"5-Key OSD","4":"Settings Access","5":"DisplayPort","6":"Start Recording","7":"Stop Recording"},"Description":"The available features of the attached RunCam device. If 0 then the RunCam device will be queried for the features it supports, otherwise this setting is used.","DisplayName":"RunCam features available","User":"Advanced","__field_text":"\n // @DisplayName: RunCam features available\n // @Description: The available features of the attached RunCam device. If 0 then the RunCam device will be queried for the features it supports, otherwise this setting is used.\n // @User: Advanced\n // @Bitmask: 0:Power Button,1:WiFi Button,2:Change Mode,3:5-Key OSD,4:Settings Access,5:DisplayPort,6:Start Recording,7:Stop Recording"},"CAM_RC_MDE_DELAY":{"Description":"Time it takes for the a RunCam mode button press to be actived in ms. If a mode change first requires a video recording change then double this value is used. If this is too short then commands can get out of sync.","DisplayName":"RunCam mode delay before allowing further button presses","User":"Advanced","__field_text":"\n // @DisplayName: RunCam mode delay before allowing further button presses\n // @Description: Time it takes for the a RunCam mode button press to be actived in ms. If a mode change first requires a video recording change then double this value is used. If this is too short then commands can get out of sync.\n // @User: Advanced"},"CAM_RC_TYPE":{"Description":"RunCam device type used to determine OSD menu structure and shutter options.","DisplayName":"RunCam device type","Values":{"0":"Disabled","1":"RunCam Split Micro/RunCam with UART","2":"RunCam Split","3":"RunCam Split4 4k","4":"RunCam Hybrid/RunCam Thumb Pro","5":"Runcam 2 4k"},"__field_text":"\n // @DisplayName: RunCam device type\n // @Description: RunCam device type used to determine OSD menu structure and shutter options.\n // @Values: 0:Disabled, 1:RunCam Split Micro/RunCam with UART, 2:RunCam Split, 3:RunCam Split4 4k, 4:RunCam Hybrid/RunCam Thumb Pro, 5:Runcam 2 4k"},"CAN_D1_PC_ECU_ID":{"Description":"Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.","DisplayName":"ECU Node ID","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ECU Node ID\n // @Description: Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.\n // @Range: 0 255\n // @User: Advanced"},"CAN_D1_PC_ECU_RT":{"Description":"Output rate of ECU command messages","DisplayName":"ECU command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ECU command output rate\n // @Description: Output rate of ECU command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D1_PC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN","DisplayName":"ESC channels","User":"Advanced","__field_text":"\n // @DisplayName: ESC channels\n // @Description: Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D1_PC_ESC_RT":{"Description":"Output rate of ESC command messages","DisplayName":"ESC output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ESC output rate\n // @Description: Output rate of ESC command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D1_PC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16"},"Description":"Bitmask defining which servo channels are to be transmitted over Piccolo CAN","DisplayName":"Servo channels","User":"Advanced","__field_text":"\n // @DisplayName: Servo channels\n // @Description: Bitmask defining which servo channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16\n // @User: Advanced"},"CAN_D1_PC_SRV_RT":{"Description":"Output rate of servo command messages","DisplayName":"Servo command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo command output rate\n // @Description: Output rate of servo command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D1_PROTOCOL":{"Description":"Enabling this option starts selected protocol that will use this virtual driver","DisplayName":"Enable use of specific protocol over virtual driver","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"DroneCAN","4":"PiccoloCAN","6":"EFI_NWPMU","7":"USD1","8":"KDECAN","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Enable use of specific protocol over virtual driver\n // @Description: Enabling this option starts selected protocol that will use this virtual driver\n // @Values: 0:Disabled,1:DroneCAN,4:PiccoloCAN,6:EFI_NWPMU,7:USD1,8:KDECAN,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D1_PROTOCOL2":{"Description":"Secondary protocol with 11 bit CAN addressing","DisplayName":"Secondary protocol with 11 bit CAN addressing","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","7":"USD1","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Secondary protocol with 11 bit CAN addressing\n // @Description: Secondary protocol with 11 bit CAN addressing\n // @Values: 0:Disabled,7:USD1,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D1_UC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN","DisplayName":"Output channels to be transmitted as ESC over DroneCAN","User":"Advanced","__field_text":"\n // @DisplayName: Output channels to be transmitted as ESC over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D1_UC_ESC_OF":{"Description":"Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth","DisplayName":"ESC Output channels offset","Range":{"high":"18","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Output channels offset\n // @Description: Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth\n // @Range: 0 18\n // @User: Advanced"},"CAN_D1_UC_ESC_RV":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.","DisplayName":"Bitmask for output channels for reversible ESCs over DroneCAN.","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask for output channels for reversible ESCs over DroneCAN.\n // @Description: Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D1_UC_NODE":{"Description":"DroneCAN node should be set implicitly","DisplayName":"DroneCAN node that is used for this network","Range":{"high":"250","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN node that is used for this network\n // @Description: DroneCAN node should be set implicitly\n // @Range: 1 250\n // @User: Advanced"},"CAN_D1_UC_NTF_RT":{"Description":"Maximum transmit rate for Notify State Message","DisplayName":"Notify State rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notify State rate\n // @Description: Maximum transmit rate for Notify State Message\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D1_UC_OPTION":{"Bitmask":{"0":"ClearDNADatabase","1":"IgnoreDNANodeConflicts","2":"EnableCanfd","3":"IgnoreDNANodeUnhealthy","4":"SendServoAsPWM","5":"SendGNSS","6":"UseHimarkServo","7":"HobbyWingESC","8":"EnableStats"},"Description":"Option flags","DisplayName":"DroneCAN options","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN options\n // @Description: Option flags\n // @Bitmask: 0:ClearDNADatabase,1:IgnoreDNANodeConflicts,2:EnableCanfd,3:IgnoreDNANodeUnhealthy,4:SendServoAsPWM,5:SendGNSS,6:UseHimarkServo,7:HobbyWingESC,8:EnableStats\n // @User: Advanced"},"CAN_D1_UC_POOL":{"Description":"Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads","DisplayName":"CAN pool size","Range":{"high":"16384","low":"1024"},"User":"Advanced","__field_text":"\n // @DisplayName: CAN pool size\n // @Description: Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads\n // @Range: 1024 16384\n // @User: Advanced"},"CAN_D1_UC_RLY_RT":{"Description":"Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state","DisplayName":"DroneCAN relay output rate","Range":{"high":"200","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN relay output rate\n // @Description: Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state\n // @Range: 0 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D1_UC_S1_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D1_UC_S1_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"DroneCAN Serial1 index","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial1 index\n // @Description: Serial port number on remote CAN node\n // @Range: 0 100\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D1_UC_S1_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @Range: 0 127\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D1_UC_S1_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D1_UC_S2_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D1_UC_S2_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D1_UC_S2_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D1_UC_S2_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D1_UC_S3_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"Serial baud rate on remote CAN node","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: Serial baud rate on remote CAN node\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D1_UC_S3_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D1_UC_S3_NOD":{"Description":"CAN node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D1_UC_S3_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D1_UC_SER_EN":{"Description":"Enable DroneCAN virtual serial ports","DisplayName":"DroneCAN Serial enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial enable\n // @Description: Enable DroneCAN virtual serial ports\n // @Values: 0:Disabled, 1:Enabled\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D1_UC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16","16":"Servo 17","17":"Servo 18","18":"Servo 19","19":"Servo 20","20":"Servo 21","21":"Servo 22","22":"Servo 23","23":"Servo 24","24":"Servo 25","25":"Servo 26","26":"Servo 27","27":"Servo 28","28":"Servo 29","29":"Servo 30","30":"Servo 31","31":"Servo 32"},"Description":"Bitmask with one set for channel to be transmitted as a servo command over DroneCAN","DisplayName":"Output channels to be transmitted as servo over DroneCAN","__field_text":"\n // @DisplayName: Output channels to be transmitted as servo over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a servo command over DroneCAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16, 16: Servo 17, 17: Servo 18, 18: Servo 19, 19: Servo 20, 20: Servo 21, 21: Servo 22, 22: Servo 23, 23: Servo 24, 24: Servo 25, 25: Servo 26, 26: Servo 27, 27: Servo 28, 28: Servo 29, 29: Servo 30, 30: Servo 31, 31: Servo 32"},"CAN_D1_UC_SRV_RT":{"Description":"Maximum transmit rate for servo outputs","DisplayName":"Servo output rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo output rate\n // @Description: Maximum transmit rate for servo outputs\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D2_PC_ECU_ID":{"Description":"Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.","DisplayName":"ECU Node ID","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ECU Node ID\n // @Description: Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.\n // @Range: 0 255\n // @User: Advanced"},"CAN_D2_PC_ECU_RT":{"Description":"Output rate of ECU command messages","DisplayName":"ECU command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ECU command output rate\n // @Description: Output rate of ECU command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D2_PC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN","DisplayName":"ESC channels","User":"Advanced","__field_text":"\n // @DisplayName: ESC channels\n // @Description: Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D2_PC_ESC_RT":{"Description":"Output rate of ESC command messages","DisplayName":"ESC output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ESC output rate\n // @Description: Output rate of ESC command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D2_PC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16"},"Description":"Bitmask defining which servo channels are to be transmitted over Piccolo CAN","DisplayName":"Servo channels","User":"Advanced","__field_text":"\n // @DisplayName: Servo channels\n // @Description: Bitmask defining which servo channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16\n // @User: Advanced"},"CAN_D2_PC_SRV_RT":{"Description":"Output rate of servo command messages","DisplayName":"Servo command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo command output rate\n // @Description: Output rate of servo command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D2_PROTOCOL":{"Description":"Enabling this option starts selected protocol that will use this virtual driver","DisplayName":"Enable use of specific protocol over virtual driver","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"DroneCAN","4":"PiccoloCAN","6":"EFI_NWPMU","7":"USD1","8":"KDECAN","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Enable use of specific protocol over virtual driver\n // @Description: Enabling this option starts selected protocol that will use this virtual driver\n // @Values: 0:Disabled,1:DroneCAN,4:PiccoloCAN,6:EFI_NWPMU,7:USD1,8:KDECAN,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D2_PROTOCOL2":{"Description":"Secondary protocol with 11 bit CAN addressing","DisplayName":"Secondary protocol with 11 bit CAN addressing","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","7":"USD1","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Secondary protocol with 11 bit CAN addressing\n // @Description: Secondary protocol with 11 bit CAN addressing\n // @Values: 0:Disabled,7:USD1,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D2_UC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN","DisplayName":"Output channels to be transmitted as ESC over DroneCAN","User":"Advanced","__field_text":"\n // @DisplayName: Output channels to be transmitted as ESC over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D2_UC_ESC_OF":{"Description":"Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth","DisplayName":"ESC Output channels offset","Range":{"high":"18","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Output channels offset\n // @Description: Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth\n // @Range: 0 18\n // @User: Advanced"},"CAN_D2_UC_ESC_RV":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.","DisplayName":"Bitmask for output channels for reversible ESCs over DroneCAN.","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask for output channels for reversible ESCs over DroneCAN.\n // @Description: Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D2_UC_NODE":{"Description":"DroneCAN node should be set implicitly","DisplayName":"DroneCAN node that is used for this network","Range":{"high":"250","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN node that is used for this network\n // @Description: DroneCAN node should be set implicitly\n // @Range: 1 250\n // @User: Advanced"},"CAN_D2_UC_NTF_RT":{"Description":"Maximum transmit rate for Notify State Message","DisplayName":"Notify State rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notify State rate\n // @Description: Maximum transmit rate for Notify State Message\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D2_UC_OPTION":{"Bitmask":{"0":"ClearDNADatabase","1":"IgnoreDNANodeConflicts","2":"EnableCanfd","3":"IgnoreDNANodeUnhealthy","4":"SendServoAsPWM","5":"SendGNSS","6":"UseHimarkServo","7":"HobbyWingESC","8":"EnableStats"},"Description":"Option flags","DisplayName":"DroneCAN options","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN options\n // @Description: Option flags\n // @Bitmask: 0:ClearDNADatabase,1:IgnoreDNANodeConflicts,2:EnableCanfd,3:IgnoreDNANodeUnhealthy,4:SendServoAsPWM,5:SendGNSS,6:UseHimarkServo,7:HobbyWingESC,8:EnableStats\n // @User: Advanced"},"CAN_D2_UC_POOL":{"Description":"Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads","DisplayName":"CAN pool size","Range":{"high":"16384","low":"1024"},"User":"Advanced","__field_text":"\n // @DisplayName: CAN pool size\n // @Description: Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads\n // @Range: 1024 16384\n // @User: Advanced"},"CAN_D2_UC_RLY_RT":{"Description":"Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state","DisplayName":"DroneCAN relay output rate","Range":{"high":"200","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN relay output rate\n // @Description: Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state\n // @Range: 0 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D2_UC_S1_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D2_UC_S1_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"DroneCAN Serial1 index","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial1 index\n // @Description: Serial port number on remote CAN node\n // @Range: 0 100\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D2_UC_S1_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @Range: 0 127\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D2_UC_S1_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D2_UC_S2_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D2_UC_S2_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D2_UC_S2_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D2_UC_S2_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D2_UC_S3_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"Serial baud rate on remote CAN node","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: Serial baud rate on remote CAN node\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D2_UC_S3_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D2_UC_S3_NOD":{"Description":"CAN node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D2_UC_S3_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D2_UC_SER_EN":{"Description":"Enable DroneCAN virtual serial ports","DisplayName":"DroneCAN Serial enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial enable\n // @Description: Enable DroneCAN virtual serial ports\n // @Values: 0:Disabled, 1:Enabled\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D2_UC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16","16":"Servo 17","17":"Servo 18","18":"Servo 19","19":"Servo 20","20":"Servo 21","21":"Servo 22","22":"Servo 23","23":"Servo 24","24":"Servo 25","25":"Servo 26","26":"Servo 27","27":"Servo 28","28":"Servo 29","29":"Servo 30","30":"Servo 31","31":"Servo 32"},"Description":"Bitmask with one set for channel to be transmitted as a servo command over DroneCAN","DisplayName":"Output channels to be transmitted as servo over DroneCAN","__field_text":"\n // @DisplayName: Output channels to be transmitted as servo over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a servo command over DroneCAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16, 16: Servo 17, 17: Servo 18, 18: Servo 19, 19: Servo 20, 20: Servo 21, 21: Servo 22, 22: Servo 23, 23: Servo 24, 24: Servo 25, 25: Servo 26, 26: Servo 27, 27: Servo 28, 28: Servo 29, 29: Servo 30, 30: Servo 31, 31: Servo 32"},"CAN_D2_UC_SRV_RT":{"Description":"Maximum transmit rate for servo outputs","DisplayName":"Servo output rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo output rate\n // @Description: Maximum transmit rate for servo outputs\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D3_PC_ECU_ID":{"Description":"Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.","DisplayName":"ECU Node ID","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ECU Node ID\n // @Description: Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.\n // @Range: 0 255\n // @User: Advanced"},"CAN_D3_PC_ECU_RT":{"Description":"Output rate of ECU command messages","DisplayName":"ECU command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ECU command output rate\n // @Description: Output rate of ECU command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D3_PC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN","DisplayName":"ESC channels","User":"Advanced","__field_text":"\n // @DisplayName: ESC channels\n // @Description: Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D3_PC_ESC_RT":{"Description":"Output rate of ESC command messages","DisplayName":"ESC output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ESC output rate\n // @Description: Output rate of ESC command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D3_PC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16"},"Description":"Bitmask defining which servo channels are to be transmitted over Piccolo CAN","DisplayName":"Servo channels","User":"Advanced","__field_text":"\n // @DisplayName: Servo channels\n // @Description: Bitmask defining which servo channels are to be transmitted over Piccolo CAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16\n // @User: Advanced"},"CAN_D3_PC_SRV_RT":{"Description":"Output rate of servo command messages","DisplayName":"Servo command output rate","Range":{"high":"500","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo command output rate\n // @Description: Output rate of servo command messages\n // @Units: Hz\n // @User: Advanced\n // @Range: 1 500"},"CAN_D3_PROTOCOL":{"Description":"Enabling this option starts selected protocol that will use this virtual driver","DisplayName":"Enable use of specific protocol over virtual driver","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"DroneCAN","4":"PiccoloCAN","6":"EFI_NWPMU","7":"USD1","8":"KDECAN","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Enable use of specific protocol over virtual driver\n // @Description: Enabling this option starts selected protocol that will use this virtual driver\n // @Values: 0:Disabled,1:DroneCAN,4:PiccoloCAN,6:EFI_NWPMU,7:USD1,8:KDECAN,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D3_PROTOCOL2":{"Description":"Secondary protocol with 11 bit CAN addressing","DisplayName":"Secondary protocol with 11 bit CAN addressing","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","7":"USD1","10":"Scripting","11":"Benewake","12":"Scripting2","13":"TOFSenseP","14":"NanoRadar_NRA24"},"__field_text":"\n // @DisplayName: Secondary protocol with 11 bit CAN addressing\n // @Description: Secondary protocol with 11 bit CAN addressing\n // @Values: 0:Disabled,7:USD1,10:Scripting,11:Benewake,12:Scripting2,13:TOFSenseP,14:NanoRadar_NRA24\n // @User: Advanced\n // @RebootRequired: True"},"CAN_D3_UC_ESC_BM":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN","DisplayName":"Output channels to be transmitted as ESC over DroneCAN","User":"Advanced","__field_text":"\n // @DisplayName: Output channels to be transmitted as ESC over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D3_UC_ESC_OF":{"Description":"Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth","DisplayName":"ESC Output channels offset","Range":{"high":"18","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Output channels offset\n // @Description: Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth\n // @Range: 0 18\n // @User: Advanced"},"CAN_D3_UC_ESC_RV":{"Bitmask":{"0":"ESC 1","1":"ESC 2","2":"ESC 3","3":"ESC 4","4":"ESC 5","5":"ESC 6","6":"ESC 7","7":"ESC 8","8":"ESC 9","9":"ESC 10","10":"ESC 11","11":"ESC 12","12":"ESC 13","13":"ESC 14","14":"ESC 15","15":"ESC 16","16":"ESC 17","17":"ESC 18","18":"ESC 19","19":"ESC 20","20":"ESC 21","21":"ESC 22","22":"ESC 23","23":"ESC 24","24":"ESC 25","25":"ESC 26","26":"ESC 27","27":"ESC 28","28":"ESC 29","29":"ESC 30","30":"ESC 31","31":"ESC 32"},"Description":"Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.","DisplayName":"Bitmask for output channels for reversible ESCs over DroneCAN.","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask for output channels for reversible ESCs over DroneCAN.\n // @Description: Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.\n // @Bitmask: 0: ESC 1, 1: ESC 2, 2: ESC 3, 3: ESC 4, 4: ESC 5, 5: ESC 6, 6: ESC 7, 7: ESC 8, 8: ESC 9, 9: ESC 10, 10: ESC 11, 11: ESC 12, 12: ESC 13, 13: ESC 14, 14: ESC 15, 15: ESC 16, 16: ESC 17, 17: ESC 18, 18: ESC 19, 19: ESC 20, 20: ESC 21, 21: ESC 22, 22: ESC 23, 23: ESC 24, 24: ESC 25, 25: ESC 26, 26: ESC 27, 27: ESC 28, 28: ESC 29, 29: ESC 30, 30: ESC 31, 31: ESC 32\n // @User: Advanced"},"CAN_D3_UC_NODE":{"Description":"DroneCAN node should be set implicitly","DisplayName":"DroneCAN node that is used for this network","Range":{"high":"250","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN node that is used for this network\n // @Description: DroneCAN node should be set implicitly\n // @Range: 1 250\n // @User: Advanced"},"CAN_D3_UC_NTF_RT":{"Description":"Maximum transmit rate for Notify State Message","DisplayName":"Notify State rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notify State rate\n // @Description: Maximum transmit rate for Notify State Message\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D3_UC_OPTION":{"Bitmask":{"0":"ClearDNADatabase","1":"IgnoreDNANodeConflicts","2":"EnableCanfd","3":"IgnoreDNANodeUnhealthy","4":"SendServoAsPWM","5":"SendGNSS","6":"UseHimarkServo","7":"HobbyWingESC","8":"EnableStats"},"Description":"Option flags","DisplayName":"DroneCAN options","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN options\n // @Description: Option flags\n // @Bitmask: 0:ClearDNADatabase,1:IgnoreDNANodeConflicts,2:EnableCanfd,3:IgnoreDNANodeUnhealthy,4:SendServoAsPWM,5:SendGNSS,6:UseHimarkServo,7:HobbyWingESC,8:EnableStats\n // @User: Advanced"},"CAN_D3_UC_POOL":{"Description":"Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads","DisplayName":"CAN pool size","Range":{"high":"16384","low":"1024"},"User":"Advanced","__field_text":"\n // @DisplayName: CAN pool size\n // @Description: Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads\n // @Range: 1024 16384\n // @User: Advanced"},"CAN_D3_UC_RLY_RT":{"Description":"Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state","DisplayName":"DroneCAN relay output rate","Range":{"high":"200","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: DroneCAN relay output rate\n // @Description: Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state\n // @Range: 0 200\n // @Units: Hz\n // @User: Advanced"},"CAN_D3_UC_S1_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D3_UC_S1_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"DroneCAN Serial1 index","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial1 index\n // @Description: Serial port number on remote CAN node\n // @Range: 0 100\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D3_UC_S1_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @Range: 0 127\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D3_UC_S1_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D3_UC_S2_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"DroneCAN Serial default baud rate","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: DroneCAN Serial default baud rate\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D3_UC_S2_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D3_UC_S2_NOD":{"Description":"CAN remote node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN remote node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D3_UC_S2_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D3_UC_S3_BD":{"Description":"Serial baud rate on remote CAN node","DisplayName":"Serial baud rate on remote CAN node","RebootRequired":"True","User":"Advanced","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: Serial baud rate on remote CAN node\n // @Description: Serial baud rate on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_BD"},"CAN_D3_UC_S3_IDX":{"Description":"Serial port number on remote CAN node","DisplayName":"Serial port number on remote CAN node","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial port number on remote CAN node\n // @Description: Serial port number on remote CAN node\n // @CopyFieldsFrom: CAN_D1_UC_S1_IDX"},"CAN_D3_UC_S3_NOD":{"Description":"CAN node number for serial port","DisplayName":"Serial CAN remote node number","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial CAN remote node number\n // @Description: CAN node number for serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_NOD"},"CAN_D3_UC_S3_PRO":{"Description":"Serial protocol of DroneCAN serial port","DisplayName":"Serial protocol of DroneCAN serial port","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Serial protocol of DroneCAN serial port\n // @Description: Serial protocol of DroneCAN serial port\n // @CopyFieldsFrom: CAN_D1_UC_S1_PRO"},"CAN_D3_UC_SER_EN":{"Description":"Enable DroneCAN virtual serial ports","DisplayName":"DroneCAN Serial enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DroneCAN Serial enable\n // @Description: Enable DroneCAN virtual serial ports\n // @Values: 0:Disabled, 1:Enabled\n // @RebootRequired: True\n // @User: Advanced"},"CAN_D3_UC_SRV_BM":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16","16":"Servo 17","17":"Servo 18","18":"Servo 19","19":"Servo 20","20":"Servo 21","21":"Servo 22","22":"Servo 23","23":"Servo 24","24":"Servo 25","25":"Servo 26","26":"Servo 27","27":"Servo 28","28":"Servo 29","29":"Servo 30","30":"Servo 31","31":"Servo 32"},"Description":"Bitmask with one set for channel to be transmitted as a servo command over DroneCAN","DisplayName":"Output channels to be transmitted as servo over DroneCAN","__field_text":"\n // @DisplayName: Output channels to be transmitted as servo over DroneCAN\n // @Description: Bitmask with one set for channel to be transmitted as a servo command over DroneCAN\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16, 16: Servo 17, 17: Servo 18, 18: Servo 19, 19: Servo 20, 20: Servo 21, 21: Servo 22, 22: Servo 23, 23: Servo 24, 24: Servo 25, 25: Servo 26, 26: Servo 27, 27: Servo 28, 28: Servo 29, 29: Servo 30, 30: Servo 31, 31: Servo 32"},"CAN_D3_UC_SRV_RT":{"Description":"Maximum transmit rate for servo outputs","DisplayName":"Servo output rate","Range":{"high":"200","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo output rate\n // @Description: Maximum transmit rate for servo outputs\n // @Range: 1 200\n // @Units: Hz\n // @User: Advanced"},"CAN_LOGLEVEL":{"Description":"Loglevel for recording initialisation and debug information from CAN Interface","DisplayName":"Loglevel","Range":{"high":"4","low":"0"},"User":"Advanced","Values":{"0":"Log None","1":"Log Error","2":"Log Warning and below","3":"Log Info and below","4":"Log Everything"},"__field_text":"\n // @DisplayName: Loglevel\n // @Description: Loglevel for recording initialisation and debug information from CAN Interface\n // @Range: 0 4\n // @Values: 0: Log None, 1: Log Error, 2: Log Warning and below, 3: Log Info and below, 4: Log Everything\n // @User: Advanced"},"CAN_P1_BITRATE":{"Description":"Bit rate can be set up to from 10000 to 1000000","DisplayName":"Bitrate of CAN interface","Range":{"high":"1000000","low":"10000"},"User":"Advanced","__field_text":"\n // @DisplayName: Bitrate of CAN interface\n // @Description: Bit rate can be set up to from 10000 to 1000000\n // @Range: 10000 1000000\n // @User: Advanced"},"CAN_P1_DRIVER":{"Description":"Enabling this option enables use of CAN buses.","DisplayName":"Index of virtual driver to be used with physical CAN interface","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"First driver","2":"Second driver","3":"Third driver"},"__field_text":"\n // @DisplayName: Index of virtual driver to be used with physical CAN interface\n // @Description: Enabling this option enables use of CAN buses.\n // @Values: 0:Disabled,1:First driver,2:Second driver,3:Third driver\n // @User: Standard\n // @RebootRequired: True"},"CAN_P1_FDBITRATE":{"Description":"Bit rate can be set up to from 1000000 to 8000000","DisplayName":"Bitrate of CANFD interface","User":"Advanced","Values":{"1":"1M","2":"2M","4":"4M","5":"5M","8":"8M"},"__field_text":"\n // @DisplayName: Bitrate of CANFD interface\n // @Description: Bit rate can be set up to from 1000000 to 8000000\n // @Values: 1:1M, 2:2M, 4:4M, 5:5M, 8:8M\n // @User: Advanced"},"CAN_P2_BITRATE":{"Description":"Bit rate can be set up to from 10000 to 1000000","DisplayName":"Bitrate of CAN interface","Range":{"high":"1000000","low":"10000"},"User":"Advanced","__field_text":"\n // @DisplayName: Bitrate of CAN interface\n // @Description: Bit rate can be set up to from 10000 to 1000000\n // @Range: 10000 1000000\n // @User: Advanced"},"CAN_P2_DRIVER":{"Description":"Enabling this option enables use of CAN buses.","DisplayName":"Index of virtual driver to be used with physical CAN interface","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"First driver","2":"Second driver","3":"Third driver"},"__field_text":"\n // @DisplayName: Index of virtual driver to be used with physical CAN interface\n // @Description: Enabling this option enables use of CAN buses.\n // @Values: 0:Disabled,1:First driver,2:Second driver,3:Third driver\n // @User: Standard\n // @RebootRequired: True"},"CAN_P2_FDBITRATE":{"Description":"Bit rate can be set up to from 1000000 to 8000000","DisplayName":"Bitrate of CANFD interface","User":"Advanced","Values":{"1":"1M","2":"2M","4":"4M","5":"5M","8":"8M"},"__field_text":"\n // @DisplayName: Bitrate of CANFD interface\n // @Description: Bit rate can be set up to from 1000000 to 8000000\n // @Values: 1:1M, 2:2M, 4:4M, 5:5M, 8:8M\n // @User: Advanced"},"CAN_P3_BITRATE":{"Description":"Bit rate can be set up to from 10000 to 1000000","DisplayName":"Bitrate of CAN interface","Range":{"high":"1000000","low":"10000"},"User":"Advanced","__field_text":"\n // @DisplayName: Bitrate of CAN interface\n // @Description: Bit rate can be set up to from 10000 to 1000000\n // @Range: 10000 1000000\n // @User: Advanced"},"CAN_P3_DRIVER":{"Description":"Enabling this option enables use of CAN buses.","DisplayName":"Index of virtual driver to be used with physical CAN interface","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"First driver","2":"Second driver","3":"Third driver"},"__field_text":"\n // @DisplayName: Index of virtual driver to be used with physical CAN interface\n // @Description: Enabling this option enables use of CAN buses.\n // @Values: 0:Disabled,1:First driver,2:Second driver,3:Third driver\n // @User: Standard\n // @RebootRequired: True"},"CAN_P3_FDBITRATE":{"Description":"Bit rate can be set up to from 1000000 to 8000000","DisplayName":"Bitrate of CANFD interface","User":"Advanced","Values":{"1":"1M","2":"2M","4":"4M","5":"5M","8":"8M"},"__field_text":"\n // @DisplayName: Bitrate of CANFD interface\n // @Description: Bit rate can be set up to from 1000000 to 8000000\n // @Values: 1:1M, 2:2M, 4:4M, 5:5M, 8:8M\n // @User: Advanced"},"CAN_SLCAN_CPORT":{"Description":"CAN Interface ID to be routed to SLCAN, 0 means no routing","DisplayName":"SLCAN Route","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"First interface","2":"Second interface"},"__field_text":"\n // @DisplayName: SLCAN Route\n // @Description: CAN Interface ID to be routed to SLCAN, 0 means no routing\n // @Values: 0:Disabled,1:First interface,2:Second interface\n // @User: Standard\n // @RebootRequired: True"},"CAN_SLCAN_SDELAY":{"Description":"Duration after which slcan starts after setting SERNUM in seconds.","DisplayName":"SLCAN Start Delay","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: SLCAN Start Delay\n // @Description: Duration after which slcan starts after setting SERNUM in seconds.\n // @Range: 0 127\n // @User: Standard"},"CAN_SLCAN_SERNUM":{"Description":"Serial Port ID to be used for temporary SLCAN iface, -1 means no temporary serial. This parameter is automatically reset on reboot or on timeout. See CAN_SLCAN_TIMOUT for timeout details","DisplayName":"SLCAN Serial Port","User":"Standard","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: SLCAN Serial Port\n // @Description: Serial Port ID to be used for temporary SLCAN iface, -1 means no temporary serial. This parameter is automatically reset on reboot or on timeout. See CAN_SLCAN_TIMOUT for timeout details\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @User: Standard"},"CAN_SLCAN_TIMOUT":{"Description":"Duration of inactivity after which SLCAN is switched back to original driver in seconds.","DisplayName":"SLCAN Timeout","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: SLCAN Timeout\n // @Description: Duration of inactivity after which SLCAN is switched back to original driver in seconds.\n // @Range: 0 127\n // @User: Standard"},"CC_AXIS_MASK":{"Bitmask":{"0":"Roll","1":"Pitch","2":"Yaw"},"Description":"Custom Controller bitmask to chose which axis to run","DisplayName":"Custom Controller bitmask","User":"Advanced","__field_text":"\n // @DisplayName: Custom Controller bitmask\n // @Description: Custom Controller bitmask to chose which axis to run\n // @Bitmask: 0:Roll, 1:Pitch, 2:Yaw\n // @User: Advanced"},"CC_TYPE":{"Description":"Custom control type to be used","DisplayName":"Custom control type","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"Empty","2":"PID"},"__field_text":"\n // @DisplayName: Custom control type\n // @Description: Custom control type to be used\n // @Values: 0:None, 1:Empty, 2:PID\n // @RebootRequired: True\n // @User: Advanced"},"CHUTE_ALT_MIN":{"Description":"Parachute min altitude above home. Parachute will not be released below this altitude. 0 to disable alt check.","DisplayName":"Parachute min altitude in meters above home","Increment":"1","Range":{"high":"32000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Parachute min altitude in meters above home\n // @Description: Parachute min altitude above home. Parachute will not be released below this altitude. 0 to disable alt check.\n // @Range: 0 32000\n // @Units: m\n // @Increment: 1\n // @User: Standard"},"CHUTE_CRT_SINK":{"Description":"Release parachute when critical sink rate is reached","DisplayName":"Critical sink speed rate in m/s to trigger emergency parachute","Increment":"1","Range":{"high":"15","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Critical sink speed rate in m/s to trigger emergency parachute\n // @Description: Release parachute when critical sink rate is reached\n // @Range: 0 15\n // @Units: m/s\n // @Increment: 1\n // @User: Standard"},"CHUTE_DELAY_MS":{"Description":"Delay in millseconds between motor stop and chute release","DisplayName":"Parachute release delay","Increment":"1","Range":{"high":"5000","low":"0"},"Units":"ms","User":"Standard","__field_text":"\n // @DisplayName: Parachute release delay\n // @Description: Delay in millseconds between motor stop and chute release\n // @Range: 0 5000\n // @Units: ms\n // @Increment: 1\n // @User: Standard"},"CHUTE_ENABLED":{"Description":"Parachute release enabled or disabled","DisplayName":"Parachute release enabled or disabled","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Parachute release enabled or disabled\n // @Description: Parachute release enabled or disabled\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"CHUTE_OPTIONS":{"Bitmask":{"0":"hold open forever after release"},"Description":"Optional behaviour for parachute","DisplayName":"Parachute options","User":"Standard","__field_text":"\n // @DisplayName: Parachute options\n // @Description: Optional behaviour for parachute\n // @Bitmask: 0:hold open forever after release\n // @User: Standard"},"CHUTE_SERVO_OFF":{"Description":"Parachute Servo PWM value in microseconds when parachute is not released","DisplayName":"Servo OFF PWM value","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Servo OFF PWM value\n // @Description: Parachute Servo PWM value in microseconds when parachute is not released\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"CHUTE_SERVO_ON":{"Description":"Parachute Servo PWM value in microseconds when parachute is released","DisplayName":"Parachute Servo ON PWM value","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Parachute Servo ON PWM value\n // @Description: Parachute Servo PWM value in microseconds when parachute is released\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"CHUTE_TYPE":{"Description":"Parachute release mechanism type (relay number in versions prior to 4.5, or servo). Values 0-3 all are relay. Relay number used for release is set by RELAYx_FUNCTION in 4.5 or later. ","DisplayName":"Parachute release mechanism type (relay or servo)","Values":{"0":"Relay","10":"Servo"},"__field_text":"\n // @DisplayName: Parachute release mechanism type (relay or servo)\n // @Description: Parachute release mechanism type (relay number in versions prior to 4.5, or servo). Values 0-3 all are relay. Relay number used for release is set by RELAYx_FUNCTION in 4.5 or later. \n // @Values: 0: Relay,10:Servo "},"CIRCLE_OPTIONS":{"Bitmask":{"0":"manual control","1":"face direction of travel","2":"Start at center rather than on perimeter","3":"Make Mount ROI the center of the circle"},"Description":"0:Enable or disable using the pitch/roll stick control circle mode's radius and rate","DisplayName":"Circle options","User":"Standard","__field_text":"\n // @DisplayName: Circle options\n // @Description: 0:Enable or disable using the pitch/roll stick control circle mode's radius and rate\n // @Bitmask: 0:manual control, 1:face direction of travel, 2:Start at center rather than on perimeter, 3:Make Mount ROI the center of the circle\n // @User: Standard"},"CIRCLE_RADIUS":{"Description":"Defines the radius of the circle the vehicle will fly when in Circle flight mode","DisplayName":"Circle Radius","Increment":"100","Range":{"high":"200000","low":"0"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Circle Radius\n // @Description: Defines the radius of the circle the vehicle will fly when in Circle flight mode\n // @Units: cm\n // @Range: 0 200000\n // @Increment: 100\n // @User: Standard"},"CIRCLE_RATE":{"Description":"Circle mode's turn rate in deg/sec. Positive to turn clockwise, negative for counter clockwise. Circle rate must be less than ATC_SLEW_YAW parameter.","DisplayName":"Circle rate","Increment":"1","Range":{"high":"90","low":"-90"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Circle rate\n // @Description: Circle mode's turn rate in deg/sec. Positive to turn clockwise, negative for counter clockwise. Circle rate must be less than ATC_SLEW_YAW parameter.\n // @Units: deg/s\n // @Range: -90 90\n // @Increment: 1\n // @User: Standard"},"COMPASS_AUTODEC":{"Description":"Enable or disable the automatic calculation of the declination based on gps location","DisplayName":"Auto Declination","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Auto Declination\n // @Description: Enable or disable the automatic calculation of the declination based on gps location\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"COMPASS_AUTO_ROT":{"Description":"When enabled this will automatically check the orientation of compasses on successful completion of compass calibration. If set to 2 then external compasses will have their orientation automatically corrected.","DisplayName":"Automatically check orientation","Values":{"0":"Disabled","1":"CheckOnly","2":"CheckAndFix","3":"use same tolerance to auto rotate 45 deg rotations"},"__field_text":"\n // @DisplayName: Automatically check orientation\n // @Description: When enabled this will automatically check the orientation of compasses on successful completion of compass calibration. If set to 2 then external compasses will have their orientation automatically corrected.\n // @Values: 0:Disabled,1:CheckOnly,2:CheckAndFix,3:use same tolerance to auto rotate 45 deg rotations"},"COMPASS_CAL_FIT":{"Description":"This controls the fitness level required for a successful compass calibration. A lower value makes for a stricter fit (less likely to pass). This is the value used for the primary magnetometer. Other magnetometers get double the value.","DisplayName":"Compass calibration fitness","Increment":"0.1","Range":{"high":"32","low":"4"},"User":"Advanced","Values":{"4":"Very Strict","8":"Strict","16":"Default","32":"Relaxed"},"__field_text":"\n // @DisplayName: Compass calibration fitness\n // @Description: This controls the fitness level required for a successful compass calibration. A lower value makes for a stricter fit (less likely to pass). This is the value used for the primary magnetometer. Other magnetometers get double the value.\n // @Range: 4 32\n // @Values: 4:Very Strict,8:Strict,16:Default,32:Relaxed\n // @Increment: 0.1\n // @User: Advanced"},"COMPASS_CUS_PIT":{"Description":"Compass mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.","DisplayName":"Custom orientation pitch offset","Increment":"1","Range":{"high":"180","low":"-180"},"RebootRequired":"True","Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Custom orientation pitch offset\n // @Description: Compass mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_CUS_ROLL":{"Description":"Compass mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.","DisplayName":"Custom orientation roll offset","Increment":"1","Range":{"high":"180","low":"-180"},"RebootRequired":"True","Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Custom orientation roll offset\n // @Description: Compass mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_CUS_YAW":{"Description":"Compass mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.","DisplayName":"Custom orientation yaw offset","Increment":"1","Range":{"high":"180","low":"-180"},"RebootRequired":"True","Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Custom orientation yaw offset\n // @Description: Compass mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.\n // @Range: -180 180\n // @Units: deg\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_DEC":{"Description":"An angle to compensate between the true north and magnetic north","DisplayName":"Compass declination","Increment":"0.01","Range":{"high":"3.142","low":"-3.142"},"Units":"rad","User":"Standard","__field_text":"\n // @DisplayName: Compass declination\n // @Description: An angle to compensate between the true north and magnetic north\n // @Range: -3.142 3.142\n // @Units: rad\n // @Increment: 0.01\n // @User: Standard"},"COMPASS_DEV_ID":{"Description":"Compass device id. Automatically detected, do not set manually","DisplayName":"Compass device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass device id\n // @Description: Compass device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID2":{"Description":"Second compass's device id. Automatically detected, do not set manually","DisplayName":"Compass2 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 device id\n // @Description: Second compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID3":{"Description":"Third compass's device id. Automatically detected, do not set manually","DisplayName":"Compass3 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 device id\n // @Description: Third compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID4":{"Description":"Extra 4th compass's device id. Automatically detected, do not set manually","DisplayName":"Compass4 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass4 device id\n // @Description: Extra 4th compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID5":{"Description":"Extra 5th compass's device id. Automatically detected, do not set manually","DisplayName":"Compass5 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass5 device id\n // @Description: Extra 5th compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID6":{"Description":"Extra 6th compass's device id. Automatically detected, do not set manually","DisplayName":"Compass6 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass6 device id\n // @Description: Extra 6th compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID7":{"Description":"Extra 7th compass's device id. Automatically detected, do not set manually","DisplayName":"Compass7 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass7 device id\n // @Description: Extra 7th compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DEV_ID8":{"Description":"Extra 8th compass's device id. Automatically detected, do not set manually","DisplayName":"Compass8 device id","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass8 device id\n // @Description: Extra 8th compass's device id. Automatically detected, do not set manually\n // @ReadOnly: True\n // @User: Advanced"},"COMPASS_DIA2_X":{"Calibration":"1","Description":"DIA_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron diagonal X component\n // @Description: DIA_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA2_Y":{"Calibration":"1","Description":"DIA_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron diagonal Y component\n // @Description: DIA_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA2_Z":{"Description":"DIA_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron diagonal Z component\n // @Description: DIA_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_DIA3_X":{"Calibration":"1","Description":"DIA_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron diagonal X component\n // @Description: DIA_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA3_Y":{"Calibration":"1","Description":"DIA_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron diagonal Y component\n // @Description: DIA_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA3_Z":{"Description":"DIA_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron diagonal Z component\n // @Description: DIA_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_DIA_X":{"Calibration":"1","Description":"DIA_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron diagonal X component\n // @Description: DIA_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA_Y":{"Calibration":"1","Description":"DIA_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron diagonal Y component\n // @Description: DIA_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_DIA_Z":{"Description":"DIA_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron diagonal Z component\n // @Description: DIA_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_ENABLE":{"Description":"Setting this to Enabled(1) will enable the compass. Setting this to Disabled(0) will disable the compass. Note that this is separate from COMPASS_USE. This will enable the low level senor, and will enable logging of magnetometer data. To use the compass for navigation you must also set COMPASS_USE to 1.","DisplayName":"Enable Compass","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable Compass\n // @Description: Setting this to Enabled(1) will enable the compass. Setting this to Disabled(0) will disable the compass. Note that this is separate from COMPASS_USE. This will enable the low level senor, and will enable logging of magnetometer data. To use the compass for navigation you must also set COMPASS_USE to 1.\n // @User: Standard\n // @RebootRequired: True\n // @Values: 0:Disabled,1:Enabled"},"COMPASS_EXTERN2":{"Description":"Configure second compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.","DisplayName":"Compass2 is attached via an external cable","User":"Advanced","Values":{"0":"Internal","1":"External","2":"ForcedExternal"},"__field_text":"\n // @DisplayName: Compass2 is attached via an external cable\n // @Description: Configure second compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.\n // @Values: 0:Internal,1:External,2:ForcedExternal\n // @User: Advanced"},"COMPASS_EXTERN3":{"Description":"Configure third compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.","DisplayName":"Compass3 is attached via an external cable","User":"Advanced","Values":{"0":"Internal","1":"External","2":"ForcedExternal"},"__field_text":"\n // @DisplayName: Compass3 is attached via an external cable\n // @Description: Configure third compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.\n // @Values: 0:Internal,1:External,2:ForcedExternal\n // @User: Advanced"},"COMPASS_EXTERNAL":{"Description":"Configure compass so it is attached externally. This is auto-detected on most boards. Set to 1 if the compass is externally connected. When externally connected the COMPASS_ORIENT option operates independently of the AHRS_ORIENTATION board orientation option. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.","DisplayName":"Compass is attached via an external cable","User":"Advanced","Values":{"0":"Internal","1":"External","2":"ForcedExternal"},"__field_text":"\n // @DisplayName: Compass is attached via an external cable\n // @Description: Configure compass so it is attached externally. This is auto-detected on most boards. Set to 1 if the compass is externally connected. When externally connected the COMPASS_ORIENT option operates independently of the AHRS_ORIENTATION board orientation option. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.\n // @Values: 0:Internal,1:External,2:ForcedExternal\n // @User: Advanced"},"COMPASS_FLTR_RNG":{"Description":"This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.","DisplayName":"Range in which sample is accepted","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","__field_text":"\n // @DisplayName: Range in which sample is accepted\n // @Description: This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.\n // @Units: %\n // @Range: 0 100\n // @Increment: 1"},"COMPASS_LEARN":{"Description":"Enable or disable the automatic learning of compass offsets. You can enable learning either using a compass-only method that is suitable only for fixed wing aircraft or using the offsets learnt by the active EKF state estimator. If this option is enabled then the learnt offsets are saved when you disarm the vehicle. If InFlight learning is enabled then the compass with automatically start learning once a flight starts (must be armed). While InFlight learning is running you cannot use position control modes.","DisplayName":"Learn compass offsets automatically","User":"Advanced","Values":{"0":"Disabled","1":"Internal-Learning","2":"EKF-Learning","3":"InFlight-Learning"},"__field_text":"\n // @DisplayName: Learn compass offsets automatically\n // @Description: Enable or disable the automatic learning of compass offsets. You can enable learning either using a compass-only method that is suitable only for fixed wing aircraft or using the offsets learnt by the active EKF state estimator. If this option is enabled then the learnt offsets are saved when you disarm the vehicle. If InFlight learning is enabled then the compass with automatically start learning once a flight starts (must be armed). While InFlight learning is running you cannot use position control modes.\n // @Values: 0:Disabled,1:Internal-Learning,2:EKF-Learning,3:InFlight-Learning\n // @User: Advanced"},"COMPASS_MOT2_X":{"Calibration":"1","Description":"Multiplied by the current throttle and added to compass2's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass2 for body frame X axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass2 for body frame X axis\n // @Description: Multiplied by the current throttle and added to compass2's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT2_Y":{"Calibration":"1","Description":"Multiplied by the current throttle and added to compass2's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass2 for body frame Y axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass2 for body frame Y axis\n // @Description: Multiplied by the current throttle and added to compass2's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT2_Z":{"Description":"Multiplied by the current throttle and added to compass2's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass2 for body frame Z axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass2 for body frame Z axis\n // @Description: Multiplied by the current throttle and added to compass2's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced"},"COMPASS_MOT3_X":{"Calibration":"1","Description":"Multiplied by the current throttle and added to compass3's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass3 for body frame X axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass3 for body frame X axis\n // @Description: Multiplied by the current throttle and added to compass3's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT3_Y":{"Calibration":"1","Description":"Multiplied by the current throttle and added to compass3's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass3 for body frame Y axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass3 for body frame Y axis\n // @Description: Multiplied by the current throttle and added to compass3's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT3_Z":{"Description":"Multiplied by the current throttle and added to compass3's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation to compass3 for body frame Z axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation to compass3 for body frame Z axis\n // @Description: Multiplied by the current throttle and added to compass3's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced"},"COMPASS_MOTCT":{"Calibration":"1","Description":"Set motor interference compensation type to disabled, throttle or current. Do not change manually.","DisplayName":"Motor interference compensation type","User":"Advanced","Values":{"0":"Disabled","1":"Use Throttle","2":"Use Current"},"__field_text":"\n // @DisplayName: Motor interference compensation type\n // @Description: Set motor interference compensation type to disabled, throttle or current. Do not change manually.\n // @Values: 0:Disabled,1:Use Throttle,2:Use Current\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT_X":{"Calibration":"1","Description":"Multiplied by the current throttle and added to the compass's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation for body frame X axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation for body frame X axis\n // @Description: Multiplied by the current throttle and added to the compass's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT_Y":{"Calibration":"1","Description":"Multiplied by the current throttle and added to the compass's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation for body frame Y axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation for body frame Y axis\n // @Description: Multiplied by the current throttle and added to the compass's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_MOT_Z":{"Description":"Multiplied by the current throttle and added to the compass's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)","DisplayName":"Motor interference compensation for body frame Z axis","Increment":"1","Range":{"high":"1000","low":"-1000"},"Units":"mGauss/A","User":"Advanced","__field_text":"\n // @DisplayName: Motor interference compensation for body frame Z axis\n // @Description: Multiplied by the current throttle and added to the compass's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)\n // @Range: -1000 1000\n // @Units: mGauss/A\n // @Increment: 1\n // @User: Advanced"},"COMPASS_ODI2_X":{"Calibration":"1","Description":"ODI_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron off-diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron off-diagonal X component\n // @Description: ODI_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI2_Y":{"Calibration":"1","Description":"ODI_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron off-diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron off-diagonal Y component\n // @Description: ODI_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI2_Z":{"Description":"ODI_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass2 soft-iron off-diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 soft-iron off-diagonal Z component\n // @Description: ODI_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_ODI3_X":{"Calibration":"1","Description":"ODI_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron off-diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron off-diagonal X component\n // @Description: ODI_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI3_Y":{"Calibration":"1","Description":"ODI_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron off-diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron off-diagonal Y component\n // @Description: ODI_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI3_Z":{"Description":"ODI_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass3 soft-iron off-diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 soft-iron off-diagonal Z component\n // @Description: ODI_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_ODI_X":{"Calibration":"1","Description":"ODI_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron off-diagonal X component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron off-diagonal X component\n // @Description: ODI_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI_Y":{"Calibration":"1","Description":"ODI_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron off-diagonal Y component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron off-diagonal Y component\n // @Description: ODI_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_ODI_Z":{"Description":"ODI_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]","DisplayName":"Compass soft-iron off-diagonal Z component","User":"Advanced","__field_text":"\n // @DisplayName: Compass soft-iron off-diagonal Z component\n // @Description: ODI_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]\n // @User: Advanced"},"COMPASS_OFFS_MAX":{"Description":"This sets the maximum allowed compass offset in calibration and arming checks","DisplayName":"Compass maximum offset","Increment":"1","Range":{"high":"3000","low":"500"},"User":"Advanced","__field_text":"\n // @DisplayName: Compass maximum offset\n // @Description: This sets the maximum allowed compass offset in calibration and arming checks\n // @Range: 500 3000\n // @Increment: 1\n // @User: Advanced"},"COMPASS_OFS2_X":{"Calibration":"1","Description":"Offset to be added to compass2's x-axis values to compensate for metal in the frame","DisplayName":"Compass2 offsets in milligauss on the X axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 offsets in milligauss on the X axis\n // @Description: Offset to be added to compass2's x-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS2_Y":{"Calibration":"1","Description":"Offset to be added to compass2's y-axis values to compensate for metal in the frame","DisplayName":"Compass2 offsets in milligauss on the Y axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 offsets in milligauss on the Y axis\n // @Description: Offset to be added to compass2's y-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS2_Z":{"Description":"Offset to be added to compass2's z-axis values to compensate for metal in the frame","DisplayName":"Compass2 offsets in milligauss on the Z axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass2 offsets in milligauss on the Z axis\n // @Description: Offset to be added to compass2's z-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced"},"COMPASS_OFS3_X":{"Calibration":"1","Description":"Offset to be added to compass3's x-axis values to compensate for metal in the frame","DisplayName":"Compass3 offsets in milligauss on the X axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 offsets in milligauss on the X axis\n // @Description: Offset to be added to compass3's x-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS3_Y":{"Calibration":"1","Description":"Offset to be added to compass3's y-axis values to compensate for metal in the frame","DisplayName":"Compass3 offsets in milligauss on the Y axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 offsets in milligauss on the Y axis\n // @Description: Offset to be added to compass3's y-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS3_Z":{"Description":"Offset to be added to compass3's z-axis values to compensate for metal in the frame","DisplayName":"Compass3 offsets in milligauss on the Z axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass3 offsets in milligauss on the Z axis\n // @Description: Offset to be added to compass3's z-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced"},"COMPASS_OFS_X":{"Calibration":"1","Description":"Offset to be added to the compass x-axis values to compensate for metal in the frame","DisplayName":"Compass offsets in milligauss on the X axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass offsets in milligauss on the X axis\n // @Description: Offset to be added to the compass x-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS_Y":{"Calibration":"1","Description":"Offset to be added to the compass y-axis values to compensate for metal in the frame","DisplayName":"Compass offsets in milligauss on the Y axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass offsets in milligauss on the Y axis\n // @Description: Offset to be added to the compass y-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced\n // @Calibration: 1"},"COMPASS_OFS_Z":{"Description":"Offset to be added to the compass z-axis values to compensate for metal in the frame","DisplayName":"Compass offsets in milligauss on the Z axis","Increment":"1","Range":{"high":"400","low":"-400"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: Compass offsets in milligauss on the Z axis\n // @Description: Offset to be added to the compass z-axis values to compensate for metal in the frame\n // @Range: -400 400\n // @Units: mGauss\n // @Increment: 1\n // @User: Advanced"},"COMPASS_OPTIONS":{"Bitmask":{"0":"CalRequireGPS","1":"Allow missing DroneCAN compasses to be automaticaly replaced (calibration still required)"},"Description":"This sets options to change the behaviour of the compass","DisplayName":"Compass options","User":"Advanced","__field_text":"\n // @DisplayName: Compass options\n // @Description: This sets options to change the behaviour of the compass\n // @Bitmask: 0:CalRequireGPS\n // @Bitmask: 1: Allow missing DroneCAN compasses to be automaticaly replaced (calibration still required)\n // @User: Advanced"},"COMPASS_ORIENT":{"Description":"The orientation of the first external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.","DisplayName":"Compass orientation","User":"Advanced","Values":{"0":"None","1":"Yaw45","2":"Yaw90","3":"Yaw135","4":"Yaw180","5":"Yaw225","6":"Yaw270","7":"Yaw315","8":"Roll180","9":"Yaw45Roll180","10":"Yaw90Roll180","11":"Yaw135Roll180","12":"Pitch180","13":"Yaw225Roll180","14":"Yaw270Roll180","15":"Yaw315Roll180","16":"Roll90","17":"Yaw45Roll90","18":"Yaw90Roll90","19":"Yaw135Roll90","20":"Roll270","21":"Yaw45Roll270","22":"Yaw90Roll270","23":"Yaw135Roll270","24":"Pitch90","25":"Pitch270","26":"Yaw90Pitch180","27":"Yaw270Pitch180","28":"Pitch90Roll90","29":"Pitch90Roll180","30":"Pitch90Roll270","31":"Pitch180Roll90","32":"Pitch180Roll270","33":"Pitch270Roll90","34":"Pitch270Roll180","35":"Pitch270Roll270","36":"Yaw90Pitch180Roll90","37":"Yaw270Roll90","38":"Yaw293Pitch68Roll180","39":"Pitch315","40":"Pitch315Roll90","42":"Roll45","43":"Roll315","100":"Custom 4.1 and older","101":"Custom 1","102":"Custom 2"},"__field_text":"\n // @DisplayName: Compass orientation\n // @Description: The orientation of the first external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.\n // @Values: 0:None,1:Yaw45,2:Yaw90,3:Yaw135,4:Yaw180,5:Yaw225,6:Yaw270,7:Yaw315,8:Roll180,9:Yaw45Roll180,10:Yaw90Roll180,11:Yaw135Roll180,12:Pitch180,13:Yaw225Roll180,14:Yaw270Roll180,15:Yaw315Roll180,16:Roll90,17:Yaw45Roll90,18:Yaw90Roll90,19:Yaw135Roll90,20:Roll270,21:Yaw45Roll270,22:Yaw90Roll270,23:Yaw135Roll270,24:Pitch90,25:Pitch270,26:Yaw90Pitch180,27:Yaw270Pitch180,28:Pitch90Roll90,29:Pitch90Roll180,30:Pitch90Roll270,31:Pitch180Roll90,32:Pitch180Roll270,33:Pitch270Roll90,34:Pitch270Roll180,35:Pitch270Roll270,36:Yaw90Pitch180Roll90,37:Yaw270Roll90,38:Yaw293Pitch68Roll180,39:Pitch315,40:Pitch315Roll90,42:Roll45,43:Roll315,100:Custom 4.1 and older,101:Custom 1,102:Custom 2\n // @User: Advanced"},"COMPASS_ORIENT2":{"Description":"The orientation of a second external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.","DisplayName":"Compass2 orientation","User":"Advanced","Values":{"0":"None","1":"Yaw45","2":"Yaw90","3":"Yaw135","4":"Yaw180","5":"Yaw225","6":"Yaw270","7":"Yaw315","8":"Roll180","9":"Yaw45Roll180","10":"Yaw90Roll180","11":"Yaw135Roll180","12":"Pitch180","13":"Yaw225Roll180","14":"Yaw270Roll180","15":"Yaw315Roll180","16":"Roll90","17":"Yaw45Roll90","18":"Yaw90Roll90","19":"Yaw135Roll90","20":"Roll270","21":"Yaw45Roll270","22":"Yaw90Roll270","23":"Yaw135Roll270","24":"Pitch90","25":"Pitch270","26":"Yaw90Pitch180","27":"Yaw270Pitch180","28":"Pitch90Roll90","29":"Pitch90Roll180","30":"Pitch90Roll270","31":"Pitch180Roll90","32":"Pitch180Roll270","33":"Pitch270Roll90","34":"Pitch270Roll180","35":"Pitch270Roll270","36":"Yaw90Pitch180Roll90","37":"Yaw270Roll90","38":"Yaw293Pitch68Roll180","39":"Pitch315","40":"Pitch315Roll90","42":"Roll45","43":"Roll315","100":"Custom 4.1 and older","101":"Custom 1","102":"Custom 2"},"__field_text":"\n // @DisplayName: Compass2 orientation\n // @Description: The orientation of a second external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.\n // @Values: 0:None,1:Yaw45,2:Yaw90,3:Yaw135,4:Yaw180,5:Yaw225,6:Yaw270,7:Yaw315,8:Roll180,9:Yaw45Roll180,10:Yaw90Roll180,11:Yaw135Roll180,12:Pitch180,13:Yaw225Roll180,14:Yaw270Roll180,15:Yaw315Roll180,16:Roll90,17:Yaw45Roll90,18:Yaw90Roll90,19:Yaw135Roll90,20:Roll270,21:Yaw45Roll270,22:Yaw90Roll270,23:Yaw135Roll270,24:Pitch90,25:Pitch270,26:Yaw90Pitch180,27:Yaw270Pitch180,28:Pitch90Roll90,29:Pitch90Roll180,30:Pitch90Roll270,31:Pitch180Roll90,32:Pitch180Roll270,33:Pitch270Roll90,34:Pitch270Roll180,35:Pitch270Roll270,36:Yaw90Pitch180Roll90,37:Yaw270Roll90,38:Yaw293Pitch68Roll180,39:Pitch315,40:Pitch315Roll90,42:Roll45,43:Roll315,100:Custom 4.1 and older,101:Custom 1,102:Custom 2\n // @User: Advanced"},"COMPASS_ORIENT3":{"Description":"The orientation of a third external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.","DisplayName":"Compass3 orientation","User":"Advanced","Values":{"0":"None","1":"Yaw45","2":"Yaw90","3":"Yaw135","4":"Yaw180","5":"Yaw225","6":"Yaw270","7":"Yaw315","8":"Roll180","9":"Yaw45Roll180","10":"Yaw90Roll180","11":"Yaw135Roll180","12":"Pitch180","13":"Yaw225Roll180","14":"Yaw270Roll180","15":"Yaw315Roll180","16":"Roll90","17":"Yaw45Roll90","18":"Yaw90Roll90","19":"Yaw135Roll90","20":"Roll270","21":"Yaw45Roll270","22":"Yaw90Roll270","23":"Yaw135Roll270","24":"Pitch90","25":"Pitch270","26":"Yaw90Pitch180","27":"Yaw270Pitch180","28":"Pitch90Roll90","29":"Pitch90Roll180","30":"Pitch90Roll270","31":"Pitch180Roll90","32":"Pitch180Roll270","33":"Pitch270Roll90","34":"Pitch270Roll180","35":"Pitch270Roll270","36":"Yaw90Pitch180Roll90","37":"Yaw270Roll90","38":"Yaw293Pitch68Roll180","39":"Pitch315","40":"Pitch315Roll90","42":"Roll45","43":"Roll315","100":"Custom 4.1 and older","101":"Custom 1","102":"Custom 2"},"__field_text":"\n // @DisplayName: Compass3 orientation\n // @Description: The orientation of a third external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.\n // @Values: 0:None,1:Yaw45,2:Yaw90,3:Yaw135,4:Yaw180,5:Yaw225,6:Yaw270,7:Yaw315,8:Roll180,9:Yaw45Roll180,10:Yaw90Roll180,11:Yaw135Roll180,12:Pitch180,13:Yaw225Roll180,14:Yaw270Roll180,15:Yaw315Roll180,16:Roll90,17:Yaw45Roll90,18:Yaw90Roll90,19:Yaw135Roll90,20:Roll270,21:Yaw45Roll270,22:Yaw90Roll270,23:Yaw135Roll270,24:Pitch90,25:Pitch270,26:Yaw90Pitch180,27:Yaw270Pitch180,28:Pitch90Roll90,29:Pitch90Roll180,30:Pitch90Roll270,31:Pitch180Roll90,32:Pitch180Roll270,33:Pitch270Roll90,34:Pitch270Roll180,35:Pitch270Roll270,36:Yaw90Pitch180Roll90,37:Yaw270Roll90,38:Yaw293Pitch68Roll180,39:Pitch315,40:Pitch315Roll90,42:Roll45,43:Roll315,100:Custom 4.1 and older,101:Custom 1,102:Custom 2\n // @User: Advanced"},"COMPASS_PMOT1_X":{"Description":"Compensation for X axis of motor1","DisplayName":"Compass per-motor1 X","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor1 X\n // @Description: Compensation for X axis of motor1\n // @User: Advanced"},"COMPASS_PMOT1_Y":{"Description":"Compensation for Y axis of motor1","DisplayName":"Compass per-motor1 Y","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor1 Y\n // @Description: Compensation for Y axis of motor1\n // @User: Advanced"},"COMPASS_PMOT1_Z":{"Description":"Compensation for Z axis of motor1","DisplayName":"Compass per-motor1 Z","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor1 Z\n // @Description: Compensation for Z axis of motor1\n // @User: Advanced"},"COMPASS_PMOT2_X":{"Description":"Compensation for X axis of motor2","DisplayName":"Compass per-motor2 X","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor2 X\n // @Description: Compensation for X axis of motor2\n // @User: Advanced"},"COMPASS_PMOT2_Y":{"Description":"Compensation for Y axis of motor2","DisplayName":"Compass per-motor2 Y","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor2 Y\n // @Description: Compensation for Y axis of motor2\n // @User: Advanced"},"COMPASS_PMOT2_Z":{"Description":"Compensation for Z axis of motor2","DisplayName":"Compass per-motor2 Z","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor2 Z\n // @Description: Compensation for Z axis of motor2\n // @User: Advanced"},"COMPASS_PMOT3_X":{"Description":"Compensation for X axis of motor3","DisplayName":"Compass per-motor3 X","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor3 X\n // @Description: Compensation for X axis of motor3\n // @User: Advanced"},"COMPASS_PMOT3_Y":{"Description":"Compensation for Y axis of motor3","DisplayName":"Compass per-motor3 Y","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor3 Y\n // @Description: Compensation for Y axis of motor3\n // @User: Advanced"},"COMPASS_PMOT3_Z":{"Description":"Compensation for Z axis of motor3","DisplayName":"Compass per-motor3 Z","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor3 Z\n // @Description: Compensation for Z axis of motor3\n // @User: Advanced"},"COMPASS_PMOT4_X":{"Description":"Compensation for X axis of motor4","DisplayName":"Compass per-motor4 X","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor4 X\n // @Description: Compensation for X axis of motor4\n // @User: Advanced"},"COMPASS_PMOT4_Y":{"Description":"Compensation for Y axis of motor4","DisplayName":"Compass per-motor4 Y","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor4 Y\n // @Description: Compensation for Y axis of motor4\n // @User: Advanced"},"COMPASS_PMOT4_Z":{"Description":"Compensation for Z axis of motor4","DisplayName":"Compass per-motor4 Z","User":"Advanced","__field_text":"\n // @DisplayName: Compass per-motor4 Z\n // @Description: Compensation for Z axis of motor4\n // @User: Advanced"},"COMPASS_PMOT_EN":{"Description":"This enables per-motor compass corrections","DisplayName":"per-motor compass correction enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: per-motor compass correction enable\n // @Description: This enables per-motor compass corrections\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"COMPASS_PMOT_EXP":{"Description":"This is the exponential correction for the power output of the motor for per-motor compass correction","DisplayName":"per-motor exponential correction","Increment":"0.01","Range":{"high":"2","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: per-motor exponential correction\n // @Description: This is the exponential correction for the power output of the motor for per-motor compass correction\n // @Range: 0 2\n // @Increment: 0.01\n // @User: Advanced"},"COMPASS_PRIO1_ID":{"Description":"Compass device id with 1st order priority, set automatically if 0. Reboot required after change.","DisplayName":"Compass device id with 1st order priority","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass device id with 1st order priority\n // @Description: Compass device id with 1st order priority, set automatically if 0. Reboot required after change.\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_PRIO2_ID":{"Description":"Compass device id with 2nd order priority, set automatically if 0. Reboot required after change.","DisplayName":"Compass device id with 2nd order priority","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass device id with 2nd order priority\n // @Description: Compass device id with 2nd order priority, set automatically if 0. Reboot required after change.\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_PRIO3_ID":{"Description":"Compass device id with 3rd order priority, set automatically if 0. Reboot required after change.","DisplayName":"Compass device id with 3rd order priority","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Compass device id with 3rd order priority\n // @Description: Compass device id with 3rd order priority, set automatically if 0. Reboot required after change.\n // @RebootRequired: True\n // @User: Advanced"},"COMPASS_SCALE":{"Description":"Scaling factor for first compass to compensate for sensor scaling errors. If this is 0 then no scaling is done","DisplayName":"Compass1 scale factor","Range":{"high":"1.3","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Compass1 scale factor\n // @Description: Scaling factor for first compass to compensate for sensor scaling errors. If this is 0 then no scaling is done\n // @User: Standard\n // @Range: 0 1.3"},"COMPASS_SCALE2":{"Description":"Scaling factor for 2nd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done","DisplayName":"Compass2 scale factor","Range":{"high":"1.3","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Compass2 scale factor\n // @Description: Scaling factor for 2nd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done\n // @User: Standard\n // @Range: 0 1.3"},"COMPASS_SCALE3":{"Description":"Scaling factor for 3rd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done","DisplayName":"Compass3 scale factor","Range":{"high":"1.3","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Compass3 scale factor\n // @Description: Scaling factor for 3rd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done\n // @User: Standard\n // @Range: 0 1.3"},"COMPASS_TYPEMASK":{"Bitmask":{"0":"HMC5883","1":"LSM303D","2":"AK8963","3":"BMM150","4":"LSM9DS1","5":"LIS3MDL","6":"AK09916","7":"IST8310","8":"ICM20948","9":"MMC3416","11":"DroneCAN","12":"QMC5883","14":"MAG3110","15":"IST8308","16":"RM3100","17":"MSP","18":"ExternalAHRS"},"Description":"This is a bitmask of driver types to disable. If a driver type is set in this mask then that driver will not try to find a sensor at startup","DisplayName":"Compass disable driver type mask","User":"Advanced","__field_text":"\n // @DisplayName: Compass disable driver type mask\n // @Description: This is a bitmask of driver types to disable. If a driver type is set in this mask then that driver will not try to find a sensor at startup\n // @Bitmask: 0:HMC5883,1:LSM303D,2:AK8963,3:BMM150,4:LSM9DS1,5:LIS3MDL,6:AK09916,7:IST8310,8:ICM20948,9:MMC3416,11:DroneCAN,12:QMC5883,14:MAG3110,15:IST8308,16:RM3100,17:MSP,18:ExternalAHRS\n // @User: Advanced"},"COMPASS_USE":{"Description":"Enable or disable the use of the compass (instead of the GPS) for determining heading","DisplayName":"Use compass for yaw","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use compass for yaw\n // @Description: Enable or disable the use of the compass (instead of the GPS) for determining heading\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"COMPASS_USE2":{"Description":"Enable or disable the secondary compass for determining heading.","DisplayName":"Compass2 used for yaw","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Compass2 used for yaw\n // @Description: Enable or disable the secondary compass for determining heading.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"COMPASS_USE3":{"Description":"Enable or disable the tertiary compass for determining heading.","DisplayName":"Compass3 used for yaw","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Compass3 used for yaw\n // @Description: Enable or disable the tertiary compass for determining heading.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"CUST_ROT1_PITCH":{"Description":"Custom euler pitch, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom pitch","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom pitch\n // @Description: Custom euler pitch, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT1_ROLL":{"Description":"Custom euler roll, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom roll","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom roll\n // @Description: Custom euler roll, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT1_YAW":{"Description":"Custom euler yaw, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom yaw","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom yaw\n // @Description: Custom euler yaw, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT2_PITCH":{"Description":"Custom euler pitch, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom pitch","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom pitch\n // @Description: Custom euler pitch, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT2_ROLL":{"Description":"Custom euler roll, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom roll","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom roll\n // @Description: Custom euler roll, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT2_YAW":{"Description":"Custom euler yaw, euler 321 (yaw, pitch, roll) ordering","DisplayName":"Custom yaw","RebootRequired":"True","Units":"deg","__field_text":"\n // @DisplayName: Custom yaw\n // @Description: Custom euler yaw, euler 321 (yaw, pitch, roll) ordering\n // @Units: deg\n // @RebootRequired: True"},"CUST_ROT_ENABLE":{"Description":"This enables custom rotations","DisplayName":"Enable Custom rotations","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Enable Custom rotations\n // @Values: 0:Disable, 1:Enable\n // @Description: This enables custom rotations\n // @User: Standard\n // @RebootRequired: True"},"DDS_ENABLE":{"Description":"Enable DDS subsystem","DisplayName":"DDS enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DDS enable\n // @Description: Enable DDS subsystem\n // @Values: 0:Disabled,1:Enabled\n // @RebootRequired: True\n // @User: Advanced"},"DDS_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"DDS_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"DDS_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"DDS_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"DDS_UDP_PORT":{"Description":"UDP port number for DDS","DisplayName":"DDS UDP port","Range":{"high":"65535","low":"1"},"RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: DDS UDP port\n // @Description: UDP port number for DDS\n // @Range: 1 65535\n // @RebootRequired: True\n // @User: Standard"},"DEV_OPTIONS":{"Bitmask":{"0":"ADSBMavlinkProcessing","1":"DevOptionVFR_HUDRelativeAlt"},"Description":"Bitmask of developer options. The meanings of the bit fields in this parameter may vary at any time. Developers should check the source code for current meaning","DisplayName":"Development options","User":"Advanced","__field_text":"\n // @DisplayName: Development options\n // @Description: Bitmask of developer options. The meanings of the bit fields in this parameter may vary at any time. Developers should check the source code for current meaning\n // @Bitmask: 0:ADSBMavlinkProcessing,1:DevOptionVFR_HUDRelativeAlt\n // @User: Advanced"},"DID_BARO_ACC":{"Description":"Barometer Vertical Accuracy when installed in the vehicle. Note this is dependent upon installation conditions and thus disabled by default","DisplayName":"Barometer vertical accuraacy","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Barometer vertical accuraacy\n // @Description: Barometer Vertical Accuracy when installed in the vehicle. Note this is dependent upon installation conditions and thus disabled by default\n // @Units: m\n // @User: Advanced"},"DID_CANDRIVER":{"Description":"DroneCAN driver index, 0 to disable DroneCAN","DisplayName":"DroneCAN driver number","Values":{"0":"Disabled","1":"Driver1","2":"Driver2"},"__field_text":"\n // @DisplayName: DroneCAN driver number\n // @Description: DroneCAN driver index, 0 to disable DroneCAN\n // @Values: 0:Disabled,1:Driver1,2:Driver2"},"DID_ENABLE":{"Description":"Enable ODID subsystem","DisplayName":"Enable ODID subsystem","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable ODID subsystem\n // @Description: Enable ODID subsystem\n // @Values: 0:Disabled,1:Enabled"},"DID_MAVPORT":{"Description":"Serial port number to send OpenDroneID MAVLink messages to. Can be -1 if using DroneCAN.","DisplayName":"MAVLink serial port","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: MAVLink serial port\n // @Description: Serial port number to send OpenDroneID MAVLink messages to. Can be -1 if using DroneCAN.\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6"},"DID_OPTIONS":{"Bitmask":{"0":"EnforceArming","1":"AllowNonGPSPosition","2":"LockUASIDOnFirstBasicIDRx"},"Description":"Options for OpenDroneID subsystem","DisplayName":"OpenDroneID options","__field_text":"\n // @DisplayName: OpenDroneID options\n // @Description: Options for OpenDroneID subsystem\n // @Bitmask: 0:EnforceArming, 1:AllowNonGPSPosition, 2:LockUASIDOnFirstBasicIDRx"},"DISARM_DELAY":{"Description":"Delay before automatic disarm in seconds after landing touchdown detection. A value of zero disables auto disarm. If Emergency Motor stop active, delay time is half this value.","DisplayName":"Disarm delay","Range":{"high":"127","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Disarm delay\n // @Description: Delay before automatic disarm in seconds after landing touchdown detection. A value of zero disables auto disarm. If Emergency Motor stop active, delay time is half this value.\n // @Units: s\n // @Range: 0 127\n // @User: Advanced"},"DJIR_DEBUG":{"Description":"Enable DJIRS2 debug","DisplayName":"DJIRS2 debug","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Enabled with attitude reporting"},"__field_text":"\n // @DisplayName: DJIRS2 debug\n // @Description: Enable DJIRS2 debug\n // @Values: 0:Disabled,1:Enabled,2:Enabled with attitude reporting\n // @User: Advanced"},"DJIR_UPSIDEDOWN":{"Description":"DJIRS2 upside down","DisplayName":"DJIRS2 upside down","User":"Standard","Values":{"0":"Right side up","1":"Upside down"},"__field_text":"\n // @DisplayName: DJIRS2 upside down\n // @Description: DJIRS2 upside down\n // @Values: 0:Right side up,1:Upside down\n // @User: Standard"},"DR_ENABLE":{"Description":"Deadreckoning Enable","DisplayName":"Deadreckoning Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Deadreckoning Enable\n // @Description: Deadreckoning Enable\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"DR_ENABLE_DIST":{"Description":"Distance from home (in meters) beyond which the dead reckoning will be enabled","DisplayName":"Deadreckoning Enable Distance","Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning Enable Distance\n // @Description: Distance from home (in meters) beyond which the dead reckoning will be enabled\n // @Units: m\n // @User: Standard"},"DR_FLY_ALT_MIN":{"Description":"Copter will fly at at least this altitude (in meters) above home during deadreckoning","DisplayName":"Deadreckoning Altitude Min","Range":{"high":"1000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning Altitude Min\n // @Description: Copter will fly at at least this altitude (in meters) above home during deadreckoning\n // @Units: m\n // @Range: 0 1000\n // @User: Standard"},"DR_FLY_ANGLE":{"Description":"lean angle (in degrees) during deadreckoning","DisplayName":"Deadreckoning Lean Angle","Range":{"high":"45","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning Lean Angle\n // @Description: lean angle (in degrees) during deadreckoning\n // @Units: deg\n // @Range: 0 45\n // @User: Standard"},"DR_FLY_TIMEOUT":{"Description":"Copter will attempt to switch to NEXT_MODE after this many seconds of deadreckoning. If it cannot switch modes it will continue in Guided_NoGPS. Set to 0 to disable timeout","DisplayName":"Deadreckoning flight timeout","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning flight timeout\n // @Description: Copter will attempt to switch to NEXT_MODE after this many seconds of deadreckoning. If it cannot switch modes it will continue in Guided_NoGPS. Set to 0 to disable timeout\n // @Units: s\n // @User: Standard"},"DR_GPS_SACC_MAX":{"Description":"GPS speed accuracy maximum, above which deadreckoning home will begin (default is 0.8). Lower values trigger with good GPS quality, higher values will allow poorer GPS before triggering. Set to 0 to disable use of GPS speed accuracy","DisplayName":"Deadreckoning GPS speed accuracy maximum threshold","Range":{"high":"10","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning GPS speed accuracy maximum threshold\n // @Description: GPS speed accuracy maximum, above which deadreckoning home will begin (default is 0.8). Lower values trigger with good GPS quality, higher values will allow poorer GPS before triggering. Set to 0 to disable use of GPS speed accuracy\n // @Range: 0 10\n // @User: Standard"},"DR_GPS_SAT_MIN":{"Description":"GPS satellite count threshold below which deadreckoning home will begin (default is 6). Higher values trigger with good GPS quality, Lower values trigger with worse GPS quality. Set to 0 to disable use of GPS satellite count","DisplayName":"Deadreckoning GPS satellite count min threshold","Range":{"high":"30","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning GPS satellite count min threshold\n // @Description: GPS satellite count threshold below which deadreckoning home will begin (default is 6). Higher values trigger with good GPS quality, Lower values trigger with worse GPS quality. Set to 0 to disable use of GPS satellite count\n // @Range: 0 30\n // @User: Standard"},"DR_GPS_TRIGG_SEC":{"Description":"GPS checks must fail for this many seconds before dead reckoning will be triggered","DisplayName":"Deadreckoning GPS check trigger seconds","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Deadreckoning GPS check trigger seconds\n // @Description: GPS checks must fail for this many seconds before dead reckoning will be triggered\n // @Units: s\n // @User: Standard"},"DR_NEXT_MODE":{"Description":"Copter switch to this mode after GPS recovers or DR_FLY_TIMEOUT has elapsed. Default is 6/RTL. Set to -1 to return to mode used before deadreckoning was triggered","DisplayName":"Deadreckoning Next Mode","User":"Standard","Values":{"2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","16":"PosHold","17":"Brake","20":"Guided_NoGPS","21":"Smart_RTL","27":"Auto RTL"},"__field_text":"\n // @DisplayName: Deadreckoning Next Mode\n // @Description: Copter switch to this mode after GPS recovers or DR_FLY_TIMEOUT has elapsed. Default is 6/RTL. Set to -1 to return to mode used before deadreckoning was triggered\n // @Values: 2:AltHold,3:Auto,4:Guided,5:Loiter,6:RTL,7:Circle,9:Land,16:PosHold,17:Brake,20:Guided_NoGPS,21:Smart_RTL,27:Auto RTL\n // @User: Standard"},"EAHRS_OPTIONS":{"Bitmask":{"0":"Vector Nav use uncompensated values for accel gyro and mag."},"Description":"External AHRS options bitmask","DisplayName":"External AHRS options","User":"Standard","__field_text":"\n // @DisplayName: External AHRS options\n // @Description: External AHRS options bitmask\n // @Bitmask: 0:Vector Nav use uncompensated values for accel gyro and mag.\n // @User: Standard"},"EAHRS_RATE":{"Description":"Requested rate for AHRS device","DisplayName":"AHRS data rate","Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: AHRS data rate\n // @Description: Requested rate for AHRS device\n // @Units: Hz\n // @User: Standard"},"EAHRS_SENSORS":{"Bitmask":{"0":"GPS","1":"IMU","2":"Baro","3":"Compass"},"Description":"External AHRS sensors bitmask","DisplayName":"External AHRS sensors","User":"Advanced","__field_text":"\n // @DisplayName: External AHRS sensors\n // @Description: External AHRS sensors bitmask\n // @Bitmask: 0:GPS,1:IMU,2:Baro,3:Compass\n // @User: Advanced"},"EAHRS_TYPE":{"Description":"Type of AHRS device","DisplayName":"AHRS type","User":"Standard","Values":{"0":"None","1":"VectorNav","2":"MicroStrain5","5":"InertialLabs","7":"MicroStrain7"},"__field_text":"\n // @DisplayName: AHRS type\n // @Description: Type of AHRS device\n // @Values: 0:None,1:VectorNav,2:MicroStrain5,5:InertialLabs,7:MicroStrain7\n // @User: Standard"},"EFI_COEF1":{"Description":"Used to calibrate fuel flow for MS protocol (Slope). This should be calculated from a log at constant fuel usage rate. Plot (ECYL[0].InjT*EFI.Rpm)/600.0 to get the duty_cycle. Measure actual fuel usage in cm^3/min, and set EFI_COEF1 = fuel_usage_cm3permin / duty_cycle","DisplayName":"EFI Calibration Coefficient 1","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: EFI Calibration Coefficient 1\n // @Description: Used to calibrate fuel flow for MS protocol (Slope). This should be calculated from a log at constant fuel usage rate. Plot (ECYL[0].InjT*EFI.Rpm)/600.0 to get the duty_cycle. Measure actual fuel usage in cm^3/min, and set EFI_COEF1 = fuel_usage_cm3permin / duty_cycle\n // @Range: 0 1\n // @User: Advanced"},"EFI_COEF2":{"Description":"Used to calibrate fuel flow for MS protocol (Offset). This can be used to correct for a non-zero offset in the fuel consumption calculation of EFI_COEF1","DisplayName":"EFI Calibration Coefficient 2","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: EFI Calibration Coefficient 2\n // @Description: Used to calibrate fuel flow for MS protocol (Offset). This can be used to correct for a non-zero offset in the fuel consumption calculation of EFI_COEF1\n // @Range: 0 10\n // @User: Advanced"},"EFI_DLA_ENABLE":{"Description":"Enable EFI DLA driver","DisplayName":"EFI DLA enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFI DLA enable\n // @Description: Enable EFI DLA driver\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_DLA_LPS":{"Description":"EFI DLA litres of fuel per second of injection time","DisplayName":"EFI DLA fuel scale","Range":{"high":"1","low":"0.00001"},"Units":"litres","User":"Standard","__field_text":"\n // @DisplayName: EFI DLA fuel scale\n // @Description: EFI DLA litres of fuel per second of injection time\n // @Range: 0.00001 1\n // @Units: litres\n // @User: Standard"},"EFI_FUEL_DENS":{"Description":"Used to calculate fuel consumption","DisplayName":"ECU Fuel Density","Range":{"high":"10000","low":"0"},"Units":"kg/m/m/m","User":"Advanced","__field_text":"\n // @DisplayName: ECU Fuel Density\n // @Description: Used to calculate fuel consumption\n // @Units: kg/m/m/m\n // @Range: 0 10000\n // @User: Advanced"},"EFI_H6K_CANDRV":{"Description":"Halo6000 CAN driver. Use 1 for first CAN scripting driver, 2 for 2nd driver","DisplayName":"Halo6000 CAN driver","User":"Standard","Values":{"0":"Disabled","1":"FirstCAN","2":"SecondCAN"},"__field_text":"\n // @DisplayName: Halo6000 CAN driver\n // @Description: Halo6000 CAN driver. Use 1 for first CAN scripting driver, 2 for 2nd driver\n // @Values: 0:Disabled,1:FirstCAN,2:SecondCAN\n // @User: Standard"},"EFI_H6K_ENABLE":{"Description":"Enable Halo6000 EFI driver","DisplayName":"Enable Halo6000 EFI driver","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable Halo6000 EFI driver\n // @Description: Enable Halo6000 EFI driver\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_H6K_FUELTOT":{"Description":"The capacity of the tank in litres","DisplayName":"Halo6000 total fuel capacity","Units":"litres","User":"Standard","__field_text":"\n // @DisplayName: Halo6000 total fuel capacity\n // @Description: The capacity of the tank in litres\n // @Units: litres\n // @User: Standard"},"EFI_H6K_START_FN":{"Description":"The RC auxilliary function number for start/stop of the generator. Zero to disable start function","DisplayName":"Halo6000 start auxilliary function","User":"Standard","Values":{"0":"Disabled","300":"300","301":"301","302":"302","303":"303","304":"304","305":"305","306":"306","307":"307"},"__field_text":"\n // @DisplayName: Halo6000 start auxilliary function\n // @Description: The RC auxilliary function number for start/stop of the generator. Zero to disable start function\n // @Values: 0:Disabled,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307\n // @User: Standard"},"EFI_H6K_TELEM_RT":{"Description":"The rate that additional generator telemetry is sent","DisplayName":"Halo6000 telemetry rate","Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Halo6000 telemetry rate\n // @Description: The rate that additional generator telemetry is sent\n // @Units: Hz\n // @User: Standard"},"EFI_INF_ENABLE":{"Description":"Enable EFI INF-Inject driver","DisplayName":"EFI INF-Inject enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFI INF-Inject enable\n // @Description: Enable EFI INF-Inject driver\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_SP_CANDRV":{"Description":"Set SkyPower EFI CAN driver","DisplayName":"Set SkyPower EFI CAN driver","User":"Standard","Values":{"0":"None","1":"1stCANDriver","2":"2ndCanDriver"},"__field_text":"\n // @DisplayName: Set SkyPower EFI CAN driver\n // @Description: Set SkyPower EFI CAN driver\n // @Values: 0:None,1:1stCANDriver,2:2ndCanDriver\n // @User: Standard"},"EFI_SP_ENABLE":{"Description":"Enable SkyPower EFI support","DisplayName":"Enable SkyPower EFI support","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable SkyPower EFI support\n // @Description: Enable SkyPower EFI support\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_SP_GEN_CTRL":{"Description":"SkyPower EFI enable generator control","DisplayName":"SkyPower EFI enable generator control","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SkyPower EFI enable generator control\n // @Description: SkyPower EFI enable generator control\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_SP_GEN_FN":{"Description":"SkyPower EFI generator control function. This is the RCn_OPTION value to use to find the R/C channel used for controlling generator start/stop","DisplayName":"SkyPower EFI generator control function","User":"Standard","Values":{"0":"Disabled","300":"300","301":"301","302":"302","303":"303","304":"304","305":"305","306":"306","307":"307"},"__field_text":"\n // @DisplayName: SkyPower EFI generator control function\n // @Description: SkyPower EFI generator control function. This is the RCn_OPTION value to use to find the R/C channel used for controlling generator start/stop\n // @Values: 0:Disabled,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307\n // @User: Standard"},"EFI_SP_LOG_RT":{"Description":"SkyPower EFI log rate. This is the rate at which extra logging of the SkyPower EFI is performed","DisplayName":"SkyPower EFI log rate","Range":{"high":"50","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: SkyPower EFI log rate\n // @Description: SkyPower EFI log rate. This is the rate at which extra logging of the SkyPower EFI is performed\n // @Range: 1 50\n // @Units: Hz\n // @User: Advanced"},"EFI_SP_MIN_RPM":{"Description":"SkyPower EFI minimum RPM. This is the RPM below which the engine is considered to be stopped","DisplayName":"SkyPower EFI minimum RPM","Range":{"high":"1000","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: SkyPower EFI minimum RPM\n // @Description: SkyPower EFI minimum RPM. This is the RPM below which the engine is considered to be stopped\n // @Range: 1 1000\n // @User: Advanced"},"EFI_SP_MODEL":{"Description":"SkyPower EFI ECU model","DisplayName":"SkyPower EFI ECU model","User":"Standard","Values":{"0":"Default","1":"SP_275"},"__field_text":"\n // @DisplayName: SkyPower EFI ECU model\n // @Description: SkyPower EFI ECU model\n // @Values: 0:Default,1:SP_275\n // @User: Standard"},"EFI_SP_RST_TIME":{"Description":"SkyPower EFI restart time. If engine should be running and it has stopped for this amount of time then auto-restart. To disable this feature set this value to zero.","DisplayName":"SkyPower EFI restart time","Range":{"high":"10","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: SkyPower EFI restart time\n // @Description: SkyPower EFI restart time. If engine should be running and it has stopped for this amount of time then auto-restart. To disable this feature set this value to zero.\n // @Range: 0 10\n // @User: Standard\n // @Units: s"},"EFI_SP_START_FN":{"Description":"SkyPower EFI start function. This is the RCn_OPTION value to use to find the R/C channel used for controlling engine start","DisplayName":"SkyPower EFI start function","User":"Standard","Values":{"0":"Disabled","300":"300","301":"301","302":"302","303":"303","304":"304","305":"305","306":"306","307":"307"},"__field_text":"\n // @DisplayName: SkyPower EFI start function\n // @Description: SkyPower EFI start function. This is the RCn_OPTION value to use to find the R/C channel used for controlling engine start\n // @Values: 0:Disabled,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307\n // @User: Standard"},"EFI_SP_ST_DISARM":{"Description":"SkyPower EFI allow start disarmed. This controls if starting the engine while disarmed is allowed","DisplayName":"SkyPower EFI allow start disarmed","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SkyPower EFI allow start disarmed\n // @Description: SkyPower EFI allow start disarmed. This controls if starting the engine while disarmed is allowed\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_SP_THR_FN":{"Description":"SkyPower EFI throttle function. This sets which SERVOn_FUNCTION to use for the target throttle. This should be 70 for fixed wing aircraft and 31 for helicopter rotor speed control","DisplayName":"SkyPower EFI throttle function","User":"Standard","Values":{"0":"Disabled","31":"HeliRSC","70":"FixedWing"},"__field_text":"\n // @DisplayName: SkyPower EFI throttle function\n // @Description: SkyPower EFI throttle function. This sets which SERVOn_FUNCTION to use for the target throttle. This should be 70 for fixed wing aircraft and 31 for helicopter rotor speed control\n // @Values: 0:Disabled,70:FixedWing,31:HeliRSC\n // @User: Standard"},"EFI_SP_THR_RATE":{"Description":"SkyPower EFI throttle rate. This sets rate at which throttle updates are sent to the engine","DisplayName":"SkyPower EFI throttle rate","Range":{"high":"100","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: SkyPower EFI throttle rate\n // @Description: SkyPower EFI throttle rate. This sets rate at which throttle updates are sent to the engine\n // @Range: 10 100\n // @Units: Hz\n // @User: Advanced"},"EFI_SP_TLM_RT":{"Description":"SkyPower EFI telemetry rate. This is the rate at which extra telemetry values are sent to the GCS","DisplayName":"SkyPower EFI telemetry rate","Range":{"high":"10","low":"1"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: SkyPower EFI telemetry rate\n // @Description: SkyPower EFI telemetry rate. This is the rate at which extra telemetry values are sent to the GCS\n // @Range: 1 10\n // @Units: Hz\n // @User: Advanced"},"EFI_SP_UPDATE_HZ":{"Description":"SkyPower EFI update rate","DisplayName":"SkyPower EFI update rate","Range":{"high":"200","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: SkyPower EFI update rate\n // @Description: SkyPower EFI update rate\n // @Range: 10 200\n // @Units: Hz\n // @User: Advanced"},"EFI_SVF_ARMCHECK":{"Description":"Check for Generator ARM state before arming","DisplayName":"Generator SVFFI arming check","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Generator SVFFI arming check\n // @Description: Check for Generator ARM state before arming\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_SVF_ENABLE":{"Description":"Enable SVFFI generator support","DisplayName":"Generator SVFFI enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Generator SVFFI enable\n // @Description: Enable SVFFI generator support\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"EFI_THRLIN_COEF1":{"Description":"First Order Polynomial Coefficient. (=1, if throttle is first order polynomial trendline)","DisplayName":"Throttle linearisation - First Order","Range":{"high":"1","low":"-1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Throttle linearisation - First Order\n // @Description: First Order Polynomial Coefficient. (=1, if throttle is first order polynomial trendline)\n // @Range: -1 1\n // @User: Advanced\n // @RebootRequired: True"},"EFI_THRLIN_COEF2":{"Description":"Second Order Polynomial Coefficient (=0, if throttle is second order polynomial trendline)","DisplayName":"Throttle linearisation - Second Order","Range":{"high":"1","low":"-1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Throttle linearisation - Second Order\n // @Description: Second Order Polynomial Coefficient (=0, if throttle is second order polynomial trendline)\n // @Range: -1 1\n // @User: Advanced\n // @RebootRequired: True"},"EFI_THRLIN_COEF3":{"Description":"Third Order Polynomial Coefficient. (=0, if throttle is third order polynomial trendline)","DisplayName":"Throttle linearisation - Third Order","Range":{"high":"1","low":"-1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Throttle linearisation - Third Order\n // @Description: Third Order Polynomial Coefficient. (=0, if throttle is third order polynomial trendline)\n // @Range: -1 1\n // @User: Advanced\n // @RebootRequired: True"},"EFI_THRLIN_EN":{"Description":"Enable EFI throttle linearisation","DisplayName":"Enable throttle linearisation","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable throttle linearisation\n // @Description: Enable EFI throttle linearisation\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"EFI_THRLIN_OFS":{"Description":"Offset for throttle linearization ","DisplayName":"throttle linearization offset","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: throttle linearization offset\n // @Description: Offset for throttle linearization \n // @Range: 0 100\n // @User: Advanced\n // @RebootRequired: True"},"EFI_TYPE":{"Description":"What method of communication is used for EFI #1","DisplayName":"EFI communication type","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"Serial-MS","2":"NWPMU","3":"Serial-Lutan","5":"DroneCAN","6":"Currawong-ECU","7":"Scripting","8":"Hirth","9":"MAV"},"__field_text":"\n // @DisplayName: EFI communication type\n // @Description: What method of communication is used for EFI #1\n // @Values: 0:None,1:Serial-MS,2:NWPMU,3:Serial-Lutan,5:DroneCAN,6:Currawong-ECU,7:Scripting,8:Hirth,9:MAV\n // @User: Advanced\n // @RebootRequired: True"},"EK2_ABIAS_P_NSE":{"Description":"This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.","DisplayName":"Accelerometer bias stability (m/s^3)","Range":{"high":"0.005","low":"0.00001"},"Units":"m/s/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer bias stability (m/s^3)\n // @Description: This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.\n // @Range: 0.00001 0.005\n // @User: Advanced\n // @Units: m/s/s/s"},"EK2_ACC_P_NSE":{"Description":"This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.","DisplayName":"Accelerometer noise (m/s^2)","Increment":"0.01","Range":{"high":"1.0","low":"0.01"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer noise (m/s^2)\n // @Description: This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.\n // @Range: 0.01 1.0\n // @Increment: 0.01\n // @User: Advanced\n // @Units: m/s/s"},"EK2_ALT_M_NSE":{"Description":"This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors.","DisplayName":"Altitude measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Altitude measurement noise (m)\n // @Description: This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK2_ALT_SOURCE":{"Description":"Primary height sensor used by the EKF. If a sensor other than Baro is selected and becomes unavailable, then the Baro sensor will be used as a fallback. NOTE: The EK2_RNG_USE_HGT parameter can be used to switch to range-finder when close to the ground in conjunction with EK2_ALT_SOURCE = 0 or 2 (Baro or GPS).","DisplayName":"Primary altitude sensor source","RebootRequired":"True","User":"Advanced","Values":{"0":"Use Baro","1":"Use Range Finder","2":"Use GPS","3":"Use Range Beacon"},"__field_text":"\n // @DisplayName: Primary altitude sensor source\n // @Description: Primary height sensor used by the EKF. If a sensor other than Baro is selected and becomes unavailable, then the Baro sensor will be used as a fallback. NOTE: The EK2_RNG_USE_HGT parameter can be used to switch to range-finder when close to the ground in conjunction with EK2_ALT_SOURCE = 0 or 2 (Baro or GPS).\n // @Values: 0:Use Baro, 1:Use Range Finder, 2:Use GPS, 3:Use Range Beacon\n // @User: Advanced\n // @RebootRequired: True"},"EK2_BCN_DELAY":{"Description":"This is the number of msec that the range beacon measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.","DisplayName":"Range beacon measurement delay (msec)","Increment":"10","Range":{"high":"127","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement delay (msec)\n // @Description: This is the number of msec that the range beacon measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.\n // @Range: 0 127\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK2_BCN_I_GTE":{"Description":"This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Range beacon measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_BCN_M_NSE":{"Description":"This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.","DisplayName":"Range beacon measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement noise (m)\n // @Description: This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK2_CHECK_SCALE":{"Description":"This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.","DisplayName":"GPS accuracy check scaler (%)","Range":{"high":"200","low":"50"},"Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: GPS accuracy check scaler (%)\n // @Description: This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.\n // @Range: 50 200\n // @User: Advanced\n // @Units: %"},"EK2_EAS_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Airspeed measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Airspeed measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_EAS_M_NSE":{"Description":"This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.","DisplayName":"Equivalent airspeed measurement noise (m/s)","Increment":"0.1","Range":{"high":"5.0","low":"0.5"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Equivalent airspeed measurement noise (m/s)\n // @Description: This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.\n // @Range: 0.5 5.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s"},"EK2_ENABLE":{"Description":"This enables EKF2. Enabling EKF2 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=2. A reboot or restart will need to be performed after changing the value of EK2_ENABLE for it to take effect.","DisplayName":"Enable EKF2","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable EKF2\n // @Description: This enables EKF2. Enabling EKF2 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=2. A reboot or restart will need to be performed after changing the value of EK2_ENABLE for it to take effect.\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced\n // @RebootRequired: True"},"EK2_FLOW_DELAY":{"Description":"This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.","DisplayName":"Optical Flow measurement delay (msec)","Increment":"10","Range":{"high":"127","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Optical Flow measurement delay (msec)\n // @Description: This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.\n // @Range: 0 127\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK2_FLOW_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Optical Flow measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Optical Flow measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_FLOW_M_NSE":{"Description":"This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.","DisplayName":"Optical flow measurement noise (rad/s)","Increment":"0.05","Range":{"high":"1.0","low":"0.05"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Optical flow measurement noise (rad/s)\n // @Description: This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.\n // @Range: 0.05 1.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: rad/s"},"EK2_FLOW_USE":{"Description":"Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.","DisplayName":"Optical flow use bitmask","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"Navigation","2":"Terrain"},"__field_text":"\n // @DisplayName: Optical flow use bitmask\n // @Description: Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.\n // @User: Advanced\n // @Values: 0:None,1:Navigation,2:Terrain\n // @RebootRequired: True"},"EK2_GBIAS_P_NSE":{"Description":"This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.","DisplayName":"Rate gyro bias stability (rad/s/s)","Range":{"high":"0.001","low":"0.00001"},"Units":"rad/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Rate gyro bias stability (rad/s/s)\n // @Description: This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.\n // @Range: 0.00001 0.001\n // @User: Advanced\n // @Units: rad/s/s"},"EK2_GLITCH_RAD":{"Description":"This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position.","DisplayName":"GPS glitch radius gate size (m)","Increment":"5","Range":{"high":"100","low":"10"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS glitch radius gate size (m)\n // @Description: This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position.\n // @Range: 10 100\n // @Increment: 5\n // @User: Advanced\n // @Units: m"},"EK2_GPS_CHECK":{"Bitmask":{"0":"NSats","1":"HDoP","2":"speed error","3":"position error","4":"yaw error","5":"pos drift","6":"vert speed","7":"horiz speed"},"Description":"This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.","DisplayName":"GPS preflight check","User":"Advanced","__field_text":"\n // @DisplayName: GPS preflight check\n // @Description: This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.\n // @Bitmask: 0:NSats,1:HDoP,2:speed error,3:position error,4:yaw error,5:pos drift,6:vert speed,7:horiz speed\n // @User: Advanced"},"EK2_GPS_TYPE":{"Description":"This controls use of GPS measurements : 0 = use 3D velocity & 2D position, 1 = use 2D velocity and 2D position, 2 = use 2D position, 3 = Inhibit GPS use - this can be useful when flying with an optical flow sensor in an environment where GPS quality is poor and subject to large multipath errors.","DisplayName":"GPS mode control","User":"Advanced","Values":{"0":"GPS 3D Vel and 2D Pos","1":"GPS 2D vel and 2D pos","2":"GPS 2D pos","3":"No GPS"},"__field_text":"\n // @DisplayName: GPS mode control\n // @Description: This controls use of GPS measurements : 0 = use 3D velocity & 2D position, 1 = use 2D velocity and 2D position, 2 = use 2D position, 3 = Inhibit GPS use - this can be useful when flying with an optical flow sensor in an environment where GPS quality is poor and subject to large multipath errors.\n // @Values: 0:GPS 3D Vel and 2D Pos, 1:GPS 2D vel and 2D pos, 2:GPS 2D pos, 3:No GPS\n // @User: Advanced"},"EK2_GSCL_P_NSE":{"Description":"This noise controls the rate of gyro scale factor learning. Increasing it makes rate gyro scale factor estimation faster and noisier.","DisplayName":"Rate gyro scale factor stability (1/s)","Range":{"high":"0.001","low":"0.000001"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Rate gyro scale factor stability (1/s)\n // @Description: This noise controls the rate of gyro scale factor learning. Increasing it makes rate gyro scale factor estimation faster and noisier.\n // @Range: 0.000001 0.001\n // @User: Advanced\n // @Units: Hz"},"EK2_GSF_RST_MAX":{"Description":"Sets the maximum number of times the EKF2 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK2_GSF_USE_MASK parameter.","DisplayName":"Maximum number of resets to the EKF-GSF yaw estimate allowed","Increment":"1","Range":{"high":"10","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of resets to the EKF-GSF yaw estimate allowed\n // @Description: Sets the maximum number of times the EKF2 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK2_GSF_USE_MASK parameter.\n // @Range: 1 10\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"EK2_GSF_RUN_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"A bitmask of which EKF2 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF2 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK2_GSF_USE_MASK and EK2_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK2_GSF_USE_MASK to 0. ","DisplayName":"Bitmask of which EKF-GSF yaw estimators run","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of which EKF-GSF yaw estimators run\n // @Description: A bitmask of which EKF2 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF2 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK2_GSF_USE_MASK and EK2_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK2_GSF_USE_MASK to 0. \n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK2_GSF_USE_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"1 byte bitmap of which EKF2 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK2_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF2 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF2 instance.","DisplayName":"Bitmask of which EKF-GSF yaw estimators are used","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of which EKF-GSF yaw estimators are used\n // @Description: 1 byte bitmap of which EKF2 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK2_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF2 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF2 instance.\n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK2_GYRO_P_NSE":{"Description":"This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.","DisplayName":"Rate gyro noise (rad/s)","Increment":"0.0001","Range":{"high":"0.1","low":"0.0001"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Rate gyro noise (rad/s)\n // @Description: This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.\n // @Range: 0.0001 0.1\n // @Increment: 0.0001\n // @User: Advanced\n // @Units: rad/s"},"EK2_HGT_DELAY":{"Description":"This is the number of msec that the Height measurements lag behind the inertial measurements.","DisplayName":"Height measurement delay (msec)","Increment":"10","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Height measurement delay (msec)\n // @Description: This is the number of msec that the Height measurements lag behind the inertial measurements.\n // @Range: 0 250\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK2_HGT_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Height measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Height measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_HRT_FILT":{"Description":"Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.","DisplayName":"Height rate filter crossover frequency","Range":{"high":"30.0","low":"0.1"},"Units":"Hz","__field_text":"\n // @DisplayName: Height rate filter crossover frequency\n // @Description: Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.\n // @Range: 0.1 30.0\n // @Units: Hz"},"EK2_IMU_MASK":{"Bitmask":{"0":"FirstIMU","1":"SecondIMU","2":"ThirdIMU","3":"FourthIMU","4":"FifthIMU","5":"SixthIMU"},"Description":"1 byte bitmap of IMUs to use in EKF2. A separate instance of EKF2 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF2 will fail to start.","DisplayName":"Bitmask of active IMUs","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of active IMUs\n // @Description: 1 byte bitmap of IMUs to use in EKF2. A separate instance of EKF2 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF2 will fail to start.\n // @Bitmask: 0:FirstIMU,1:SecondIMU,2:ThirdIMU,3:FourthIMU,4:FifthIMU,5:SixthIMU\n // @User: Advanced\n // @RebootRequired: True"},"EK2_MAGB_P_NSE":{"Description":"This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.","DisplayName":"Body magnetic field process noise (gauss/s)","Range":{"high":"0.01","low":"0.00001"},"Units":"Gauss/s","User":"Advanced","__field_text":"\n // @DisplayName: Body magnetic field process noise (gauss/s)\n // @Description: This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.\n // @Range: 0.00001 0.01\n // @User: Advanced\n // @Units: Gauss/s"},"EK2_MAGE_P_NSE":{"Description":"This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.","DisplayName":"Earth magnetic field process noise (gauss/s)","Range":{"high":"0.01","low":"0.00001"},"Units":"Gauss/s","User":"Advanced","__field_text":"\n // @DisplayName: Earth magnetic field process noise (gauss/s)\n // @Description: This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.\n // @Range: 0.00001 0.01\n // @User: Advanced\n // @Units: Gauss/s"},"EK2_MAG_CAL":{"Description":"This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states, when it will use a simpler magnetic heading fusion model that does not use magnetic field states and when it will use an alternative method of yaw determination to the magnetometer. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK2_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK2_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK2_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK2_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK2_MAG_CAL = 4 uses 3-axis fusion at all times. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK2_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 with COMPASS_ENABLE set to 1. If this is done, the EK2_GSF_RUN and EK2_GSF_USE masks must be set to the same as EK2_IMU_MASK.","DisplayName":"Magnetometer default fusion mode","User":"Advanced","Values":{"0":"When flying","1":"When manoeuvring","2":"Never","3":"After first climb yaw reset","4":"Always"},"__field_text":"\n // @DisplayName: Magnetometer default fusion mode\n // @Description: This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states, when it will use a simpler magnetic heading fusion model that does not use magnetic field states and when it will use an alternative method of yaw determination to the magnetometer. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK2_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK2_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK2_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK2_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK2_MAG_CAL = 4 uses 3-axis fusion at all times. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK2_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 with COMPASS_ENABLE set to 1. If this is done, the EK2_GSF_RUN and EK2_GSF_USE masks must be set to the same as EK2_IMU_MASK.\n // @Values: 0:When flying,1:When manoeuvring,2:Never,3:After first climb yaw reset,4:Always\n // @User: Advanced"},"EK2_MAG_EF_LIM":{"Description":"This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.","DisplayName":"EarthField error limit","Range":{"high":"500","low":"0"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: EarthField error limit\n // @Description: This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.\n // @User: Advanced\n // @Range: 0 500\n // @Units: mGauss"},"EK2_MAG_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Magnetometer measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Magnetometer measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_MAG_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.","DisplayName":"Bitmask of active EKF cores that will always use heading fusion","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of active EKF cores that will always use heading fusion\n // @Description: 1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.\n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK2_MAG_M_NSE":{"Description":"This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.","DisplayName":"Magnetometer measurement noise (Gauss)","Increment":"0.01","Range":{"high":"0.5","low":"0.01"},"Units":"Gauss","User":"Advanced","__field_text":"\n // @DisplayName: Magnetometer measurement noise (Gauss)\n // @Description: This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.\n // @Range: 0.01 0.5\n // @Increment: 0.01\n // @User: Advanced\n // @Units: Gauss"},"EK2_MAX_FLOW":{"Description":"This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter","DisplayName":"Maximum valid optical flow rate","Increment":"0.1","Range":{"high":"4.0","low":"1.0"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Maximum valid optical flow rate\n // @Description: This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter\n // @Range: 1.0 4.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: rad/s"},"EK2_NOAID_M_NSE":{"Description":"This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.","DisplayName":"Non-GPS operation position uncertainty (m)","Range":{"high":"50.0","low":"0.5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Non-GPS operation position uncertainty (m)\n // @Description: This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.\n // @Range: 0.5 50.0\n // @User: Advanced\n // @Units: m"},"EK2_OGN_HGT_MASK":{"Bitmask":{"0":"Correct when using Baro height","1":"Correct when using range finder height","2":"Apply corrections to local position"},"Description":"When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).","DisplayName":"Bitmask control of EKF reference height correction","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask control of EKF reference height correction\n // @Description: When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).\n // @Bitmask: 0:Correct when using Baro height,1:Correct when using range finder height,2:Apply corrections to local position\n // @User: Advanced\n // @RebootRequired: True"},"EK2_POSNE_M_NSE":{"Description":"This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.","DisplayName":"GPS horizontal position measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS horizontal position measurement noise (m)\n // @Description: This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK2_POS_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"GPS position measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: GPS position measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_RNG_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Range finder measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Range finder measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_RNG_M_NSE":{"Description":"This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.","DisplayName":"Range finder measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Range finder measurement noise (m)\n // @Description: This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK2_RNG_USE_HGT":{"Description":"Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFND_MAX_CM). This will not work unless Baro or GPS height is selected as the primary height source vis EK2_ALT_SOURCE = 0 or 2 respectively. This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.","DisplayName":"Range finder switch height percentage","Increment":"1","Range":{"high":"70","low":"-1"},"Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: Range finder switch height percentage\n // @Description: Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFND_MAX_CM). This will not work unless Baro or GPS height is selected as the primary height source vis EK2_ALT_SOURCE = 0 or 2 respectively. This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.\n // @Range: -1 70\n // @Increment: 1\n // @User: Advanced\n // @Units: %"},"EK2_RNG_USE_SPD":{"Description":"The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.","DisplayName":"Range finder max ground speed","Increment":"0.5","Range":{"high":"6.0","low":"2.0"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Range finder max ground speed\n // @Description: The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.\n // @Range: 2.0 6.0\n // @Increment: 0.5\n // @User: Advanced\n // @Units: m/s"},"EK2_TAU_OUTPUT":{"Description":"Sets the time constant of the output complementary filter/predictor in centi-seconds.","DisplayName":"Output complementary filter time constant (centi-sec)","Increment":"5","Range":{"high":"50","low":"10"},"Units":"cs","User":"Advanced","__field_text":"\n // @DisplayName: Output complementary filter time constant (centi-sec)\n // @Description: Sets the time constant of the output complementary filter/predictor in centi-seconds.\n // @Range: 10 50\n // @Increment: 5\n // @User: Advanced\n // @Units: cs"},"EK2_TERR_GRAD":{"Description":"Specifies the maximum gradient of the terrain below the vehicle assumed when it is fusing range finder or optical flow to estimate terrain height.","DisplayName":"Maximum terrain gradient","Increment":"0.01","Range":{"high":"0.2","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum terrain gradient\n // @Description: Specifies the maximum gradient of the terrain below the vehicle assumed when it is fusing range finder or optical flow to estimate terrain height.\n // @Range: 0 0.2\n // @Increment: 0.01\n // @User: Advanced"},"EK2_VELD_M_NSE":{"Description":"This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.","DisplayName":"GPS vertical velocity measurement noise (m/s)","Increment":"0.05","Range":{"high":"5.0","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: GPS vertical velocity measurement noise (m/s)\n // @Description: This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.\n // @Range: 0.05 5.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: m/s"},"EK2_VELNE_M_NSE":{"Description":"This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.","DisplayName":"GPS horizontal velocity measurement noise (m/s)","Increment":"0.05","Range":{"high":"5.0","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: GPS horizontal velocity measurement noise (m/s)\n // @Description: This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.\n // @Range: 0.05 5.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: m/s"},"EK2_VEL_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"GPS velocity innovation gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: GPS velocity innovation gate size\n // @Description: This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_WIND_PSCALE":{"Description":"This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.","DisplayName":"Height rate to wind process noise scaler","Increment":"0.1","Range":{"high":"1.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Height rate to wind process noise scaler\n // @Description: This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.\n // @Range: 0.0 1.0\n // @Increment: 0.1\n // @User: Advanced"},"EK2_WIND_P_NSE":{"Description":"This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.","DisplayName":"Wind velocity process noise (m/s^2)","Increment":"0.1","Range":{"high":"1.0","low":"0.01"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Wind velocity process noise (m/s^2)\n // @Description: This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.\n // @Range: 0.01 1.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s/s"},"EK2_YAW_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Yaw measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK2_YAW_M_NSE":{"Description":"This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.","DisplayName":"Yaw measurement noise (rad)","Increment":"0.05","Range":{"high":"1.0","low":"0.05"},"Units":"rad","User":"Advanced","__field_text":"\n // @DisplayName: Yaw measurement noise (rad)\n // @Description: This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.\n // @Range: 0.05 1.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: rad"},"EK3_ABIAS_P_NSE":{"Description":"This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.","DisplayName":"Accelerometer bias stability (m/s^3)","Range":{"high":"0.02","low":"0.00001"},"Units":"m/s/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer bias stability (m/s^3)\n // @Description: This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.\n // @Range: 0.00001 0.02\n // @User: Advanced\n // @Units: m/s/s/s"},"EK3_ACC_BIAS_LIM":{"Description":"The accelerometer bias state will be limited to +- this value","DisplayName":"Accelerometer bias limit","Increment":"0.1","Range":{"high":"2.5","low":"0.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer bias limit\n // @Description: The accelerometer bias state will be limited to +- this value\n // @Range: 0.5 2.5\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s/s"},"EK3_ACC_P_NSE":{"Description":"This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.","DisplayName":"Accelerometer noise (m/s^2)","Increment":"0.01","Range":{"high":"1.0","low":"0.01"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer noise (m/s^2)\n // @Description: This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.\n // @Range: 0.01 1.0\n // @Increment: 0.01\n // @User: Advanced\n // @Units: m/s/s"},"EK3_AFFINITY":{"Bitmask":{"0":"EnableGPSAffinity","1":"EnableBaroAffinity","2":"EnableCompassAffinity","3":"EnableAirspeedAffinity"},"Description":"These options control the affinity between sensor instances and EKF cores","DisplayName":"EKF3 Sensor Affinity Options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: EKF3 Sensor Affinity Options\n // @Description: These options control the affinity between sensor instances and EKF cores\n // @User: Advanced\n // @Bitmask: 0:EnableGPSAffinity,1:EnableBaroAffinity,2:EnableCompassAffinity,3:EnableAirspeedAffinity\n // @RebootRequired: True"},"EK3_ALT_M_NSE":{"Description":"This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors. A larger value for EK3_ALT_M_NSE may be required when operating with EK3_SRCx_POSZ = 0. This parameter also sets the noise for the 'synthetic' zero height measurement that is used when EK3_SRCx_POSZ = 0.","DisplayName":"Altitude measurement noise (m)","Increment":"0.1","Range":{"high":"100.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Altitude measurement noise (m)\n // @Description: This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors. A larger value for EK3_ALT_M_NSE may be required when operating with EK3_SRCx_POSZ = 0. This parameter also sets the noise for the 'synthetic' zero height measurement that is used when EK3_SRCx_POSZ = 0.\n // @Range: 0.1 100.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK3_BCN_DELAY":{"Description":"This is the number of msec that the range beacon measurements lag behind the inertial measurements.","DisplayName":"Range beacon measurement delay (msec)","Increment":"10","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement delay (msec)\n // @Description: This is the number of msec that the range beacon measurements lag behind the inertial measurements.\n // @Range: 0 250\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK3_BCN_I_GTE":{"Description":"This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Range beacon measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_BCN_M_NSE":{"Description":"This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.","DisplayName":"Range beacon measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Range beacon measurement noise (m)\n // @Description: This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK3_BETA_MASK":{"Bitmask":{"0":"Always","1":"WhenNoYawSensor"},"Description":"1 byte bitmap controlling use of sideslip angle fusion for estimation of non wind states during operation of 'fly forward' vehicle types such as fixed wing planes. By assuming that the angle of sideslip is small, the wind velocity state estimates are corrected whenever the EKF is not dead reckoning (e.g. has an independent velocity or position sensor such as GPS). This behaviour is on by default and cannot be disabled. When the EKF is dead reckoning, the wind states are used as a reference, enabling use of the small angle of sideslip assumption to correct non wind velocity states (eg attitude, velocity, position, etc) and improve navigation accuracy. This behaviour is on by default and cannot be disabled. The behaviour controlled by this parameter is the use of the small angle of sideslip assumption to correct non wind velocity states when the EKF is NOT dead reckoning. This is primarily of benefit to reduce the buildup of yaw angle errors during straight and level flight without a yaw sensor (e.g. magnetometer or dual antenna GPS yaw) provided aerobatic flight maneuvers with large sideslip angles are not performed. The 'always' option might be used where the yaw sensor is intentionally not fitted or disabled. The 'WhenNoYawSensor' option might be used if a yaw sensor is fitted, but protection against in-flight failure and continual rejection by the EKF is desired. For vehicles operated within visual range of the operator performing frequent turning maneuvers, setting this parameter is unnecessary.","DisplayName":"Bitmask controlling sidelip angle fusion","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask controlling sidelip angle fusion\n // @Description: 1 byte bitmap controlling use of sideslip angle fusion for estimation of non wind states during operation of 'fly forward' vehicle types such as fixed wing planes. By assuming that the angle of sideslip is small, the wind velocity state estimates are corrected whenever the EKF is not dead reckoning (e.g. has an independent velocity or position sensor such as GPS). This behaviour is on by default and cannot be disabled. When the EKF is dead reckoning, the wind states are used as a reference, enabling use of the small angle of sideslip assumption to correct non wind velocity states (eg attitude, velocity, position, etc) and improve navigation accuracy. This behaviour is on by default and cannot be disabled. The behaviour controlled by this parameter is the use of the small angle of sideslip assumption to correct non wind velocity states when the EKF is NOT dead reckoning. This is primarily of benefit to reduce the buildup of yaw angle errors during straight and level flight without a yaw sensor (e.g. magnetometer or dual antenna GPS yaw) provided aerobatic flight maneuvers with large sideslip angles are not performed. The 'always' option might be used where the yaw sensor is intentionally not fitted or disabled. The 'WhenNoYawSensor' option might be used if a yaw sensor is fitted, but protection against in-flight failure and continual rejection by the EKF is desired. For vehicles operated within visual range of the operator performing frequent turning maneuvers, setting this parameter is unnecessary.\n // @Bitmask: 0:Always,1:WhenNoYawSensor\n // @User: Advanced\n // @RebootRequired: True"},"EK3_CHECK_SCALE":{"Description":"This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.","DisplayName":"GPS accuracy check scaler (%)","Range":{"high":"200","low":"50"},"Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: GPS accuracy check scaler (%)\n // @Description: This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.\n // @Range: 50 200\n // @User: Advanced\n // @Units: %"},"EK3_DRAG_BCOEF_X":{"Description":"Ratio of mass to drag coefficient measured along the X body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the frontal area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.","DisplayName":"Ballistic coefficient for X axis drag","Range":{"high":"1000.0","low":"0.0"},"Units":"kg/m/m","User":"Advanced","__field_text":"\n // @DisplayName: Ballistic coefficient for X axis drag\n // @Description: Ratio of mass to drag coefficient measured along the X body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the frontal area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.\n // @Range: 0.0 1000.0\n // @Units: kg/m/m\n // @User: Advanced"},"EK3_DRAG_BCOEF_Y":{"Description":"Ratio of mass to drag coefficient measured along the Y body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the side area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.","DisplayName":"Ballistic coefficient for Y axis drag","Range":{"high":"1000.0","low":"50.0"},"Units":"kg/m/m","User":"Advanced","__field_text":"\n // @DisplayName: Ballistic coefficient for Y axis drag\n // @Description: Ratio of mass to drag coefficient measured along the Y body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the side area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.\n // @Range: 50.0 1000.0\n // @Units: kg/m/m\n // @User: Advanced"},"EK3_DRAG_MCOEF":{"Description":"This parameter is used to predict the drag produced by the rotors when flying a multi-copter, enabling estimation of wind drift. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the rotors axis of rotation is lost when passing through the rotor disc which changes the momentum of the airflow causing drag. For unducted rotors the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with different propellers. It is higher for ducted rotors. For example if flying at 15 m/s at sea level conditions produces a rotor induced drag acceleration of 1.5 m/s/s, then EK3_DRAG_MCOEF would be set to 0.1 = (1.5/15.0). Set EK3_MCOEF to a postive value to enable wind estimation using this drag effect. To account for the drag produced by the body which scales with speed squared, see documentation for the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters.","DisplayName":"Momentum coefficient for propeller drag","Increment":"0.01","Range":{"high":"1.0","low":"0.0"},"Units":"1/s","User":"Advanced","__field_text":"\n // @DisplayName: Momentum coefficient for propeller drag\n // @Description: This parameter is used to predict the drag produced by the rotors when flying a multi-copter, enabling estimation of wind drift. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the rotors axis of rotation is lost when passing through the rotor disc which changes the momentum of the airflow causing drag. For unducted rotors the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with different propellers. It is higher for ducted rotors. For example if flying at 15 m/s at sea level conditions produces a rotor induced drag acceleration of 1.5 m/s/s, then EK3_DRAG_MCOEF would be set to 0.1 = (1.5/15.0). Set EK3_MCOEF to a postive value to enable wind estimation using this drag effect. To account for the drag produced by the body which scales with speed squared, see documentation for the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters.\n // @Range: 0.0 1.0\n // @Increment: 0.01\n // @Units: 1/s\n // @User: Advanced"},"EK3_DRAG_M_NSE":{"Description":"This sets the amount of noise used when fusing X and Y acceleration as an observation that enables esitmation of wind velocity for multi-rotor vehicles. This feature is enabled by the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters","DisplayName":"Observation noise for drag acceleration","Increment":"0.1","Range":{"high":"2.0","low":"0.1"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Observation noise for drag acceleration\n // @Description: This sets the amount of noise used when fusing X and Y acceleration as an observation that enables esitmation of wind velocity for multi-rotor vehicles. This feature is enabled by the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters\n // @Range: 0.1 2.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s/s"},"EK3_EAS_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Airspeed measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Airspeed measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_EAS_M_NSE":{"Description":"This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.","DisplayName":"Equivalent airspeed measurement noise (m/s)","Increment":"0.1","Range":{"high":"5.0","low":"0.5"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Equivalent airspeed measurement noise (m/s)\n // @Description: This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.\n // @Range: 0.5 5.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s"},"EK3_ENABLE":{"Description":"This enables EKF3. Enabling EKF3 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=3. A reboot or restart will need to be performed after changing the value of EK3_ENABLE for it to take effect.","DisplayName":"Enable EKF3","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable EKF3\n // @Description: This enables EKF3. Enabling EKF3 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=3. A reboot or restart will need to be performed after changing the value of EK3_ENABLE for it to take effect.\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced\n // @RebootRequired: True"},"EK3_ERR_THRESH":{"Description":"lanes have to be consistently better than the primary by at least this threshold to reduce their overall relativeCoreError, lowering this makes lane switching more sensitive to smaller error differences","DisplayName":"EKF3 Lane Relative Error Sensitivity Threshold","Increment":"0.05","Range":{"high":"1","low":"0.05"},"User":"Advanced","__field_text":"\n // @DisplayName: EKF3 Lane Relative Error Sensitivity Threshold\n // @Description: lanes have to be consistently better than the primary by at least this threshold to reduce their overall relativeCoreError, lowering this makes lane switching more sensitive to smaller error differences\n // @Range: 0.05 1\n // @Increment: 0.05\n // @User: Advanced"},"EK3_FLOW_DELAY":{"Description":"This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.","DisplayName":"Optical Flow measurement delay (msec)","Increment":"10","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Optical Flow measurement delay (msec)\n // @Description: This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.\n // @Range: 0 250\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK3_FLOW_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Optical Flow measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Optical Flow measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_FLOW_M_NSE":{"Description":"This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.","DisplayName":"Optical flow measurement noise (rad/s)","Increment":"0.05","Range":{"high":"1.0","low":"0.05"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Optical flow measurement noise (rad/s)\n // @Description: This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.\n // @Range: 0.05 1.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: rad/s"},"EK3_FLOW_USE":{"Description":"Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.","DisplayName":"Optical flow use bitmask","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"Navigation","2":"Terrain"},"__field_text":"\n // @DisplayName: Optical flow use bitmask\n // @Description: Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.\n // @User: Advanced\n // @Values: 0:None,1:Navigation,2:Terrain\n // @RebootRequired: True"},"EK3_GBIAS_P_NSE":{"Description":"This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.","DisplayName":"Rate gyro bias stability (rad/s/s)","Range":{"high":"0.001","low":"0.00001"},"Units":"rad/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Rate gyro bias stability (rad/s/s)\n // @Description: This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.\n // @Range: 0.00001 0.001\n // @User: Advanced\n // @Units: rad/s/s"},"EK3_GLITCH_RAD":{"Description":"This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position. If EK3_GLITCH_RAD set to 0 the GPS innovations will be clipped instead of rejected if they exceed the gate size set by EK3_VEL_I_GATE and EK3_POS_I_GATE which can be useful if poor quality sensor data is causing GPS rejection and loss of navigation but does make the EKF more susceptible to GPS glitches. If setting EK3_GLITCH_RAD to 0 it is recommended to reduce EK3_VEL_I_GATE and EK3_POS_I_GATE to 300.","DisplayName":"GPS glitch radius gate size (m)","Increment":"5","Range":{"high":"100","low":"10"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS glitch radius gate size (m)\n // @Description: This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position. If EK3_GLITCH_RAD set to 0 the GPS innovations will be clipped instead of rejected if they exceed the gate size set by EK3_VEL_I_GATE and EK3_POS_I_GATE which can be useful if poor quality sensor data is causing GPS rejection and loss of navigation but does make the EKF more susceptible to GPS glitches. If setting EK3_GLITCH_RAD to 0 it is recommended to reduce EK3_VEL_I_GATE and EK3_POS_I_GATE to 300.\n // @Range: 10 100\n // @Increment: 5\n // @User: Advanced\n // @Units: m"},"EK3_GND_EFF_DZ":{"Description":"This parameter sets the size of the dead zone that is applied to negative baro height spikes that can occur when taking off or landing when a vehicle with lift rotors is operating in ground effect ground effect. Set to about 0.5m less than the amount of negative offset in baro height that occurs just prior to takeoff when lift motors are spooling up. Set to 0 if no ground effect is present.","DisplayName":"Baro height ground effect dead zone","Increment":"0.5","Range":{"high":"10.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Baro height ground effect dead zone\n // @Description: This parameter sets the size of the dead zone that is applied to negative baro height spikes that can occur when taking off or landing when a vehicle with lift rotors is operating in ground effect ground effect. Set to about 0.5m less than the amount of negative offset in baro height that occurs just prior to takeoff when lift motors are spooling up. Set to 0 if no ground effect is present.\n // @Range: 0.0 10.0\n // @Increment: 0.5\n // @User: Advanced"},"EK3_GPS_CHECK":{"Bitmask":{"0":"NSats","1":"HDoP","2":"speed error","3":"position error","4":"yaw error","5":"pos drift","6":"vert speed","7":"horiz speed"},"Description":"This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.","DisplayName":"GPS preflight check","User":"Advanced","__field_text":"\n // @DisplayName: GPS preflight check\n // @Description: This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.\n // @Bitmask: 0:NSats,1:HDoP,2:speed error,3:position error,4:yaw error,5:pos drift,6:vert speed,7:horiz speed\n // @User: Advanced"},"EK3_GPS_VACC_MAX":{"Description":"Vertical accuracy threshold for GPS as the altitude source. The GPS will not be used as an altitude source if the reported vertical accuracy of the GPS is larger than this threshold, falling back to baro instead. Set to zero to deactivate the threshold check.","DisplayName":"GPS vertical accuracy threshold","Increment":"0.1","Range":{"high":"10.0","low":"0.0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS vertical accuracy threshold\n // @Description: Vertical accuracy threshold for GPS as the altitude source. The GPS will not be used as an altitude source if the reported vertical accuracy of the GPS is larger than this threshold, falling back to baro instead. Set to zero to deactivate the threshold check.\n // @Range: 0.0 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK3_GSF_RST_MAX":{"Description":"Sets the maximum number of times the EKF3 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK3_GSF_USE_MASK parameter.","DisplayName":"Maximum number of resets to the EKF-GSF yaw estimate allowed","Increment":"1","Range":{"high":"10","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of resets to the EKF-GSF yaw estimate allowed\n // @Description: Sets the maximum number of times the EKF3 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK3_GSF_USE_MASK parameter.\n // @Range: 1 10\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"EK3_GSF_RUN_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"1 byte bitmap of which EKF3 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF3 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK3_GSF_USE_MASK and EK3_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK3_GSF_USE to 0. ","DisplayName":"Bitmask of which EKF-GSF yaw estimators run","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of which EKF-GSF yaw estimators run\n // @Description: 1 byte bitmap of which EKF3 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF3 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK3_GSF_USE_MASK and EK3_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK3_GSF_USE to 0. \n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK3_GSF_USE_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"A bitmask of which EKF3 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK3_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF3 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF3 instance.","DisplayName":"Bitmask of which EKF-GSF yaw estimators are used","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of which EKF-GSF yaw estimators are used\n // @Description: A bitmask of which EKF3 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK3_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF3 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF3 instance.\n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK3_GYRO_P_NSE":{"Description":"This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.","DisplayName":"Rate gyro noise (rad/s)","Increment":"0.0001","Range":{"high":"0.1","low":"0.0001"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Rate gyro noise (rad/s)\n // @Description: This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.\n // @Range: 0.0001 0.1\n // @Increment: 0.0001\n // @User: Advanced\n // @Units: rad/s"},"EK3_HGT_DELAY":{"Description":"This is the number of msec that the Height measurements lag behind the inertial measurements.","DisplayName":"Height measurement delay (msec)","Increment":"10","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Height measurement delay (msec)\n // @Description: This is the number of msec that the Height measurements lag behind the inertial measurements.\n // @Range: 0 250\n // @Increment: 10\n // @User: Advanced\n // @Units: ms\n // @RebootRequired: True"},"EK3_HGT_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the vertical position innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_HGT_I_GATE not exceeding 300 is recommended to limit the effect of height sensor transient errors.","DisplayName":"Height measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Height measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the vertical position innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_HGT_I_GATE not exceeding 300 is recommended to limit the effect of height sensor transient errors.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_HRT_FILT":{"Description":"Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.","DisplayName":"Height rate filter crossover frequency","Range":{"high":"30.0","low":"0.1"},"Units":"Hz","__field_text":"\n // @DisplayName: Height rate filter crossover frequency\n // @Description: Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.\n // @Range: 0.1 30.0\n // @Units: Hz"},"EK3_IMU_MASK":{"Bitmask":{"0":"FirstIMU","1":"SecondIMU","2":"ThirdIMU","3":"FourthIMU","4":"FifthIMU","5":"SixthIMU"},"Description":"1 byte bitmap of IMUs to use in EKF3. A separate instance of EKF3 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF3 will fail to start.","DisplayName":"Bitmask of active IMUs","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of active IMUs\n // @Description: 1 byte bitmap of IMUs to use in EKF3. A separate instance of EKF3 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF3 will fail to start.\n // @Bitmask: 0:FirstIMU,1:SecondIMU,2:ThirdIMU,3:FourthIMU,4:FifthIMU,5:SixthIMU\n // @User: Advanced\n // @RebootRequired: True"},"EK3_LOG_LEVEL":{"Description":"Determines how verbose the EKF3 streaming logging is. A value of 0 provides full logging(default), a value of 1 only XKF4 scaled innovations are logged, a value of 2 both XKF4 and GSF are logged, and a value of 3 disables all streaming logging of EKF3.","DisplayName":"Logging Level","Increment":"1","Range":{"high":"3","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Logging Level\n // @Description: Determines how verbose the EKF3 streaming logging is. A value of 0 provides full logging(default), a value of 1 only XKF4 scaled innovations are logged, a value of 2 both XKF4 and GSF are logged, and a value of 3 disables all streaming logging of EKF3.\n // @Range: 0 3\n // @Increment: 1\n // @User: Advanced"},"EK3_MAGB_P_NSE":{"Description":"This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.","DisplayName":"Body magnetic field process noise (gauss/s)","Range":{"high":"0.01","low":"0.00001"},"Units":"Gauss/s","User":"Advanced","__field_text":"\n // @DisplayName: Body magnetic field process noise (gauss/s)\n // @Description: This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.\n // @Range: 0.00001 0.01\n // @User: Advanced\n // @Units: Gauss/s"},"EK3_MAGE_P_NSE":{"Description":"This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.","DisplayName":"Earth magnetic field process noise (gauss/s)","Range":{"high":"0.01","low":"0.00001"},"Units":"Gauss/s","User":"Advanced","__field_text":"\n // @DisplayName: Earth magnetic field process noise (gauss/s)\n // @Description: This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.\n // @Range: 0.00001 0.01\n // @User: Advanced\n // @Units: Gauss/s"},"EK3_MAG_CAL":{"Description":"This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states and when it will use a simpler magnetic heading fusion model that does not use magnetic field states. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK3_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK3_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK3_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK3_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK3_MAG_CAL = 4 uses 3-axis fusion at all times. EK3_MAG_CAL = 5 uses an external yaw sensor with simple heading fusion. NOTE : Use of simple heading magnetometer fusion makes vehicle compass calibration and alignment errors harder for the EKF to detect which reduces the sensitivity of the Copter EKF failsafe algorithm. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. EK3_MAG_CAL = 6 uses an external yaw sensor with fallback to compass when the external sensor is not available if we are flying. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 and setting COMPASS_ENABLE to 0. If this is done, the EK3_GSF_RUN and EK3_GSF_USE masks must be set to the same as EK3_IMU_MASK. A yaw angle derived from IMU and GPS velocity data using a Gaussian Sum Filter (GSF) will then be used to align the yaw when flight commences and there is sufficient movement.","DisplayName":"Magnetometer default fusion mode","RebootRequired":"True","User":"Advanced","Values":{"0":"When flying","1":"When manoeuvring","2":"Never","3":"After first climb yaw reset","4":"Always","5":"Use external yaw sensor (Deprecated in 4.1+ see EK3_SRCn_YAW)","6":"External yaw sensor with compass fallback (Deprecated in 4.1+ see EK3_SRCn_YAW)"},"__field_text":"\n // @DisplayName: Magnetometer default fusion mode\n // @Description: This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states and when it will use a simpler magnetic heading fusion model that does not use magnetic field states. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK3_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK3_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK3_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK3_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK3_MAG_CAL = 4 uses 3-axis fusion at all times. EK3_MAG_CAL = 5 uses an external yaw sensor with simple heading fusion. NOTE : Use of simple heading magnetometer fusion makes vehicle compass calibration and alignment errors harder for the EKF to detect which reduces the sensitivity of the Copter EKF failsafe algorithm. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. EK3_MAG_CAL = 6 uses an external yaw sensor with fallback to compass when the external sensor is not available if we are flying. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 and setting COMPASS_ENABLE to 0. If this is done, the EK3_GSF_RUN and EK3_GSF_USE masks must be set to the same as EK3_IMU_MASK. A yaw angle derived from IMU and GPS velocity data using a Gaussian Sum Filter (GSF) will then be used to align the yaw when flight commences and there is sufficient movement.\n // @Values: 0:When flying,1:When manoeuvring,2:Never,3:After first climb yaw reset,4:Always,5:Use external yaw sensor (Deprecated in 4.1+ see EK3_SRCn_YAW),6:External yaw sensor with compass fallback (Deprecated in 4.1+ see EK3_SRCn_YAW)\n // @User: Advanced\n // @RebootRequired: True"},"EK3_MAG_EF_LIM":{"Description":"This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.","DisplayName":"EarthField error limit","Range":{"high":"500","low":"0"},"Units":"mGauss","User":"Advanced","__field_text":"\n // @DisplayName: EarthField error limit\n // @Description: This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.\n // @User: Advanced\n // @Range: 0 500\n // @Units: mGauss"},"EK3_MAG_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Magnetometer measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Magnetometer measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_MAG_MASK":{"Bitmask":{"0":"FirstEKF","1":"SecondEKF","2":"ThirdEKF","3":"FourthEKF","4":"FifthEKF","5":"SixthEKF"},"Description":"1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.","DisplayName":"Bitmask of active EKF cores that will always use heading fusion","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of active EKF cores that will always use heading fusion\n // @Description: 1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.\n // @Bitmask: 0:FirstEKF,1:SecondEKF,2:ThirdEKF,3:FourthEKF,4:FifthEKF,5:SixthEKF\n // @User: Advanced\n // @RebootRequired: True"},"EK3_MAG_M_NSE":{"Description":"This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.","DisplayName":"Magnetometer measurement noise (Gauss)","Increment":"0.01","Range":{"high":"0.5","low":"0.01"},"Units":"Gauss","User":"Advanced","__field_text":"\n // @DisplayName: Magnetometer measurement noise (Gauss)\n // @Description: This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.\n // @Range: 0.01 0.5\n // @Increment: 0.01\n // @User: Advanced\n // @Units: Gauss"},"EK3_MAX_FLOW":{"Description":"This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter","DisplayName":"Maximum valid optical flow rate","Increment":"0.1","Range":{"high":"4.0","low":"1.0"},"Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Maximum valid optical flow rate\n // @Description: This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter\n // @Range: 1.0 4.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: rad/s"},"EK3_NOAID_M_NSE":{"Description":"This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.","DisplayName":"Non-GPS operation position uncertainty (m)","Range":{"high":"50.0","low":"0.5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Non-GPS operation position uncertainty (m)\n // @Description: This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.\n // @Range: 0.5 50.0\n // @User: Advanced\n // @Units: m"},"EK3_OGNM_TEST_SF":{"Description":"This parameter is adjust the sensitivity of the on ground not moving test which is used to assist with learning the yaw gyro bias and stopping yaw drift before flight when operating without a yaw sensor. Bigger values allow the detection of a not moving condition with noiser IMU data. Check the XKFM data logged when the vehicle is on ground not moving and adjust the value of OGNM_TEST_SF to be slightly higher than the maximum value of the XKFM.ADR, XKFM.ALR, XKFM.GDR and XKFM.GLR test levels.","DisplayName":"On ground not moving test scale factor","Increment":"0.5","Range":{"high":"10.0","low":"1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: On ground not moving test scale factor\n // @Description: This parameter is adjust the sensitivity of the on ground not moving test which is used to assist with learning the yaw gyro bias and stopping yaw drift before flight when operating without a yaw sensor. Bigger values allow the detection of a not moving condition with noiser IMU data. Check the XKFM data logged when the vehicle is on ground not moving and adjust the value of OGNM_TEST_SF to be slightly higher than the maximum value of the XKFM.ADR, XKFM.ALR, XKFM.GDR and XKFM.GLR test levels.\n // @Range: 1.0 10.0\n // @Increment: 0.5\n // @User: Advanced"},"EK3_OGN_HGT_MASK":{"Bitmask":{"0":"Correct when using Baro height","1":"Correct when using range finder height","2":"Apply corrections to local position"},"Description":"When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).","DisplayName":"Bitmask control of EKF reference height correction","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask control of EKF reference height correction\n // @Description: When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).\n // @Bitmask: 0:Correct when using Baro height,1:Correct when using range finder height,2:Apply corrections to local position\n // @User: Advanced\n // @RebootRequired: True"},"EK3_POSNE_M_NSE":{"Description":"This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.","DisplayName":"GPS horizontal position measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS horizontal position measurement noise (m)\n // @Description: This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK3_POS_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD has been set to 0 the horizontal position innovations will be clipped instead of rejected if they exceed the gate size so a smaller value of EK3_POS_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.","DisplayName":"GPS position measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: GPS position measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD has been set to 0 the horizontal position innovations will be clipped instead of rejected if they exceed the gate size so a smaller value of EK3_POS_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_PRIMARY":{"Description":"The core number (index in IMU mask) that will be used as the primary EKF core on startup. While disarmed the EKF will force the use of this core. A value of 0 corresponds to the first IMU in EK3_IMU_MASK.","DisplayName":"Primary core number","Increment":"1","Range":{"high":"2","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Primary core number\n // @Description: The core number (index in IMU mask) that will be used as the primary EKF core on startup. While disarmed the EKF will force the use of this core. A value of 0 corresponds to the first IMU in EK3_IMU_MASK.\n // @Range: 0 2\n // @Increment: 1\n // @User: Advanced"},"EK3_RNG_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Range finder measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Range finder measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_RNG_M_NSE":{"Description":"This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.","DisplayName":"Range finder measurement noise (m)","Increment":"0.1","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Range finder measurement noise (m)\n // @Description: This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.\n // @Range: 0.1 10.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m"},"EK3_RNG_USE_HGT":{"Description":"Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFNDx_MAX_CM) and the primary height source is Baro or GPS (see EK3_SRCx_POSZ). This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.","DisplayName":"Range finder switch height percentage","Increment":"1","Range":{"high":"70","low":"-1"},"Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: Range finder switch height percentage\n // @Description: Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFNDx_MAX_CM) and the primary height source is Baro or GPS (see EK3_SRCx_POSZ). This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.\n // @Range: -1 70\n // @Increment: 1\n // @User: Advanced\n // @Units: %"},"EK3_RNG_USE_SPD":{"Description":"The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.","DisplayName":"Range finder max ground speed","Increment":"0.5","Range":{"high":"6.0","low":"2.0"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Range finder max ground speed\n // @Description: The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.\n // @Range: 2.0 6.0\n // @Increment: 0.5\n // @User: Advanced\n // @Units: m/s"},"EK3_SRC1_POSXY":{"Description":"Position Horizontal Source (Primary)","DisplayName":"Position Horizontal Source (Primary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Horizontal Source (Primary)\n // @Description: Position Horizontal Source (Primary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC1_POSZ":{"Description":"Position Vertical Source","DisplayName":"Position Vertical Source","User":"Advanced","Values":{"0":"None","1":"Baro","2":"RangeFinder","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Vertical Source\n // @Description: Position Vertical Source\n // @Values: 0:None, 1:Baro, 2:RangeFinder, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC1_VELXY":{"Description":"Velocity Horizontal Source","DisplayName":"Velocity Horizontal Source","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","5":"OpticalFlow","6":"ExternalNav","7":"WheelEncoder"},"__field_text":"\n // @DisplayName: Velocity Horizontal Source\n // @Description: Velocity Horizontal Source\n // @Values: 0:None, 3:GPS, 4:Beacon, 5:OpticalFlow, 6:ExternalNav, 7:WheelEncoder\n // @User: Advanced"},"EK3_SRC1_VELZ":{"Description":"Velocity Vertical Source","DisplayName":"Velocity Vertical Source","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Velocity Vertical Source\n // @Description: Velocity Vertical Source\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC1_YAW":{"Description":"Yaw Source","DisplayName":"Yaw Source","User":"Advanced","Values":{"0":"None","1":"Compass","2":"GPS","3":"GPS with Compass Fallback","6":"ExternalNav","8":"GSF"},"__field_text":"\n // @DisplayName: Yaw Source\n // @Description: Yaw Source\n // @Values: 0:None, 1:Compass, 2:GPS, 3:GPS with Compass Fallback, 6:ExternalNav, 8:GSF\n // @User: Advanced"},"EK3_SRC2_POSXY":{"Description":"Position Horizontal Source (Secondary)","DisplayName":"Position Horizontal Source (Secondary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Horizontal Source (Secondary)\n // @Description: Position Horizontal Source (Secondary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC2_POSZ":{"Description":"Position Vertical Source (Secondary)","DisplayName":"Position Vertical Source (Secondary)","User":"Advanced","Values":{"0":"None","1":"Baro","2":"RangeFinder","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Vertical Source (Secondary)\n // @Description: Position Vertical Source (Secondary)\n // @Values: 0:None, 1:Baro, 2:RangeFinder, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC2_VELXY":{"Description":"Velocity Horizontal Source (Secondary)","DisplayName":"Velocity Horizontal Source (Secondary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","5":"OpticalFlow","6":"ExternalNav","7":"WheelEncoder"},"__field_text":"\n // @DisplayName: Velocity Horizontal Source (Secondary)\n // @Description: Velocity Horizontal Source (Secondary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 5:OpticalFlow, 6:ExternalNav, 7:WheelEncoder\n // @User: Advanced"},"EK3_SRC2_VELZ":{"Description":"Velocity Vertical Source (Secondary)","DisplayName":"Velocity Vertical Source (Secondary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Velocity Vertical Source (Secondary)\n // @Description: Velocity Vertical Source (Secondary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC2_YAW":{"Description":"Yaw Source (Secondary)","DisplayName":"Yaw Source (Secondary)","User":"Advanced","Values":{"0":"None","1":"Compass","2":"GPS","3":"GPS with Compass Fallback","6":"ExternalNav","8":"GSF"},"__field_text":"\n // @DisplayName: Yaw Source (Secondary)\n // @Description: Yaw Source (Secondary)\n // @Values: 0:None, 1:Compass, 2:GPS, 3:GPS with Compass Fallback, 6:ExternalNav, 8:GSF\n // @User: Advanced"},"EK3_SRC3_POSXY":{"Description":"Position Horizontal Source (Tertiary)","DisplayName":"Position Horizontal Source (Tertiary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Horizontal Source (Tertiary)\n // @Description: Position Horizontal Source (Tertiary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC3_POSZ":{"Description":"Position Vertical Source (Tertiary)","DisplayName":"Position Vertical Source (Tertiary)","User":"Advanced","Values":{"0":"None","1":"Baro","2":"RangeFinder","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Position Vertical Source (Tertiary)\n // @Description: Position Vertical Source (Tertiary)\n // @Values: 0:None, 1:Baro, 2:RangeFinder, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC3_VELXY":{"Description":"Velocity Horizontal Source (Tertiary)","DisplayName":"Velocity Horizontal Source (Tertiary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","5":"OpticalFlow","6":"ExternalNav","7":"WheelEncoder"},"__field_text":"\n // @DisplayName: Velocity Horizontal Source (Tertiary)\n // @Description: Velocity Horizontal Source (Tertiary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 5:OpticalFlow, 6:ExternalNav, 7:WheelEncoder\n // @User: Advanced"},"EK3_SRC3_VELZ":{"Description":"Velocity Vertical Source (Tertiary)","DisplayName":"Velocity Vertical Source (Tertiary)","User":"Advanced","Values":{"0":"None","3":"GPS","4":"Beacon","6":"ExternalNav"},"__field_text":"\n // @DisplayName: Velocity Vertical Source (Tertiary)\n // @Description: Velocity Vertical Source (Tertiary)\n // @Values: 0:None, 3:GPS, 4:Beacon, 6:ExternalNav\n // @User: Advanced"},"EK3_SRC3_YAW":{"Description":"Yaw Source (Tertiary)","DisplayName":"Yaw Source (Tertiary)","User":"Advanced","Values":{"0":"None","1":"Compass","2":"GPS","3":"GPS with Compass Fallback","6":"ExternalNav","8":"GSF"},"__field_text":"\n // @DisplayName: Yaw Source (Tertiary)\n // @Description: Yaw Source (Tertiary)\n // @Values: 0:None, 1:Compass, 2:GPS, 3:GPS with Compass Fallback, 6:ExternalNav, 8:GSF\n // @User: Advanced"},"EK3_SRC_OPTIONS":{"Bitmask":{"0":"FuseAllVelocities"},"Description":"EKF Source Options","DisplayName":"EKF Source Options","User":"Advanced","__field_text":"\n // @DisplayName: EKF Source Options\n // @Description: EKF Source Options\n // @Bitmask: 0:FuseAllVelocities\n // @User: Advanced"},"EK3_TAU_OUTPUT":{"Description":"Sets the time constant of the output complementary filter/predictor in centi-seconds.","DisplayName":"Output complementary filter time constant (centi-sec)","Increment":"5","Range":{"high":"50","low":"10"},"Units":"cs","User":"Advanced","__field_text":"\n // @DisplayName: Output complementary filter time constant (centi-sec)\n // @Description: Sets the time constant of the output complementary filter/predictor in centi-seconds.\n // @Range: 10 50\n // @Increment: 5\n // @User: Advanced\n // @Units: cs"},"EK3_TERR_GRAD":{"Description":"Specifies the maximum gradient of the terrain below the vehicle when it is using range finder as a height reference","DisplayName":"Maximum terrain gradient","Increment":"0.01","Range":{"high":"0.2","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Maximum terrain gradient\n // @Description: Specifies the maximum gradient of the terrain below the vehicle when it is using range finder as a height reference\n // @Range: 0 0.2\n // @Increment: 0.01\n // @User: Advanced"},"EK3_VELD_M_NSE":{"Description":"This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.","DisplayName":"GPS vertical velocity measurement noise (m/s)","Increment":"0.05","Range":{"high":"5.0","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: GPS vertical velocity measurement noise (m/s)\n // @Description: This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.\n // @Range: 0.05 5.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: m/s"},"EK3_VELNE_M_NSE":{"Description":"This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.","DisplayName":"GPS horizontal velocity measurement noise (m/s)","Increment":"0.05","Range":{"high":"5.0","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: GPS horizontal velocity measurement noise (m/s)\n // @Description: This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.\n // @Range: 0.05 5.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: m/s"},"EK3_VEL_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the velocity innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_VEL_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.","DisplayName":"GPS velocity innovation gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: GPS velocity innovation gate size\n // @Description: This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the velocity innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_VEL_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_VIS_VERR_MAX":{"Description":"This is the 1-STD odometry velocity observation error that will be assumed when minimum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.","DisplayName":"Visual odometry maximum velocity error","Increment":"0.1","Range":{"high":"5.0","low":"0.5"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry maximum velocity error\n // @Description: This is the 1-STD odometry velocity observation error that will be assumed when minimum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.\n // @Range: 0.5 5.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s"},"EK3_VIS_VERR_MIN":{"Description":"This is the 1-STD odometry velocity observation error that will be assumed when maximum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.","DisplayName":"Visual odometry minimum velocity error","Increment":"0.05","Range":{"high":"0.5","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry minimum velocity error\n // @Description: This is the 1-STD odometry velocity observation error that will be assumed when maximum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.\n // @Range: 0.05 0.5\n // @Increment: 0.05\n // @User: Advanced\n // @Units: m/s"},"EK3_WENC_VERR":{"Description":"This is the 1-STD odometry velocity observation error that will be assumed when wheel encoder data is being fused.","DisplayName":"Wheel odometry velocity error","Increment":"0.1","Range":{"high":"1.0","low":"0.01"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Wheel odometry velocity error\n // @Description: This is the 1-STD odometry velocity observation error that will be assumed when wheel encoder data is being fused.\n // @Range: 0.01 1.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s"},"EK3_WIND_PSCALE":{"Description":"This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.","DisplayName":"Height rate to wind process noise scaler","Increment":"0.1","Range":{"high":"2.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Height rate to wind process noise scaler\n // @Description: This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.\n // @Range: 0.0 2.0\n // @Increment: 0.1\n // @User: Advanced"},"EK3_WIND_P_NSE":{"Description":"This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.","DisplayName":"Wind velocity process noise (m/s^2)","Increment":"0.1","Range":{"high":"2.0","low":"0.01"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Wind velocity process noise (m/s^2)\n // @Description: This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.\n // @Range: 0.01 2.0\n // @Increment: 0.1\n // @User: Advanced\n // @Units: m/s/s"},"EK3_YAW_I_GATE":{"Description":"This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.","DisplayName":"Yaw measurement gate size","Increment":"25","Range":{"high":"1000","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: Yaw measurement gate size\n // @Description: This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.\n // @Range: 100 1000\n // @Increment: 25\n // @User: Advanced"},"EK3_YAW_M_NSE":{"Description":"This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.","DisplayName":"Yaw measurement noise (rad)","Increment":"0.05","Range":{"high":"1.0","low":"0.05"},"Units":"rad","User":"Advanced","__field_text":"\n // @DisplayName: Yaw measurement noise (rad)\n // @Description: This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.\n // @Range: 0.05 1.0\n // @Increment: 0.05\n // @User: Advanced\n // @Units: rad"},"ESC_CALIBRATION":{"Description":"Controls whether ArduCopter will enter ESC calibration on the next restart. Do not adjust this parameter manually.","DisplayName":"ESC Calibration","User":"Advanced","Values":{"0":"Normal Start-up","1":"Start-up in ESC Calibration mode if throttle high","2":"Start-up in ESC Calibration mode regardless of throttle","3":"Start-up and automatically calibrate ESCs","9":"Disabled"},"__field_text":"\n // @DisplayName: ESC Calibration\n // @Description: Controls whether ArduCopter will enter ESC calibration on the next restart. Do not adjust this parameter manually.\n // @User: Advanced\n // @Values: 0:Normal Start-up, 1:Start-up in ESC Calibration mode if throttle high, 2:Start-up in ESC Calibration mode regardless of throttle, 3:Start-up and automatically calibrate ESCs, 9:Disabled"},"ESC_HW_ENABLE":{"Description":"Enable Hobbywing ESC telemetry","DisplayName":"Hobbywing ESC Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Hobbywing ESC Enable\n // @Description: Enable Hobbywing ESC telemetry\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"ESC_HW_OFS":{"Description":"Motor number offset of first ESC","DisplayName":"Hobbywing ESC motor offset","Range":{"high":"31","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Hobbywing ESC motor offset\n // @Description: Motor number offset of first ESC\n // @Range: 0 31\n // @User: Standard"},"ESC_HW_POLES":{"Description":"Number of motor poles for eRPM scaling","DisplayName":"Hobbywing ESC motor poles","Range":{"high":"50","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: Hobbywing ESC motor poles\n // @Description: Number of motor poles for eRPM scaling\n // @Range: 1 50\n // @User: Standard"},"ESC_TLM_MAV_OFS":{"Description":"Offset to apply to ESC numbers when reporting as ESC_TELEMETRY packets over MAVLink. This allows high numbered motors to be displayed as low numbered ESCs for convenience on GCS displays. A value of 4 would send ESC on output 5 as ESC number 1 in ESC_TELEMETRY packets","DisplayName":"ESC Telemetry mavlink offset","Increment":"1","Range":{"high":"31","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: ESC Telemetry mavlink offset\n // @Description: Offset to apply to ESC numbers when reporting as ESC_TELEMETRY packets over MAVLink. This allows high numbered motors to be displayed as low numbered ESCs for convenience on GCS displays. A value of 4 would send ESC on output 5 as ESC number 1 in ESC_TELEMETRY packets\n // @Increment: 1\n // @Range: 0 31\n // @User: Standard"},"FENCE_ACTION":{"Description":"What action should be taken when fence is breached","DisplayName":"Fence Action","User":"Standard","Values":{"0":"Report Only","1":"RTL or Land","2":"Always Land","3":"SmartRTL or RTL or Land","4":"Brake or Land","5":"SmartRTL or Land"},"__field_text":"\n // @DisplayName: Fence Action\n // @Description: What action should be taken when fence is breached\n // @Values{Copter}: 0:Report Only,1:RTL or Land,2:Always Land,3:SmartRTL or RTL or Land,4:Brake or Land,5:SmartRTL or Land\n // @Values{Rover}: 0:Report Only,1:RTL or Hold,2:Hold,3:SmartRTL or RTL or Hold,4:SmartRTL or Hold\n // @Values{Plane}: 0:Report Only,1:RTL,6:Guided,7:GuidedThrottlePass\n // @Values: 0:Report Only,1:RTL or Land\n // @User: Standard"},"FENCE_ALT_MAX":{"Description":"Maximum altitude allowed before geofence triggers","DisplayName":"Fence Maximum Altitude","Increment":"1","Range":{"high":"1000","low":"10"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Fence Maximum Altitude\n // @Description: Maximum altitude allowed before geofence triggers\n // @Units: m\n // @Range: 10 1000\n // @Increment: 1\n // @User: Standard"},"FENCE_ALT_MIN":{"Description":"Minimum altitude allowed before geofence triggers","DisplayName":"Fence Minimum Altitude","Increment":"1","Range":{"high":"100","low":"-100"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Fence Minimum Altitude\n // @Description: Minimum altitude allowed before geofence triggers\n // @Units: m\n // @Range: -100 100\n // @Increment: 1\n // @User: Standard"},"FENCE_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the fence functionality","DisplayName":"Fence enable/disable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Fence enable/disable\n // @Description: Allows you to enable (1) or disable (0) the fence functionality\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"FENCE_MARGIN":{"Description":"Distance that autopilot's should maintain from the fence to avoid a breach","DisplayName":"Fence Margin","Range":{"high":"10","low":"1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Fence Margin\n // @Description: Distance that autopilot's should maintain from the fence to avoid a breach\n // @Units: m\n // @Range: 1 10\n // @User: Standard"},"FENCE_RADIUS":{"Description":"Circle fence radius which when breached will cause an RTL","DisplayName":"Circular Fence Radius","Range":{"high":"10000","low":"30"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Circular Fence Radius\n // @Description: Circle fence radius which when breached will cause an RTL\n // @Units: m\n // @Range: 30 10000\n // @User: Standard"},"FENCE_TOTAL":{"Description":"Number of polygon points saved in eeprom (do not update manually)","DisplayName":"Fence polygon point total","Range":{"high":"20","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: Fence polygon point total\n // @Description: Number of polygon points saved in eeprom (do not update manually)\n // @Range: 1 20\n // @User: Standard"},"FENCE_TYPE":{"Bitmask":{"0":"Max altitude","1":"Circle Centered on Home","2":"Inclusion/Exclusion Circles+Polygons","3":"Min altitude"},"Description":"Enabled fence types held as bitmask","DisplayName":"Fence Type","User":"Standard","__field_text":"\n // @DisplayName: Fence Type\n // @Description: Enabled fence types held as bitmask\n // @Bitmask{Rover}: 1:Circle Centered on Home,2:Inclusion/Exclusion Circles+Polygons\n // @Bitmask{Copter, Plane, Sub}: 0:Max altitude,1:Circle Centered on Home,2:Inclusion/Exclusion Circles+Polygons,3:Min altitude\n // @User: Standard"},"FFT_ATT_REF":{"Description":"FFT attenuation level in dB for bandwidth calculation and peak detection. The bandwidth is calculated by comparing peak power output with the attenuated version. The default of 15 has shown to be a good compromise in both simulations and real flight.","DisplayName":"FFT attenuation for bandwidth calculation","Range":{"high":"100","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: FFT attenuation for bandwidth calculation\n // @Description: FFT attenuation level in dB for bandwidth calculation and peak detection. The bandwidth is calculated by comparing peak power output with the attenuated version. The default of 15 has shown to be a good compromise in both simulations and real flight.\n // @Range: 0 100\n // @User: Advanced"},"FFT_BW_HOVER":{"Description":"FFT learned bandwidth at hover for the attenuation frequencies.","DisplayName":"FFT learned bandwidth at hover","Range":{"high":"200","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: FFT learned bandwidth at hover\n // @Description: FFT learned bandwidth at hover for the attenuation frequencies.\n // @Range: 0 200\n // @User: Advanced"},"FFT_ENABLE":{"Description":"Enable Gyro FFT analyser","DisplayName":"Enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable Gyro FFT analyser\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced\n // @RebootRequired: True"},"FFT_FREQ_HOVER":{"Description":"The learned hover noise frequency","DisplayName":"FFT learned hover frequency","Range":{"high":"250","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: FFT learned hover frequency\n // @Description: The learned hover noise frequency\n // @Range: 0 250\n // @User: Advanced"},"FFT_HMNC_FIT":{"Description":"FFT harmonic fit frequency threshold percentage at which a signal of the appropriate frequency is determined to be the harmonic of another. Signals that have a harmonic relationship that varies at most by this percentage are considered harmonics of each other for the purpose of selecting the harmonic notch frequency. If a match is found then the lower frequency harmonic is always used as the basis for the dynamic harmonic notch. A value of zero completely disables harmonic matching.","DisplayName":"FFT harmonic fit frequency threshold","Range":{"high":"100","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: FFT harmonic fit frequency threshold\n // @Description: FFT harmonic fit frequency threshold percentage at which a signal of the appropriate frequency is determined to be the harmonic of another. Signals that have a harmonic relationship that varies at most by this percentage are considered harmonics of each other for the purpose of selecting the harmonic notch frequency. If a match is found then the lower frequency harmonic is always used as the basis for the dynamic harmonic notch. A value of zero completely disables harmonic matching.\n // @Range: 0 100\n // @User: Advanced\n // @RebootRequired: True"},"FFT_HMNC_PEAK":{"Description":"The FFT harmonic peak target that should be returned by FTN1.PkAvg. The resulting value will be used by the harmonic notch if configured to track the FFT frequency. By default the appropriate peak is auto-detected based on the harmonic fit between peaks and the energy-weighted average frequency on roll on pitch is used. Setting this to 1 will always target the highest energy peak. Setting this to 2 will target the highest energy peak that is lower in frequency than the highest energy peak. Setting this to 3 will target the highest energy peak that is higher in frequency than the highest energy peak. Setting this to 4 will target the highest energy peak on the roll axis only and only the roll frequency will be used (some vehicles have a much more pronounced peak on roll). Setting this to 5 will target the highest energy peak on the pitch axis only and only the pitch frequency will be used (some vehicles have a much more pronounced peak on roll).","DisplayName":"FFT harmonic peak target","User":"Advanced","Values":{"0":"Auto","1":"Center Frequency","2":"Lower-Shoulder Frequency","3":"Upper-Shoulder Frequency","4":"Roll-Axis","5":"Pitch-Axis"},"__field_text":"\n // @DisplayName: FFT harmonic peak target\n // @Description: The FFT harmonic peak target that should be returned by FTN1.PkAvg. The resulting value will be used by the harmonic notch if configured to track the FFT frequency. By default the appropriate peak is auto-detected based on the harmonic fit between peaks and the energy-weighted average frequency on roll on pitch is used. Setting this to 1 will always target the highest energy peak. Setting this to 2 will target the highest energy peak that is lower in frequency than the highest energy peak. Setting this to 3 will target the highest energy peak that is higher in frequency than the highest energy peak. Setting this to 4 will target the highest energy peak on the roll axis only and only the roll frequency will be used (some vehicles have a much more pronounced peak on roll). Setting this to 5 will target the highest energy peak on the pitch axis only and only the pitch frequency will be used (some vehicles have a much more pronounced peak on roll).\n // @Values: 0:Auto,1:Center Frequency,2:Lower-Shoulder Frequency,3:Upper-Shoulder Frequency,4:Roll-Axis,5:Pitch-Axis\n // @User: Advanced"},"FFT_MAXHZ":{"Description":"Upper bound of FFT frequency detection in Hz. On smaller vehicles the maximum motor frequency is likely to be significantly higher than for larger vehicles.","DisplayName":"Maximum Frequency","Range":{"high":"495","low":"20"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Maximum Frequency\n // @Description: Upper bound of FFT frequency detection in Hz. On smaller vehicles the maximum motor frequency is likely to be significantly higher than for larger vehicles.\n // @Range: 20 495\n // @Units: Hz\n // @User: Advanced"},"FFT_MINHZ":{"Description":"Lower bound of FFT frequency detection in Hz. On larger vehicles the minimum motor frequency is likely to be significantly lower than for smaller vehicles.","DisplayName":"Minimum Frequency","Range":{"high":"400","low":"20"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Minimum Frequency\n // @Description: Lower bound of FFT frequency detection in Hz. On larger vehicles the minimum motor frequency is likely to be significantly lower than for smaller vehicles.\n // @Range: 20 400\n // @Units: Hz\n // @User: Advanced"},"FFT_NUM_FRAMES":{"Description":"Number of output frequency frames to retain and average in order to calculate final frequencies. Averaging output frames can drastically reduce noise and jitter at the cost of latency as long as the input is stable. The default is to perform no averaging. For rapidly changing frequencies (e.g. smaller aircraft) fewer frames should be averaged.","DisplayName":"FFT output frames to retain and average","Range":{"high":"8","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: FFT output frames to retain and average\n // @Description: Number of output frequency frames to retain and average in order to calculate final frequencies. Averaging output frames can drastically reduce noise and jitter at the cost of latency as long as the input is stable. The default is to perform no averaging. For rapidly changing frequencies (e.g. smaller aircraft) fewer frames should be averaged.\n // @Range: 0 8\n // @User: Advanced\n // @RebootRequired: True"},"FFT_OPTIONS":{"Bitmask":{"0":"Enable post-filter FFT","1":"Check motor noise"},"Description":"FFT configuration options. Values: 1:Apply the FFT *after* the filter bank,2:Check noise at the motor frequencies using ESC data as a reference","DisplayName":"FFT options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: FFT options\n // @Description: FFT configuration options. Values: 1:Apply the FFT *after* the filter bank,2:Check noise at the motor frequencies using ESC data as a reference\n // @Bitmask: 0:Enable post-filter FFT,1:Check motor noise\n // @User: Advanced\n // @RebootRequired: True"},"FFT_SAMPLE_MODE":{"Description":"Sampling mode (and therefore rate). 0: Gyro rate sampling, 1: Fast loop rate sampling, 2: Fast loop rate / 2 sampling, 3: Fast loop rate / 3 sampling. Takes effect on reboot.","DisplayName":"Sample Mode","Range":{"high":"4","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Sample Mode\n // @Description: Sampling mode (and therefore rate). 0: Gyro rate sampling, 1: Fast loop rate sampling, 2: Fast loop rate / 2 sampling, 3: Fast loop rate / 3 sampling. Takes effect on reboot.\n // @Range: 0 4\n // @User: Advanced\n // @RebootRequired: True"},"FFT_SNR_REF":{"Description":"FFT SNR reference threshold in dB at which a signal is determined to be present.","DisplayName":"FFT SNR reference threshold","Range":{"high":"100.0","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: FFT SNR reference threshold\n // @Description: FFT SNR reference threshold in dB at which a signal is determined to be present.\n // @Range: 0.0 100.0\n // @User: Advanced"},"FFT_THR_REF":{"Description":"FFT learned thrust reference for the hover frequency and FFT minimum frequency.","DisplayName":"FFT learned thrust reference","Range":{"high":"0.9","low":"0.01"},"User":"Advanced","__field_text":"\n // @DisplayName: FFT learned thrust reference\n // @Description: FFT learned thrust reference for the hover frequency and FFT minimum frequency.\n // @Range: 0.01 0.9\n // @User: Advanced"},"FFT_WINDOW_OLAP":{"Description":"Percentage of window to be overlapped before another frame is process. Takes effect on reboot. A good default is 50% overlap. Higher overlap results in more processed frames but not necessarily more temporal resolution. Lower overlap results in lost information at the frame edges.","DisplayName":"FFT window overlap","Range":{"high":"0.9","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: FFT window overlap\n // @Description: Percentage of window to be overlapped before another frame is process. Takes effect on reboot. A good default is 50% overlap. Higher overlap results in more processed frames but not necessarily more temporal resolution. Lower overlap results in lost information at the frame edges.\n // @Range: 0 0.9\n // @User: Advanced\n // @RebootRequired: True"},"FFT_WINDOW_SIZE":{"Description":"Size of window to be used in FFT calculations. Takes effect on reboot. Must be a power of 2 and between 32 and 512. Larger windows give greater frequency resolution but poorer time resolution, consume more CPU time and may not be appropriate for all vehicles. Time and frequency resolution are given by the sample-rate / window-size. Windows of 256 are only really recommended for F7 class boards, windows of 512 or more H7 class.","DisplayName":"FFT window size","Range":{"high":"1024","low":"32"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: FFT window size\n // @Description: Size of window to be used in FFT calculations. Takes effect on reboot. Must be a power of 2 and between 32 and 512. Larger windows give greater frequency resolution but poorer time resolution, consume more CPU time and may not be appropriate for all vehicles. Time and frequency resolution are given by the sample-rate / window-size. Windows of 256 are only really recommended for F7 class boards, windows of 512 or more H7 class.\n // @Range: 32 1024\n // @User: Advanced\n // @RebootRequired: True"},"FHLD_BRAKE_RATE":{"Description":"Controls deceleration rate on stick release","DisplayName":"FlowHold Braking rate","Range":{"high":"30","low":"1"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: FlowHold Braking rate\n // @Description: Controls deceleration rate on stick release\n // @Range: 1 30\n // @User: Standard\n // @Units: deg/s"},"FHLD_FILT_HZ":{"Description":"Filter frequency for flow data","DisplayName":"FlowHold Filter Frequency","Range":{"high":"100","low":"1"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: FlowHold Filter Frequency\n // @Description: Filter frequency for flow data\n // @Range: 1 100\n // @Units: Hz\n // @User: Standard"},"FHLD_FLOW_MAX":{"Description":"Controls maximum apparent flow rate in flowhold","DisplayName":"FlowHold Flow Rate Max","Range":{"high":"2.5","low":"0.1"},"User":"Standard","__field_text":"\n // @DisplayName: FlowHold Flow Rate Max\n // @Description: Controls maximum apparent flow rate in flowhold\n // @Range: 0.1 2.5\n // @User: Standard"},"FHLD_QUAL_MIN":{"Description":"Minimum flow quality to use flow position hold","DisplayName":"FlowHold Flow quality minimum","Range":{"high":"255","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: FlowHold Flow quality minimum\n // @Description: Minimum flow quality to use flow position hold\n // @Range: 0 255\n // @User: Standard"},"FHLD_XY_FILT_HZ":{"Description":"FlowHold (horizontal) filter on input to control","DisplayName":"FlowHold filter on input to control","Range":{"high":"100","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: FlowHold filter on input to control\n // @Description: FlowHold (horizontal) filter on input to control\n // @Range: 0 100\n // @Units: Hz\n // @User: Advanced"},"FHLD_XY_I":{"Description":"FlowHold (horizontal) I gain","DisplayName":"FlowHold I gain","Increment":"0.01","Range":{"high":"1.00","low":"0.02"},"User":"Advanced","__field_text":"\n // @DisplayName: FlowHold I gain\n // @Description: FlowHold (horizontal) I gain\n // @Range: 0.02 1.00\n // @Increment: 0.01\n // @User: Advanced"},"FHLD_XY_IMAX":{"Description":"FlowHold (horizontal) integrator maximum","DisplayName":"FlowHold Integrator Max","Increment":"10","Range":{"high":"4500","low":"0"},"Units":"cdeg","User":"Advanced","__field_text":"\n // @DisplayName: FlowHold Integrator Max\n // @Description: FlowHold (horizontal) integrator maximum\n // @Range: 0 4500\n // @Increment: 10\n // @Units: cdeg\n // @User: Advanced"},"FHLD_XY_P":{"Description":"FlowHold (horizontal) P gain.","DisplayName":"FlowHold P gain","Increment":"0.1","Range":{"high":"6.0","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: FlowHold P gain\n // @Description: FlowHold (horizontal) P gain.\n // @Range: 0.1 6.0\n // @Increment: 0.1\n // @User: Advanced"},"FILT1_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT1_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT1_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT1_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT2_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT2_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT2_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT2_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT3_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT3_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT3_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT3_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT4_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT4_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT4_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT4_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT5_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT5_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT5_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT5_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT6_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT6_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT6_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT6_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT7_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT7_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT7_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT7_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FILT8_NOTCH_ATT":{"Description":"Notch Filter attenuation in dB.","DisplayName":"Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter attenuation\n // @Description: Notch Filter attenuation in dB.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"FILT8_NOTCH_FREQ":{"Description":"Notch Filter center frequency in Hz.","DisplayName":"Notch Filter center frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter center frequency\n // @Description: Notch Filter center frequency in Hz.\n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"FILT8_NOTCH_Q":{"Description":"Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.","DisplayName":"Notch Filter quality factor","Range":{"high":"10","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Notch Filter quality factor\n // @Description: Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.\n // @Range: 1 10\n // @User: Advanced"},"FILT8_TYPE":{"Description":"Filter Type","DisplayName":"Filter Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disable","1":"Notch Filter"},"__field_text":"\n // @DisplayName: Filter Type\n // @Values: 0:Disable, 1:Notch Filter\n // @Description: Filter Type\n // @User: Standard\n // @RebootRequired: True"},"FLIGHT_OPTIONS":{"Bitmask":{"0":"Disable thrust loss check","1":"Disable yaw imbalance warning","2":"Release gripper on thrust loss"},"Description":"Flight mode specific options","DisplayName":"Flight mode options","User":"Advanced","__field_text":"\n // @DisplayName: Flight mode options\n // @Description: Flight mode specific options\n // @Bitmask: 0:Disable thrust loss check, 1:Disable yaw imbalance warning, 2:Release gripper on thrust loss\n // @User: Advanced"},"FLOW_ADDR":{"Description":"This is used to select between multiple possible I2C addresses for some sensor types. For PX4Flow you can choose 0 to 7 for the 8 possible addresses on the I2C bus.","DisplayName":"Address on the bus","Range":{"high":"127","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Address on the bus\n // @Description: This is used to select between multiple possible I2C addresses for some sensor types. For PX4Flow you can choose 0 to 7 for the 8 possible addresses on the I2C bus.\n // @Range: 0 127\n // @User: Advanced"},"FLOW_FXSCALER":{"Description":"This sets the parts per thousand scale factor correction applied to the flow sensor X axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the X axis optical flow reading by 0.1%. Negative values reduce the scale factor.","DisplayName":"X axis optical flow scale factor correction","Increment":"1","Range":{"high":"+800","low":"-800"},"User":"Standard","__field_text":"\n // @DisplayName: X axis optical flow scale factor correction\n // @Description: This sets the parts per thousand scale factor correction applied to the flow sensor X axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the X axis optical flow reading by 0.1%. Negative values reduce the scale factor.\n // @Range: -800 +800\n // @Increment: 1\n // @User: Standard"},"FLOW_FYSCALER":{"Description":"This sets the parts per thousand scale factor correction applied to the flow sensor Y axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the Y axis optical flow reading by 0.1%. Negative values reduce the scale factor.","DisplayName":"Y axis optical flow scale factor correction","Increment":"1","Range":{"high":"+800","low":"-800"},"User":"Standard","__field_text":"\n // @DisplayName: Y axis optical flow scale factor correction\n // @Description: This sets the parts per thousand scale factor correction applied to the flow sensor Y axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the Y axis optical flow reading by 0.1%. Negative values reduce the scale factor.\n // @Range: -800 +800\n // @Increment: 1\n // @User: Standard"},"FLOW_HGT_OVR":{"Description":"This is used in rover vehicles, where the sensor is a fixed height above the ground","DisplayName":"Height override of sensor above ground","Increment":"0.01","Range":{"high":"2","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Height override of sensor above ground\n // @Description: This is used in rover vehicles, where the sensor is a fixed height above the ground\n // @Units: m\n // @Range: 0 2\n // @Increment: 0.01\n // @User: Advanced"},"FLOW_ORIENT_YAW":{"Description":"Specifies the number of centi-degrees that the flow sensor is yawed relative to the vehicle. A sensor with its X-axis pointing to the right of the vehicle X axis has a positive yaw angle.","DisplayName":"Flow sensor yaw alignment","Increment":"10","Range":{"high":"+18000","low":"-17999"},"Units":"cdeg","User":"Standard","__field_text":"\n // @DisplayName: Flow sensor yaw alignment\n // @Description: Specifies the number of centi-degrees that the flow sensor is yawed relative to the vehicle. A sensor with its X-axis pointing to the right of the vehicle X axis has a positive yaw angle.\n // @Units: cdeg\n // @Range: -17999 +18000\n // @Increment: 10\n // @User: Standard"},"FLOW_POS_X":{"Description":"X position of the optical flow sensor focal point in body frame. Positive X is forward of the origin.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the optical flow sensor focal point in body frame. Positive X is forward of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"FLOW_POS_Y":{"Description":"Y position of the optical flow sensor focal point in body frame. Positive Y is to the right of the origin.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the optical flow sensor focal point in body frame. Positive Y is to the right of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"FLOW_POS_Z":{"Description":"Z position of the optical flow sensor focal point in body frame. Positive Z is down from the origin.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the optical flow sensor focal point in body frame. Positive Z is down from the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"FLOW_TYPE":{"Description":"Optical flow sensor type","DisplayName":"Optical flow sensor type","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"PX4Flow","2":"Pixart","3":"Bebop","4":"CXOF","5":"MAVLink","6":"DroneCAN","7":"MSP","8":"UPFLOW"},"__field_text":"\n // @DisplayName: Optical flow sensor type\n // @Description: Optical flow sensor type\n // @Values: 0:None, 1:PX4Flow, 2:Pixart, 3:Bebop, 4:CXOF, 5:MAVLink, 6:DroneCAN, 7:MSP, 8:UPFLOW\n // @User: Standard\n // @RebootRequired: True"},"FLTMODE1":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is <= 1230","DisplayName":"Flight Mode 1","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @DisplayName: Flight Mode 1\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is <= 1230\n // @Values: 0:Stabilize,1:Acro,2:AltHold,3:Auto,4:Guided,5:Loiter,6:RTL,7:Circle,9:Land,11:Drift,13:Sport,14:Flip,15:AutoTune,16:PosHold,17:Brake,18:Throw,19:Avoid_ADSB,20:Guided_NoGPS,21:Smart_RTL,22:FlowHold,23:Follow,24:ZigZag,25:SystemID,26:Heli_Autorotate,27:Auto RTL\n // @User: Standard"},"FLTMODE2":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1230, <= 1360","DisplayName":"Flight Mode 2","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @CopyFieldsFrom: FLTMODE1\n // @DisplayName: Flight Mode 2\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1230, <= 1360"},"FLTMODE3":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1360, <= 1490","DisplayName":"Flight Mode 3","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @CopyFieldsFrom: FLTMODE1\n // @DisplayName: Flight Mode 3\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1360, <= 1490"},"FLTMODE4":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1490, <= 1620","DisplayName":"Flight Mode 4","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @CopyFieldsFrom: FLTMODE1\n // @DisplayName: Flight Mode 4\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1490, <= 1620"},"FLTMODE5":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1620, <= 1749","DisplayName":"Flight Mode 5","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @CopyFieldsFrom: FLTMODE1\n // @DisplayName: Flight Mode 5\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >1620, <= 1749"},"FLTMODE6":{"Description":"Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >=1750","DisplayName":"Flight Mode 6","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate","27":"Auto RTL"},"__field_text":"\n // @CopyFieldsFrom: FLTMODE1\n // @DisplayName: Flight Mode 6\n // @Description: Flight mode when pwm of Flightmode channel(FLTMODE_CH) is >=1750"},"FLTMODE_CH":{"Description":"RC Channel to use for flight mode control","DisplayName":"Flightmode channel","User":"Advanced","Values":{"0":"Disabled","5":"Channel5","6":"Channel6","7":"Channel7","8":"Channel8","9":"Channel9","10":"Channel 10","11":"Channel 11","12":"Channel 12","13":"Channel 13","14":"Channel 14","15":"Channel 15"},"__field_text":"\n // @DisplayName: Flightmode channel\n // @Description: RC Channel to use for flight mode control\n // @Values: 0:Disabled,5:Channel5,6:Channel6,7:Channel7,8:Channel8,9:Channel9,10:Channel 10,11:Channel 11,12:Channel 12,13:Channel 13,14:Channel 14,15:Channel 15\n // @User: Advanced"},"FOLL_ALT_TYPE":{"Description":"Follow altitude type","DisplayName":"Follow altitude type","User":"Standard","Values":{"0":"absolute","1":"relative"},"__field_text":"\n // @DisplayName: Follow altitude type\n // @Description: Follow altitude type\n // @Values: 0:absolute, 1:relative\n // @User: Standard"},"FOLL_DIST_MAX":{"Description":"Follow distance maximum. targets further than this will be ignored","DisplayName":"Follow distance maximum","Range":{"high":"1000","low":"1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Follow distance maximum\n // @Description: Follow distance maximum. targets further than this will be ignored\n // @Units: m\n // @Range: 1 1000\n // @User: Standard"},"FOLL_ENABLE":{"Description":"Enabled/disable following a target","DisplayName":"Follow enable/disable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Follow enable/disable\n // @Description: Enabled/disable following a target\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"FOLL_OFS_TYPE":{"Description":"Follow offset type","DisplayName":"Follow offset type","User":"Standard","Values":{"0":"North-East-Down","1":"Relative to lead vehicle heading"},"__field_text":"\n // @DisplayName: Follow offset type\n // @Description: Follow offset type\n // @Values: 0:North-East-Down, 1:Relative to lead vehicle heading\n // @User: Standard"},"FOLL_OFS_X":{"Description":"Follow offsets in meters north/forward. If positive, this vehicle fly ahead or north of lead vehicle. Depends on FOLL_OFS_TYPE","DisplayName":"Follow offsets in meters north/forward","Increment":"1","Range":{"high":"100","low":"-100"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Follow offsets in meters north/forward\n // @Description: Follow offsets in meters north/forward. If positive, this vehicle fly ahead or north of lead vehicle. Depends on FOLL_OFS_TYPE\n // @Range: -100 100\n // @Units: m\n // @Increment: 1\n // @User: Standard"},"FOLL_OFS_Y":{"Description":"Follow offsets in meters east/right. If positive, this vehicle will fly to the right or east of lead vehicle. Depends on FOLL_OFS_TYPE","DisplayName":"Follow offsets in meters east/right","Increment":"1","Range":{"high":"100","low":"-100"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Follow offsets in meters east/right\n // @Description: Follow offsets in meters east/right. If positive, this vehicle will fly to the right or east of lead vehicle. Depends on FOLL_OFS_TYPE\n // @Range: -100 100\n // @Units: m\n // @Increment: 1\n // @User: Standard"},"FOLL_OFS_Z":{"Description":"Follow offsets in meters down. If positive, this vehicle will fly below the lead vehicle","DisplayName":"Follow offsets in meters down","Increment":"1","Range":{"high":"100","low":"-100"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Follow offsets in meters down\n // @Description: Follow offsets in meters down. If positive, this vehicle will fly below the lead vehicle\n // @Range: -100 100\n // @Units: m\n // @Increment: 1\n // @User: Standard"},"FOLL_OPTIONS":{"Description":"Follow options bitmask","DisplayName":"Follow options","User":"Standard","Values":{"0":"None","1":"Mount Follows lead vehicle on mode enter"},"__field_text":"\n // @DisplayName: Follow options\n // @Description: Follow options bitmask\n // @Values: 0:None,1: Mount Follows lead vehicle on mode enter\n // @User: Standard"},"FOLL_POS_P":{"Description":"Follow position error P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller","DisplayName":"Follow position error P gain","Increment":"0.01","Range":{"high":"1.00","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Follow position error P gain\n // @Description: Follow position error P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller\n // @Range: 0.01 1.00\n // @Increment: 0.01\n // @User: Standard"},"FOLL_SYSID":{"Description":"Follow target's mavlink system id","DisplayName":"Follow target's mavlink system id","Range":{"high":"255","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Follow target's mavlink system id\n // @Description: Follow target's mavlink system id\n // @Range: 0 255\n // @User: Standard"},"FOLL_YAW_BEHAVE":{"Description":"Follow yaw behaviour","DisplayName":"Follow yaw behaviour","User":"Standard","Values":{"0":"None","1":"Face Lead Vehicle","2":"Same as Lead vehicle","3":"Direction of Flight"},"__field_text":"\n // @DisplayName: Follow yaw behaviour\n // @Description: Follow yaw behaviour\n // @Values: 0:None,1:Face Lead Vehicle,2:Same as Lead vehicle,3:Direction of Flight\n // @User: Standard"},"FORMAT_VERSION":{"Description":"This value is incremented when changes are made to the eeprom format","DisplayName":"Eeprom format version number","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Eeprom format version number\n // @Description: This value is incremented when changes are made to the eeprom format\n // @User: Advanced\n // @ReadOnly: True"},"FRAME_CLASS":{"Description":"Controls major frame class for multicopter component","DisplayName":"Frame Class","RebootRequired":"True","User":"Standard","Values":{"0":"Undefined","1":"Quad","2":"Hexa","3":"Octa","4":"OctaQuad","5":"Y6","6":"Heli","7":"Tri","8":"SingleCopter","9":"CoaxCopter","10":"BiCopter","11":"Heli_Dual","12":"DodecaHexa","13":"HeliQuad","14":"Deca","15":"Scripting Matrix","16":"6DoF Scripting","17":"Dynamic Scripting Matrix"},"__field_text":"\n // @DisplayName: Frame Class\n // @Description: Controls major frame class for multicopter component\n // @Values: 0:Undefined, 1:Quad, 2:Hexa, 3:Octa, 4:OctaQuad, 5:Y6, 6:Heli, 7:Tri, 8:SingleCopter, 9:CoaxCopter, 10:BiCopter, 11:Heli_Dual, 12:DodecaHexa, 13:HeliQuad, 14:Deca, 15:Scripting Matrix, 16:6DoF Scripting, 17:Dynamic Scripting Matrix\n // @User: Standard\n // @RebootRequired: True"},"FRAME_TYPE":{"Description":"Controls motor mixing for multicopters. Not used for Tri or Traditional Helicopters.","DisplayName":"Frame Type (+, X, V, etc)","RebootRequired":"True","User":"Standard","Values":{"0":"Plus","1":"X","2":"V","3":"H","4":"V-Tail","5":"A-Tail","10":"Y6B","11":"Y6F","12":"BetaFlightX","13":"DJIX","14":"ClockwiseX","15":"I","18":"BetaFlightXReversed","19":"Y4"},"__field_text":"\n // @DisplayName: Frame Type (+, X, V, etc)\n // @Description: Controls motor mixing for multicopters. Not used for Tri or Traditional Helicopters.\n // @Values: 0:Plus, 1:X, 2:V, 3:H, 4:V-Tail, 5:A-Tail, 10:Y6B, 11:Y6F, 12:BetaFlightX, 13:DJIX, 14:ClockwiseX, 15: I, 18: BetaFlightXReversed, 19:Y4\n // @User: Standard\n // @RebootRequired: True"},"FRSKY_DNLINK1_ID":{"Description":"Change the first extra downlink sensor id (SPort only)","DisplayName":"First downlink sensor id","User":"Advanced","Values":{"7":"7","8":"8","9":"9","10":"10","11":"11","12":"12","13":"13","14":"14","15":"15","16":"16","17":"17","18":"18","19":"19","20":"20","21":"21","22":"22","23":"23","24":"24","25":"25","26":"26","-1":"Disable"},"__field_text":"\n // @DisplayName: First downlink sensor id\n // @Description: Change the first extra downlink sensor id (SPort only)\n // @Values: -1:Disable,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26\n // @User: Advanced"},"FRSKY_DNLINK2_ID":{"Description":"Change the second extra downlink sensor id (SPort only)","DisplayName":"Second downlink sensor id","User":"Advanced","Values":{"7":"7","8":"8","9":"9","10":"10","11":"11","12":"12","13":"13","14":"14","15":"15","16":"16","17":"17","18":"18","19":"19","20":"20","21":"21","22":"22","23":"23","24":"24","25":"25","26":"26","-1":"Disable"},"__field_text":"\n // @DisplayName: Second downlink sensor id\n // @Description: Change the second extra downlink sensor id (SPort only)\n // @Values: -1:Disable,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26\n // @User: Advanced"},"FRSKY_DNLINK_ID":{"Description":"Change the default downlink sensor id (SPort only)","DisplayName":"Default downlink sensor id","User":"Advanced","Values":{"7":"7","8":"8","9":"9","10":"10","11":"11","12":"12","13":"13","14":"14","15":"15","16":"16","17":"17","18":"18","19":"19","20":"20","21":"21","22":"22","23":"23","24":"24","25":"25","26":"26","27":"27","-1":"Disable"},"__field_text":"\n // @DisplayName: Default downlink sensor id\n // @Description: Change the default downlink sensor id (SPort only)\n // @Values: -1:Disable,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27\n // @User: Advanced"},"FRSKY_OPTIONS":{"Bitmask":{"0":"EnableAirspeedAndGroundspeed"},"Description":"A bitmask to set some FRSky Telemetry specific options","DisplayName":"FRSky Telemetry Options","User":"Standard","__field_text":"\n // @DisplayName: FRSky Telemetry Options\n // @Description: A bitmask to set some FRSky Telemetry specific options\n // @Bitmask: 0:EnableAirspeedAndGroundspeed\n // @User: Standard"},"FRSKY_UPLINK_ID":{"Description":"Change the uplink sensor id (SPort only)","DisplayName":"Uplink sensor id","User":"Advanced","Values":{"7":"7","8":"8","9":"9","10":"10","11":"11","12":"12","13":"13","14":"14","15":"15","16":"16","17":"17","18":"18","19":"19","20":"20","21":"21","22":"22","23":"23","24":"24","25":"25","26":"26","-1":"Disable"},"__field_text":"\n // @DisplayName: Uplink sensor id\n // @Description: Change the uplink sensor id (SPort only)\n // @Values: -1:Disable,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26\n // @User: Advanced"},"FS_CRASH_CHECK":{"Description":"This enables automatic crash checking. When enabled the motors will disarm if a crash is detected.","DisplayName":"Crash check enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Crash check enable\n // @Description: This enables automatic crash checking. When enabled the motors will disarm if a crash is detected.\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"FS_DR_ENABLE":{"Description":"Failsafe action taken immediately as deadreckoning starts. Deadreckoning starts when EKF loses position and velocity source and relies only on wind estimates","DisplayName":"DeadReckon Failsafe Action","User":"Standard","Values":{"0":"Disabled/NoAction","1":"Land","2":"RTL","3":"SmartRTL or RTL","4":"SmartRTL or Land","6":"Auto DO_LAND_START or RTL"},"__field_text":"\n // @DisplayName: DeadReckon Failsafe Action\n // @Description: Failsafe action taken immediately as deadreckoning starts. Deadreckoning starts when EKF loses position and velocity source and relies only on wind estimates\n // @Values: 0:Disabled/NoAction,1:Land, 2:RTL, 3:SmartRTL or RTL, 4:SmartRTL or Land, 6:Auto DO_LAND_START or RTL\n // @User: Standard"},"FS_DR_TIMEOUT":{"Description":"DeadReckoning is available for this many seconds after losing position and/or velocity source. After this timeout elapses the EKF failsafe will trigger in modes requiring a position estimate","DisplayName":"DeadReckon Failsafe Timeout","Range":{"high":"120","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: DeadReckon Failsafe Timeout\n // @Description: DeadReckoning is available for this many seconds after losing position and/or velocity source. After this timeout elapses the EKF failsafe will trigger in modes requiring a position estimate\n // @Range: 0 120\n // @User: Standard"},"FS_EKF_ACTION":{"Description":"Controls the action that will be taken when an EKF failsafe is invoked","DisplayName":"EKF Failsafe Action","User":"Advanced","Values":{"1":"Land","2":"AltHold","3":"Land even in Stabilize"},"__field_text":"\n // @DisplayName: EKF Failsafe Action\n // @Description: Controls the action that will be taken when an EKF failsafe is invoked\n // @Values: 1:Land, 2:AltHold, 3:Land even in Stabilize\n // @User: Advanced"},"FS_EKF_THRESH":{"Description":"Allows setting the maximum acceptable compass, velocity, position and height variances. Used in arming check and EKF failsafe.","DisplayName":"EKF failsafe variance threshold","User":"Advanced","Values":{"0.6":"Strict","0.8":"Default","1.0":"Relaxed"},"__field_text":"\n // @DisplayName: EKF failsafe variance threshold\n // @Description: Allows setting the maximum acceptable compass, velocity, position and height variances. Used in arming check and EKF failsafe.\n // @Values: 0.6:Strict, 0.8:Default, 1.0:Relaxed\n // @User: Advanced"},"FS_GCS_ENABLE":{"Description":"Controls whether failsafe will be invoked (and what action to take) when connection with Ground station is lost for at least 5 seconds. See FS_OPTIONS param for additional actions, or for cases allowing Mission continuation, when GCS failsafe is enabled.","DisplayName":"Ground Station Failsafe Enable","User":"Standard","Values":{"0":"Disabled/NoAction","1":"RTL","2":"RTL or Continue with Mission in Auto Mode (Removed in 4.0+-see FS_OPTIONS)","3":"SmartRTL or RTL","4":"SmartRTL or Land","5":"Land","6":"Auto DO_LAND_START or RTL","7":"Brake or Land"},"__field_text":"\n // @DisplayName: Ground Station Failsafe Enable\n // @Description: Controls whether failsafe will be invoked (and what action to take) when connection with Ground station is lost for at least 5 seconds. See FS_OPTIONS param for additional actions, or for cases allowing Mission continuation, when GCS failsafe is enabled.\n // @Values: 0:Disabled/NoAction,1:RTL,2:RTL or Continue with Mission in Auto Mode (Removed in 4.0+-see FS_OPTIONS),3:SmartRTL or RTL,4:SmartRTL or Land,5:Land,6:Auto DO_LAND_START or RTL,7:Brake or Land\n // @User: Standard"},"FS_GCS_TIMEOUT":{"Description":"Timeout before triggering the GCS failsafe","DisplayName":"GCS failsafe timeout","Increment":"1","Range":{"high":"120","low":"2"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: GCS failsafe timeout\n // @Description: Timeout before triggering the GCS failsafe\n // @Units: s\n // @Range: 2 120\n // @Increment: 1\n // @User: Standard"},"FS_OPTIONS":{"Bitmask":{"0":"Continue if in Auto on RC failsafe","1":"Continue if in Auto on GCS failsafe","2":"Continue if in Guided on RC failsafe","3":"Continue if landing on any failsafe","4":"Continue if in pilot controlled modes on GCS failsafe","5":"Release Gripper"},"Description":"Bitmask of additional options for battery, radio, & GCS failsafes. 0 (default) disables all options.","DisplayName":"Failsafe options bitmask","User":"Advanced","Values":{"0":"Disabled","1":"Continue if in Auto on RC failsafe only","2":"Continue if in Auto on GCS failsafe only","3":"Continue if in Auto on RC and/or GCS failsafe","4":"Continue if in Guided on RC failsafe only","8":"Continue if landing on any failsafe","16":"Continue if in pilot controlled modes on GCS failsafe","19":"Continue if in Auto on RC and/or GCS failsafe and continue if in pilot controlled modes on GCS failsafe"},"__field_text":"\n // @DisplayName: Failsafe options bitmask\n // @Description: Bitmask of additional options for battery, radio, & GCS failsafes. 0 (default) disables all options.\n // @Values: 0:Disabled, 1:Continue if in Auto on RC failsafe only, 2:Continue if in Auto on GCS failsafe only, 3:Continue if in Auto on RC and/or GCS failsafe, 4:Continue if in Guided on RC failsafe only, 8:Continue if landing on any failsafe, 16:Continue if in pilot controlled modes on GCS failsafe, 19:Continue if in Auto on RC and/or GCS failsafe and continue if in pilot controlled modes on GCS failsafe\n // @Bitmask: 0:Continue if in Auto on RC failsafe, 1:Continue if in Auto on GCS failsafe, 2:Continue if in Guided on RC failsafe, 3:Continue if landing on any failsafe, 4:Continue if in pilot controlled modes on GCS failsafe, 5:Release Gripper\n // @User: Advanced"},"FS_THR_ENABLE":{"Description":"The throttle failsafe allows you to configure a software failsafe activated by a setting on the throttle input channel","DisplayName":"Throttle Failsafe Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled always RTL","2":"Enabled Continue with Mission in Auto Mode (Removed in 4.0+)","3":"Enabled always Land","4":"Enabled always SmartRTL or RTL","5":"Enabled always SmartRTL or Land","6":"Enabled Auto DO_LAND_START or RTL","7":"Enabled always Brake or Land"},"__field_text":"\n // @DisplayName: Throttle Failsafe Enable\n // @Description: The throttle failsafe allows you to configure a software failsafe activated by a setting on the throttle input channel\n // @Values: 0:Disabled,1:Enabled always RTL,2:Enabled Continue with Mission in Auto Mode (Removed in 4.0+),3:Enabled always Land,4:Enabled always SmartRTL or RTL,5:Enabled always SmartRTL or Land,6:Enabled Auto DO_LAND_START or RTL,7:Enabled always Brake or Land\n // @User: Standard"},"FS_THR_VALUE":{"Description":"The PWM level in microseconds on channel 3 below which throttle failsafe triggers","DisplayName":"Throttle Failsafe Value","Increment":"1","Range":{"high":"1100","low":"910"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Throttle Failsafe Value\n // @Description: The PWM level in microseconds on channel 3 below which throttle failsafe triggers\n // @Range: 910 1100\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"FS_VIBE_ENABLE":{"Description":"This enables the vibration failsafe which will use modified altitude estimation and control during high vibrations","DisplayName":"Vibration Failsafe enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Vibration Failsafe enable\n // @Description: This enables the vibration failsafe which will use modified altitude estimation and control during high vibrations\n // @Values: 0:Disabled, 1:Enabled\n // @User: Standard"},"GCS_PID_MASK":{"Bitmask":{"0":"Roll","1":"Pitch","2":"Yaw","3":"AccelZ"},"Description":"bitmask of PIDs to send MAVLink PID_TUNING messages for","DisplayName":"GCS PID tuning mask","User":"Advanced","Values":{"0":"None","1":"Roll","2":"Pitch","4":"Yaw","8":"AccelZ"},"__field_text":"\n // @DisplayName: GCS PID tuning mask\n // @Description: bitmask of PIDs to send MAVLink PID_TUNING messages for\n // @User: Advanced\n // @Values: 0:None,1:Roll,2:Pitch,4:Yaw,8:AccelZ\n // @Bitmask: 0:Roll,1:Pitch,2:Yaw,3:AccelZ"},"GEN_OPTIONS":{"Bitmask":{"0":"Suppress Maintenance-Required Warnings"},"Description":"Bitmask of options for generators","DisplayName":"Generator Options","User":"Standard","__field_text":"\n // @DisplayName: Generator Options\n // @Description: Bitmask of options for generators\n // @Bitmask: 0:Suppress Maintenance-Required Warnings\n // @User: Standard"},"GEN_TYPE":{"Description":"Generator type","DisplayName":"Generator type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"IE 650w 800w Fuel Cell","2":"IE 2.4kW Fuel Cell","3":"Richenpower"},"__field_text":"\n // @DisplayName: Generator type\n // @Description: Generator type\n // @Values: 0:Disabled, 1:IE 650w 800w Fuel Cell, 2:IE 2.4kW Fuel Cell, 3: Richenpower\n // @User: Standard\n // @RebootRequired: True"},"GND_EFFECT_COMP":{"Description":"Ground Effect Compensation Enable/Disable","DisplayName":"Ground Effect Compensation Enable/Disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Ground Effect Compensation Enable/Disable\n // @Description: Ground Effect Compensation Enable/Disable\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"GPS1_CAN_OVRIDE":{"Description":"GPS Node id for first GPS. If 0 the gps will be automatically selected on a first-come-first-GPS basis.","DisplayName":"First DroneCAN GPS NODE ID","User":"Advanced","__field_text":"\n // @DisplayName: First DroneCAN GPS NODE ID\n // @Description: GPS Node id for first GPS. If 0 the gps will be automatically selected on a first-come-first-GPS basis.\n // @User: Advanced"},"GPS2_CAN_OVRIDE":{"Description":"GPS Node id for second GPS. If 0 the gps will be automatically selected on a second-come-second-GPS basis.","DisplayName":"Second DroneCAN GPS NODE ID","User":"Advanced","__field_text":"\n // @DisplayName: Second DroneCAN GPS NODE ID\n // @Description: GPS Node id for second GPS. If 0 the gps will be automatically selected on a second-come-second-GPS basis.\n // @User: Advanced"},"GPS_AUTO_CONFIG":{"Description":"Controls if the autopilot should automatically configure the GPS based on the parameters and default settings","DisplayName":"Automatic GPS configuration","User":"Advanced","Values":{"0":"Disables automatic configuration","1":"Enable automatic configuration for Serial GPSes only","2":"Enable automatic configuration for DroneCAN as well"},"__field_text":"\n // @DisplayName: Automatic GPS configuration\n // @Description: Controls if the autopilot should automatically configure the GPS based on the parameters and default settings\n // @Values: 0:Disables automatic configuration,1:Enable automatic configuration for Serial GPSes only,2:Enable automatic configuration for DroneCAN as well\n // @User: Advanced"},"GPS_AUTO_SWITCH":{"Description":"Automatic switchover to GPS reporting best lock, 1:UseBest selects the GPS with highest status, if both are equal the GPS with highest satellite count is used 4:Use primary if 3D fix or better, will revert to 'UseBest' behaviour if 3D fix is lost on primary","DisplayName":"Automatic Switchover Setting","User":"Advanced","Values":{"0":"Use primary","1":"UseBest","2":"Blend","4":"Use primary if 3D fix or better"},"__field_text":"\n // @DisplayName: Automatic Switchover Setting\n // @Description: Automatic switchover to GPS reporting best lock, 1:UseBest selects the GPS with highest status, if both are equal the GPS with highest satellite count is used 4:Use primary if 3D fix or better, will revert to 'UseBest' behaviour if 3D fix is lost on primary\n // @Values: 0:Use primary, 1:UseBest, 2:Blend, 4:Use primary if 3D fix or better\n // @User: Advanced"},"GPS_BLEND_MASK":{"Bitmask":{"0":"Horiz Pos","1":"Vert Pos","2":"Speed"},"Description":"Determines which of the accuracy measures Horizontal position, Vertical Position and Speed are used to calculate the weighting on each GPS receiver when soft switching has been selected by setting GPS_AUTO_SWITCH to 2(Blend)","DisplayName":"Multi GPS Blending Mask","User":"Advanced","__field_text":"\n // @DisplayName: Multi GPS Blending Mask\n // @Description: Determines which of the accuracy measures Horizontal position, Vertical Position and Speed are used to calculate the weighting on each GPS receiver when soft switching has been selected by setting GPS_AUTO_SWITCH to 2(Blend)\n // @Bitmask: 0:Horiz Pos,1:Vert Pos,2:Speed\n // @User: Advanced"},"GPS_CAN_NODEID1":{"Description":"GPS Node id for first-discovered GPS.","DisplayName":"GPS Node ID 1","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: GPS Node ID 1\n // @Description: GPS Node id for first-discovered GPS.\n // @ReadOnly: True\n // @User: Advanced"},"GPS_CAN_NODEID2":{"Description":"GPS Node id for second-discovered GPS.","DisplayName":"GPS Node ID 2","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: GPS Node ID 2\n // @Description: GPS Node id for second-discovered GPS.\n // @ReadOnly: True\n // @User: Advanced"},"GPS_COM_PORT":{"Description":"The physical COM port on the connected device, currently only applies to SBF and GSOF GPS","DisplayName":"GPS physical COM port","Increment":"1","Range":{"high":"10","low":"0"},"RebootRequired":"True","User":"Advanced","Values":{"0":"COM1(RS232) on GSOF","1":"COM2(TTL) on GSOF"},"__field_text":"\n // @DisplayName: GPS physical COM port\n // @Description: The physical COM port on the connected device, currently only applies to SBF and GSOF GPS\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced\n // @Values: 0:COM1(RS232) on GSOF, 1:COM2(TTL) on GSOF\n // @RebootRequired: True"},"GPS_COM_PORT2":{"Description":"The physical COM port on the connected device, currently only applies to SBF and GSOF GPS","DisplayName":"GPS physical COM port","Increment":"1","Range":{"high":"10","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: GPS physical COM port\n // @Description: The physical COM port on the connected device, currently only applies to SBF and GSOF GPS\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"GPS_DELAY_MS":{"Description":"Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.","DisplayName":"GPS delay in milliseconds","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: GPS delay in milliseconds\n // @Description: Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.\n // @Units: ms\n // @Range: 0 250\n // @User: Advanced\n // @RebootRequired: True"},"GPS_DELAY_MS2":{"Description":"Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.","DisplayName":"GPS 2 delay in milliseconds","Range":{"high":"250","low":"0"},"RebootRequired":"True","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 delay in milliseconds\n // @Description: Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.\n // @Units: ms\n // @Range: 0 250\n // @User: Advanced\n // @RebootRequired: True"},"GPS_DRV_OPTIONS":{"Bitmask":{"0":"Use UART2 for moving baseline on ublox","1":"Use base station for GPS yaw on SBF","2":"Use baudrate 115200","3":"Use dedicated CAN port b/w GPSes for moving baseline","4":"Use ellipsoid height instead of AMSL"},"Description":"Additional backend specific options","DisplayName":"driver options","User":"Advanced","__field_text":"\n // @DisplayName: driver options\n // @Description: Additional backend specific options\n // @Bitmask: 0:Use UART2 for moving baseline on ublox,1:Use base station for GPS yaw on SBF,2:Use baudrate 115200,3:Use dedicated CAN port b/w GPSes for moving baseline,4:Use ellipsoid height instead of AMSL\n // @User: Advanced"},"GPS_GNSS_MODE":{"Bitmask":{"0":"GPS","1":"SBAS","2":"Galileo","3":"Beidou","4":"IMES","5":"QZSS","6":"GLONASS"},"Description":"Bitmask for what GNSS system to use on the first GPS (all unchecked or zero to leave GPS as configured)","DisplayName":"GNSS system configuration","User":"Advanced","__field_text":"\n // @DisplayName: GNSS system configuration\n // @Description: Bitmask for what GNSS system to use on the first GPS (all unchecked or zero to leave GPS as configured)\n // @Bitmask: 0:GPS,1:SBAS,2:Galileo,3:Beidou,4:IMES,5:QZSS,6:GLONASS\n // @User: Advanced"},"GPS_GNSS_MODE2":{"Bitmask":{"0":"GPS","1":"SBAS","2":"Galileo","3":"Beidou","4":"IMES","5":"QZSS","6":"GLONASS"},"Description":"Bitmask for what GNSS system to use on the second GPS (all unchecked or zero to leave GPS as configured)","DisplayName":"GNSS system configuration","User":"Advanced","__field_text":"\n // @DisplayName: GNSS system configuration\n // @Description: Bitmask for what GNSS system to use on the second GPS (all unchecked or zero to leave GPS as configured)\n // @Bitmask: 0:GPS,1:SBAS,2:Galileo,3:Beidou,4:IMES,5:QZSS,6:GLONASS\n // @User: Advanced"},"GPS_HDOP_GOOD":{"Description":"GPS Hdop value at or below this value represent a good position. Used for pre-arm checks","DisplayName":"GPS Hdop Good","Range":{"high":"900","low":"100"},"User":"Advanced","__field_text":"\n // @DisplayName: GPS Hdop Good\n // @Description: GPS Hdop value at or below this value represent a good position. Used for pre-arm checks\n // @Range: 100 900\n // @User: Advanced"},"GPS_INJECT_TO":{"Description":"The GGS can send raw serial packets to inject data to multiple GPSes.","DisplayName":"Destination for GPS_INJECT_DATA MAVLink packets","User":"Advanced","Values":{"0":"send to first GPS","1":"send to 2nd GPS","127":"send to all"},"__field_text":"\n // @DisplayName: Destination for GPS_INJECT_DATA MAVLink packets\n // @Description: The GGS can send raw serial packets to inject data to multiple GPSes.\n // @Values: 0:send to first GPS,1:send to 2nd GPS,127:send to all\n // @User: Advanced"},"GPS_MB1_OFS_X":{"Description":"X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna X position offset\n // @Description: X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB1_OFS_Y":{"Description":"Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna Y position offset ","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna Y position offset \n // @Description: Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB1_OFS_Z":{"Description":"Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna Z position offset\n // @Description: Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB1_TYPE":{"Description":"Controls the type of moving base used if using moving base.","DisplayName":"Moving base type","RebootRequired":"True","User":"Advanced","Values":{"0":"Relative to alternate GPS instance","1":"RelativeToCustomBase"},"__field_text":"\n // @DisplayName: Moving base type\n // @Description: Controls the type of moving base used if using moving base.\n // @Values: 0:Relative to alternate GPS instance,1:RelativeToCustomBase\n // @User: Advanced\n // @RebootRequired: True"},"GPS_MB2_OFS_X":{"Description":"X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna X position offset\n // @Description: X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB2_OFS_Y":{"Description":"Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna Y position offset ","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna Y position offset \n // @Description: Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB2_OFS_Z":{"Description":"Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Base antenna Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Base antenna Z position offset\n // @Description: Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_MB2_TYPE":{"Description":"Controls the type of moving base used if using moving base.","DisplayName":"Moving base type","RebootRequired":"True","User":"Advanced","Values":{"0":"Relative to alternate GPS instance","1":"RelativeToCustomBase"},"__field_text":"\n // @DisplayName: Moving base type\n // @Description: Controls the type of moving base used if using moving base.\n // @Values: 0:Relative to alternate GPS instance,1:RelativeToCustomBase\n // @User: Advanced\n // @RebootRequired: True"},"GPS_MIN_DGPS":{"Description":"Sets the minimum type of differential GPS corrections required before allowing to switch into DGPS mode.","DisplayName":"Minimum Lock Type Accepted for DGPS","RebootRequired":"True","User":"Advanced","Values":{"0":"Any","50":"FloatRTK","100":"IntegerRTK"},"__field_text":"\n // @DisplayName: Minimum Lock Type Accepted for DGPS\n // @Description: Sets the minimum type of differential GPS corrections required before allowing to switch into DGPS mode.\n // @Values: 0:Any,50:FloatRTK,100:IntegerRTK\n // @User: Advanced\n // @RebootRequired: True"},"GPS_MIN_ELEV":{"Description":"This sets the minimum elevation of satellites above the horizon for them to be used for navigation. Setting this to -100 leaves the minimum elevation set to the GPS modules default.","DisplayName":"Minimum elevation","Range":{"high":"90","low":"-100"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Minimum elevation\n // @Description: This sets the minimum elevation of satellites above the horizon for them to be used for navigation. Setting this to -100 leaves the minimum elevation set to the GPS modules default.\n // @Range: -100 90\n // @Units: deg\n // @User: Advanced"},"GPS_NAVFILTER":{"Description":"Navigation filter engine setting","DisplayName":"Navigation filter setting","User":"Advanced","Values":{"0":"Portable","2":"Stationary","3":"Pedestrian","4":"Automotive","5":"Sea","6":"Airborne1G","7":"Airborne2G","8":"Airborne4G"},"__field_text":"\n // @DisplayName: Navigation filter setting\n // @Description: Navigation filter engine setting\n // @Values: 0:Portable,2:Stationary,3:Pedestrian,4:Automotive,5:Sea,6:Airborne1G,7:Airborne2G,8:Airborne4G\n // @User: Advanced"},"GPS_POS1_X":{"Description":"X position of the first GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna X position offset\n // @Description: X position of the first GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_POS1_Y":{"Description":"Y position of the first GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna Y position offset\n // @Description: Y position of the first GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_POS1_Z":{"Description":"Z position of the first GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna Z position offset\n // @Description: Z position of the first GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_POS2_X":{"Description":"X position of the second GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna X position offset\n // @Description: X position of the second GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_POS2_Y":{"Description":"Y position of the second GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna Y position offset\n // @Description: Y position of the second GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_POS2_Z":{"Description":"Z position of the second GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.","DisplayName":"Antenna Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Antenna Z position offset\n // @Description: Z position of the second GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"GPS_PRIMARY":{"Description":"This GPS will be used when GPS_AUTO_SWITCH is 0 and used preferentially with GPS_AUTO_SWITCH = 4.","DisplayName":"Primary GPS","Increment":"1","User":"Advanced","Values":{"0":"FirstGPS","1":"SecondGPS"},"__field_text":"\n // @DisplayName: Primary GPS\n // @Description: This GPS will be used when GPS_AUTO_SWITCH is 0 and used preferentially with GPS_AUTO_SWITCH = 4.\n // @Increment: 1\n // @Values: 0:FirstGPS, 1:SecondGPS\n // @User: Advanced"},"GPS_RATE_MS":{"Description":"Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.","DisplayName":"GPS update rate in milliseconds","Range":{"high":"200","low":"50"},"Units":"ms","User":"Advanced","Values":{"100":"10Hz","125":"8Hz","200":"5Hz"},"__field_text":"\n // @DisplayName: GPS update rate in milliseconds\n // @Description: Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.\n // @Units: ms\n // @Values: 100:10Hz,125:8Hz,200:5Hz\n // @Range: 50 200\n // @User: Advanced"},"GPS_RATE_MS2":{"Description":"Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.","DisplayName":"GPS 2 update rate in milliseconds","Range":{"high":"200","low":"50"},"Units":"ms","User":"Advanced","Values":{"100":"10Hz","125":"8Hz","200":"5Hz"},"__field_text":"\n // @DisplayName: GPS 2 update rate in milliseconds\n // @Description: Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.\n // @Units: ms\n // @Values: 100:10Hz,125:8Hz,200:5Hz\n // @Range: 50 200\n // @User: Advanced"},"GPS_RAW_DATA":{"Description":"Handles logging raw data; on uBlox chips that support raw data this will log RXM messages into logger; on Septentrio this will log on the equipment's SD card and when set to 2, the autopilot will try to stop logging after disarming and restart after arming","DisplayName":"Raw data logging","RebootRequired":"True","User":"Advanced","Values":{"0":"Ignore","1":"Always log","2":"Stop logging when disarmed (SBF only)","5":"Only log every five samples (uBlox only)"},"__field_text":"\n // @DisplayName: Raw data logging\n // @Description: Handles logging raw data; on uBlox chips that support raw data this will log RXM messages into logger; on Septentrio this will log on the equipment's SD card and when set to 2, the autopilot will try to stop logging after disarming and restart after arming\n // @Values: 0:Ignore,1:Always log,2:Stop logging when disarmed (SBF only),5:Only log every five samples (uBlox only)\n // @RebootRequired: True\n // @User: Advanced"},"GPS_SAVE_CFG":{"Description":"Determines whether the configuration for this GPS should be written to non-volatile memory on the GPS. Currently working for UBlox 6 series and above.","DisplayName":"Save GPS configuration","User":"Advanced","Values":{"0":"Do not save config","1":"Save config","2":"Save only when needed"},"__field_text":"\n // @DisplayName: Save GPS configuration\n // @Description: Determines whether the configuration for this GPS should be written to non-volatile memory on the GPS. Currently working for UBlox 6 series and above.\n // @Values: 0:Do not save config,1:Save config,2:Save only when needed\n // @User: Advanced"},"GPS_SBAS_MODE":{"Description":"This sets the SBAS (satellite based augmentation system) mode if available on this GPS. If set to 2 then the SBAS mode is not changed in the GPS. Otherwise the GPS will be reconfigured to enable/disable SBAS. Disabling SBAS may be worthwhile in some parts of the world where an SBAS signal is available but the baseline is too long to be useful.","DisplayName":"SBAS Mode","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"NoChange"},"__field_text":"\n // @DisplayName: SBAS Mode\n // @Description: This sets the SBAS (satellite based augmentation system) mode if available on this GPS. If set to 2 then the SBAS mode is not changed in the GPS. Otherwise the GPS will be reconfigured to enable/disable SBAS. Disabling SBAS may be worthwhile in some parts of the world where an SBAS signal is available but the baseline is too long to be useful.\n // @Values: 0:Disabled,1:Enabled,2:NoChange\n // @User: Advanced"},"GPS_SBP_LOGMASK":{"Description":"Masked with the SBP msg_type field to determine whether SBR1/SBR2 data is logged","DisplayName":"Swift Binary Protocol Logging Mask","User":"Advanced","Values":{"0":"None (0x0000)","-1":"All (0xFFFF)","-256":"External only (0xFF00)"},"__field_text":"\n // @DisplayName: Swift Binary Protocol Logging Mask\n // @Description: Masked with the SBP msg_type field to determine whether SBR1/SBR2 data is logged\n // @Values: 0:None (0x0000),-1:All (0xFFFF),-256:External only (0xFF00)\n // @User: Advanced"},"GPS_TYPE":{"Description":"GPS type of 1st GPS","DisplayName":"1st GPS type","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"AUTO","2":"uBlox","5":"NMEA","6":"SiRF","7":"HIL","8":"SwiftNav","9":"DroneCAN","10":"SBF","11":"GSOF","13":"ERB","14":"MAV","15":"NOVA","16":"HemisphereNMEA","17":"uBlox-MovingBaseline-Base","18":"uBlox-MovingBaseline-Rover","19":"MSP","20":"AllyStar","21":"ExternalAHRS","22":"DroneCAN-MovingBaseline-Base","23":"DroneCAN-MovingBaseline-Rover","24":"UnicoreNMEA","25":"UnicoreMovingBaselineNMEA","26":"SBF-DualAntenna"},"__field_text":"\n // @DisplayName: 1st GPS type\n // @Description: GPS type of 1st GPS\n // @Values: 0:None,1:AUTO,2:uBlox,5:NMEA,6:SiRF,7:HIL,8:SwiftNav,9:DroneCAN,10:SBF,11:GSOF,13:ERB,14:MAV,15:NOVA,16:HemisphereNMEA,17:uBlox-MovingBaseline-Base,18:uBlox-MovingBaseline-Rover,19:MSP,20:AllyStar,21:ExternalAHRS,22:DroneCAN-MovingBaseline-Base,23:DroneCAN-MovingBaseline-Rover,24:UnicoreNMEA,25:UnicoreMovingBaselineNMEA,26:SBF-DualAntenna\n // @RebootRequired: True\n // @User: Advanced"},"GPS_TYPE2":{"Description":"GPS type of 2nd GPS","DisplayName":"2nd GPS type","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"AUTO","2":"uBlox","5":"NMEA","6":"SiRF","7":"HIL","8":"SwiftNav","9":"DroneCAN","10":"SBF","11":"GSOF","13":"ERB","14":"MAV","15":"NOVA","16":"HemisphereNMEA","17":"uBlox-MovingBaseline-Base","18":"uBlox-MovingBaseline-Rover","19":"MSP","20":"AllyStar","21":"ExternalAHRS","22":"DroneCAN-MovingBaseline-Base","23":"DroneCAN-MovingBaseline-Rover","24":"UnicoreNMEA","25":"UnicoreMovingBaselineNMEA","26":"SBF-DualAntenna"},"__field_text":"\n // @CopyFieldsFrom: GPS_TYPE\n // @DisplayName: 2nd GPS type\n // @Description: GPS type of 2nd GPS"},"GRIP_AUTOCLOSE":{"Description":"Time in seconds that gripper close the gripper after opening; 0 to disable","DisplayName":"Gripper Autoclose time","Range":{"high":"255","low":"0.25"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Gripper Autoclose time\n // @Description: Time in seconds that gripper close the gripper after opening; 0 to disable\n // @User: Advanced\n // @Range: 0.25 255\n // @Units: s"},"GRIP_CAN_ID":{"Description":"Refer to https://docs.zubax.com/opengrab_epm_v3#UAVCAN_interface","DisplayName":"EPM UAVCAN Hardpoint ID","Range":{"high":"255","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: EPM UAVCAN Hardpoint ID\n // @Description: Refer to https://docs.zubax.com/opengrab_epm_v3#UAVCAN_interface\n // @User: Standard\n // @Range: 0 255"},"GRIP_ENABLE":{"Description":"Gripper enable/disable","DisplayName":"Gripper Enable/Disable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Gripper Enable/Disable\n // @Description: Gripper enable/disable\n // @User: Standard\n // @Values: 0:Disabled, 1:Enabled"},"GRIP_GRAB":{"Description":"PWM value in microseconds sent to Gripper to initiate grabbing the cargo","DisplayName":"Gripper Grab PWM","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Gripper Grab PWM\n // @Description: PWM value in microseconds sent to Gripper to initiate grabbing the cargo\n // @User: Advanced\n // @Range: 1000 2000\n // @Units: PWM"},"GRIP_NEUTRAL":{"Description":"PWM value in microseconds sent to grabber when not grabbing or releasing","DisplayName":"Neutral PWM","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Neutral PWM\n // @Description: PWM value in microseconds sent to grabber when not grabbing or releasing\n // @User: Advanced\n // @Range: 1000 2000\n // @Units: PWM"},"GRIP_REGRAB":{"Description":"Time in seconds that EPM gripper will regrab the cargo to ensure grip has not weakened; 0 to disable","DisplayName":"EPM Gripper Regrab interval","Range":{"high":"255","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: EPM Gripper Regrab interval\n // @Description: Time in seconds that EPM gripper will regrab the cargo to ensure grip has not weakened; 0 to disable\n // @User: Advanced\n // @Range: 0 255\n // @Units: s"},"GRIP_RELEASE":{"Description":"PWM value in microseconds sent to Gripper to release the cargo","DisplayName":"Gripper Release PWM","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Gripper Release PWM\n // @Description: PWM value in microseconds sent to Gripper to release the cargo\n // @User: Advanced\n // @Range: 1000 2000\n // @Units: PWM"},"GRIP_TYPE":{"Description":"Gripper enable/disable","DisplayName":"Gripper Type","User":"Standard","Values":{"0":"None","1":"Servo","2":"EPM"},"__field_text":"\n // @DisplayName: Gripper Type\n // @Description: Gripper enable/disable\n // @User: Standard\n // @Values: 0:None,1:Servo,2:EPM"},"GUID_OPTIONS":{"Bitmask":{"0":"Allow Arming from Transmitter","2":"Ignore pilot yaw","3":"SetAttitudeTarget interprets Thrust As Thrust","4":"Do not stabilize PositionXY","5":"Do not stabilize VelocityXY","6":"Waypoint navigation used for position targets","7":"Allow weathervaning"},"Description":"Options that can be applied to change guided mode behaviour","DisplayName":"Guided mode options","User":"Advanced","__field_text":"\n // @DisplayName: Guided mode options\n // @Description: Options that can be applied to change guided mode behaviour\n // @Bitmask: 0:Allow Arming from Transmitter,2:Ignore pilot yaw,3:SetAttitudeTarget interprets Thrust As Thrust,4:Do not stabilize PositionXY,5:Do not stabilize VelocityXY,6:Waypoint navigation used for position targets,7:Allow weathervaning\n // @User: Advanced"},"GUID_TIMEOUT":{"Description":"Guided mode timeout after which vehicle will stop or return to level if no updates are received from caller. Only applicable during any combination of velocity, acceleration, angle control, and/or angular rate control","DisplayName":"Guided mode timeout","Range":{"high":"5","low":"0.1"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Guided mode timeout\n // @Description: Guided mode timeout after which vehicle will stop or return to level if no updates are received from caller. Only applicable during any combination of velocity, acceleration, angle control, and/or angular rate control\n // @Units: s\n // @Range: 0.1 5\n // @User: Advanced"},"H_COL2YAW":{"Description":"Feed-forward compensation to automatically add rudder input when collective pitch is increased. Can be positive or negative depending on mechanics.","DisplayName":"Collective-Yaw Mixing","Increment":"0.1","Range":{"high":"2","low":"-2"},"User":"Standard","__field_text":"\n // @DisplayName: Collective-Yaw Mixing\n // @Description: Feed-forward compensation to automatically add rudder input when collective pitch is increased. Can be positive or negative depending on mechanics.\n // @Range: -2 2\n // @Increment: 0.1\n // @User: Standard"},"H_COL2_MAX":{"Description":"Highest possible servo position in PWM microseconds for swashplate 2","DisplayName":"Swash 2 Maximum Collective Pitch","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Swash 2 Maximum Collective Pitch\n // @Description: Highest possible servo position in PWM microseconds for swashplate 2\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_COL2_MIN":{"Description":"Lowest possible servo position in PWM microseconds for swashplate 2","DisplayName":"Swash 2 Minimum Collective Pitch","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Swash 2 Minimum Collective Pitch\n // @Description: Lowest possible servo position in PWM microseconds for swashplate 2\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_COL_ANG_MAX":{"Description":"Maximum collective blade pitch angle in deg that corresponds to the PWM set for maximum collective pitch (H_COL_MAX).","DisplayName":"Collective Blade Pitch Angle Maximum","Increment":"0.1","Range":{"high":"20","low":"5"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Collective Blade Pitch Angle Maximum\n // @Description: Maximum collective blade pitch angle in deg that corresponds to the PWM set for maximum collective pitch (H_COL_MAX).\n // @Range: 5 20\n // @Units: deg\n // @Increment: 0.1\n // @User: Standard"},"H_COL_ANG_MIN":{"Description":"Minimum collective blade pitch angle in deg that corresponds to the PWM set for minimum collective pitch (H_COL_MIN).","DisplayName":"Collective Blade Pitch Angle Minimum","Increment":"0.1","Range":{"high":"0","low":"-20"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Collective Blade Pitch Angle Minimum\n // @Description: Minimum collective blade pitch angle in deg that corresponds to the PWM set for minimum collective pitch (H_COL_MIN).\n // @Range: -20 0\n // @Units: deg\n // @Increment: 0.1\n // @User: Standard"},"H_COL_HOVER":{"Description":"Collective needed to hover expressed as a number from 0 to 1 where 0 is H_COL_MIN and 1 is H_COL_MAX","DisplayName":"Collective Hover Value","Range":{"high":"0.8","low":"0.3"},"User":"Advanced","__field_text":"\n // @DisplayName: Collective Hover Value\n // @Description: Collective needed to hover expressed as a number from 0 to 1 where 0 is H_COL_MIN and 1 is H_COL_MAX\n // @Range: 0.3 0.8\n // @User: Advanced"},"H_COL_LAND_MIN":{"Description":"Minimum collective blade pitch angle when landed in degrees for non-manual collective modes (i.e. modes that use altitude hold).","DisplayName":"Collective Blade Pitch Minimum when Landed","Increment":"0.1","Range":{"high":"0","low":"-5"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Collective Blade Pitch Minimum when Landed\n // @Description: Minimum collective blade pitch angle when landed in degrees for non-manual collective modes (i.e. modes that use altitude hold).\n // @Range: -5 0\n // @Units: deg\n // @Increment: 0.1\n // @User: Standard"},"H_COL_MAX":{"Description":"Highest possible servo position in PWM microseconds for the swashplate","DisplayName":"Maximum Collective Pitch","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum Collective Pitch\n // @Description: Highest possible servo position in PWM microseconds for the swashplate\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_COL_MIN":{"Description":"Lowest possible servo position in PWM microseconds for the swashplate","DisplayName":"Minimum Collective Pitch","Increment":"1","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum Collective Pitch\n // @Description: Lowest possible servo position in PWM microseconds for the swashplate\n // @Range: 1000 2000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_COL_ZERO_THRST":{"Description":"Collective blade pitch angle at zero thrust in degrees. For symetric airfoil blades this value is zero deg. For chambered airfoil blades this value is typically negative.","DisplayName":"Collective Blade Pitch at Zero Thrust","Increment":"0.1","Range":{"high":"0","low":"-5"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Collective Blade Pitch at Zero Thrust\n // @Description: Collective blade pitch angle at zero thrust in degrees. For symetric airfoil blades this value is zero deg. For chambered airfoil blades this value is typically negative.\n // @Range: -5 0\n // @Units: deg\n // @Increment: 0.1\n // @User: Standard"},"H_CYC_MAX":{"Description":"Maximum cyclic pitch angle of the swash plate. There are no units to this parameter. This should be adjusted to get the desired cyclic blade pitch for the pitch and roll axes. Typically this should be 6-7 deg (measured blade pitch angle difference between stick centered and stick max deflection.","DisplayName":"Maximum Cyclic Pitch Angle","Increment":"100","Range":{"high":"4500","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Maximum Cyclic Pitch Angle\n // @Description: Maximum cyclic pitch angle of the swash plate. There are no units to this parameter. This should be adjusted to get the desired cyclic blade pitch for the pitch and roll axes. Typically this should be 6-7 deg (measured blade pitch angle difference between stick centered and stick max deflection.\n // @Range: 0 4500\n // @Increment: 100\n // @User: Standard"},"H_DCP_SCALER":{"Description":"Scaling factor applied to the differential-collective-pitch","DisplayName":"Differential-Collective-Pitch Scaler","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Differential-Collective-Pitch Scaler\n // @Description: Scaling factor applied to the differential-collective-pitch\n // @Range: 0 1\n // @User: Standard"},"H_DCP_TRIM":{"Description":"Removes I term bias due to center of gravity offsets or discrepancies between rotors in swashplate setup. If DCP axis has I term bias while hovering in calm winds, use value of bias in DCP_TRIM to re-center I term.","DisplayName":"Differential Collective Pitch Trim","Increment":"0.01","Range":{"high":"0.2","low":"-0.2"},"User":"Standard","__field_text":"\n // @DisplayName: Differential Collective Pitch Trim\n // @Description: Removes I term bias due to center of gravity offsets or discrepancies between rotors in swashplate setup. If DCP axis has I term bias while hovering in calm winds, use value of bias in DCP_TRIM to re-center I term.\n // @Range: -0.2 0.2\n // @Increment: 0.01\n // @User: Standard"},"H_DCP_YAW":{"Description":"Feed-forward compensation to automatically add yaw input when differential collective pitch is applied. Disabled for intermeshing mode.","DisplayName":"Differential-Collective-Pitch Yaw Mixing","Increment":"0.1","Range":{"high":"10","low":"-10"},"User":"Standard","__field_text":"\n // @DisplayName: Differential-Collective-Pitch Yaw Mixing\n // @Description: Feed-forward compensation to automatically add yaw input when differential collective pitch is applied. Disabled for intermeshing mode.\n // @Range: -10 10\n // @Increment: 0.1\n // @User: Standard"},"H_DDFP_BAT_IDX":{"Description":"Which battery monitor should be used for doing compensation","DisplayName":"DDFP Tail Rotor Battery compensation index","User":"Standard","Values":{"0":"First battery","1":"Second battery"},"__field_text":"\n // @DisplayName: DDFP Tail Rotor Battery compensation index\n // @Description: Which battery monitor should be used for doing compensation\n // @Values: 0:First battery, 1:Second battery\n // @User: Standard"},"H_DDFP_BAT_V_MAX":{"Description":"Battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled","DisplayName":"Battery voltage compensation maximum voltage","Range":{"high":"53","low":"6"},"Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Battery voltage compensation maximum voltage\n // @Description: Battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled\n // @Range: 6 53\n // @Units: V\n // @User: Standard"},"H_DDFP_BAT_V_MIN":{"Description":"Battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.3 * cell count, 0 = Disabled","DisplayName":"Battery voltage compensation minimum voltage","Range":{"high":"42","low":"6"},"Units":"V","User":"Standard","__field_text":"\n // @DisplayName: Battery voltage compensation minimum voltage\n // @Description: Battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.3 * cell count, 0 = Disabled\n // @Range: 6 42\n // @Units: V\n // @User: Standard"},"H_DDFP_SPIN_MAX":{"Description":"Point at which the thrust saturates expressed as a number from 0 to 1 in the entire output range","DisplayName":"DDFP Tail Rotor Motor Spin maximum","User":"Standard","Values":{"0.9":"Low","0.95":"Default","1.0":"High"},"__field_text":"\n // @DisplayName: DDFP Tail Rotor Motor Spin maximum\n // @Description: Point at which the thrust saturates expressed as a number from 0 to 1 in the entire output range\n // @Values: 0.9:Low, 0.95:Default, 1.0:High\n // @User: Standard"},"H_DDFP_SPIN_MIN":{"Description":"Point at which the thrust starts expressed as a number from 0 to 1 in the entire output range.","DisplayName":"DDFP Tail Rotor Motor Spin minimum","User":"Standard","Values":{"0.0":"Low","0.15":"Default","0.3":"High"},"__field_text":"\n // @DisplayName: DDFP Tail Rotor Motor Spin minimum\n // @Description: Point at which the thrust starts expressed as a number from 0 to 1 in the entire output range.\n // @Values: 0.0:Low, 0.15:Default, 0.3:High\n // @User: Standard"},"H_DDFP_THST_EXPO":{"Description":"Tail rotor DDFP motor thrust curve exponent (0.0 for linear to 1.0 for second order curve)","DisplayName":"DDFP Tail Rotor Thrust Curve Expo","Range":{"high":"1","low":"-1"},"User":"Standard","__field_text":"\n // @DisplayName: DDFP Tail Rotor Thrust Curve Expo\n // @Description: Tail rotor DDFP motor thrust curve exponent (0.0 for linear to 1.0 for second order curve)\n // @Range: -1 1\n // @User: Standard"},"H_DUAL_MODE":{"Description":"Sets the dual mode of the heli, either as tandem, transverse, or intermeshing/coaxial.","DisplayName":"Dual Mode","User":"Standard","Values":{"0":"Longitudinal","1":"Transverse","2":"Intermeshing/Coaxial"},"__field_text":"\n // @DisplayName: Dual Mode\n // @Description: Sets the dual mode of the heli, either as tandem, transverse, or intermeshing/coaxial.\n // @Values: 0:Longitudinal, 1:Transverse, 2:Intermeshing/Coaxial\n // @User: Standard"},"H_FLYBAR_MODE":{"Description":"Flybar present or not. Affects attitude controller used during ACRO flight mode","DisplayName":"Flybar Mode Selector","User":"Standard","Values":{"0":"NoFlybar","1":"Flybar"},"__field_text":"\n // @DisplayName: Flybar Mode Selector\n // @Description: Flybar present or not. Affects attitude controller used during ACRO flight mode\n // @Values: 0:NoFlybar,1:Flybar\n // @User: Standard"},"H_GYR_GAIN":{"Description":"PWM in microseconds sent to external gyro on an servo/output whose function is Motor7 when tail type is Servo w/ ExtGyro","DisplayName":"External Gyro Gain","Increment":"1","Range":{"high":"1000","low":"0"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: External Gyro Gain\n // @Description: PWM in microseconds sent to external gyro on an servo/output whose function is Motor7 when tail type is Servo w/ ExtGyro\n // @Range: 0 1000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_GYR_GAIN_ACRO":{"Description":"PWM in microseconds sent to external gyro on an servo/output whose function is Motor7 when tail type is Servo w/ ExtGyro in mode ACRO instead of H_GYR_GAIN. A value of zero means to use H_GYR_GAIN","DisplayName":"ACRO External Gyro Gain","Increment":"1","Range":{"high":"1000","low":"0"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: ACRO External Gyro Gain\n // @Description: PWM in microseconds sent to external gyro on an servo/output whose function is Motor7 when tail type is Servo w/ ExtGyro in mode ACRO instead of H_GYR_GAIN. A value of zero means to use H_GYR_GAIN\n // @Range: 0 1000\n // @Units: PWM\n // @Increment: 1\n // @User: Standard"},"H_HOVER_LEARN":{"Description":"Enable/Disable automatic learning of hover collective","DisplayName":"Hover Value Learning","User":"Advanced","Values":{"0":"Disabled","1":"Learn","2":"Learn and Save"},"__field_text":"\n // @DisplayName: Hover Value Learning\n // @Description: Enable/Disable automatic learning of hover collective\n // @Values: 0:Disabled, 1:Learn, 2:Learn and Save\n // @User: Advanced"},"H_OPTIONS":{"Bitmask":{"0":"Use Leaky I"},"Description":"Bitmask of heli options. Bit 0 changes how the pitch, roll, and yaw axis integrator term is managed for low speed and takeoff/landing. In AC 4.0 and earlier, scheme uses a leaky integrator for ground speeds less than 5 m/s and won't let the steady state integrator build above ILMI. The integrator is allowed to build to the ILMI value when it is landed. The other integrator management scheme bases integrator limiting on takeoff and landing. Whenever the aircraft is landed the integrator is set to zero. When the aicraft is airborne, the integrator is only limited by IMAX. ","DisplayName":"Heli_Options","User":"Standard","__field_text":"\n // @DisplayName: Heli_Options\n // @Description: Bitmask of heli options. Bit 0 changes how the pitch, roll, and yaw axis integrator term is managed for low speed and takeoff/landing. In AC 4.0 and earlier, scheme uses a leaky integrator for ground speeds less than 5 m/s and won't let the steady state integrator build above ILMI. The integrator is allowed to build to the ILMI value when it is landed. The other integrator management scheme bases integrator limiting on takeoff and landing. Whenever the aircraft is landed the integrator is set to zero. When the aicraft is airborne, the integrator is only limited by IMAX. \n // @Bitmask: 0:Use Leaky I\n // @User: Standard"},"H_RSC_AROT_ENG_T":{"Description":"amount of seconds to move throttle output from idle to throttle curve position during manual autorotations","DisplayName":"Time for in-flight power re-engagement","Increment":"0.5","Range":{"high":"10","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Time for in-flight power re-engagement\n // @Description: amount of seconds to move throttle output from idle to throttle curve position during manual autorotations\n // @Range: 0 10\n // @Units: %\n // @Increment: 0.5\n // @User: Standard"},"H_RSC_AROT_IDLE":{"Description":"Idle throttle used for all RSC modes. For external governors, this would be set to signal it to enable fast spool-up, when bailing out of an autorotation. Set 0 to disable. If also using a tail rotor of type DDVP with external governor then this value must lie within the autorotation window of both governors.","DisplayName":"Idle Throttle Percentage during Autorotation","Increment":"1","Range":{"high":"40","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Idle Throttle Percentage during Autorotation\n // @Description: Idle throttle used for all RSC modes. For external governors, this would be set to signal it to enable fast spool-up, when bailing out of an autorotation. Set 0 to disable. If also using a tail rotor of type DDVP with external governor then this value must lie within the autorotation window of both governors.\n // @Range: 0 40\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_AROT_MN_EN":{"Description":"Allows you to enable (1) or disable (0) the manual autorotation capability.","DisplayName":"Enable Manual Autorotations","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable Manual Autorotations\n // @Description: Allows you to enable (1) or disable (0) the manual autorotation capability.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"H_RSC_CLDWN_TIME":{"Description":"Will provide a fast idle for engine cooldown by raising the Ground Idle speed setting by 50% for the number of seconds the timer is set for. A setting of zero disables the fast idle. This feature will only apply after the runup complete has been declared. This will not extend the time before ground idle is declared, which triggers engine shutdown for autonomous landings.","DisplayName":"Cooldown Time","Increment":"1","Range":{"high":"120","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Cooldown Time\n // @Description: Will provide a fast idle for engine cooldown by raising the Ground Idle speed setting by 50% for the number of seconds the timer is set for. A setting of zero disables the fast idle. This feature will only apply after the runup complete has been declared. This will not extend the time before ground idle is declared, which triggers engine shutdown for autonomous landings.\n // @Range: 0 120\n // @Units: s\n // @Increment: 1\n // @User: Standard"},"H_RSC_CRITICAL":{"Description":"Percentage of normal rotor speed where flight is no longer possible. However currently the rotor runup/rundown is estimated using the RSC_RUNUP_TIME parameter. Estimated rotor speed increases/decreases between 0 (rotor stopped) to 1 (rotor at normal speed) in the RSC_RUNUP_TIME in seconds. This parameter should be set so that the estimated rotor speed goes below critical in approximately 3 seconds. So if you had a 10 second runup time then set RSC_CRITICAL to 70%.","DisplayName":"Critical Rotor Speed","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Critical Rotor Speed\n // @Description: Percentage of normal rotor speed where flight is no longer possible. However currently the rotor runup/rundown is estimated using the RSC_RUNUP_TIME parameter. Estimated rotor speed increases/decreases between 0 (rotor stopped) to 1 (rotor at normal speed) in the RSC_RUNUP_TIME in seconds. This parameter should be set so that the estimated rotor speed goes below critical in approximately 3 seconds. So if you had a 10 second runup time then set RSC_CRITICAL to 70%.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_GOV_COMP":{"Description":"Adjusts the autothrottle governor torque compensator that determines how fast the governor will adjust the base torque reference to compensate for changes in density altitude. If RPM is low or high by more than 2-5 RPM, increase this setting by 1% at a time until the governor speed matches your RPM setting. Setting the compensator too high can result in surging and throttle \"hunting\". Do not make large adjustments at one time","DisplayName":"Governor Torque Compensator","Increment":"0.1","Range":{"high":"70","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Governor Torque Compensator\n // @Description: Adjusts the autothrottle governor torque compensator that determines how fast the governor will adjust the base torque reference to compensate for changes in density altitude. If RPM is low or high by more than 2-5 RPM, increase this setting by 1% at a time until the governor speed matches your RPM setting. Setting the compensator too high can result in surging and throttle \"hunting\". Do not make large adjustments at one time\n // @Range: 0 70\n // @Units: %\n // @Increment: 0.1\n // @User: Standard"},"H_RSC_GOV_DROOP":{"Description":"AutoThrottle governor droop response under load, normal settings of 0-50%. Higher value is quicker response to large speed changes due to load but may cause surging. Adjust this to be as aggressive as possible without getting surging or RPM over-run when the governor responds to large load changes on the rotor system","DisplayName":"Governor Droop Compensator","Increment":"0.1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Governor Droop Compensator\n // @Description: AutoThrottle governor droop response under load, normal settings of 0-50%. Higher value is quicker response to large speed changes due to load but may cause surging. Adjust this to be as aggressive as possible without getting surging or RPM over-run when the governor responds to large load changes on the rotor system\n // @Range: 0 100\n // @Units: %\n // @Increment: 0.1\n // @User: Standard"},"H_RSC_GOV_FF":{"Description":"Feedforward governor gain to throttle response during sudden loading/unloading of the rotor system. If RPM drops excessively during full collective climb with the droop response set correctly, increase the governor feedforward.","DisplayName":"Governor Feedforward","Increment":"0.1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Governor Feedforward\n // @Description: Feedforward governor gain to throttle response during sudden loading/unloading of the rotor system. If RPM drops excessively during full collective climb with the droop response set correctly, increase the governor feedforward.\n // @Range: 0 100\n // @Units: %\n // @Increment: 0.1\n // @User: Standard"},"H_RSC_GOV_RANGE":{"Description":"RPM range +/- governor rpm reference setting where governor is operational. If speed sensor fails or rpm falls outside of this range, the governor will disengage and return to throttle curve. Recommended range is 100","DisplayName":"Governor Operational Range","Increment":"10","Range":{"high":"200","low":"50"},"Units":"RPM","User":"Standard","__field_text":"\n // @DisplayName: Governor Operational Range\n // @Description: RPM range +/- governor rpm reference setting where governor is operational. If speed sensor fails or rpm falls outside of this range, the governor will disengage and return to throttle curve. Recommended range is 100\n // @Range: 50 200\n // @Units: RPM\n // @Increment: 10\n // @User: Standard"},"H_RSC_GOV_RPM":{"Description":"Main rotor RPM that governor maintains when engaged","DisplayName":"Rotor RPM Setting","Increment":"10","Range":{"high":"3500","low":"800"},"Units":"RPM","User":"Standard","__field_text":"\n // @DisplayName: Rotor RPM Setting\n // @Description: Main rotor RPM that governor maintains when engaged\n // @Range: 800 3500\n // @Units: RPM\n // @Increment: 10\n // @User: Standard"},"H_RSC_GOV_TORQUE":{"Description":"Adjusts the engine's percentage of torque rise on autothrottle during ramp-up to governor speed. The torque rise will determine how fast the rotor speed will ramp up when rotor speed reaches 50% of the rotor RPM setting. The sequence of events engaging the governor is as follows: Throttle ramp time will engage the clutch and start the main rotor turning. The collective should be at flat pitch and the throttle curve set to provide at least 50% of normal RPM at flat pitch. The autothrottle torque limiter will automatically activate and start accelerating the main rotor. If the autothrottle consistently fails to accelerate the main rotor during ramp-in due to engine tune or other factors, then increase the torque limiter setting. NOTE: throttle ramp time and throttle curve should be tuned using RSC_MODE Throttle Curve before using RSC_MODE AutoThrottle","DisplayName":"Governor Torque Limiter","Increment":"1","Range":{"high":"60","low":"10"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Governor Torque Limiter\n // @Description: Adjusts the engine's percentage of torque rise on autothrottle during ramp-up to governor speed. The torque rise will determine how fast the rotor speed will ramp up when rotor speed reaches 50% of the rotor RPM setting. The sequence of events engaging the governor is as follows: Throttle ramp time will engage the clutch and start the main rotor turning. The collective should be at flat pitch and the throttle curve set to provide at least 50% of normal RPM at flat pitch. The autothrottle torque limiter will automatically activate and start accelerating the main rotor. If the autothrottle consistently fails to accelerate the main rotor during ramp-in due to engine tune or other factors, then increase the torque limiter setting. NOTE: throttle ramp time and throttle curve should be tuned using RSC_MODE Throttle Curve before using RSC_MODE AutoThrottle\n // @Range: 10 60\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_IDLE":{"Description":"Throttle output (HeliRSC Servo) in percent while armed but motor interlock is disabled (throttle hold on). FOR COMBUSTION ENGINES. Sets the engine ground idle throttle percentage with clutch disengaged. This must be set to zero for electric helicopters under most situations. If the ESC has an autorotation window this can be set to keep the autorotation window open in the ESC. Consult the operating manual for your ESC to set it properly for this purpose","DisplayName":"Throttle Output at Idle","Increment":"1","Range":{"high":"50","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Output at Idle\n // @Description: Throttle output (HeliRSC Servo) in percent while armed but motor interlock is disabled (throttle hold on). FOR COMBUSTION ENGINES. Sets the engine ground idle throttle percentage with clutch disengaged. This must be set to zero for electric helicopters under most situations. If the ESC has an autorotation window this can be set to keep the autorotation window open in the ESC. Consult the operating manual for your ESC to set it properly for this purpose\n // @Range: 0 50\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_MODE":{"Description":"Selects the type of rotor speed control used to determine throttle output to the HeliRSC servo channel when motor interlock is enabled (throttle hold off). RC Passthrough sends the input from the RC Motor Interlock channel as throttle output. External Gov SetPoint sends the RSC SetPoint parameter value as throttle output. Throttle Curve uses the 5 point throttle curve to determine throttle output based on the collective output. AutoThrottle requires a rotor speed sensor, contains an advanced autothrottle governor and is primarily for piston and turbine engines. WARNING: Throttle ramp time and throttle curve MUST be tuned properly using Throttle Curve mode before using AutoThrottle","DisplayName":"Rotor Speed Control Mode","User":"Standard","Values":{"1":"RC Passthrough","2":"External Gov SetPoint","3":"Throttle Curve","4":"AutoThrottle"},"__field_text":"\n // @DisplayName: Rotor Speed Control Mode\n // @Description: Selects the type of rotor speed control used to determine throttle output to the HeliRSC servo channel when motor interlock is enabled (throttle hold off). RC Passthrough sends the input from the RC Motor Interlock channel as throttle output. External Gov SetPoint sends the RSC SetPoint parameter value as throttle output. Throttle Curve uses the 5 point throttle curve to determine throttle output based on the collective output. AutoThrottle requires a rotor speed sensor, contains an advanced autothrottle governor and is primarily for piston and turbine engines. WARNING: Throttle ramp time and throttle curve MUST be tuned properly using Throttle Curve mode before using AutoThrottle\n // @Values: 1:RC Passthrough, 2:External Gov SetPoint, 3:Throttle Curve, 4:AutoThrottle\n // @User: Standard"},"H_RSC_RAMP_TIME":{"Description":"Time in seconds for throttle output (HeliRSC servo) to ramp from ground idle (RSC_IDLE) to flight idle throttle setting when motor interlock is enabled (throttle hold off).","DisplayName":"Throttle Ramp Time","Range":{"high":"60","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Throttle Ramp Time\n // @Description: Time in seconds for throttle output (HeliRSC servo) to ramp from ground idle (RSC_IDLE) to flight idle throttle setting when motor interlock is enabled (throttle hold off).\n // @Range: 0 60\n // @Units: s\n // @User: Standard"},"H_RSC_RUNUP_TIME":{"Description":"Actual time in seconds for the main rotor to reach full speed after motor interlock is enabled (throttle hold off). Must be at least one second longer than the Throttle Ramp Time that is set with RSC_RAMP_TIME. WARNING: For AutoThrottle users with piston and turbine engines it is VERY important to know how long it takes to warm up your engine and reach full rotor speed when throttle switch is turned ON. This timer should be set for at least the amount of time it takes to get your helicopter to full flight power, ready for takeoff. Failure to heed this warning could result in the auto-takeoff mode attempting to lift up into hover before the engine has reached full power, and subsequent loss of control","DisplayName":"Rotor Runup Time","Range":{"high":"60","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Rotor Runup Time\n // @Description: Actual time in seconds for the main rotor to reach full speed after motor interlock is enabled (throttle hold off). Must be at least one second longer than the Throttle Ramp Time that is set with RSC_RAMP_TIME. WARNING: For AutoThrottle users with piston and turbine engines it is VERY important to know how long it takes to warm up your engine and reach full rotor speed when throttle switch is turned ON. This timer should be set for at least the amount of time it takes to get your helicopter to full flight power, ready for takeoff. Failure to heed this warning could result in the auto-takeoff mode attempting to lift up into hover before the engine has reached full power, and subsequent loss of control\n // @Range: 0 60\n // @Units: s\n // @User: Standard"},"H_RSC_SETPOINT":{"Description":"Throttle (HeliRSC Servo) output in percent to the external motor governor when motor interlock enabled (throttle hold off).","DisplayName":"External Motor Governor Setpoint","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: External Motor Governor Setpoint\n // @Description: Throttle (HeliRSC Servo) output in percent to the external motor governor when motor interlock enabled (throttle hold off).\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_SLEWRATE":{"Description":"This controls the maximum rate at which the throttle output (HeliRSC servo) can change, as a percentage per second. A value of 100 means the throttle can change over its full range in one second. A value of zero gives unlimited slew rate.","DisplayName":"Throttle Slew Rate","Increment":"10","Range":{"high":"500","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Throttle Slew Rate\n // @Description: This controls the maximum rate at which the throttle output (HeliRSC servo) can change, as a percentage per second. A value of 100 means the throttle can change over its full range in one second. A value of zero gives unlimited slew rate.\n // @Range: 0 500\n // @Increment: 10\n // @User: Standard"},"H_RSC_THRCRV_0":{"Description":"Sets the throttle output (HeliRSC servo) in percent for the throttle curve at the minimum collective pitch position. The 0 percent collective is defined by H_COL_MIN. Example: if the setup has -2 degree to +10 degree collective pitch setup, this setting would correspond to -2 degree of pitch.","DisplayName":"Throttle Curve at 0% Coll","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Curve at 0% Coll\n // @Description: Sets the throttle output (HeliRSC servo) in percent for the throttle curve at the minimum collective pitch position. The 0 percent collective is defined by H_COL_MIN. Example: if the setup has -2 degree to +10 degree collective pitch setup, this setting would correspond to -2 degree of pitch.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_THRCRV_100":{"Description":"Sets the throttle output (HeliRSC servo) in percent for the throttle curve at the minimum collective pitch position. The 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, this setting would correspond to +10 degree of pitch.","DisplayName":"Throttle Curve at 100% Coll","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Curve at 100% Coll\n // @Description: Sets the throttle output (HeliRSC servo) in percent for the throttle curve at the minimum collective pitch position. The 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, this setting would correspond to +10 degree of pitch.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_THRCRV_25":{"Description":"Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 25% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 25% of 12 degrees is 3 degrees, so this setting would correspond to +1 degree of pitch.","DisplayName":"Throttle Curve at 25% Coll","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Curve at 25% Coll\n // @Description: Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 25% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 25% of 12 degrees is 3 degrees, so this setting would correspond to +1 degree of pitch.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_THRCRV_50":{"Description":"Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 50% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 50% of 12 degrees is 6 degrees, so this setting would correspond to +4 degree of pitch.","DisplayName":"Throttle Curve at 50% Coll","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Curve at 50% Coll\n // @Description: Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 50% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 50% of 12 degrees is 6 degrees, so this setting would correspond to +4 degree of pitch.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_RSC_THRCRV_75":{"Description":"Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 75% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 75% of 12 degrees is 9 degrees, so this setting would correspond to +7 degree of pitch.","DisplayName":"Throttle Curve at 75% Coll","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Throttle Curve at 75% Coll\n // @Description: Sets the throttle output (HeliRSC servo) in percent for the throttle curve at 75% of full collective travel where he 0 percent collective is defined by H_COL_MIN and 100 percent collective is defined by H_COL_MAX. Example: if the setup has -2 degree to +10 degree collective pitch setup, the total range is 12 degrees. 75% of 12 degrees is 9 degrees, so this setting would correspond to +7 degree of pitch.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_SV_MAN":{"Description":"Manual servo override for swash set-up. Must be 0 (Disabled) for flight!","DisplayName":"Manual Servo Mode","User":"Standard","Values":{"0":"Disabled","1":"Passthrough","2":"Max collective","3":"Zero thrust collective","4":"Min collective"},"__field_text":"\n // @DisplayName: Manual Servo Mode\n // @Description: Manual servo override for swash set-up. Must be 0 (Disabled) for flight!\n // @Values: 0:Disabled,1:Passthrough,2:Max collective,3:Zero thrust collective,4:Min collective\n // @User: Standard"},"H_SV_TEST":{"Description":"Number of cycles to run servo test on boot-up","DisplayName":"Boot-up Servo Test Cycles","Increment":"1","Range":{"high":"10","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Boot-up Servo Test Cycles\n // @Description: Number of cycles to run servo test on boot-up\n // @Range: 0 10\n // @Increment: 1\n // @User: Standard"},"H_SW2_COL_DIR":{"Description":"Direction collective moves for positive pitch. 0 for Normal, 1 for Reversed","DisplayName":"Swash 2 Collective Direction","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Swash 2 Collective Direction\n // @Description: Direction collective moves for positive pitch. 0 for Normal, 1 for Reversed\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"H_SW2_H3_ENABLE":{"Description":"Automatically set when H3 generic swash type is selected for swashplate 2. Do not set manually.","DisplayName":"Swash 2 H3 Generic Enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Swash 2 H3 Generic Enable\n // @Description: Automatically set when H3 generic swash type is selected for swashplate 2. Do not set manually.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"H_SW2_H3_PHANG":{"Description":"Only for H3 swashplate. If pitching the swash forward induces a roll, this can be correct the problem","DisplayName":"Swash 2 H3 Generic Phase Angle Comp","Increment":"1","Range":{"high":"30","low":"-30"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 2 H3 Generic Phase Angle Comp\n // @Description: Only for H3 swashplate. If pitching the swash forward induces a roll, this can be correct the problem\n // @Range: -30 30\n // @Units: deg\n // @User: Advanced\n // @Increment: 1"},"H_SW2_H3_SV1_POS":{"Description":"Azimuth position on swashplate for servo 1 with the front of the heli being 0 deg","DisplayName":"Swash 2 H3 Generic Servo 1 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 2 H3 Generic Servo 1 Position\n // @Description: Azimuth position on swashplate for servo 1 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced"},"H_SW2_H3_SV2_POS":{"Description":"Azimuth position on swashplate 2 for servo 2 with the front of the heli being 0 deg","DisplayName":"Swash 2 H3 Generic Servo 2 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 2 H3 Generic Servo 2 Position\n // @Description: Azimuth position on swashplate 2 for servo 2 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced"},"H_SW2_H3_SV3_POS":{"Description":"Azimuth position on swashplate 2 for servo 3 with the front of the heli being 0 deg","DisplayName":"Swash 2 H3 Generic Servo 3 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 2 H3 Generic Servo 3 Position\n // @Description: Azimuth position on swashplate 2 for servo 3 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced"},"H_SW2_LIN_SVO":{"Description":"This linearizes the swashplate 2 servo's mechanical output to account for nonlinear output due to arm rotation. This requires a specific setup procedure to work properly. The servo arm must be centered on the mechanical throw at the servo trim position and the servo trim position kept as close to 1500 as possible. Leveling the swashplate can only be done through the pitch links. See the ardupilot wiki for more details on setup.","DisplayName":"Linearize Swash 2 Servos","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Linearize Swash 2 Servos\n // @Description: This linearizes the swashplate 2 servo's mechanical output to account for nonlinear output due to arm rotation. This requires a specific setup procedure to work properly. The servo arm must be centered on the mechanical throw at the servo trim position and the servo trim position kept as close to 1500 as possible. Leveling the swashplate can only be done through the pitch links. See the ardupilot wiki for more details on setup.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"H_SW2_TYPE":{"Description":"H3 is generic, three-servo only. H3_120/H3_140 plates have Motor1 left side, Motor2 right side, Motor3 elevator in rear. HR3_120/HR3_140 have Motor1 right side, Motor2 left side, Motor3 elevator in front - use H3_120/H3_140 and reverse servo and collective directions as necessary. For all H3_90 swashplates use H4_90 and don't use servo output for the missing servo. For H4-90 Motors1&2 are left/right respectively, Motors3&4 are rear/front respectively. For H4-45 Motors1&2 are LF/RF, Motors3&4 are LR/RR ","DisplayName":"Swash 2 Type","User":"Standard","Values":{"0":"H3 Generic","1":"H1 non-CPPM","2":"H3_140","3":"H3_120","4":"H4_90","5":"H4_45"},"__field_text":"\n // @DisplayName: Swash 2 Type\n // @Description: H3 is generic, three-servo only. H3_120/H3_140 plates have Motor1 left side, Motor2 right side, Motor3 elevator in rear. HR3_120/HR3_140 have Motor1 right side, Motor2 left side, Motor3 elevator in front - use H3_120/H3_140 and reverse servo and collective directions as necessary. For all H3_90 swashplates use H4_90 and don't use servo output for the missing servo. For H4-90 Motors1&2 are left/right respectively, Motors3&4 are rear/front respectively. For H4-45 Motors1&2 are LF/RF, Motors3&4 are LR/RR \n // @Values: 0:H3 Generic,1:H1 non-CPPM,2:H3_140,3:H3_120,4:H4_90,5:H4_45\n // @User: Standard"},"H_SW_COL_DIR":{"Description":"Direction collective moves for positive pitch. 0 for Normal, 1 for Reversed","DisplayName":"Swash 1 Collective Direction","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Swash 1 Collective Direction\n // @Description: Direction collective moves for positive pitch. 0 for Normal, 1 for Reversed\n // @Values: 0:Normal,1:Reversed\n // @User: Standard","path":"AP_MotorsHeli_Dual"},"H_SW_H3_ENABLE":{"Description":"Automatically set when H3 generic swash type is selected for swashplate 1. Do not set manually.","DisplayName":"Swash 1 H3 Generic Enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Swash 1 H3 Generic Enable\n // @Description: Automatically set when H3 generic swash type is selected for swashplate 1. Do not set manually.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced","path":"AP_MotorsHeli_Dual"},"H_SW_H3_PHANG":{"Description":"Only for H3 swashplate. If pitching the swash forward induces a roll, this can be correct the problem","DisplayName":"Swash 1 H3 Generic Phase Angle Comp","Increment":"1","Range":{"high":"30","low":"-30"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 1 H3 Generic Phase Angle Comp\n // @Description: Only for H3 swashplate. If pitching the swash forward induces a roll, this can be correct the problem\n // @Range: -30 30\n // @Units: deg\n // @User: Advanced\n // @Increment: 1","path":"AP_MotorsHeli_Dual"},"H_SW_H3_SV1_POS":{"Description":"Azimuth position on swashplate for servo 1 with the front of the heli being 0 deg","DisplayName":"Swash 1 H3 Generic Servo 1 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 1 H3 Generic Servo 1 Position\n // @Description: Azimuth position on swashplate for servo 1 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced","path":"AP_MotorsHeli_Dual"},"H_SW_H3_SV2_POS":{"Description":"Azimuth position on swashplate 1 for servo 2 with the front of the heli being 0 deg","DisplayName":"Swash 1 H3 Generic Servo 2 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 1 H3 Generic Servo 2 Position\n // @Description: Azimuth position on swashplate 1 for servo 2 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced","path":"AP_MotorsHeli_Dual"},"H_SW_H3_SV3_POS":{"Description":"Azimuth position on swashplate 1 for servo 3 with the front of the heli being 0 deg","DisplayName":"Swash 1 H3 Generic Servo 3 Position","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Swash 1 H3 Generic Servo 3 Position\n // @Description: Azimuth position on swashplate 1 for servo 3 with the front of the heli being 0 deg\n // @Range: -180 180\n // @Units: deg\n // @User: Advanced","path":"AP_MotorsHeli_Dual"},"H_SW_LIN_SVO":{"Description":"This linearizes the swashplate 1 servo's mechanical output to account for nonlinear output due to arm rotation. This requires a specific setup procedure to work properly. The servo arm must be centered on the mechanical throw at the servo trim position and the servo trim position kept as close to 1500 as possible. Leveling the swashplate can only be done through the pitch links. See the ardupilot wiki for more details on setup.","DisplayName":"Linearize Swash 1 Servos","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Linearize Swash 1 Servos\n // @Description: This linearizes the swashplate 1 servo's mechanical output to account for nonlinear output due to arm rotation. This requires a specific setup procedure to work properly. The servo arm must be centered on the mechanical throw at the servo trim position and the servo trim position kept as close to 1500 as possible. Leveling the swashplate can only be done through the pitch links. See the ardupilot wiki for more details on setup.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard","path":"AP_MotorsHeli_Dual"},"H_SW_TYPE":{"Description":"H3 is generic, three-servo only. H3_120/H3_140 plates have Motor1 left side, Motor2 right side, Motor3 elevator in rear. HR3_120/HR3_140 have Motor1 right side, Motor2 left side, Motor3 elevator in front - use H3_120/H3_140 and reverse servo and collective directions as necessary. For all H3_90 swashplates use H4_90 and don't use servo output for the missing servo. For H4-90 Motors1&2 are left/right respectively, Motors3&4 are rear/front respectively. For H4-45 Motors1&2 are LF/RF, Motors3&4 are LR/RR ","DisplayName":"Swash 1 Type","User":"Standard","Values":{"0":"H3 Generic","1":"H1 non-CPPM","2":"H3_140","3":"H3_120","4":"H4_90","5":"H4_45"},"__field_text":"\n // @DisplayName: Swash 1 Type\n // @Description: H3 is generic, three-servo only. H3_120/H3_140 plates have Motor1 left side, Motor2 right side, Motor3 elevator in rear. HR3_120/HR3_140 have Motor1 right side, Motor2 left side, Motor3 elevator in front - use H3_120/H3_140 and reverse servo and collective directions as necessary. For all H3_90 swashplates use H4_90 and don't use servo output for the missing servo. For H4-90 Motors1&2 are left/right respectively, Motors3&4 are rear/front respectively. For H4-45 Motors1&2 are LF/RF, Motors3&4 are LR/RR \n // @Values: 0:H3 Generic,1:H1 non-CPPM,2:H3_140,3:H3_120,4:H4_90,5:H4_45\n // @User: Standard","path":"AP_MotorsHeli_Dual"},"H_TAIL_SPEED":{"Description":"Direct drive, variable pitch tail ESC speed in percent output to the tail motor esc (HeliTailRSC Servo) when motor interlock enabled (throttle hold off) and speed fully ramped up after spoolup.","DisplayName":"DDVP Tail ESC speed","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: DDVP Tail ESC speed\n // @Description: Direct drive, variable pitch tail ESC speed in percent output to the tail motor esc (HeliTailRSC Servo) when motor interlock enabled (throttle hold off) and speed fully ramped up after spoolup.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"H_TAIL_TYPE":{"Description":"Tail type selection. Servo Only uses tail rotor pitch to provide yaw control (including stabilization) via an output assigned to Motor4. Servo with External Gyro uses an external gyro to control tail rotor pitch via a servo. Yaw control without stabilization is passed to the external gyro via the output assigned to Motor4. Direct Drive Variable Pitch(DDVP) is used for tails that have a motor whose ESC is connected to an output with function HeliTailRSC. Tail pitch is still accomplished with a servo on an output assigned to Motor4 function. Direct Drive Fixed Pitch (DDFP) CW is used for helicopters with a rotor that spins clockwise when viewed from above with a motor whose ESC is controlled by an output whose function is Motor4. Direct Drive Fixed Pitch (DDFP) CCW is used for helicopters with a rotor that spins counter clockwise when viewed from above with a motor whose ESC is controlled by an output whose function is Motor4. In both DDFP cases, no servo is used for the tail and the tail motor esc on Motor4 output is used to control the yaw axis using motor speed.","DisplayName":"Tail Type","User":"Standard","Values":{"0":"Servo only","1":"Servo with ExtGyro","2":"DirectDrive VarPitch","3":"DirectDrive FixedPitch CW","4":"DirectDrive FixedPitch CCW"},"__field_text":"\n // @DisplayName: Tail Type\n // @Description: Tail type selection. Servo Only uses tail rotor pitch to provide yaw control (including stabilization) via an output assigned to Motor4. Servo with External Gyro uses an external gyro to control tail rotor pitch via a servo. Yaw control without stabilization is passed to the external gyro via the output assigned to Motor4. Direct Drive Variable Pitch(DDVP) is used for tails that have a motor whose ESC is connected to an output with function HeliTailRSC. Tail pitch is still accomplished with a servo on an output assigned to Motor4 function. Direct Drive Fixed Pitch (DDFP) CW is used for helicopters with a rotor that spins clockwise when viewed from above with a motor whose ESC is controlled by an output whose function is Motor4. Direct Drive Fixed Pitch (DDFP) CCW is used for helicopters with a rotor that spins counter clockwise when viewed from above with a motor whose ESC is controlled by an output whose function is Motor4. In both DDFP cases, no servo is used for the tail and the tail motor esc on Motor4 output is used to control the yaw axis using motor speed.\n // @Values: 0:Servo only,1:Servo with ExtGyro,2:DirectDrive VarPitch,3:DirectDrive FixedPitch CW,4:DirectDrive FixedPitch CCW\n // @User: Standard"},"H_YAW_REV_EXPO":{"Description":"For intermeshing mode only. Yaw revereser smoothing exponent, smoothen transition near zero collective region. Increase this parameter to shink smoothing range. Set to -1 to disable reverser. ","DisplayName":"Yaw reverser expo","Increment":"1.0","Range":{"high":"1000","low":"-1"},"User":"Standard","__field_text":"\n // @DisplayName: Yaw reverser expo\n // @Description: For intermeshing mode only. Yaw revereser smoothing exponent, smoothen transition near zero collective region. Increase this parameter to shink smoothing range. Set to -1 to disable reverser. \n // @Range: -1 1000\n // @Increment: 1.0\n // @User: Standard"},"H_YAW_SCALER":{"Description":"Scaler for mixing yaw into roll or pitch.","DisplayName":"Scaler for yaw mixing","Increment":"0.1","Range":{"high":"10","low":"-10"},"User":"Standard","__field_text":"\n // @DisplayName: Scaler for yaw mixing\n // @Description: Scaler for mixing yaw into roll or pitch.\n // @Range: -10 10\n // @Increment: 0.1\n // @User: Standard"},"H_YAW_TRIM":{"Description":"Fixed offset applied to yaw output to minimize yaw I-term contribution needed to counter rotor drag. Currently only works of DDFP tails (H_TAIL_TYPE = 3 or H_TAIL_TYPE = 4). If using the H_COL2YAW compensation this trim is used to compensate for the main rotor profile drag. If H_COL2YAW is not used, this value can be set to reduce the yaw I contribution to zero when in a steady hover.","DisplayName":"Tail Rotor Trim","Range":{"high":"1","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Tail Rotor Trim\n // @Description: Fixed offset applied to yaw output to minimize yaw I-term contribution needed to counter rotor drag. Currently only works of DDFP tails (H_TAIL_TYPE = 3 or H_TAIL_TYPE = 4). If using the H_COL2YAW compensation this trim is used to compensate for the main rotor profile drag. If H_COL2YAW is not used, this value can be set to reduce the yaw I contribution to zero when in a steady hover.\n // @Range: 0 1\n // @User: Standard"},"IM_ACRO_COL_EXP":{"Description":"Used to soften collective pitch inputs near center point in Acro mode.","DisplayName":"Acro Mode Collective Expo","User":"Advanced","Values":{"0":"Disabled","0.1":"Very Low","0.2":"Low","0.3":"Medium","0.4":"High","0.5":"Very High"},"__field_text":"\n // @DisplayName: Acro Mode Collective Expo\n // @Description: Used to soften collective pitch inputs near center point in Acro mode.\n // @Values: 0:Disabled,0.1:Very Low,0.2:Low,0.3:Medium,0.4:High,0.5:Very High\n // @User: Advanced"},"IM_STB_COL_1":{"Description":"Helicopter's minimum collective pitch setting at zero collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.","DisplayName":"Stabilize Collective Low","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Stabilize Collective Low\n // @Description: Helicopter's minimum collective pitch setting at zero collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"IM_STB_COL_2":{"Description":"Helicopter's collective pitch setting at mid-low (40%) collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.","DisplayName":"Stabilize Collective Mid-Low","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Stabilize Collective Mid-Low\n // @Description: Helicopter's collective pitch setting at mid-low (40%) collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"IM_STB_COL_3":{"Description":"Helicopter's collective pitch setting at mid-high (60%) collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.","DisplayName":"Stabilize Collective Mid-High","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Stabilize Collective Mid-High\n // @Description: Helicopter's collective pitch setting at mid-high (60%) collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"IM_STB_COL_4":{"Description":"Helicopter's maximum collective pitch setting at full collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.","DisplayName":"Stabilize Collective High","Increment":"1","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Stabilize Collective High\n // @Description: Helicopter's maximum collective pitch setting at full collective stick input in Stabilize mode. Set this as a percent of collective range given by H_COL_MAX minus H_COL_MIN.\n // @Range: 0 100\n // @Units: %\n // @Increment: 1\n // @User: Standard"},"INITIAL_MODE":{"Description":"This selects the mode to start in on boot. This is useful for when you want to start in AUTO mode on boot without a receiver.","DisplayName":"Initial flight mode","User":"Advanced","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"Smart_RTL","22":"FlowHold","23":"Follow","24":"ZigZag","25":"SystemID","26":"Heli_Autorotate"},"__field_text":"\n // @DisplayName: Initial flight mode\n // @Description: This selects the mode to start in on boot. This is useful for when you want to start in AUTO mode on boot without a receiver.\n // @Values: 0:Stabilize,1:Acro,2:AltHold,3:Auto,4:Guided,5:Loiter,6:RTL,7:Circle,9:Land,11:Drift,13:Sport,14:Flip,15:AutoTune,16:PosHold,17:Brake,18:Throw,19:Avoid_ADSB,20:Guided_NoGPS,21:Smart_RTL,22:FlowHold,23:Follow,24:ZigZag,25:SystemID,26:Heli_Autorotate\n // @User: Advanced"},"INS4_ACCOFFS_X":{"Calibration":"1","Description":"Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of X axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of X axis\n // @Description: Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACCOFFS_Y":{"Calibration":"1","Description":"Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Y axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Y axis\n // @Description: Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACCOFFS_Z":{"Calibration":"1","Description":"Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Z axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Z axis\n // @Description: Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACCSCAL_X":{"Calibration":"1","Description":"Accelerometer scaling of X axis. Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of X axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of X axis\n // @Description: Accelerometer scaling of X axis. Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACCSCAL_Y":{"Calibration":"1","Description":"Accelerometer scaling of Y axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Y axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Y axis\n // @Description: Accelerometer scaling of Y axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACCSCAL_Z":{"Calibration":"1","Description":"Accelerometer scaling of Z axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Z axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Z axis\n // @Description: Accelerometer scaling of Z axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS4_ACC_CALTEMP":{"Calibration":"1","Description":"Temperature that the accelerometer was calibrated at","DisplayName":"Calibration temperature for accelerometer","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for accelerometer\n // @Description: Temperature that the accelerometer was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS4_ACC_ID":{"Description":"Accelerometer sensor ID, taking into account its type, bus and instance","DisplayName":"Accelerometer ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer ID\n // @Description: Accelerometer sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS4_GYROFFS_X":{"Calibration":"1","Description":"Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of X axis\n // @Description: Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS4_GYROFFS_Y":{"Calibration":"1","Description":"Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Y axis\n // @Description: Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS4_GYROFFS_Z":{"Calibration":"1","Description":"Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Z axis\n // @Description: Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS4_GYR_CALTEMP":{"Calibration":"1","Description":"Temperature that the gyroscope was calibrated at","DisplayName":"Calibration temperature for gyroscope","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for gyroscope\n // @Description: Temperature that the gyroscope was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS4_GYR_ID":{"Description":"Gyro sensor ID, taking into account its type, bus and instance","DisplayName":"Gyro ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Gyro ID\n // @Description: Gyro sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS4_POS_X":{"Description":"X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer X position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer X position\n // @Description: X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS4_POS_Y":{"Description":"Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Y position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Y position\n // @Description: Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS4_POS_Z":{"Description":"Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Z position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Z position\n // @Description: Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS4_TCAL_ACC1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ACC3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_ENABLE":{"Description":"Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot","DisplayName":"Enable temperature calibration","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"LearnCalibration"},"__field_text":"\n // @DisplayName: Enable temperature calibration\n // @Description: Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot\n // @Values: 0:Disabled,1:Enabled,2:LearnCalibration\n // @User: Advanced\n // @RebootRequired: True"},"INS4_TCAL_GYR1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_GYR3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_TMAX":{"Calibration":"1","Description":"The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration","DisplayName":"Temperature calibration max","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration max\n // @Description: The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS4_TCAL_TMIN":{"Calibration":"1","Description":"The minimum temperature that the calibration is valid for","DisplayName":"Temperature calibration min","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration min\n // @Description: The minimum temperature that the calibration is valid for\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS4_USE":{"Description":"Use first IMU for attitude, velocity and position estimates","DisplayName":"Use first IMU for attitude, velocity and position estimates","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use first IMU for attitude, velocity and position estimates\n // @Description: Use first IMU for attitude, velocity and position estimates\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS5_ACCOFFS_X":{"Calibration":"1","Description":"Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of X axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of X axis\n // @Description: Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACCOFFS_Y":{"Calibration":"1","Description":"Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Y axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Y axis\n // @Description: Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACCOFFS_Z":{"Calibration":"1","Description":"Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Z axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Z axis\n // @Description: Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACCSCAL_X":{"Calibration":"1","Description":"Accelerometer scaling of X axis. Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of X axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of X axis\n // @Description: Accelerometer scaling of X axis. Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACCSCAL_Y":{"Calibration":"1","Description":"Accelerometer scaling of Y axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Y axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Y axis\n // @Description: Accelerometer scaling of Y axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACCSCAL_Z":{"Calibration":"1","Description":"Accelerometer scaling of Z axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Z axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Z axis\n // @Description: Accelerometer scaling of Z axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS5_ACC_CALTEMP":{"Calibration":"1","Description":"Temperature that the accelerometer was calibrated at","DisplayName":"Calibration temperature for accelerometer","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for accelerometer\n // @Description: Temperature that the accelerometer was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS5_ACC_ID":{"Description":"Accelerometer sensor ID, taking into account its type, bus and instance","DisplayName":"Accelerometer ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer ID\n // @Description: Accelerometer sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS5_GYROFFS_X":{"Calibration":"1","Description":"Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of X axis\n // @Description: Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS5_GYROFFS_Y":{"Calibration":"1","Description":"Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Y axis\n // @Description: Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS5_GYROFFS_Z":{"Calibration":"1","Description":"Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Z axis\n // @Description: Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS5_GYR_CALTEMP":{"Calibration":"1","Description":"Temperature that the gyroscope was calibrated at","DisplayName":"Calibration temperature for gyroscope","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for gyroscope\n // @Description: Temperature that the gyroscope was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS5_GYR_ID":{"Description":"Gyro sensor ID, taking into account its type, bus and instance","DisplayName":"Gyro ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Gyro ID\n // @Description: Gyro sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS5_POS_X":{"Description":"X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer X position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer X position\n // @Description: X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS5_POS_Y":{"Description":"Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Y position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Y position\n // @Description: Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS5_POS_Z":{"Description":"Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Z position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Z position\n // @Description: Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS5_TCAL_ACC1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ACC3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_ENABLE":{"Description":"Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot","DisplayName":"Enable temperature calibration","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"LearnCalibration"},"__field_text":"\n // @DisplayName: Enable temperature calibration\n // @Description: Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot\n // @Values: 0:Disabled,1:Enabled,2:LearnCalibration\n // @User: Advanced\n // @RebootRequired: True"},"INS5_TCAL_GYR1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_GYR3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_TMAX":{"Calibration":"1","Description":"The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration","DisplayName":"Temperature calibration max","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration max\n // @Description: The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS5_TCAL_TMIN":{"Calibration":"1","Description":"The minimum temperature that the calibration is valid for","DisplayName":"Temperature calibration min","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration min\n // @Description: The minimum temperature that the calibration is valid for\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS5_USE":{"Description":"Use first IMU for attitude, velocity and position estimates","DisplayName":"Use first IMU for attitude, velocity and position estimates","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use first IMU for attitude, velocity and position estimates\n // @Description: Use first IMU for attitude, velocity and position estimates\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS_ACC1_CALTEMP":{"Calibration":"1","Description":"Temperature that the 1st accelerometer was calibrated at","DisplayName":"Calibration temperature for 1st accelerometer","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 1st accelerometer\n // @Description: Temperature that the 1st accelerometer was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_ACC2OFFS_X":{"Calibration":"1","Description":"Accelerometer2 offsets of X axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer2 offsets of X axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 offsets of X axis\n // @Description: Accelerometer2 offsets of X axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2OFFS_Y":{"Calibration":"1","Description":"Accelerometer2 offsets of Y axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer2 offsets of Y axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 offsets of Y axis\n // @Description: Accelerometer2 offsets of Y axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2OFFS_Z":{"Calibration":"1","Description":"Accelerometer2 offsets of Z axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer2 offsets of Z axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 offsets of Z axis\n // @Description: Accelerometer2 offsets of Z axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2SCAL_X":{"Calibration":"1","Description":"Accelerometer2 scaling of X axis. Calculated during acceleration calibration routine","DisplayName":"Accelerometer2 scaling of X axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 scaling of X axis\n // @Description: Accelerometer2 scaling of X axis. Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2SCAL_Y":{"Calibration":"1","Description":"Accelerometer2 scaling of Y axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer2 scaling of Y axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 scaling of Y axis\n // @Description: Accelerometer2 scaling of Y axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2SCAL_Z":{"Calibration":"1","Description":"Accelerometer2 scaling of Z axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer2 scaling of Z axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 scaling of Z axis\n // @Description: Accelerometer2 scaling of Z axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC2_CALTEMP":{"Calibration":"1","Description":"Temperature that the 2nd accelerometer was calibrated at","DisplayName":"Calibration temperature for 2nd accelerometer","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 2nd accelerometer\n // @Description: Temperature that the 2nd accelerometer was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_ACC2_ID":{"Description":"Accelerometer2 sensor ID, taking into account its type, bus and instance","DisplayName":"Accelerometer2 ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer2 ID\n // @Description: Accelerometer2 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_ACC3OFFS_X":{"Calibration":"1","Description":"Accelerometer3 offsets of X axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer3 offsets of X axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 offsets of X axis\n // @Description: Accelerometer3 offsets of X axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3OFFS_Y":{"Calibration":"1","Description":"Accelerometer3 offsets of Y axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer3 offsets of Y axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 offsets of Y axis\n // @Description: Accelerometer3 offsets of Y axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3OFFS_Z":{"Calibration":"1","Description":"Accelerometer3 offsets of Z axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer3 offsets of Z axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 offsets of Z axis\n // @Description: Accelerometer3 offsets of Z axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3SCAL_X":{"Calibration":"1","Description":"Accelerometer3 scaling of X axis. Calculated during acceleration calibration routine","DisplayName":"Accelerometer3 scaling of X axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 scaling of X axis\n // @Description: Accelerometer3 scaling of X axis. Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3SCAL_Y":{"Calibration":"1","Description":"Accelerometer3 scaling of Y axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer3 scaling of Y axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 scaling of Y axis\n // @Description: Accelerometer3 scaling of Y axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3SCAL_Z":{"Calibration":"1","Description":"Accelerometer3 scaling of Z axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer3 scaling of Z axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 scaling of Z axis\n // @Description: Accelerometer3 scaling of Z axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC3_CALTEMP":{"Calibration":"1","Description":"Temperature that the 3rd accelerometer was calibrated at","DisplayName":"Calibration temperature for 3rd accelerometer","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 3rd accelerometer\n // @Description: Temperature that the 3rd accelerometer was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_ACC3_ID":{"Description":"Accelerometer3 sensor ID, taking into account its type, bus and instance","DisplayName":"Accelerometer3 ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer3 ID\n // @Description: Accelerometer3 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_ACCEL_FILTER":{"Description":"Filter cutoff frequency for accelerometers. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)","DisplayName":"Accel filter cutoff frequency","Range":{"high":"256","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Accel filter cutoff frequency\n // @Description: Filter cutoff frequency for accelerometers. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)\n // @Units: Hz\n // @Range: 0 256\n // @User: Advanced"},"INS_ACCOFFS_X":{"Calibration":"1","Description":"Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of X axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of X axis\n // @Description: Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACCOFFS_Y":{"Calibration":"1","Description":"Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Y axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Y axis\n // @Description: Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACCOFFS_Z":{"Calibration":"1","Description":"Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations","DisplayName":"Accelerometer offsets of Z axis","Range":{"high":"3.5","low":"-3.5"},"Units":"m/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer offsets of Z axis\n // @Description: Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations\n // @Units: m/s/s\n // @Range: -3.5 3.5\n // @User: Advanced\n // @Calibration: 1"},"INS_ACCSCAL_X":{"Calibration":"1","Description":"Accelerometer scaling of X axis. Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of X axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of X axis\n // @Description: Accelerometer scaling of X axis. Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACCSCAL_Y":{"Calibration":"1","Description":"Accelerometer scaling of Y axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Y axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Y axis\n // @Description: Accelerometer scaling of Y axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACCSCAL_Z":{"Calibration":"1","Description":"Accelerometer scaling of Z axis Calculated during acceleration calibration routine","DisplayName":"Accelerometer scaling of Z axis","Range":{"high":"1.2","low":"0.8"},"User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer scaling of Z axis\n // @Description: Accelerometer scaling of Z axis Calculated during acceleration calibration routine\n // @Range: 0.8 1.2\n // @User: Advanced\n // @Calibration: 1"},"INS_ACC_BODYFIX":{"Description":"The body-fixed accelerometer to be used for trim calculation","DisplayName":"Body-fixed accelerometer","User":"Advanced","Values":{"1":"IMU 1","2":"IMU 2","3":"IMU 3"},"__field_text":"\n // @DisplayName: Body-fixed accelerometer\n // @Description: The body-fixed accelerometer to be used for trim calculation\n // @User: Advanced\n // @Values: 1:IMU 1,2:IMU 2,3:IMU 3"},"INS_ACC_ID":{"Description":"Accelerometer sensor ID, taking into account its type, bus and instance","DisplayName":"Accelerometer ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer ID\n // @Description: Accelerometer sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_ENABLE_MASK":{"Bitmask":{"0":"FirstIMU","1":"SecondIMU","2":"ThirdIMU","3":"FourthIMU","4":"FifthIMU","5":"SixthIMU","6":"SeventhIMU"},"Description":"Bitmask of IMUs to enable. It can be used to prevent startup of specific detected IMUs","DisplayName":"IMU enable mask","User":"Advanced","__field_text":"\n // @DisplayName: IMU enable mask\n // @Description: Bitmask of IMUs to enable. It can be used to prevent startup of specific detected IMUs\n // @User: Advanced\n // @Bitmask: 0:FirstIMU,1:SecondIMU,2:ThirdIMU,3:FourthIMU,4:FifthIMU,5:SixthIMU,6:SeventhIMU"},"INS_FAST_SAMPLE":{"Bitmask":{"0":"FirstIMU","1":"SecondIMU","2":"ThirdIMU"},"Description":"Mask of IMUs to enable fast sampling on, if available","DisplayName":"Fast sampling mask","User":"Advanced","__field_text":"\n // @DisplayName: Fast sampling mask\n // @Description: Mask of IMUs to enable fast sampling on, if available\n // @User: Advanced\n // @Bitmask: 0:FirstIMU,1:SecondIMU,2:ThirdIMU"},"INS_GYR1_CALTEMP":{"Calibration":"1","Description":"Temperature that the 1st gyroscope was calibrated at","DisplayName":"Calibration temperature for 1st gyroscope","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 1st gyroscope\n // @Description: Temperature that the 1st gyroscope was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_GYR2OFFS_X":{"Calibration":"1","Description":"Gyro2 sensor offsets of X axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro2 offsets of X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro2 offsets of X axis\n // @Description: Gyro2 sensor offsets of X axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR2OFFS_Y":{"Calibration":"1","Description":"Gyro2 sensor offsets of Y axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro2 offsets of Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro2 offsets of Y axis\n // @Description: Gyro2 sensor offsets of Y axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR2OFFS_Z":{"Calibration":"1","Description":"Gyro2 sensor offsets of Z axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro2 offsets of Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro2 offsets of Z axis\n // @Description: Gyro2 sensor offsets of Z axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR2_CALTEMP":{"Calibration":"1","Description":"Temperature that the 2nd gyroscope was calibrated at","DisplayName":"Calibration temperature for 2nd gyroscope","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 2nd gyroscope\n // @Description: Temperature that the 2nd gyroscope was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_GYR2_ID":{"Description":"Gyro2 sensor ID, taking into account its type, bus and instance","DisplayName":"Gyro2 ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Gyro2 ID\n // @Description: Gyro2 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_GYR3OFFS_X":{"Calibration":"1","Description":"Gyro3 sensor offsets of X axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro3 offsets of X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro3 offsets of X axis\n // @Description: Gyro3 sensor offsets of X axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR3OFFS_Y":{"Calibration":"1","Description":"Gyro3 sensor offsets of Y axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro3 offsets of Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro3 offsets of Y axis\n // @Description: Gyro3 sensor offsets of Y axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR3OFFS_Z":{"Calibration":"1","Description":"Gyro3 sensor offsets of Z axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro3 offsets of Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro3 offsets of Z axis\n // @Description: Gyro3 sensor offsets of Z axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYR3_CALTEMP":{"Calibration":"1","Description":"Temperature that the 3rd gyroscope was calibrated at","DisplayName":"Calibration temperature for 3rd gyroscope","Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Calibration temperature for 3rd gyroscope\n // @Description: Temperature that the 3rd gyroscope was calibrated at\n // @User: Advanced\n // @Units: degC\n // @Calibration: 1"},"INS_GYR3_ID":{"Description":"Gyro3 sensor ID, taking into account its type, bus and instance","DisplayName":"Gyro3 ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Gyro3 ID\n // @Description: Gyro3 sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_GYROFFS_X":{"Calibration":"1","Description":"Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of X axis\n // @Description: Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYROFFS_Y":{"Calibration":"1","Description":"Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Y axis\n // @Description: Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYROFFS_Z":{"Calibration":"1","Description":"Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations","DisplayName":"Gyro offsets of Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: Gyro offsets of Z axis\n // @Description: Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations\n // @Units: rad/s\n // @User: Advanced\n // @Calibration: 1"},"INS_GYRO_FILTER":{"Description":"Filter cutoff frequency for gyroscopes. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)","DisplayName":"Gyro filter cutoff frequency","Range":{"high":"256","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Gyro filter cutoff frequency\n // @Description: Filter cutoff frequency for gyroscopes. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)\n // @Units: Hz\n // @Range: 0 256\n // @User: Advanced"},"INS_GYRO_RATE":{"Description":"Gyro rate for IMUs with fast sampling enabled. The gyro rate is the sample rate at which the IMU filters operate and needs to be at least double the maximum filter frequency. If the sensor does not support the selected rate the next highest supported rate will be used. For IMUs which do not support fast sampling this setting is ignored and the default gyro rate of 1Khz is used.","DisplayName":"Gyro rate for IMUs with Fast Sampling enabled","RebootRequired":"True","User":"Advanced","Values":{"0":"1kHz","1":"2kHz","2":"4kHz","3":"8kHz"},"__field_text":"\n // @DisplayName: Gyro rate for IMUs with Fast Sampling enabled\n // @Description: Gyro rate for IMUs with fast sampling enabled. The gyro rate is the sample rate at which the IMU filters operate and needs to be at least double the maximum filter frequency. If the sensor does not support the selected rate the next highest supported rate will be used. For IMUs which do not support fast sampling this setting is ignored and the default gyro rate of 1Khz is used.\n // @User: Advanced\n // @Values: 0:1kHz,1:2kHz,2:4kHz,3:8kHz\n // @RebootRequired: True"},"INS_GYR_CAL":{"Description":"Conrols when automatic gyro calibration is performed","DisplayName":"Gyro Calibration scheme","User":"Advanced","Values":{"0":"Never","1":"Start-up only"},"__field_text":"\n // @DisplayName: Gyro Calibration scheme\n // @Description: Conrols when automatic gyro calibration is performed\n // @Values: 0:Never, 1:Start-up only\n // @User: Advanced"},"INS_GYR_ID":{"Description":"Gyro sensor ID, taking into account its type, bus and instance","DisplayName":"Gyro ID","ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Gyro ID\n // @Description: Gyro sensor ID, taking into account its type, bus and instance\n // @ReadOnly: True\n // @User: Advanced"},"INS_HNTC2_ATT":{"Description":"Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.","DisplayName":"Harmonic Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter attenuation\n // @Description: Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"INS_HNTC2_BW":{"Description":"Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.","DisplayName":"Harmonic Notch Filter bandwidth","Range":{"high":"250","low":"5"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter bandwidth\n // @Description: Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.\n // @Range: 5 250\n // @Units: Hz\n // @User: Advanced"},"INS_HNTC2_ENABLE":{"Description":"Harmonic Notch Filter enable","DisplayName":"Harmonic Notch Filter enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Harmonic Notch Filter enable\n // @Description: Harmonic Notch Filter enable\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS_HNTC2_FM_RAT":{"Description":"The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.","DisplayName":"Throttle notch min freqency ratio","Range":{"high":"1.0","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle notch min freqency ratio\n // @Description: The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.\n // @Range: 0.1 1.0\n // @User: Advanced"},"INS_HNTC2_FREQ":{"Description":"Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). ","DisplayName":"Harmonic Notch Filter base frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter base frequency\n // @Description: Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). \n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"INS_HNTC2_HMNCS":{"Bitmask":{"0":"1st harmonic","1":"2nd harmonic","2":"3rd harmonic","3":"4th harmonic","4":"5th harmonic","5":"6th harmonic","6":"7th harmonic","7":"8th harmonic","8":"9th harmonic","9":"10th harmonic","10":"11th harmonic","11":"12th harmonic","12":"13th harmonic","13":"14th harmonic","14":"15th harmonic","15":"16th harmonic"},"Description":"Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.","DisplayName":"Harmonic Notch Filter harmonics","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter harmonics\n // @Description: Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.\n // @Bitmask: 0: 1st harmonic\n // @Bitmask: 1: 2nd harmonic\n // @Bitmask: 2: 3rd harmonic\n // @Bitmask: 3: 4th harmonic\n // @Bitmask: 4: 5th harmonic\n // @Bitmask: 5: 6th harmonic\n // @Bitmask: 6: 7th harmonic\n // @Bitmask: 7: 8th harmonic\n // @Bitmask: 8: 9th harmonic\n // @Bitmask: 9: 10th harmonic\n // @Bitmask: 10: 11th harmonic\n // @Bitmask: 11: 12th harmonic\n // @Bitmask: 12: 13th harmonic\n // @Bitmask: 13: 14th harmonic\n // @Bitmask: 14: 15th harmonic\n // @Bitmask: 15: 16th harmonic\n // @User: Advanced\n // @RebootRequired: True"},"INS_HNTC2_MODE":{"Description":"Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based updates should only be used with multicopters.","DisplayName":"Harmonic Notch Filter dynamic frequency tracking mode","Range":{"high":"5","low":"0"},"User":"Advanced","Values":{"0":"Fixed","1":"Throttle","2":"RPM Sensor","3":"ESC Telemetry","4":"Dynamic FFT","5":"Second RPM Sensor"},"__field_text":"\n // @DisplayName: Harmonic Notch Filter dynamic frequency tracking mode\n // @Description: Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based updates should only be used with multicopters.\n // @Range: 0 5\n // @Values: 0:Fixed,1:Throttle,2:RPM Sensor,3:ESC Telemetry,4:Dynamic FFT,5:Second RPM Sensor\n // @User: Advanced"},"INS_HNTC2_OPTS":{"Bitmask":{"0":"Double notch","1":"Multi-Source","2":"Update at loop rate","3":"EnableOnAllIMUs","4":"Triple notch"},"Description":"Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.","DisplayName":"Harmonic Notch Filter options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter options\n // @Description: Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.\n // @Bitmask: 0:Double notch,1:Multi-Source,2:Update at loop rate,3:EnableOnAllIMUs,4:Triple notch\n // @User: Advanced\n // @RebootRequired: True"},"INS_HNTC2_REF":{"Description":"A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.","DisplayName":"Harmonic Notch Filter reference value","Range":{"high":"1.0","low":"0.0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter reference value\n // @Description: A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.\n // @User: Advanced\n // @Range: 0.0 1.0\n // @RebootRequired: True"},"INS_HNTCH_ATT":{"Description":"Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.","DisplayName":"Harmonic Notch Filter attenuation","Range":{"high":"50","low":"5"},"Units":"dB","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter attenuation\n // @Description: Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.\n // @Range: 5 50\n // @Units: dB\n // @User: Advanced"},"INS_HNTCH_BW":{"Description":"Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.","DisplayName":"Harmonic Notch Filter bandwidth","Range":{"high":"250","low":"5"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter bandwidth\n // @Description: Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.\n // @Range: 5 250\n // @Units: Hz\n // @User: Advanced"},"INS_HNTCH_ENABLE":{"Description":"Harmonic Notch Filter enable","DisplayName":"Harmonic Notch Filter enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Harmonic Notch Filter enable\n // @Description: Harmonic Notch Filter enable\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS_HNTCH_FM_RAT":{"Description":"The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.","DisplayName":"Throttle notch min freqency ratio","Range":{"high":"1.0","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Throttle notch min freqency ratio\n // @Description: The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.\n // @Range: 0.1 1.0\n // @User: Advanced"},"INS_HNTCH_FREQ":{"Description":"Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). ","DisplayName":"Harmonic Notch Filter base frequency","Range":{"high":"495","low":"10"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter base frequency\n // @Description: Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). \n // @Range: 10 495\n // @Units: Hz\n // @User: Advanced"},"INS_HNTCH_HMNCS":{"Bitmask":{"0":"1st harmonic","1":"2nd harmonic","2":"3rd harmonic","3":"4th harmonic","4":"5th harmonic","5":"6th harmonic","6":"7th harmonic","7":"8th harmonic","8":"9th harmonic","9":"10th harmonic","10":"11th harmonic","11":"12th harmonic","12":"13th harmonic","13":"14th harmonic","14":"15th harmonic","15":"16th harmonic"},"Description":"Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.","DisplayName":"Harmonic Notch Filter harmonics","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter harmonics\n // @Description: Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.\n // @Bitmask: 0: 1st harmonic\n // @Bitmask: 1: 2nd harmonic\n // @Bitmask: 2: 3rd harmonic\n // @Bitmask: 3: 4th harmonic\n // @Bitmask: 4: 5th harmonic\n // @Bitmask: 5: 6th harmonic\n // @Bitmask: 6: 7th harmonic\n // @Bitmask: 7: 8th harmonic\n // @Bitmask: 8: 9th harmonic\n // @Bitmask: 9: 10th harmonic\n // @Bitmask: 10: 11th harmonic\n // @Bitmask: 11: 12th harmonic\n // @Bitmask: 12: 13th harmonic\n // @Bitmask: 13: 14th harmonic\n // @Bitmask: 14: 15th harmonic\n // @Bitmask: 15: 16th harmonic\n // @User: Advanced\n // @RebootRequired: True"},"INS_HNTCH_MODE":{"Description":"Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based updates should only be used with multicopters.","DisplayName":"Harmonic Notch Filter dynamic frequency tracking mode","Range":{"high":"5","low":"0"},"User":"Advanced","Values":{"0":"Fixed","1":"Throttle","2":"RPM Sensor","3":"ESC Telemetry","4":"Dynamic FFT","5":"Second RPM Sensor"},"__field_text":"\n // @DisplayName: Harmonic Notch Filter dynamic frequency tracking mode\n // @Description: Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based updates should only be used with multicopters.\n // @Range: 0 5\n // @Values: 0:Fixed,1:Throttle,2:RPM Sensor,3:ESC Telemetry,4:Dynamic FFT,5:Second RPM Sensor\n // @User: Advanced"},"INS_HNTCH_OPTS":{"Bitmask":{"0":"Double notch","1":"Multi-Source","2":"Update at loop rate","3":"EnableOnAllIMUs","4":"Triple notch"},"Description":"Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.","DisplayName":"Harmonic Notch Filter options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter options\n // @Description: Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.\n // @Bitmask: 0:Double notch,1:Multi-Source,2:Update at loop rate,3:EnableOnAllIMUs,4:Triple notch\n // @User: Advanced\n // @RebootRequired: True"},"INS_HNTCH_REF":{"Description":"A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.","DisplayName":"Harmonic Notch Filter reference value","Range":{"high":"1.0","low":"0.0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Harmonic Notch Filter reference value\n // @Description: A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.\n // @User: Advanced\n // @Range: 0.0 1.0\n // @RebootRequired: True"},"INS_LOG_BAT_CNT":{"Description":"Number of samples to take when logging streams of IMU sensor readings. Will be rounded down to a multiple of 32. This option takes effect on the next reboot.","DisplayName":"sample count per batch","Increment":"32","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: sample count per batch\n // @Description: Number of samples to take when logging streams of IMU sensor readings. Will be rounded down to a multiple of 32. This option takes effect on the next reboot.\n // @User: Advanced\n // @Increment: 32\n // @RebootRequired: True"},"INS_LOG_BAT_LGCT":{"Description":"Number of samples to push to count every INS_LOG_BAT_LGIN","DisplayName":"logging count","Increment":"1","__field_text":"\n // @DisplayName: logging count\n // @Description: Number of samples to push to count every @PREFIX@BAT_LGIN\n // @Increment: 1"},"INS_LOG_BAT_LGIN":{"Description":"Interval between pushing samples to the AP_Logger log","DisplayName":"logging interval","Increment":"10","Units":"ms","__field_text":"\n // @DisplayName: logging interval\n // @Description: Interval between pushing samples to the AP_Logger log\n // @Units: ms\n // @Increment: 10"},"INS_LOG_BAT_MASK":{"Bitmask":{"0":"IMU1","1":"IMU2","2":"IMU3"},"Description":"Bitmap of which IMUs to log batch data for. This option takes effect on the next reboot.","DisplayName":"Sensor Bitmask","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Sensor Bitmask\n // @Description: Bitmap of which IMUs to log batch data for. This option takes effect on the next reboot.\n // @User: Advanced\n // @Bitmask: 0:IMU1,1:IMU2,2:IMU3\n // @RebootRequired: True"},"INS_LOG_BAT_OPT":{"Bitmask":{"0":"Sensor-Rate Logging (sample at full sensor rate seen by AP)","1":"Sample post-filtering","2":"Sample pre- and post-filter"},"Description":"Options for the BatchSampler.","DisplayName":"Batch Logging Options Mask","User":"Advanced","__field_text":"\n // @DisplayName: Batch Logging Options Mask\n // @Description: Options for the BatchSampler.\n // @Bitmask: 0:Sensor-Rate Logging (sample at full sensor rate seen by AP), 1: Sample post-filtering, 2: Sample pre- and post-filter\n // @User: Advanced"},"INS_POS1_X":{"Description":"X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer X position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer X position\n // @Description: X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS1_Y":{"Description":"Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Y position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Y position\n // @Description: Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS1_Z":{"Description":"Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Z position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Z position\n // @Description: Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS2_X":{"Description":"X position of the second IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer X position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer X position\n // @Description: X position of the second IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS2_Y":{"Description":"Y position of the second IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Y position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Y position\n // @Description: Y position of the second IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS2_Z":{"Description":"Z position of the second IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Z position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Z position\n // @Description: Z position of the second IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS3_X":{"Description":"X position of the third IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer X position","Range":{"high":"10","low":"-10"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer X position\n // @Description: X position of the third IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -10 10\n // @User: Advanced"},"INS_POS3_Y":{"Description":"Y position of the third IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Y position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Y position\n // @Description: Y position of the third IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_POS3_Z":{"Description":"Z position of the third IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.","DisplayName":"IMU accelerometer Z position","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: IMU accelerometer Z position\n // @Description: Z position of the third IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"INS_RAW_LOG_OPT":{"Bitmask":{"0":"Log primary gyro only","1":"Log all gyros","2":"Post filter","3":"Pre and post filter"},"Description":"Raw logging options bitmask","DisplayName":"Raw logging options","User":"Advanced","__field_text":"\n // @DisplayName: Raw logging options\n // @Description: Raw logging options bitmask\n // @Bitmask: 0:Log primary gyro only, 1:Log all gyros, 2:Post filter, 3: Pre and post filter\n // @User: Advanced"},"INS_STILL_THRESH":{"Description":"Threshold to tolerate vibration to determine if vehicle is motionless. This depends on the frame type and if there is a constant vibration due to motors before launch or after landing. Total motionless is about 0.05. Suggested values: Planes/rover use 0.1, multirotors use 1, tradHeli uses 5","DisplayName":"Stillness threshold for detecting if we are moving","Range":{"high":"50","low":"0.05"},"User":"Advanced","__field_text":"\n // @DisplayName: Stillness threshold for detecting if we are moving\n // @Description: Threshold to tolerate vibration to determine if vehicle is motionless. This depends on the frame type and if there is a constant vibration due to motors before launch or after landing. Total motionless is about 0.05. Suggested values: Planes/rover use 0.1, multirotors use 1, tradHeli uses 5\n // @Range: 0.05 50\n // @User: Advanced"},"INS_TCAL1_ACC1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ACC3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_ENABLE":{"Description":"Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot","DisplayName":"Enable temperature calibration","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"LearnCalibration"},"__field_text":"\n // @DisplayName: Enable temperature calibration\n // @Description: Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot\n // @Values: 0:Disabled,1:Enabled,2:LearnCalibration\n // @User: Advanced\n // @RebootRequired: True"},"INS_TCAL1_GYR1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_GYR3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_TMAX":{"Calibration":"1","Description":"The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration","DisplayName":"Temperature calibration max","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration max\n // @Description: The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL1_TMIN":{"Calibration":"1","Description":"The minimum temperature that the calibration is valid for","DisplayName":"Temperature calibration min","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration min\n // @Description: The minimum temperature that the calibration is valid for\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ACC3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_ENABLE":{"Description":"Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot","DisplayName":"Enable temperature calibration","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"LearnCalibration"},"__field_text":"\n // @DisplayName: Enable temperature calibration\n // @Description: Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot\n // @Values: 0:Disabled,1:Enabled,2:LearnCalibration\n // @User: Advanced\n // @RebootRequired: True"},"INS_TCAL2_GYR1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_GYR3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_TMAX":{"Calibration":"1","Description":"The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration","DisplayName":"Temperature calibration max","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration max\n // @Description: The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL2_TMIN":{"Calibration":"1","Description":"The minimum temperature that the calibration is valid for","DisplayName":"Temperature calibration min","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration min\n // @Description: The minimum temperature that the calibration is valid for\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ACC3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Accelerometer 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Accelerometer 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_ENABLE":{"Description":"Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot","DisplayName":"Enable temperature calibration","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"LearnCalibration"},"__field_text":"\n // @DisplayName: Enable temperature calibration\n // @Description: Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot\n // @Values: 0:Disabled,1:Enabled,2:LearnCalibration\n // @User: Advanced\n // @RebootRequired: True"},"INS_TCAL3_GYR1_X":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient X axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR1_Y":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Y axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR1_Z":{"Calibration":"1","Description":"This is the 1st order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 1st order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 1st order temperature coefficient Z axis\n // @Description: This is the 1st order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR2_X":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient X axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR2_Y":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Y axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR2_Z":{"Calibration":"1","Description":"This is the 2nd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 2nd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 2nd order temperature coefficient Z axis\n // @Description: This is the 2nd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR3_X":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient X axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient X axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR3_Y":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Y axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Y axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_GYR3_Z":{"Calibration":"1","Description":"This is the 3rd order temperature coefficient from a temperature calibration","DisplayName":"Gyroscope 3rd order temperature coefficient Z axis","User":"Advanced","__field_text":"\n // @DisplayName: Gyroscope 3rd order temperature coefficient Z axis\n // @Description: This is the 3rd order temperature coefficient from a temperature calibration\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_TMAX":{"Calibration":"1","Description":"The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration","DisplayName":"Temperature calibration max","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration max\n // @Description: The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL3_TMIN":{"Calibration":"1","Description":"The minimum temperature that the calibration is valid for","DisplayName":"Temperature calibration min","Range":{"high":"80","low":"-70"},"Units":"degC","User":"Advanced","__field_text":"\n // @DisplayName: Temperature calibration min\n // @Description: The minimum temperature that the calibration is valid for\n // @Range: -70 80\n // @Units: degC\n // @User: Advanced\n // @Calibration: 1"},"INS_TCAL_OPTIONS":{"Bitmask":{"0":"PersistParams"},"Description":"This enables optional temperature calibration features. Setting PersistParams will save the accelerometer and temperature calibration parameters in the bootloader sector on the next update of the bootloader.","DisplayName":"Options for temperature calibration","User":"Advanced","__field_text":"\n // @DisplayName: Options for temperature calibration\n // @Description: This enables optional temperature calibration features. Setting PersistParams will save the accelerometer and temperature calibration parameters in the bootloader sector on the next update of the bootloader.\n // @Bitmask: 0:PersistParams\n // @User: Advanced"},"INS_TRIM_OPTION":{"Description":"Specifies how the accel cal routine determines the trims","DisplayName":"Accel cal trim option","User":"Advanced","Values":{"0":"Don't adjust the trims","1":"Assume first orientation was level","2":"Assume ACC_BODYFIX is perfectly aligned to the vehicle"},"__field_text":"\n // @DisplayName: Accel cal trim option\n // @Description: Specifies how the accel cal routine determines the trims\n // @User: Advanced\n // @Values: 0:Don't adjust the trims,1:Assume first orientation was level,2:Assume ACC_BODYFIX is perfectly aligned to the vehicle"},"INS_USE":{"Description":"Use first IMU for attitude, velocity and position estimates","DisplayName":"Use first IMU for attitude, velocity and position estimates","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use first IMU for attitude, velocity and position estimates\n // @Description: Use first IMU for attitude, velocity and position estimates\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS_USE2":{"Description":"Use second IMU for attitude, velocity and position estimates","DisplayName":"Use second IMU for attitude, velocity and position estimates","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use second IMU for attitude, velocity and position estimates\n // @Description: Use second IMU for attitude, velocity and position estimates\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"INS_USE3":{"Description":"Use third IMU for attitude, velocity and position estimates","DisplayName":"Use third IMU for attitude, velocity and position estimates","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Use third IMU for attitude, velocity and position estimates\n // @Description: Use third IMU for attitude, velocity and position estimates\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"KDE_NPOLE":{"Description":"Sets the number of motor poles to calculate the correct RPM value","DisplayName":"Number of motor poles","__field_text":"\n // @DisplayName: Number of motor poles\n // @Description: Sets the number of motor poles to calculate the correct RPM value"},"LAND_ALT_LOW":{"Description":"Altitude during Landing at which vehicle slows to LAND_SPEED","DisplayName":"Land alt low","Increment":"10","Range":{"high":"10000","low":"100"},"Units":"cm","User":"Advanced","__field_text":"\n // @DisplayName: Land alt low\n // @Description: Altitude during Landing at which vehicle slows to LAND_SPEED\n // @Units: cm\n // @Range: 100 10000\n // @Increment: 10\n // @User: Advanced"},"LAND_REPOSITION":{"Description":"Enables user input during LAND mode, the landing phase of RTL, and auto mode landings.","DisplayName":"Land repositioning","User":"Advanced","Values":{"0":"No repositioning","1":"Repositioning"},"__field_text":"\n // @DisplayName: Land repositioning\n // @Description: Enables user input during LAND mode, the landing phase of RTL, and auto mode landings.\n // @Values: 0:No repositioning, 1:Repositioning\n // @User: Advanced"},"LAND_SPEED":{"Description":"The descent speed for the final stage of landing in cm/s","DisplayName":"Land speed","Increment":"10","Range":{"high":"200","low":"30"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Land speed\n // @Description: The descent speed for the final stage of landing in cm/s\n // @Units: cm/s\n // @Range: 30 200\n // @Increment: 10\n // @User: Standard"},"LAND_SPEED_HIGH":{"Description":"The descent speed for the first stage of landing in cm/s. If this is zero then WPNAV_SPEED_DN is used","DisplayName":"Land speed high","Increment":"10","Range":{"high":"500","low":"0"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Land speed high\n // @Description: The descent speed for the first stage of landing in cm/s. If this is zero then WPNAV_SPEED_DN is used\n // @Units: cm/s\n // @Range: 0 500\n // @Increment: 10\n // @User: Standard"},"LGR_DEPLOY_ALT":{"Description":"Altitude where the landing gear will be deployed. This should be lower than the RETRACT_ALT. If zero then altitude is not used for deploying landing gear. Only applies when vehicle is armed.","DisplayName":"Landing gear deployment altitude","Increment":"1","Range":{"high":"1000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Landing gear deployment altitude\n // @Description: Altitude where the landing gear will be deployed. This should be lower than the RETRACT_ALT. If zero then altitude is not used for deploying landing gear. Only applies when vehicle is armed.\n // @Units: m\n // @Range: 0 1000\n // @Increment: 1\n // @User: Standard"},"LGR_DEPLOY_PIN":{"Description":"Pin number to use for detection of gear deployment. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Chassis deployment feedback pin","RebootRequired":"True","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Chassis deployment feedback pin\n // @Description: Pin number to use for detection of gear deployment. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard\n // @RebootRequired: True"},"LGR_DEPLOY_POL":{"Description":"Polarity for feedback pin. If this is 1 then the pin should be high when gear are deployed. If set to 0 then then deployed gear level is low.","DisplayName":"Chassis deployment feedback pin polarity","User":"Standard","Values":{"0":"Low","1":"High"},"__field_text":"\n // @DisplayName: Chassis deployment feedback pin polarity\n // @Description: Polarity for feedback pin. If this is 1 then the pin should be high when gear are deployed. If set to 0 then then deployed gear level is low.\n // @Values: 0:Low,1:High\n // @User: Standard"},"LGR_ENABLE":{"Description":"Enable landing gear control","DisplayName":"Enable landing gear","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable landing gear\n // @Description: Enable landing gear control\n // @Values: 0:Disabled, 1:Enabled\n // @User: Standard"},"LGR_OPTIONS":{"Bitmask":{"0":"Retract after Takeoff","1":"Deploy during Land"},"Description":"Options to retract or deploy landing gear in Auto or Guided mode","DisplayName":"Landing gear auto retract/deploy options","User":"Standard","__field_text":"\n // @DisplayName: Landing gear auto retract/deploy options\n // @Description: Options to retract or deploy landing gear in Auto or Guided mode\n // @Bitmask: 0:Retract after Takeoff,1:Deploy during Land\n // @User: Standard"},"LGR_RETRACT_ALT":{"Description":"Altitude where the landing gear will be retracted. This should be higher than the DEPLOY_ALT. If zero then altitude is not used for retracting landing gear. Only applies when vehicle is armed.","DisplayName":"Landing gear retract altitude","Increment":"1","Range":{"high":"1000","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Landing gear retract altitude\n // @Description: Altitude where the landing gear will be retracted. This should be higher than the DEPLOY_ALT. If zero then altitude is not used for retracting landing gear. Only applies when vehicle is armed.\n // @Units: m\n // @Range: 0 1000\n // @Increment: 1\n // @User: Standard"},"LGR_STARTUP":{"Description":"Landing Gear Startup behaviour control","DisplayName":"Landing Gear Startup position","User":"Standard","Values":{"0":"WaitForPilotInput","1":"Retract","2":"Deploy"},"__field_text":"\n // @DisplayName: Landing Gear Startup position\n // @Description: Landing Gear Startup behaviour control\n // @Values: 0:WaitForPilotInput, 1:Retract, 2:Deploy\n // @User: Standard"},"LGR_WOW_PIN":{"Description":"Pin number to use for feedback of weight on wheels condition. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Weight on wheels feedback pin","RebootRequired":"True","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Weight on wheels feedback pin\n // @Description: Pin number to use for feedback of weight on wheels condition. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard\n // @RebootRequired: True"},"LGR_WOW_POL":{"Description":"Polarity for feedback pin. If this is 1 then the pin should be high when there is weight on wheels. If set to 0 then then weight on wheels level is low.","DisplayName":"Weight on wheels feedback pin polarity","User":"Standard","Values":{"0":"Low","1":"High"},"__field_text":"\n // @DisplayName: Weight on wheels feedback pin polarity\n // @Description: Polarity for feedback pin. If this is 1 then the pin should be high when there is weight on wheels. If set to 0 then then weight on wheels level is low.\n // @Values: 0:Low,1:High\n // @User: Standard"},"LOG_BACKEND_TYPE":{"Bitmask":{"0":"File","1":"MAVLink","2":"Block"},"Description":"Bitmap of what Logger backend types to enable. Block-based logging is available on SITL and boards with dataflash chips. Multiple backends can be selected.","DisplayName":"AP_Logger Backend Storage type","User":"Standard","__field_text":"\n // @DisplayName: AP_Logger Backend Storage type\n // @Description: Bitmap of what Logger backend types to enable. Block-based logging is available on SITL and boards with dataflash chips. Multiple backends can be selected.\n // @Bitmask: 0:File,1:MAVLink,2:Block\n // @User: Standard"},"LOG_BITMASK":{"Bitmask":{"0":"Fast Attitude","1":"Medium Attitude","2":"GPS","3":"System Performance","4":"Control Tuning","5":"Navigation Tuning","6":"RC input","7":"IMU","8":"Mission Commands","9":"Battery Monitor","10":"RC output","11":"Optical Flow","12":"PID","13":"Compass","15":"Camera","17":"Motors","18":"Fast IMU","19":"Raw IMU","20":"Video Stabilization","21":"Fast harmonic notch logging"},"Description":"Bitmap of what on-board log types to enable. This value is made up of the sum of each of the log types you want to be saved. It is usually best just to enable all basiclog types by setting this to 65535.","DisplayName":"Log bitmask","User":"Standard","__field_text":"\n // @DisplayName: Log bitmask\n // @Description: Bitmap of what on-board log types to enable. This value is made up of the sum of each of the log types you want to be saved. It is usually best just to enable all basiclog types by setting this to 65535. \n // @Bitmask: 0:Fast Attitude,1:Medium Attitude,2:GPS,3:System Performance,4:Control Tuning,5:Navigation Tuning,6:RC input,7:IMU,8:Mission Commands,9:Battery Monitor,10:RC output,11:Optical Flow,12:PID,13:Compass,15:Camera,17:Motors,18:Fast IMU,19:Raw IMU,20:Video Stabilization,21:Fast harmonic notch logging\n // @User: Standard"},"LOG_BLK_RATEMAX":{"Description":"This sets the maximum rate that streaming log messages will be logged to the block backend. A value of zero means that rate limiting is disabled.","DisplayName":"Maximum logging rate for block backend","Increment":"0.1","Range":{"high":"1000","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Maximum logging rate for block backend\n // @Description: This sets the maximum rate that streaming log messages will be logged to the block backend. A value of zero means that rate limiting is disabled.\n // @Units: Hz\n // @Range: 0 1000\n // @Increment: 0.1\n // @User: Standard"},"LOG_DARM_RATEMAX":{"Description":"This sets the maximum rate that streaming log messages will be logged to any backend when disarmed. A value of zero means that the normal backend rate limit is applied.","DisplayName":"Maximum logging rate when disarmed","Increment":"0.1","Range":{"high":"1000","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Maximum logging rate when disarmed\n // @Description: This sets the maximum rate that streaming log messages will be logged to any backend when disarmed. A value of zero means that the normal backend rate limit is applied.\n // @Units: Hz\n // @Range: 0 1000\n // @Increment: 0.1\n // @User: Standard"},"LOG_DISARMED":{"Description":"If LOG_DISARMED is set to 1 then logging will be enabled at all times including when disarmed. Logging before arming can make for very large logfiles but can help a lot when tracking down startup issues and is necessary if logging of EKF replay data is selected via the LOG_REPLAY parameter. If LOG_DISARMED is set to 2, then logging will be enabled when disarmed, but not if a USB connection is detected. This can be used to prevent unwanted data logs being generated when the vehicle is connected via USB for log downloading or parameter changes. If LOG_DISARMED is set to 3 then logging will happen while disarmed, but if the vehicle never arms then the logs using the filesystem backend will be discarded on the next boot.","DisplayName":"Enable logging while disarmed","User":"Standard","Values":{"0":"Disabled","1":"Enabled","2":"Disabled on USB connection","3":"Discard log on reboot if never armed"},"__field_text":"\n // @DisplayName: Enable logging while disarmed\n // @Description: If LOG_DISARMED is set to 1 then logging will be enabled at all times including when disarmed. Logging before arming can make for very large logfiles but can help a lot when tracking down startup issues and is necessary if logging of EKF replay data is selected via the LOG_REPLAY parameter. If LOG_DISARMED is set to 2, then logging will be enabled when disarmed, but not if a USB connection is detected. This can be used to prevent unwanted data logs being generated when the vehicle is connected via USB for log downloading or parameter changes. If LOG_DISARMED is set to 3 then logging will happen while disarmed, but if the vehicle never arms then the logs using the filesystem backend will be discarded on the next boot.\n // @Values: 0:Disabled,1:Enabled,2:Disabled on USB connection,3:Discard log on reboot if never armed\n // @User: Standard"},"LOG_FILE_BUFSIZE":{"Description":"The File and Block backends use a buffer to store data before writing to the block device. Raising this value may reduce \"gaps\" in your SD card logging. This buffer size may be reduced depending on available memory. PixHawk requires at least 4 kilobytes. Maximum value available here is 64 kilobytes.","DisplayName":"Maximum AP_Logger File and Block Backend buffer size (in kilobytes)","User":"Standard","__field_text":"\n // @DisplayName: Maximum AP_Logger File and Block Backend buffer size (in kilobytes)\n // @Description: The File and Block backends use a buffer to store data before writing to the block device. Raising this value may reduce \"gaps\" in your SD card logging. This buffer size may be reduced depending on available memory. PixHawk requires at least 4 kilobytes. Maximum value available here is 64 kilobytes.\n // @User: Standard"},"LOG_FILE_DSRMROT":{"Description":"When set, the current log file is closed when the vehicle is disarmed. If LOG_DISARMED is set then a fresh log will be opened. Applies to the File and Block logging backends.","DisplayName":"Stop logging to current file on disarm","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Stop logging to current file on disarm\n // @Description: When set, the current log file is closed when the vehicle is disarmed. If LOG_DISARMED is set then a fresh log will be opened. Applies to the File and Block logging backends.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"LOG_FILE_MB_FREE":{"Description":"Set this such that the free space is larger than your largest typical flight log","DisplayName":"Old logs on the SD card will be deleted to maintain this amount of free space","Range":{"high":"1000","low":"10"},"Units":"MB","User":"Standard","__field_text":"\n // @DisplayName: Old logs on the SD card will be deleted to maintain this amount of free space\n // @Description: Set this such that the free space is larger than your largest typical flight log\n // @Units: MB\n // @Range: 10 1000\n // @User: Standard"},"LOG_FILE_RATEMAX":{"Description":"This sets the maximum rate that streaming log messages will be logged to the file backend. A value of zero means that rate limiting is disabled.","DisplayName":"Maximum logging rate for file backend","Increment":"0.1","Range":{"high":"1000","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Maximum logging rate for file backend\n // @Description: This sets the maximum rate that streaming log messages will be logged to the file backend. A value of zero means that rate limiting is disabled.\n // @Units: Hz\n // @Range: 0 1000\n // @Increment: 0.1\n // @User: Standard"},"LOG_FILE_TIMEOUT":{"Description":"This controls the amount of time before failing writes to a log file cause the file to be closed and logging stopped.","DisplayName":"Timeout before giving up on file writes","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Timeout before giving up on file writes\n // @Description: This controls the amount of time before failing writes to a log file cause the file to be closed and logging stopped.\n // @User: Standard\n // @Units: s"},"LOG_MAV_BUFSIZE":{"Description":"Maximum amount of memory to allocate to AP_Logger-over-mavlink","DisplayName":"Maximum AP_Logger MAVLink Backend buffer size","Units":"kB","User":"Advanced","__field_text":"\n // @DisplayName: Maximum AP_Logger MAVLink Backend buffer size\n // @Description: Maximum amount of memory to allocate to AP_Logger-over-mavlink\n // @User: Advanced\n // @Units: kB"},"LOG_MAV_RATEMAX":{"Description":"This sets the maximum rate that streaming log messages will be logged to the mavlink backend. A value of zero means that rate limiting is disabled.","DisplayName":"Maximum logging rate for mavlink backend","Increment":"0.1","Range":{"high":"1000","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Maximum logging rate for mavlink backend\n // @Description: This sets the maximum rate that streaming log messages will be logged to the mavlink backend. A value of zero means that rate limiting is disabled.\n // @Units: Hz\n // @Range: 0 1000\n // @Increment: 0.1\n // @User: Standard"},"LOG_MAX_FILES":{"Description":"This sets the maximum number of log file that will be written on dataflash or sd card before starting to rotate log number. Limit is capped at 500 logs.","DisplayName":"Maximum number of log files","Increment":"1","Range":{"high":"500","low":"2"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Maximum number of log files\n // @Description: This sets the maximum number of log file that will be written on dataflash or sd card before starting to rotate log number. Limit is capped at 500 logs.\n // @Range: 2 500\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"LOG_REPLAY":{"Description":"If LOG_REPLAY is set to 1 then the EKF2 and EKF3 state estimators will log detailed information needed for diagnosing problems with the Kalman filter. LOG_DISARMED must be set to 1 or 2 or else the log will not contain the pre-flight data required for replay testing of the EKF's. It is suggested that you also raise LOG_FILE_BUFSIZE to give more buffer space for logging and use a high quality microSD card to ensure no sensor data is lost.","DisplayName":"Enable logging of information needed for Replay","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable logging of information needed for Replay\n // @Description: If LOG_REPLAY is set to 1 then the EKF2 and EKF3 state estimators will log detailed information needed for diagnosing problems with the Kalman filter. LOG_DISARMED must be set to 1 or 2 or else the log will not contain the pre-flight data required for replay testing of the EKF's. It is suggested that you also raise LOG_FILE_BUFSIZE to give more buffer space for logging and use a high quality microSD card to ensure no sensor data is lost.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"LOIT_ACC_MAX":{"Description":"Loiter maximum correction acceleration in cm/s/s. Higher values cause the copter to correct position errors more aggressively.","DisplayName":"Loiter maximum correction acceleration","Increment":"1","Range":{"high":"981","low":"100"},"Units":"cm/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Loiter maximum correction acceleration\n // @Description: Loiter maximum correction acceleration in cm/s/s. Higher values cause the copter to correct position errors more aggressively.\n // @Units: cm/s/s\n // @Range: 100 981\n // @Increment: 1\n // @User: Advanced"},"LOIT_ANG_MAX":{"Description":"Loiter maximum pilot requested lean angle. Set to zero for 2/3 of PSC_ANGLE_MAX/ANGLE_MAX. The maximum vehicle lean angle is still limited by PSC_ANGLE_MAX/ANGLE_MAX","DisplayName":"Loiter pilot angle max","Increment":"1","Range":{"high":"45","low":"0"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Loiter pilot angle max\n // @Description{Copter, Sub}: Loiter maximum pilot requested lean angle. Set to zero for 2/3 of PSC_ANGLE_MAX/ANGLE_MAX. The maximum vehicle lean angle is still limited by PSC_ANGLE_MAX/ANGLE_MAX\n // @Description: Loiter maximum pilot requested lean angle. Set to zero for 2/3 of Q_P_ANGLE_MAX/Q_ANGLE_MAX. The maximum vehicle lean angle is still limited by Q_P_ANGLE_MAX/Q_ANGLE_MAX\n // @Units: deg\n // @Range: 0 45\n // @Increment: 1\n // @User: Advanced"},"LOIT_BRK_ACCEL":{"Description":"Loiter braking acceleration in cm/s/s. Higher values stop the copter more quickly when the stick is centered.","DisplayName":"Loiter braking acceleration","Increment":"1","Range":{"high":"250","low":"25"},"Units":"cm/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Loiter braking acceleration\n // @Description: Loiter braking acceleration in cm/s/s. Higher values stop the copter more quickly when the stick is centered.\n // @Units: cm/s/s\n // @Range: 25 250\n // @Increment: 1\n // @User: Advanced"},"LOIT_BRK_DELAY":{"Description":"Loiter brake start delay (in seconds)","DisplayName":"Loiter brake start delay (in seconds)","Increment":"0.1","Range":{"high":"2","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Loiter brake start delay (in seconds)\n // @Description: Loiter brake start delay (in seconds)\n // @Units: s\n // @Range: 0 2\n // @Increment: 0.1\n // @User: Advanced"},"LOIT_BRK_JERK":{"Description":"Loiter braking jerk in cm/s/s/s. Higher values will remove braking faster if the pilot moves the sticks during a braking maneuver.","DisplayName":"Loiter braking jerk","Increment":"1","Range":{"high":"5000","low":"500"},"Units":"cm/s/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Loiter braking jerk\n // @Description: Loiter braking jerk in cm/s/s/s. Higher values will remove braking faster if the pilot moves the sticks during a braking maneuver.\n // @Units: cm/s/s/s\n // @Range: 500 5000\n // @Increment: 1\n // @User: Advanced"},"LOIT_SPEED":{"Description":"Defines the maximum speed in cm/s which the aircraft will travel horizontally while in loiter mode","DisplayName":"Loiter Horizontal Maximum Speed","Increment":"50","Range":{"high":"3500","low":"20"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Loiter Horizontal Maximum Speed\n // @Description: Defines the maximum speed in cm/s which the aircraft will travel horizontally while in loiter mode\n // @Units: cm/s\n // @Range: 20 3500\n // @Increment: 50\n // @User: Standard"},"MIS_OPTIONS":{"Bitmask":{"0":"Clear Mission on reboot","2":"ContinueAfterLand"},"Description":"Bitmask of what options to use in missions.","DisplayName":"Mission options bitmask","User":"Advanced","__field_text":"\n // @DisplayName: Mission options bitmask\n // @Description: Bitmask of what options to use in missions.\n // @Bitmask: 0:Clear Mission on reboot, 1:Use distance to land calc on battery failsafe,2:ContinueAfterLand\n // @Bitmask{Copter}: 0:Clear Mission on reboot, 2:ContinueAfterLand\n // @Bitmask{Rover, Sub}: 0:Clear Mission on reboot\n // @User: Advanced"},"MIS_RESTART":{"Description":"Controls mission starting point when entering Auto mode (either restart from beginning of mission or resume from last command run)","DisplayName":"Mission Restart when entering Auto mode","User":"Advanced","Values":{"0":"Resume Mission","1":"Restart Mission"},"__field_text":"\n // @DisplayName: Mission Restart when entering Auto mode\n // @Description: Controls mission starting point when entering Auto mode (either restart from beginning of mission or resume from last command run)\n // @Values: 0:Resume Mission, 1:Restart Mission\n // @User: Advanced"},"MIS_TOTAL":{"Description":"The number of mission mission items that has been loaded by the ground station. Do not change this manually.","DisplayName":"Total mission commands","Increment":"1","Range":{"high":"32766","low":"0"},"ReadOnly":"True","User":"Advanced","__field_text":"\n // @DisplayName: Total mission commands\n // @Description: The number of mission mission items that has been loaded by the ground station. Do not change this manually.\n // @Range: 0 32766\n // @Increment: 1\n // @User: Advanced\n // @ReadOnly: True"},"MNT1_DEFLT_MODE":{"Description":"Mount default operating mode on startup and after control is returned from autopilot","DisplayName":"Mount default operating mode","User":"Standard","Values":{"0":"Retracted","1":"Neutral","2":"MavLink Targeting","3":"RC Targeting","4":"GPS Point","5":"SysID Target","6":"Home Location"},"__field_text":"\n // @DisplayName: Mount default operating mode\n // @Description: Mount default operating mode on startup and after control is returned from autopilot\n // @Values: 0:Retracted,1:Neutral,2:MavLink Targeting,3:RC Targeting,4:GPS Point,5:SysID Target,6:Home Location\n // @User: Standard"},"MNT1_DEVID":{"Description":"Mount device ID, taking into account its type, bus and instance","DisplayName":"Mount Device ID","User":"Advanced","__field_text":"\n // @DisplayName: Mount Device ID\n // @Description: Mount device ID, taking into account its type, bus and instance\n // @User: Advanced"},"MNT1_LEAD_PTCH":{"Description":"Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot","DisplayName":"Mount Pitch stabilization lead time","Increment":".005","Range":{"high":"0.2","low":"0.0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch stabilization lead time\n // @Description: Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot\n // @Units: s\n // @Range: 0.0 0.2\n // @Increment: .005\n // @User: Standard"},"MNT1_LEAD_RLL":{"Description":"Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot","DisplayName":"Mount Roll stabilization lead time","Increment":".005","Range":{"high":"0.2","low":"0.0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll stabilization lead time\n // @Description: Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot\n // @Units: s\n // @Range: 0.0 0.2\n // @Increment: .005\n // @User: Standard"},"MNT1_NEUTRAL_X":{"Description":"Mount roll angle when in neutral position","DisplayName":"Mount roll angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount roll angle when in neutral position\n // @Description: Mount roll angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_NEUTRAL_Y":{"Description":"Mount pitch angle when in neutral position","DisplayName":"Mount pitch angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount pitch angle when in neutral position\n // @Description: Mount pitch angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_NEUTRAL_Z":{"Description":"Mount yaw angle when in neutral position","DisplayName":"Mount yaw angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount yaw angle when in neutral position\n // @Description: Mount yaw angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_PITCH_MAX":{"Description":"Mount Pitch angle maximum","DisplayName":"Mount Pitch angle maximum","Increment":"1","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch angle maximum\n // @Description: Mount Pitch angle maximum\n // @Units: deg\n // @Range: -90 90\n // @Increment: 1\n // @User: Standard"},"MNT1_PITCH_MIN":{"Description":"Mount Pitch angle minimum","DisplayName":"Mount Pitch angle minimum","Increment":"1","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch angle minimum\n // @Description: Mount Pitch angle minimum\n // @Units: deg\n // @Range: -90 90\n // @Increment: 1\n // @User: Standard"},"MNT1_RC_RATE":{"Description":"Pilot rate control's maximum rate. Set to zero to use angle control","DisplayName":"Mount RC Rate","Increment":"1","Range":{"high":"90","low":"0"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Mount RC Rate\n // @Description: Pilot rate control's maximum rate. Set to zero to use angle control\n // @Units: deg/s\n // @Range: 0 90\n // @Increment: 1\n // @User: Standard"},"MNT1_RETRACT_X":{"Description":"Mount roll angle when in retracted position","DisplayName":"Mount roll angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount roll angle when in retracted position\n // @Description: Mount roll angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_RETRACT_Y":{"Description":"Mount pitch angle when in retracted position","DisplayName":"Mount pitch angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount pitch angle when in retracted position\n // @Description: Mount pitch angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_RETRACT_Z":{"Description":"Mount yaw angle when in retracted position","DisplayName":"Mount yaw angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount yaw angle when in retracted position\n // @Description: Mount yaw angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT1_ROLL_MAX":{"Description":"Mount Roll angle maximum","DisplayName":"Mount Roll angle maximum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll angle maximum\n // @Description: Mount Roll angle maximum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT1_ROLL_MIN":{"Description":"Mount Roll angle minimum","DisplayName":"Mount Roll angle minimum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll angle minimum\n // @Description: Mount Roll angle minimum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT1_SYSID_DFLT":{"Description":"Default Target sysID for the mount to point to","DisplayName":"Mount Target sysID","RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: Mount Target sysID\n // @Description: Default Target sysID for the mount to point to\n // @RebootRequired: True\n // @User: Standard"},"MNT1_TYPE":{"Description":"Mount Type","DisplayName":"Mount Type","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"Servo","2":"3DR Solo","3":"Alexmos Serial","4":"SToRM32 MAVLink","5":"SToRM32 Serial","6":"Gremsy","7":"BrushlessPWM","8":"Siyi","9":"Scripting","10":"Xacti","11":"Viewpro"},"__field_text":"\n // @DisplayName: Mount Type\n // @Description: Mount Type\n // @Values: 0:None, 1:Servo, 2:3DR Solo, 3:Alexmos Serial, 4:SToRM32 MAVLink, 5:SToRM32 Serial, 6:Gremsy, 7:BrushlessPWM, 8:Siyi, 9:Scripting, 10:Xacti, 11:Viewpro\n // @RebootRequired: True\n // @User: Standard"},"MNT1_YAW_MAX":{"Description":"Mount Yaw angle maximum","DisplayName":"Mount Yaw angle maximum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Yaw angle maximum\n // @Description: Mount Yaw angle maximum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT1_YAW_MIN":{"Description":"Mount Yaw angle minimum","DisplayName":"Mount Yaw angle minimum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Yaw angle minimum\n // @Description: Mount Yaw angle minimum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT2_DEFLT_MODE":{"Description":"Mount default operating mode on startup and after control is returned from autopilot","DisplayName":"Mount default operating mode","User":"Standard","Values":{"0":"Retracted","1":"Neutral","2":"MavLink Targeting","3":"RC Targeting","4":"GPS Point","5":"SysID Target","6":"Home Location"},"__field_text":"\n // @DisplayName: Mount default operating mode\n // @Description: Mount default operating mode on startup and after control is returned from autopilot\n // @Values: 0:Retracted,1:Neutral,2:MavLink Targeting,3:RC Targeting,4:GPS Point,5:SysID Target,6:Home Location\n // @User: Standard"},"MNT2_DEVID":{"Description":"Mount device ID, taking into account its type, bus and instance","DisplayName":"Mount Device ID","User":"Advanced","__field_text":"\n // @DisplayName: Mount Device ID\n // @Description: Mount device ID, taking into account its type, bus and instance\n // @User: Advanced"},"MNT2_LEAD_PTCH":{"Description":"Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot","DisplayName":"Mount Pitch stabilization lead time","Increment":".005","Range":{"high":"0.2","low":"0.0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch stabilization lead time\n // @Description: Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot\n // @Units: s\n // @Range: 0.0 0.2\n // @Increment: .005\n // @User: Standard"},"MNT2_LEAD_RLL":{"Description":"Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot","DisplayName":"Mount Roll stabilization lead time","Increment":".005","Range":{"high":"0.2","low":"0.0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll stabilization lead time\n // @Description: Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot\n // @Units: s\n // @Range: 0.0 0.2\n // @Increment: .005\n // @User: Standard"},"MNT2_NEUTRAL_X":{"Description":"Mount roll angle when in neutral position","DisplayName":"Mount roll angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount roll angle when in neutral position\n // @Description: Mount roll angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_NEUTRAL_Y":{"Description":"Mount pitch angle when in neutral position","DisplayName":"Mount pitch angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount pitch angle when in neutral position\n // @Description: Mount pitch angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_NEUTRAL_Z":{"Description":"Mount yaw angle when in neutral position","DisplayName":"Mount yaw angle when in neutral position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount yaw angle when in neutral position\n // @Description: Mount yaw angle when in neutral position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_PITCH_MAX":{"Description":"Mount Pitch angle maximum","DisplayName":"Mount Pitch angle maximum","Increment":"1","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch angle maximum\n // @Description: Mount Pitch angle maximum\n // @Units: deg\n // @Range: -90 90\n // @Increment: 1\n // @User: Standard"},"MNT2_PITCH_MIN":{"Description":"Mount Pitch angle minimum","DisplayName":"Mount Pitch angle minimum","Increment":"1","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Pitch angle minimum\n // @Description: Mount Pitch angle minimum\n // @Units: deg\n // @Range: -90 90\n // @Increment: 1\n // @User: Standard"},"MNT2_RC_RATE":{"Description":"Pilot rate control's maximum rate. Set to zero to use angle control","DisplayName":"Mount RC Rate","Increment":"1","Range":{"high":"90","low":"0"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Mount RC Rate\n // @Description: Pilot rate control's maximum rate. Set to zero to use angle control\n // @Units: deg/s\n // @Range: 0 90\n // @Increment: 1\n // @User: Standard"},"MNT2_RETRACT_X":{"Description":"Mount roll angle when in retracted position","DisplayName":"Mount roll angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount roll angle when in retracted position\n // @Description: Mount roll angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_RETRACT_Y":{"Description":"Mount pitch angle when in retracted position","DisplayName":"Mount pitch angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount pitch angle when in retracted position\n // @Description: Mount pitch angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_RETRACT_Z":{"Description":"Mount yaw angle when in retracted position","DisplayName":"Mount yaw angle when in retracted position","Increment":"1","Range":{"high":"180.0","low":"-180.0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount yaw angle when in retracted position\n // @Description: Mount yaw angle when in retracted position\n // @Units: deg\n // @Range: -180.0 180.0\n // @Increment: 1\n // @User: Standard"},"MNT2_ROLL_MAX":{"Description":"Mount Roll angle maximum","DisplayName":"Mount Roll angle maximum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll angle maximum\n // @Description: Mount Roll angle maximum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT2_ROLL_MIN":{"Description":"Mount Roll angle minimum","DisplayName":"Mount Roll angle minimum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Roll angle minimum\n // @Description: Mount Roll angle minimum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT2_SYSID_DFLT":{"Description":"Default Target sysID for the mount to point to","DisplayName":"Mount Target sysID","RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: Mount Target sysID\n // @Description: Default Target sysID for the mount to point to\n // @RebootRequired: True\n // @User: Standard"},"MNT2_TYPE":{"Description":"Mount Type","DisplayName":"Mount Type","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"Servo","2":"3DR Solo","3":"Alexmos Serial","4":"SToRM32 MAVLink","5":"SToRM32 Serial","6":"Gremsy","7":"BrushlessPWM","8":"Siyi","9":"Scripting","10":"Xacti","11":"Viewpro"},"__field_text":"\n // @DisplayName: Mount Type\n // @Description: Mount Type\n // @Values: 0:None, 1:Servo, 2:3DR Solo, 3:Alexmos Serial, 4:SToRM32 MAVLink, 5:SToRM32 Serial, 6:Gremsy, 7:BrushlessPWM, 8:Siyi, 9:Scripting, 10:Xacti, 11:Viewpro\n // @RebootRequired: True\n // @User: Standard"},"MNT2_YAW_MAX":{"Description":"Mount Yaw angle maximum","DisplayName":"Mount Yaw angle maximum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Yaw angle maximum\n // @Description: Mount Yaw angle maximum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MNT2_YAW_MIN":{"Description":"Mount Yaw angle minimum","DisplayName":"Mount Yaw angle minimum","Increment":"1","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Mount Yaw angle minimum\n // @Description: Mount Yaw angle minimum\n // @Units: deg\n // @Range: -180 180\n // @Increment: 1\n // @User: Standard"},"MOT_BAT_CURR_MAX":{"Description":"Maximum current over which maximum throttle is limited (0 = Disabled)","DisplayName":"Motor Current Max","Range":{"high":"200","low":"0"},"Units":"A","User":"Advanced","__field_text":"\n // @DisplayName: Motor Current Max\n // @Description: Maximum current over which maximum throttle is limited (0 = Disabled)\n // @Range: 0 200\n // @Units: A\n // @User: Advanced"},"MOT_BAT_CURR_TC":{"Description":"Time constant used to limit the maximum current","DisplayName":"Motor Current Max Time Constant","Range":{"high":"10","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Motor Current Max Time Constant\n // @Description: Time constant used to limit the maximum current\n // @Range: 0 10\n // @Units: s\n // @User: Advanced"},"MOT_BAT_IDX":{"Description":"Which battery monitor should be used for doing compensation","DisplayName":"Battery compensation index","User":"Advanced","Values":{"0":"First battery","1":"Second battery"},"__field_text":"\n // @DisplayName: Battery compensation index\n // @Description: Which battery monitor should be used for doing compensation\n // @Values: 0:First battery, 1:Second battery\n // @User: Advanced"},"MOT_BAT_VOLT_MAX":{"Description":"Battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled","DisplayName":"Battery voltage compensation maximum voltage","Range":{"high":"53","low":"6"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Battery voltage compensation maximum voltage\n // @Description: Battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled\n // @Range: 6 53\n // @Units: V\n // @User: Advanced"},"MOT_BAT_VOLT_MIN":{"Description":"Battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.3 * cell count, 0 = Disabled","DisplayName":"Battery voltage compensation minimum voltage","Range":{"high":"42","low":"6"},"Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Battery voltage compensation minimum voltage\n // @Description: Battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.3 * cell count, 0 = Disabled\n // @Range: 6 42\n // @Units: V\n // @User: Advanced"},"MOT_BOOST_SCALE":{"Description":"Booster motor output scaling factor vs main throttle. The output to the BoostThrottle servo will be the main throttle times this scaling factor. A higher scaling factor will put more of the load on the booster motor. A value of 1 will set the BoostThrottle equal to the main throttle.","DisplayName":"Motor boost scale","Increment":"0.1","Range":{"high":"5","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Motor boost scale\n // @Description: Booster motor output scaling factor vs main throttle. The output to the BoostThrottle servo will be the main throttle times this scaling factor. A higher scaling factor will put more of the load on the booster motor. A value of 1 will set the BoostThrottle equal to the main throttle.\n // @Range: 0 5\n // @Increment: 0.1\n // @User: Advanced"},"MOT_HOVER_LEARN":{"Description":"Enable/Disable automatic learning of hover throttle","DisplayName":"Hover Value Learning","User":"Advanced","Values":{"0":"Disabled","1":"Learn","2":"Learn and Save"},"__field_text":"\n // @DisplayName: Hover Value Learning\n // @Description: Enable/Disable automatic learning of hover throttle\n // @Values{Copter}: 0:Disabled, 1:Learn, 2:Learn and Save\n // @Values{Sub}: 0:Disabled\n // @Values{Plane}: 0:Disabled, 1:Learn, 2:Learn and Save\n // @User: Advanced"},"MOT_OPTIONS":{"Bitmask":{"0":"Voltage compensation uses raw voltage"},"Description":"Motor options","DisplayName":"Motor options","User":"Advanced","__field_text":"\n // @DisplayName: Motor options\n // @Description: Motor options\n // @Bitmask: 0:Voltage compensation uses raw voltage\n // @User: Advanced"},"MOT_PWM_MAX":{"Description":"This sets the max PWM value in microseconds that will ever be output to the motors","DisplayName":"PWM output maximum","Range":{"high":"2000","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: PWM output maximum\n // @Description: This sets the max PWM value in microseconds that will ever be output to the motors\n // @Units: PWM\n // @Range: 0 2000\n // @User: Advanced"},"MOT_PWM_MIN":{"Description":"This sets the min PWM output value in microseconds that will ever be output to the motors","DisplayName":"PWM output minimum","Range":{"high":"2000","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: PWM output minimum\n // @Description: This sets the min PWM output value in microseconds that will ever be output to the motors\n // @Units: PWM\n // @Range: 0 2000\n // @User: Advanced"},"MOT_PWM_TYPE":{"Description":"This selects the output PWM type, allowing for normal PWM continuous output, OneShot, brushed or DShot motor output","DisplayName":"Output PWM type","RebootRequired":"True","User":"Advanced","Values":{"0":"Normal","1":"OneShot","2":"OneShot125","3":"Brushed","4":"DShot150","5":"DShot300","6":"DShot600","7":"DShot1200","8":"PWMRange"},"__field_text":"\n // @DisplayName: Output PWM type\n // @Description: This selects the output PWM type, allowing for normal PWM continuous output, OneShot, brushed or DShot motor output\n // @Values: 0:Normal,1:OneShot,2:OneShot125,3:Brushed,4:DShot150,5:DShot300,6:DShot600,7:DShot1200,8:PWMRange\n // @User: Advanced\n // @RebootRequired: True"},"MOT_SAFE_DISARM":{"Description":"Disables motor PWM output when disarmed","DisplayName":"Motor PWM output disabled when disarmed","User":"Advanced","Values":{"0":"PWM enabled while disarmed","1":"PWM disabled while disarmed"},"__field_text":"\n // @DisplayName: Motor PWM output disabled when disarmed\n // @Description: Disables motor PWM output when disarmed\n // @Values: 0:PWM enabled while disarmed, 1:PWM disabled while disarmed\n // @User: Advanced"},"MOT_SAFE_TIME":{"Description":"Time taken to disable and enable the motor PWM output when disarmed and armed.","DisplayName":"Time taken to disable and enable the motor PWM output when disarmed and armed.","Increment":"0.001","Range":{"high":"5","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Time taken to disable and enable the motor PWM output when disarmed and armed.\n // @Description: Time taken to disable and enable the motor PWM output when disarmed and armed.\n // @Range: 0 5\n // @Units: s\n // @Increment: 0.001\n // @User: Advanced"},"MOT_SLEW_DN_TIME":{"Description":"Time in seconds to slew output from full to zero. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.","DisplayName":"Output slew time for decreasing throttle","Increment":"0.001","Range":{"high":".5","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Output slew time for decreasing throttle\n // @Description: Time in seconds to slew output from full to zero. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.\n // @Range: 0 .5\n // @Units: s\n // @Increment: 0.001\n // @User: Advanced"},"MOT_SLEW_UP_TIME":{"Description":"Time in seconds to slew output from zero to full. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.","DisplayName":"Output slew time for increasing throttle","Increment":"0.001","Range":{"high":".5","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Output slew time for increasing throttle\n // @Description: Time in seconds to slew output from zero to full. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.\n // @Range: 0 .5\n // @Units: s\n // @Increment: 0.001\n // @User: Advanced"},"MOT_SPIN_ARM":{"Description":"Point at which the motors start to spin expressed as a number from 0 to 1 in the entire output range. Should be lower than MOT_SPIN_MIN.","DisplayName":"Motor Spin armed","User":"Advanced","Values":{"0.0":"Low","0.1":"Default","0.2":"High"},"__field_text":"\n // @DisplayName: Motor Spin armed\n // @Description: Point at which the motors start to spin expressed as a number from 0 to 1 in the entire output range. Should be lower than MOT_SPIN_MIN.\n // @Values: 0.0:Low, 0.1:Default, 0.2:High\n // @User: Advanced"},"MOT_SPIN_MAX":{"Description":"Point at which the thrust saturates expressed as a number from 0 to 1 in the entire output range","DisplayName":"Motor Spin maximum","User":"Advanced","Values":{"0.9":"Low","0.95":"Default","1.0":"High"},"__field_text":"\n // @DisplayName: Motor Spin maximum\n // @Description: Point at which the thrust saturates expressed as a number from 0 to 1 in the entire output range\n // @Values: 0.9:Low, 0.95:Default, 1.0:High\n // @User: Advanced"},"MOT_SPIN_MIN":{"Description":"Point at which the thrust starts expressed as a number from 0 to 1 in the entire output range. Should be higher than MOT_SPIN_ARM.","DisplayName":"Motor Spin minimum","User":"Advanced","Values":{"0.0":"Low","0.15":"Default","0.25":"High"},"__field_text":"\n // @DisplayName: Motor Spin minimum\n // @Description: Point at which the thrust starts expressed as a number from 0 to 1 in the entire output range. Should be higher than MOT_SPIN_ARM.\n // @Values: 0.0:Low, 0.15:Default, 0.25:High\n // @User: Advanced"},"MOT_SPOOL_TIME":{"Description":"Time in seconds to spool up the motors from zero to min throttle. ","DisplayName":"Spool up time","Increment":"0.1","Range":{"high":"2","low":"0.05"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Spool up time\n // @Description: Time in seconds to spool up the motors from zero to min throttle. \n // @Range: 0.05 2\n // @Units: s\n // @Increment: 0.1\n // @User: Advanced"},"MOT_SPOOL_TIM_DN":{"Description":"Time taken to spool down the motors from min to zero throttle. If set to 0 then SPOOL_TIME is used instead.","DisplayName":"Spool down time","Increment":"0.001","Range":{"high":"2","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Spool down time\n // @Description: Time taken to spool down the motors from min to zero throttle. If set to 0 then SPOOL_TIME is used instead.\n // @Range: 0 2\n // @Units: s\n // @Increment: 0.001\n // @User: Advanced"},"MOT_THST_EXPO":{"Description":"Motor thrust curve exponent (0.0 for linear to 1.0 for second order curve)","DisplayName":"Thrust Curve Expo","Range":{"high":"1.0","low":"-1.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Thrust Curve Expo\n // @Description: Motor thrust curve exponent (0.0 for linear to 1.0 for second order curve)\n // @Range: -1.0 1.0\n // @User: Advanced"},"MOT_THST_HOVER":{"Description":"Motor thrust needed to hover expressed as a number from 0 to 1","DisplayName":"Thrust Hover Value","Range":{"high":"0.8","low":"0.2"},"User":"Advanced","__field_text":"\n // @DisplayName: Thrust Hover Value\n // @Description: Motor thrust needed to hover expressed as a number from 0 to 1\n // @Range: 0.2 0.8\n // @User: Advanced"},"MOT_YAW_HEADROOM":{"Description":"Yaw control is given at least this pwm in microseconds range","DisplayName":"Matrix Yaw Min","Range":{"high":"500","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Matrix Yaw Min\n // @Description: Yaw control is given at least this pwm in microseconds range\n // @Range: 0 500\n // @Units: PWM\n // @User: Advanced"},"MOT_YAW_SV_ANGLE":{"Description":"Yaw servo's maximum lean angle (Tricopter only)","DisplayName":"Yaw Servo Max Lean Angle","Increment":"1","Range":{"high":"80","low":"5"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Yaw Servo Max Lean Angle\n // @Description: Yaw servo's maximum lean angle (Tricopter only)\n // @Range: 5 80\n // @Units: deg\n // @Increment: 1\n // @User: Standard"},"MSP_OPTIONS":{"Bitmask":{"0":"EnableTelemetryMode","1":"unused","2":"EnableBTFLFonts"},"Description":"A bitmask to set some MSP specific options: EnableTelemetryMode-allows \"push\" mode telemetry when only rx line of OSD ic connected to autopilot, EnableBTFLFonts-uses indexes corresponding to Betaflight fonts if OSD uses those instead of ArduPilot fonts.","DisplayName":"MSP OSD Options","User":"Standard","__field_text":"\n // @DisplayName: MSP OSD Options\n // @Description: A bitmask to set some MSP specific options: EnableTelemetryMode-allows \"push\" mode telemetry when only rx line of OSD ic connected to autopilot, EnableBTFLFonts-uses indexes corresponding to Betaflight fonts if OSD uses those instead of ArduPilot fonts.\n // @Bitmask: 0:EnableTelemetryMode, 1: unused, 2:EnableBTFLFonts\n // @User: Standard"},"MSP_OSD_NCELLS":{"Description":"Used for average cell voltage calculation","DisplayName":"Cell count override","User":"Standard","Values":{"0":"Auto","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","10":"10","11":"11","12":"12","13":"13","14":"14"},"__field_text":"\n // @DisplayName: Cell count override\n // @Description: Used for average cell voltage calculation\n // @Values: 0:Auto,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14\n // @User: Standard"},"NET_DHCP":{"Description":"Enable/Disable DHCP client","DisplayName":"DHCP client","RebootRequired":"True","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: DHCP client\n // @Description: Enable/Disable DHCP client\n // @Values: 0:Disable, 1:Enable\n // @RebootRequired: True\n // @User: Advanced"},"NET_ENABLED":{"Description":"Networking Enable","DisplayName":"Networking Enable","RebootRequired":"True","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Networking Enable\n // @Description: Networking Enable\n // @Values: 0:Disable,1:Enable\n // @RebootRequired: True\n // @User: Advanced"},"NET_GWADDR0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_GWADDR1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_GWADDR2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_GWADDR3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_IPADDR0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_IPADDR1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_IPADDR2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_IPADDR3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_MACADDR0":{"Description":"MAC address 1st byte","DisplayName":"MAC Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 1st byte\n // @Description: MAC address 1st byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_MACADDR1":{"Description":"MAC address 2nd byte","DisplayName":"MAC Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 2nd byte\n // @Description: MAC address 2nd byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_MACADDR2":{"Description":"MAC address 3rd byte","DisplayName":"MAC Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 3rd byte\n // @Description: MAC address 3rd byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_MACADDR3":{"Description":"MAC address 4th byte","DisplayName":"MAC Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 4th byte\n // @Description: MAC address 4th byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_MACADDR4":{"Description":"MAC address 5th byte","DisplayName":"MAC Address 5th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 5th byte\n // @Description: MAC address 5th byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_MACADDR5":{"Description":"MAC address 6th byte","DisplayName":"MAC Address 6th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: MAC Address 6th byte\n // @Description: MAC address 6th byte\n // @Range: 0 255\n // @RebootRequired: True\n // @User: Advanced"},"NET_NETMASK":{"Description":"Allows setting static subnet mask. The value is a count of consecutive bits. Examples: 24 = 255.255.255.0, 16 = 255.255.0.0","DisplayName":"IP Subnet mask","Range":{"high":"32","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: IP Subnet mask\n // @Description: Allows setting static subnet mask. The value is a count of consecutive bits. Examples: 24 = 255.255.255.0, 16 = 255.255.0.0\n // @Range: 0 32\n // @RebootRequired: True\n // @User: Advanced"},"NET_OPTIONS":{"Bitmask":{"0":"EnablePPP Ethernet gateway"},"Description":"Networking options","DisplayName":"Networking options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Networking options\n // @Description: Networking options\n // @Bitmask: 0:EnablePPP Ethernet gateway\n // @RebootRequired: True\n // @User: Advanced"},"NET_P1_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P1_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P1_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P1_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P1_PORT":{"Description":"Port number","DisplayName":"Port number","Range":{"high":"65535","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Port number\n // @Description: Port number\n // @Range: 0 65535\n // @RebootRequired: True\n // @User: Advanced"},"NET_P1_PROTOCOL":{"Description":"Networked serial port protocol","DisplayName":"Protocol","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Protocol\n // @Description: Networked serial port protocol\n // @User: Advanced\n // @RebootRequired: True\n // @CopyFieldsFrom: SERIAL1_PROTOCOL"},"NET_P1_TYPE":{"Description":"Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.","DisplayName":"Port type","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"UDP client","2":"UDP server","3":"TCP client","4":"TCP server"},"__field_text":"\n // @DisplayName: Port type\n // @Description: Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.\n // @Values: 0:Disabled, 1:UDP client, 2:UDP server, 3:TCP client, 4:TCP server\n // @RebootRequired: True\n // @User: Advanced"},"NET_P2_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P2_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P2_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P2_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P2_PORT":{"Description":"Port number","DisplayName":"Port number","Range":{"high":"65535","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Port number\n // @Description: Port number\n // @Range: 0 65535\n // @RebootRequired: True\n // @User: Advanced"},"NET_P2_PROTOCOL":{"Description":"Networked serial port protocol","DisplayName":"Protocol","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Protocol\n // @Description: Networked serial port protocol\n // @User: Advanced\n // @RebootRequired: True\n // @CopyFieldsFrom: SERIAL1_PROTOCOL"},"NET_P2_TYPE":{"Description":"Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.","DisplayName":"Port type","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"UDP client","2":"UDP server","3":"TCP client","4":"TCP server"},"__field_text":"\n // @DisplayName: Port type\n // @Description: Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.\n // @Values: 0:Disabled, 1:UDP client, 2:UDP server, 3:TCP client, 4:TCP server\n // @RebootRequired: True\n // @User: Advanced"},"NET_P3_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P3_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P3_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P3_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P3_PORT":{"Description":"Port number","DisplayName":"Port number","Range":{"high":"65535","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Port number\n // @Description: Port number\n // @Range: 0 65535\n // @RebootRequired: True\n // @User: Advanced"},"NET_P3_PROTOCOL":{"Description":"Networked serial port protocol","DisplayName":"Protocol","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Protocol\n // @Description: Networked serial port protocol\n // @User: Advanced\n // @RebootRequired: True\n // @CopyFieldsFrom: SERIAL1_PROTOCOL"},"NET_P3_TYPE":{"Description":"Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.","DisplayName":"Port type","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"UDP client","2":"UDP server","3":"TCP client","4":"TCP server"},"__field_text":"\n // @DisplayName: Port type\n // @Description: Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.\n // @Values: 0:Disabled, 1:UDP client, 2:UDP server, 3:TCP client, 4:TCP server\n // @RebootRequired: True\n // @User: Advanced"},"NET_P4_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P4_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P4_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P4_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_P4_PORT":{"Description":"Port number","DisplayName":"Port number","Range":{"high":"65535","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Port number\n // @Description: Port number\n // @Range: 0 65535\n // @RebootRequired: True\n // @User: Advanced"},"NET_P4_PROTOCOL":{"Description":"Networked serial port protocol","DisplayName":"Protocol","RebootRequired":"True","User":"Advanced","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Protocol\n // @Description: Networked serial port protocol\n // @User: Advanced\n // @RebootRequired: True\n // @CopyFieldsFrom: SERIAL1_PROTOCOL"},"NET_P4_TYPE":{"Description":"Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.","DisplayName":"Port type","RebootRequired":"True","User":"Advanced","Values":{"0":"Disabled","1":"UDP client","2":"UDP server","3":"TCP client","4":"TCP server"},"__field_text":"\n // @DisplayName: Port type\n // @Description: Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.\n // @Values: 0:Disabled, 1:UDP client, 2:UDP server, 3:TCP client, 4:TCP server\n // @RebootRequired: True\n // @User: Advanced"},"NET_REMPPP_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_REMPPP_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_REMPPP_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_REMPPP_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NET_TESTS":{"Bitmask":{"0":"UDP echo test","1":"TCP echo test","2":"TCP discard test"},"Description":"Enable/Disable networking tests","DisplayName":"Test enable flags","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Test enable flags\n // @Description: Enable/Disable networking tests\n // @Bitmask: 0:UDP echo test,1:TCP echo test, 2:TCP discard test\n // @RebootRequired: True\n // @User: Advanced"},"NET_TEST_IP0":{"Description":"IPv4 address. Example: 192.xxx.xxx.xxx","DisplayName":"IPv4 Address 1st byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 1st byte\n // @Description: IPv4 address. Example: 192.xxx.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_TEST_IP1":{"Description":"IPv4 address. Example: xxx.168.xxx.xxx","DisplayName":"IPv4 Address 2nd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 2nd byte\n // @Description: IPv4 address. Example: xxx.168.xxx.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_TEST_IP2":{"Description":"IPv4 address. Example: xxx.xxx.13.xxx","DisplayName":"IPv4 Address 3rd byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 3rd byte\n // @Description: IPv4 address. Example: xxx.xxx.13.xxx\n // @Range: 0 255\n // @RebootRequired: True"},"NET_TEST_IP3":{"Description":"IPv4 address. Example: xxx.xxx.xxx.14","DisplayName":"IPv4 Address 4th byte","Range":{"high":"255","low":"0"},"RebootRequired":"True","__field_text":"\n // @DisplayName: IPv4 Address 4th byte\n // @Description: IPv4 address. Example: xxx.xxx.xxx.14\n // @Range: 0 255\n // @RebootRequired: True"},"NMEA_MSG_EN":{"Bitmask":{"0":"GPGGA","1":"GPRMC","2":"PASHR"},"Description":"This is a bitmask of enabled NMEA messages. All messages will be sent consecutively at the same rate interval","DisplayName":"Messages Enable bitmask","User":"Standard","__field_text":"\n // @DisplayName: Messages Enable bitmask\n // @Description: This is a bitmask of enabled NMEA messages. All messages will be sent consecutively at the same rate interval\n // @Bitmask: 0:GPGGA,1:GPRMC,2:PASHR\n // @User: Standard"},"NMEA_RATE_MS":{"Description":"NMEA Output rate. This controls the interval at which all the enabled NMEA messages are sent. Most NMEA systems expect 100ms (10Hz) or slower.","DisplayName":"NMEA Output rate","Increment":"1","Range":{"high":"2000","low":"20"},"Units":"ms","User":"Standard","__field_text":"\n // @DisplayName: NMEA Output rate\n // @Description: NMEA Output rate. This controls the interval at which all the enabled NMEA messages are sent. Most NMEA systems expect 100ms (10Hz) or slower.\n // @Range: 20 2000\n // @Increment: 1\n // @Units: ms\n // @User: Standard"},"NTF_BUZZ_ON_LVL":{"Description":"Specifies pin level that indicates buzzer should play","DisplayName":"Buzzer-on pin logic level","User":"Advanced","Values":{"0":"LowIsOn","1":"HighIsOn"},"__field_text":"\n // @DisplayName: Buzzer-on pin logic level\n // @Description: Specifies pin level that indicates buzzer should play\n // @Values: 0:LowIsOn,1:HighIsOn\n // @User: Advanced"},"NTF_BUZZ_PIN":{"Description":"Enables to connect active buzzer to arbitrary pin. Requires 3-pin buzzer or additional MOSFET! Some the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Buzzer pin","User":"Advanced","Values":{"-1":"Disabled"},"__field_text":"\n // @DisplayName: Buzzer pin\n // @Description: Enables to connect active buzzer to arbitrary pin. Requires 3-pin buzzer or additional MOSFET! Some the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled\n // @User: Advanced"},"NTF_BUZZ_TYPES":{"Bitmask":{"0":"Built-in buzzer","1":"DShot","2":"DroneCAN"},"Description":"Controls what types of Buzzer will be enabled","DisplayName":"Buzzer Driver Types","User":"Advanced","__field_text":"\n // @DisplayName: Buzzer Driver Types\n // @Description: Controls what types of Buzzer will be enabled\n // @Bitmask: 0:Built-in buzzer, 1:DShot, 2:DroneCAN\n // @User: Advanced"},"NTF_BUZZ_VOLUME":{"Description":"Control the volume of the buzzer","DisplayName":"Buzzer volume","Range":{"high":"100","low":"0"},"Units":"%","__field_text":"\n // @DisplayName: Buzzer volume\n // @Description: Control the volume of the buzzer\n // @Range: 0 100\n // @Units: %"},"NTF_DISPLAY_TYPE":{"Description":"This sets up the type of on-board I2C display. Disabled by default.","DisplayName":"Type of on-board I2C display","User":"Advanced","Values":{"0":"Disable","1":"ssd1306","2":"sh1106","10":"SITL"},"__field_text":"\n // @DisplayName: Type of on-board I2C display\n // @Description: This sets up the type of on-board I2C display. Disabled by default.\n // @Values: 0:Disable,1:ssd1306,2:sh1106,10:SITL\n // @User: Advanced"},"NTF_LED_BRIGHT":{"Description":"Select the RGB LED brightness level. When USB is connected brightness will never be higher than low regardless of the setting.","DisplayName":"LED Brightness","User":"Advanced","Values":{"0":"Off","1":"Low","2":"Medium","3":"High"},"__field_text":"\n // @DisplayName: LED Brightness\n // @Description: Select the RGB LED brightness level. When USB is connected brightness will never be higher than low regardless of the setting.\n // @Values: 0:Off,1:Low,2:Medium,3:High\n // @User: Advanced"},"NTF_LED_LEN":{"Description":"The number of Serial LED's to use for notifications (NeoPixel's and ProfiLED)","DisplayName":"Serial LED String Length","Range":{"high":"32","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Serial LED String Length\n // @Description: The number of Serial LED's to use for notifications (NeoPixel's and ProfiLED)\n // @Range: 1 32\n // @User: Advanced\n // @RebootRequired: True"},"NTF_LED_OVERRIDE":{"Description":"Specifies the source for the colours and brightness for the LED. OutbackChallenge conforms to the MedicalExpress (https://uavchallenge.org/medical-express/) rules, essentially \"Green\" is disarmed (safe-to-approach), \"Red\" is armed (not safe-to-approach). Traffic light is a simplified color set, red when armed, yellow when the safety switch is not surpressing outputs (but disarmed), and green when outputs are surpressed and disarmed, the LED will blink faster if disarmed and failing arming checks.","DisplayName":"Specifies colour source for the RGBLed","User":"Advanced","Values":{"0":"Standard","1":"MAVLink/Scripting/AP_Periph","2":"OutbackChallenge","3":"TrafficLight"},"__field_text":"\n // @DisplayName: Specifies colour source for the RGBLed\n // @Description: Specifies the source for the colours and brightness for the LED. OutbackChallenge conforms to the MedicalExpress (https://uavchallenge.org/medical-express/) rules, essentially \"Green\" is disarmed (safe-to-approach), \"Red\" is armed (not safe-to-approach). Traffic light is a simplified color set, red when armed, yellow when the safety switch is not surpressing outputs (but disarmed), and green when outputs are surpressed and disarmed, the LED will blink faster if disarmed and failing arming checks.\n // @Values: 0:Standard,1:MAVLink/Scripting/AP_Periph,2:OutbackChallenge,3:TrafficLight\n // @User: Advanced"},"NTF_LED_TYPES":{"Bitmask":{"0":"Built-in LED","1":"Internal ToshibaLED","2":"External ToshibaLED","3":"External PCA9685","4":"Oreo LED","5":"DroneCAN","6":"NCP5623 External","7":"NCP5623 Internal","8":"NeoPixel","9":"ProfiLED","10":"Scripting","11":"DShot","12":"ProfiLED_SPI","13":"LP5562 External","14":"LP5562 Internal","15":"IS31FL3195 External","16":"IS31FL3195 Internal","17":"DiscreteRGB","18":"NeoPixelRGB"},"Description":"Controls what types of LEDs will be enabled","DisplayName":"LED Driver Types","User":"Advanced","__field_text":"\n // @DisplayName: LED Driver Types\n // @Description: Controls what types of LEDs will be enabled\n // @Bitmask: 0:Built-in LED, 1:Internal ToshibaLED, 2:External ToshibaLED, 3:External PCA9685, 4:Oreo LED, 5:DroneCAN, 6:NCP5623 External, 7:NCP5623 Internal, 8:NeoPixel, 9:ProfiLED, 10:Scripting, 11:DShot, 12:ProfiLED_SPI, 13:LP5562 External, 14: LP5562 Internal, 15:IS31FL3195 External, 16: IS31FL3195 Internal, 17: DiscreteRGB, 18: NeoPixelRGB\n // @User: Advanced"},"NTF_OREO_THEME":{"Description":"Enable/Disable Solo Oreo LED driver, 0 to disable, 1 for Aircraft theme, 2 for Rover theme","DisplayName":"OreoLED Theme","User":"Advanced","Values":{"0":"Disabled","1":"Aircraft","2":"Rover"},"__field_text":"\n // @DisplayName: OreoLED Theme\n // @Description: Enable/Disable Solo Oreo LED driver, 0 to disable, 1 for Aircraft theme, 2 for Rover theme\n // @Values: 0:Disabled,1:Aircraft,2:Rover\n // @User: Advanced"},"OA_BR_CONT_ANGLE":{"Description":" BendyRuler will resist changing current bearing if the change in bearing is over this angle","DisplayName":"BendyRuler's bearing change resistance threshold angle ","Increment":"5","Range":{"high":"180","low":"20"},"User":"Standard","__field_text":"\n // @DisplayName: BendyRuler's bearing change resistance threshold angle \n // @Description: BendyRuler will resist changing current bearing if the change in bearing is over this angle\n // @Range: 20 180\n // @Increment: 5\n // @User: Standard"},"OA_BR_CONT_RATIO":{"Description":" BendyRuler will avoid changing bearing unless ratio of previous margin from obstacle (or fence) to present calculated margin is atleast this much.","DisplayName":"Obstacle Avoidance margin ratio for BendyRuler to change bearing significantly ","Increment":"0.1","Range":{"high":"2","low":"1.1"},"User":"Standard","__field_text":"\n // @DisplayName: Obstacle Avoidance margin ratio for BendyRuler to change bearing significantly \n // @Description: BendyRuler will avoid changing bearing unless ratio of previous margin from obstacle (or fence) to present calculated margin is atleast this much.\n // @Range: 1.1 2\n // @Increment: 0.1\n // @User: Standard"},"OA_BR_LOOKAHEAD":{"Description":"Object Avoidance will look this many meters ahead of vehicle","DisplayName":"Object Avoidance look ahead distance maximum","Increment":"1","Range":{"high":"100","low":"1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Object Avoidance look ahead distance maximum\n // @Description: Object Avoidance will look this many meters ahead of vehicle\n // @Units: m\n // @Range: 1 100\n // @Increment: 1\n // @User: Standard"},"OA_BR_TYPE":{"Description":"BendyRuler will search for clear path along the direction defined by this parameter","DisplayName":"Type of BendyRuler","User":"Standard","Values":{"1":"Horizontal search","2":"Vertical search"},"__field_text":"\n // @DisplayName: Type of BendyRuler\n // @Description: BendyRuler will search for clear path along the direction defined by this parameter\n // @Values: 1:Horizontal search, 2:Vertical search\n // @User: Standard"},"OA_DB_ALT_MIN":{"Description":"OADatabase will reject obstacles if vehicle's altitude above home is below this parameter, in a 3 meter radius around home. Set 0 to disable this feature.","DisplayName":"OADatabase minimum altitude above home before storing obstacles","Range":{"high":"4","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase minimum altitude above home before storing obstacles\n // @Description: OADatabase will reject obstacles if vehicle's altitude above home is below this parameter, in a 3 meter radius around home. Set 0 to disable this feature.\n // @Units: m\n // @Range: 0 4\n // @User: Advanced"},"OA_DB_BEAM_WIDTH":{"Description":"Beam width of incoming lidar data","DisplayName":"OADatabase beam width","Range":{"high":"10","low":"1"},"RebootRequired":"True","Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase beam width\n // @Description: Beam width of incoming lidar data\n // @Units: deg\n // @Range: 1 10\n // @User: Advanced\n // @RebootRequired: True"},"OA_DB_DIST_MAX":{"Description":"Maximum distance of objects held in database. Set to zero to disable the limits","DisplayName":"OADatabase Distance Maximum","Range":{"high":"10","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase Distance Maximum\n // @Description: Maximum distance of objects held in database. Set to zero to disable the limits\n // @Units: m\n // @Range: 0 10\n // @User: Advanced"},"OA_DB_EXPIRE":{"Description":"OADatabase item timeout. The time an item will linger without any updates before it expires. Zero means never expires which is useful for a sent-once static environment but terrible for dynamic ones.","DisplayName":"OADatabase item timeout","Increment":"1","Range":{"high":"127","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase item timeout\n // @Description: OADatabase item timeout. The time an item will linger without any updates before it expires. Zero means never expires which is useful for a sent-once static environment but terrible for dynamic ones.\n // @Units: s\n // @Range: 0 127\n // @Increment: 1\n // @User: Advanced"},"OA_DB_OUTPUT":{"Description":"OADatabase output level to configure which database objects are sent to the ground station. All data is always available internally for avoidance algorithms.","DisplayName":"OADatabase output level","User":"Advanced","Values":{"0":"Disabled","1":"Send only HIGH importance items","2":"Send HIGH and NORMAL importance items","3":"Send all items"},"__field_text":"\n // @DisplayName: OADatabase output level\n // @Description: OADatabase output level to configure which database objects are sent to the ground station. All data is always available internally for avoidance algorithms.\n // @Values: 0:Disabled,1:Send only HIGH importance items,2:Send HIGH and NORMAL importance items,3:Send all items\n // @User: Advanced"},"OA_DB_QUEUE_SIZE":{"Description":"OADatabase queue maximum number of points. This in an input buffer size. Larger means it can handle larger bursts of incoming data points to filter into the database. No impact on cpu, only RAM. Recommend larger for faster datalinks or for sensors that generate a lot of data.","DisplayName":"OADatabase queue maximum number of points","Range":{"high":"200","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase queue maximum number of points\n // @Description: OADatabase queue maximum number of points. This in an input buffer size. Larger means it can handle larger bursts of incoming data points to filter into the database. No impact on cpu, only RAM. Recommend larger for faster datalinks or for sensors that generate a lot of data.\n // @Range: 1 200\n // @User: Advanced\n // @RebootRequired: True"},"OA_DB_RADIUS_MIN":{"Description":"Minimum radius of objects held in database","DisplayName":"OADatabase Minimum radius","Range":{"high":"10","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase Minimum radius\n // @Description: Minimum radius of objects held in database\n // @Units: m\n // @Range: 0 10\n // @User: Advanced"},"OA_DB_SIZE":{"Description":"OADatabase maximum number of points. Set to 0 to disable the OA Database. Larger means more points but is more cpu intensive to process","DisplayName":"OADatabase maximum number of points","Range":{"high":"10000","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: OADatabase maximum number of points\n // @Description: OADatabase maximum number of points. Set to 0 to disable the OA Database. Larger means more points but is more cpu intensive to process\n // @Range: 0 10000\n // @User: Advanced\n // @RebootRequired: True"},"OA_MARGIN_MAX":{"Description":"Object Avoidance will ignore objects more than this many meters from vehicle","DisplayName":"Object Avoidance wide margin distance","Increment":"1","Range":{"high":"100","low":"0.1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Object Avoidance wide margin distance\n // @Description: Object Avoidance will ignore objects more than this many meters from vehicle\n // @Units: m\n // @Range: 0.1 100\n // @Increment: 1\n // @User: Standard"},"OA_OPTIONS":{"Bitmask":{"1":"log Dijkstra points","2":"Allow fast waypoints (Dijkastras only)"},"Description":"Bitmask which will govern vehicles behaviour while recovering from Obstacle Avoidance (i.e Avoidance is turned off after the path ahead is clear). ","DisplayName":"Options while recovering from Object Avoidance","User":"Standard","__field_text":"\n // @DisplayName: Options while recovering from Object Avoidance\n // @Description: Bitmask which will govern vehicles behaviour while recovering from Obstacle Avoidance (i.e Avoidance is turned off after the path ahead is clear). \n // @Bitmask{Rover}: 0: Reset the origin of the waypoint to the present location, 1: log Dijkstra points\n // @Bitmask{Copter}: 1:log Dijkstra points, 2:Allow fast waypoints (Dijkastras only)\n // @User: Standard"},"OA_TYPE":{"Description":"Enabled/disable path planning around obstacles","DisplayName":"Object Avoidance Path Planning algorithm to use","User":"Standard","Values":{"0":"Disabled","1":"BendyRuler","2":"Dijkstra","3":"Dijkstra with BendyRuler"},"__field_text":"\n // @DisplayName: Object Avoidance Path Planning algorithm to use\n // @Description: Enabled/disable path planning around obstacles\n // @Values: 0:Disabled,1:BendyRuler,2:Dijkstra,3:Dijkstra with BendyRuler\n // @User: Standard"},"OSD1_ACRVOLT_EN":{"Description":"Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"ACRVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ACRVOLT_EN\n // @Description: Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ACRVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"ACRVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ACRVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"ACRVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ALTITUDE_EN":{"Description":"Enables display of altitude AGL","DisplayName":"ALTITUDE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ALTITUDE_EN\n // @Description: Enables display of altitude AGL\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ALTITUDE_X":{"Description":"Horizontal position on screen","DisplayName":"ALTITUDE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ALTITUDE_Y":{"Description":"Vertical position on screen","DisplayName":"ALTITUDE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ARMING_EN":{"Description":"Displays arming status (MSP OSD only)","DisplayName":"ARMING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ARMING_EN\n // @Description: Displays arming status (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ARMING_X":{"Description":"Horizontal position on screen","DisplayName":"ARMING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ARMING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ARMING_Y":{"Description":"Vertical position on screen","DisplayName":"ARMING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ARMING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ASPD1_EN":{"Description":"Displays airspeed reported directly from primary airspeed sensor","DisplayName":"ASPD1_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD1_EN\n // @Description: Displays airspeed reported directly from primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ASPD1_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD1_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ASPD1_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD1_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ASPD2_EN":{"Description":"Displays airspeed reported directly from secondary airspeed sensor","DisplayName":"ASPD2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD2_EN\n // @Description: Displays airspeed reported directly from secondary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ASPD2_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ASPD2_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ASPEED_EN":{"Description":"Displays airspeed value being used by TECS (fused value)","DisplayName":"ASPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPEED_EN\n // @Description: Displays airspeed value being used by TECS (fused value)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ASPEED_X":{"Description":"Horizontal position on screen","DisplayName":"ASPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ASPEED_Y":{"Description":"Vertical position on screen","DisplayName":"ASPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ATEMP_EN":{"Description":"Displays temperature reported by primary airspeed sensor","DisplayName":"ATEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ATEMP_EN\n // @Description: Displays temperature reported by primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ATEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ATEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ATEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ATEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_AVGCELLV_EN":{"Description":"Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"AVGCELLV_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: AVGCELLV_EN\n // @Description: Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD1_AVGCELLV_X":{"Description":"Horizontal position on screen","DisplayName":"AVGCELLV_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_AVGCELLV_Y":{"Description":"Vertical position on screen","DisplayName":"AVGCELLV_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BAT2USED_EN":{"Description":"Displays secondary battery mAh consumed","DisplayName":"BAT2USED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2USED_EN\n // @Description: Displays secondary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BAT2USED_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2USED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BAT2USED_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2USED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BAT2_VLT_EN":{"Description":"Displays battery2 voltage","DisplayName":"BAT2VLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2VLT_EN\n // @Description: Displays battery2 voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BAT2_VLT_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2VLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BAT2_VLT_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2VLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BATTBAR_EN":{"Description":"Displays battery usage bar (MSP OSD only)","DisplayName":"BATT_BAR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATT_BAR_EN\n // @Description: Displays battery usage bar (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BATTBAR_X":{"Description":"Horizontal position on screen","DisplayName":"BATT_BAR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BATTBAR_Y":{"Description":"Vertical position on screen","DisplayName":"BATT_BAR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BATUSED_EN":{"Description":"Displays primary battery mAh consumed","DisplayName":"BATUSED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATUSED_EN\n // @Description: Displays primary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BATUSED_X":{"Description":"Horizontal position on screen","DisplayName":"BATUSED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BATUSED_Y":{"Description":"Vertical position on screen","DisplayName":"BATUSED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BAT_VOLT_EN":{"Description":"Displays main battery voltage","DisplayName":"BATVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATVOLT_EN\n // @Description: Displays main battery voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BAT_VOLT_X":{"Description":"Horizontal position on screen","DisplayName":"BATVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BAT_VOLT_Y":{"Description":"Vertical position on screen","DisplayName":"BATVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_BTEMP_EN":{"Description":"Displays temperature reported by secondary barometer","DisplayName":"BTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BTEMP_EN\n // @Description: Displays temperature reported by secondary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD1_BTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"BTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_BTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"BTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CALLSIGN_EN":{"Description":"Displays callsign from callsign.txt on microSD card","DisplayName":"CALLSIGN_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CALLSIGN_EN\n // @Description: Displays callsign from callsign.txt on microSD card\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CALLSIGN_X":{"Description":"Horizontal position on screen","DisplayName":"CALLSIGN_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CALLSIGN_Y":{"Description":"Vertical position on screen","DisplayName":"CALLSIGN_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CELLVOLT_EN":{"Description":"Displays average cell voltage (MSP OSD only)","DisplayName":"CELL_VOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CELL_VOLT_EN\n // @Description: Displays average cell voltage (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CELLVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"CELL_VOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CELLVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"CELL_VOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD1_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD1_CLIMBEFF_EN":{"Description":"Displays climb efficiency (climb rate/current)","DisplayName":"CLIMBEFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLIMBEFF_EN\n // @Description: Displays climb efficiency (climb rate/current)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CLIMBEFF_X":{"Description":"Horizontal position on screen","DisplayName":"CLIMBEFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CLIMBEFF_Y":{"Description":"Vertical position on screen","DisplayName":"CLIMBEFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CLK_EN":{"Description":"Displays a clock panel based on AP_RTC local time","DisplayName":"CLK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLK_EN\n // @Description: Displays a clock panel based on AP_RTC local time\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CLK_X":{"Description":"Horizontal position on screen","DisplayName":"CLK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CLK_Y":{"Description":"Vertical position on screen","DisplayName":"CLK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_COMPASS_EN":{"Description":"Enables display of compass rose","DisplayName":"COMPASS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: COMPASS_EN\n // @Description: Enables display of compass rose\n // @Values: 0:Disabled,1:Enabled"},"OSD1_COMPASS_X":{"Description":"Horizontal position on screen","DisplayName":"COMPASS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_COMPASS_Y":{"Description":"Vertical position on screen","DisplayName":"COMPASS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CRSSHAIR_EN":{"Description":"Displays artificial horizon crosshair (MSP OSD only)","DisplayName":"CRSSHAIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CRSSHAIR_EN\n // @Description: Displays artificial horizon crosshair (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CRSSHAIR_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD1_CRSSHAIR_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD1_CURRENT2_EN":{"Description":"Displays 2nd battery current","DisplayName":"CURRENT2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT2_EN\n // @Description: Displays 2nd battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CURRENT2_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CURRENT2_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_CURRENT_EN":{"Description":"Displays main battery current","DisplayName":"CURRENT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT_EN\n // @Description: Displays main battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD1_CURRENT_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_CURRENT_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_DIST_EN":{"Description":"Displays total distance flown","DisplayName":"DIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DIST_EN\n // @Description: Displays total distance flown\n // @Values: 0:Disabled,1:Enabled"},"OSD1_DIST_X":{"Description":"Horizontal position on screen","DisplayName":"DIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: DIST_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_DIST_Y":{"Description":"Vertical position on screen","DisplayName":"DIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: DIST_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_EFF_EN":{"Description":"Displays flight efficiency (mAh/km or /mi)","DisplayName":"EFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFF_EN\n // @Description: Displays flight efficiency (mAh/km or /mi)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_EFF_X":{"Description":"Horizontal position on screen","DisplayName":"EFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: EFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_EFF_Y":{"Description":"Vertical position on screen","DisplayName":"EFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: EFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD1_ESCAMPS_EN":{"Description":"Displays first esc's current","DisplayName":"ESCAMPS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCAMPS_EN\n // @Description: Displays first esc's current\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ESCAMPS_X":{"Description":"Horizontal position on screen","DisplayName":"ESCAMPS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ESCAMPS_Y":{"Description":"Vertical position on screen","DisplayName":"ESCAMPS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ESCRPM_EN":{"Description":"Displays first esc's rpm","DisplayName":"ESCRPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCRPM_EN\n // @Description: Displays first esc's rpm\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ESCRPM_X":{"Description":"Horizontal position on screen","DisplayName":"ESCRPM_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ESCRPM_Y":{"Description":"Vertical position on screen","DisplayName":"ESCRPM_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ESCTEMP_EN":{"Description":"Displays first esc's temp","DisplayName":"ESCTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCTEMP_EN\n // @Description: Displays first esc's temp\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ESCTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ESCTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ESCTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ESCTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_FENCE_EN":{"Description":"Displays indication of fence enable and breach","DisplayName":"FENCE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FENCE_EN\n // @Description: Displays indication of fence enable and breach\n // @Values: 0:Disabled,1:Enabled"},"OSD1_FENCE_X":{"Description":"Horizontal position on screen","DisplayName":"FENCE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FENCE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_FENCE_Y":{"Description":"Vertical position on screen","DisplayName":"FENCE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FENCE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_FLTIME_EN":{"Description":"Displays total flight time","DisplayName":"FLTIME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTIME_EN\n // @Description: Displays total flight time\n // @Values: 0:Disabled,1:Enabled"},"OSD1_FLTIME_X":{"Description":"Horizontal position on screen","DisplayName":"FLTIME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_FLTIME_Y":{"Description":"Vertical position on screen","DisplayName":"FLTIME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_FLTMODE_EN":{"Description":"Displays flight mode","DisplayName":"FLTMODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTMODE_EN\n // @Description: Displays flight mode\n // @Values: 0:Disabled,1:Enabled"},"OSD1_FLTMODE_X":{"Description":"Horizontal position on screen","DisplayName":"FLTMODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_FLTMODE_Y":{"Description":"Vertical position on screen","DisplayName":"FLTMODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_FONT":{"Description":"Sets the font index for this screen (MSP DisplayPort only)","DisplayName":"Sets the font index for this screen (MSP DisplayPort only)","Range":{"high":"21","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Sets the font index for this screen (MSP DisplayPort only)\n // @Description: Sets the font index for this screen (MSP DisplayPort only)\n // @Range: 0 21\n // @User: Standard"},"OSD1_GPSLAT_EN":{"Description":"Displays GPS latitude","DisplayName":"GPSLAT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLAT_EN\n // @Description: Displays GPS latitude\n // @Values: 0:Disabled,1:Enabled"},"OSD1_GPSLAT_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLAT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_GPSLAT_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLAT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_GPSLONG_EN":{"Description":"Displays GPS longitude","DisplayName":"GPSLONG_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLONG_EN\n // @Description: Displays GPS longitude\n // @Values: 0:Disabled,1:Enabled"},"OSD1_GPSLONG_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLONG_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_GPSLONG_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLONG_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_GSPEED_EN":{"Description":"Displays GPS ground speed","DisplayName":"GSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GSPEED_EN\n // @Description: Displays GPS ground speed\n // @Values: 0:Disabled,1:Enabled"},"OSD1_GSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"GSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_GSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"GSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_HDOP_EN":{"Description":"Displays Horizontal Dilution Of Position","DisplayName":"HDOP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HDOP_EN\n // @Description: Displays Horizontal Dilution Of Position\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HDOP_X":{"Description":"Horizontal position on screen","DisplayName":"HDOP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HDOP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_HDOP_Y":{"Description":"Vertical position on screen","DisplayName":"HDOP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HDOP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_HEADING_EN":{"Description":"Displays heading","DisplayName":"HEADING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HEADING_EN\n // @Description: Displays heading\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HEADING_X":{"Description":"Horizontal position on screen","DisplayName":"HEADING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HEADING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_HEADING_Y":{"Description":"Vertical position on screen","DisplayName":"HEADING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HEADING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_HOMEDIR_EN":{"Description":"Displays relative direction to HOME (MSP OSD only)","DisplayName":"HOMEDIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIR_EN\n // @Description: Displays relative direction to HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HOMEDIR_X":{"Description":"Horizontal position on screen","DisplayName":"HOMEDIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_HOMEDIR_Y":{"Description":"Vertical position on screen","DisplayName":"HOMEDIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_HOMEDIST_EN":{"Description":"Displays distance from HOME (MSP OSD only)","DisplayName":"HOMEDIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIST_EN\n // @Description: Displays distance from HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HOMEDIST_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"HOMEDIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD1_HOMEDIST_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"HOMEDIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD1_HOME_EN":{"Description":"Displays distance and relative direction to HOME","DisplayName":"HOME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOME_EN\n // @Description: Displays distance and relative direction to HOME\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HOME_X":{"Description":"Horizontal position on screen","DisplayName":"HOME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_HOME_Y":{"Description":"Vertical position on screen","DisplayName":"HOME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_HORIZON_EN":{"Description":"Displays artificial horizon","DisplayName":"HORIZON_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HORIZON_EN\n // @Description: Displays artificial horizon\n // @Values: 0:Disabled,1:Enabled"},"OSD1_HORIZON_X":{"Description":"Horizontal position on screen","DisplayName":"HORIZON_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_HORIZON_Y":{"Description":"Vertical position on screen","DisplayName":"HORIZON_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_LINK_Q_EN":{"Description":"Displays Receiver link quality","DisplayName":"LINK_Q_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: LINK_Q_EN\n // @Description: Displays Receiver link quality\n // @Values: 0:Disabled,1:Enabled"},"OSD1_LINK_Q_X":{"Description":"Horizontal position on screen","DisplayName":"LINK_Q_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_LINK_Q_Y":{"Description":"Vertical position on screen","DisplayName":"LINK_Q_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_MESSAGE_EN":{"Description":"Displays Mavlink messages","DisplayName":"MESSAGE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: MESSAGE_EN\n // @Description: Displays Mavlink messages\n // @Values: 0:Disabled,1:Enabled"},"OSD1_MESSAGE_X":{"Description":"Horizontal position on screen","DisplayName":"MESSAGE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_MESSAGE_Y":{"Description":"Vertical position on screen","DisplayName":"MESSAGE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_PITCH_EN":{"Description":"Displays degrees of pitch from level","DisplayName":"PITCH_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PITCH_EN\n // @Description: Displays degrees of pitch from level\n // @Values: 0:Disabled,1:Enabled"},"OSD1_PITCH_X":{"Description":"Horizontal position on screen","DisplayName":"PITCH_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PITCH_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_PITCH_Y":{"Description":"Vertical position on screen","DisplayName":"PITCH_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PITCH_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_PLUSCODE_EN":{"Description":"Displays pluscode (OLC) element","DisplayName":"PLUSCODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PLUSCODE_EN\n // @Description: Displays pluscode (OLC) element\n // @Values: 0:Disabled,1:Enabled"},"OSD1_PLUSCODE_X":{"Description":"Horizontal position on screen","DisplayName":"PLUSCODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_PLUSCODE_Y":{"Description":"Vertical position on screen","DisplayName":"PLUSCODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_POWER_EN":{"Description":"Displays power (MSP OSD only)","DisplayName":"POWER_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: POWER_EN\n // @Description: Displays power (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_POWER_X":{"Description":"Horizontal position on screen","DisplayName":"POWER_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: POWER_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_POWER_Y":{"Description":"Vertical position on screen","DisplayName":"POWER_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: POWER_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_RESTVOLT_EN":{"Description":"Displays main battery resting voltage","DisplayName":"RESTVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RESTVOLT_EN\n // @Description: Displays main battery resting voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD1_RESTVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"RESTVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_RESTVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"RESTVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_RNGF_EN":{"Description":"Displays a rangefinder's distance in cm","DisplayName":"RNGF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RNGF_EN\n // @Description: Displays a rangefinder's distance in cm\n // @Values: 0:Disabled,1:Enabled"},"OSD1_RNGF_X":{"Description":"Horizontal position on screen","DisplayName":"RNGF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RNGF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_RNGF_Y":{"Description":"Vertical position on screen","DisplayName":"RNGF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RNGF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_ROLL_EN":{"Description":"Displays degrees of roll from level","DisplayName":"ROLL_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ROLL_EN\n // @Description: Displays degrees of roll from level\n // @Values: 0:Disabled,1:Enabled"},"OSD1_ROLL_X":{"Description":"Horizontal position on screen","DisplayName":"ROLL_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ROLL_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_ROLL_Y":{"Description":"Vertical position on screen","DisplayName":"ROLL_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ROLL_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_RPM_EN":{"Description":"Displays main rotor revs/min","DisplayName":"RPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n\t// @DisplayName: RPM_EN\n\t// @Description: Displays main rotor revs/min\n\t// @Values: 0:Disabled,1:Enabled"},"OSD1_RPM_X":{"Description":"Horizontal position on screen","DisplayName":"RPM_X","Range":{"high":"29","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_X\n\t// @Description: Horizontal position on screen\n\t// @Range: 0 29"},"OSD1_RPM_Y":{"Description":"Vertical position on screen","DisplayName":"RPM_Y","Range":{"high":"15","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_Y\n\t// @Description: Vertical position on screen\n\t// @Range: 0 15"},"OSD1_RSSI_EN":{"Description":"Displays RC signal strength","DisplayName":"RSSI_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RSSI_EN\n // @Description: Displays RC signal strength\n // @Values: 0:Disabled,1:Enabled"},"OSD1_RSSI_X":{"Description":"Horizontal position on screen","DisplayName":"RSSI_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RSSI_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_RSSI_Y":{"Description":"Vertical position on screen","DisplayName":"RSSI_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RSSI_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_SATS_EN":{"Description":"Displays number of acquired satellites","DisplayName":"SATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SATS_EN\n // @Description: Displays number of acquired satellites\n // @Values: 0:Disabled,1:Enabled"},"OSD1_SATS_X":{"Description":"Horizontal position on screen","DisplayName":"SATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_SATS_Y":{"Description":"Vertical position on screen","DisplayName":"SATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_SIDEBARS_EN":{"Description":"Displays artificial horizon side bars","DisplayName":"SIDEBARS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SIDEBARS_EN\n // @Description: Displays artificial horizon side bars\n // @Values: 0:Disabled,1:Enabled"},"OSD1_SIDEBARS_X":{"Description":"Horizontal position on screen","DisplayName":"SIDEBARS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_SIDEBARS_Y":{"Description":"Vertical position on screen","DisplayName":"SIDEBARS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_STATS_EN":{"Description":"Displays flight stats","DisplayName":"STATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: STATS_EN\n // @Description: Displays flight stats\n // @Values: 0:Disabled,1:Enabled"},"OSD1_STATS_X":{"Description":"Horizontal position on screen","DisplayName":"STATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: STATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_STATS_Y":{"Description":"Vertical position on screen","DisplayName":"STATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: STATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_TEMP_EN":{"Description":"Displays temperature reported by primary barometer","DisplayName":"TEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TEMP_EN\n // @Description: Displays temperature reported by primary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD1_TEMP_X":{"Description":"Horizontal position on screen","DisplayName":"TEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_TEMP_Y":{"Description":"Vertical position on screen","DisplayName":"TEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_TER_HGT_EN":{"Description":"Displays Height above terrain","DisplayName":"TER_HGT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TER_HGT_EN\n // @Description: Displays Height above terrain\n // @Values: 0:Disabled,1:Enabled"},"OSD1_TER_HGT_X":{"Description":"Horizontal position on screen","DisplayName":"TER_HGT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_TER_HGT_Y":{"Description":"Vertical position on screen","DisplayName":"TER_HGT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_THROTTLE_EN":{"Description":"Displays actual throttle percentage being sent to motor(s)","DisplayName":"THROTTLE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: THROTTLE_EN\n // @Description: Displays actual throttle percentage being sent to motor(s)\n // @Values: 0:Disabled,1:Enabled"},"OSD1_THROTTLE_X":{"Description":"Horizontal position on screen","DisplayName":"THROTTLE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_THROTTLE_Y":{"Description":"Vertical position on screen","DisplayName":"THROTTLE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_TXT_RES":{"Description":"Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)","DisplayName":"Sets the overlay text resolution (MSP DisplayPort only)","User":"Standard","Values":{"0":"30x16","1":"50x18"},"__field_text":"\n // @DisplayName: Sets the overlay text resolution (MSP DisplayPort only)\n // @Description: Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)\n // @Values: 0:30x16,1:50x18\n // @User: Standard"},"OSD1_VSPEED_EN":{"Description":"Displays climb rate","DisplayName":"VSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VSPEED_EN\n // @Description: Displays climb rate\n // @Values: 0:Disabled,1:Enabled"},"OSD1_VSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"VSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_VSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"VSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_VTX_PWR_EN":{"Description":"Displays VTX Power","DisplayName":"VTX_PWR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VTX_PWR_EN\n // @Description: Displays VTX Power\n // @Values: 0:Disabled,1:Enabled"},"OSD1_VTX_PWR_X":{"Description":"Horizontal position on screen","DisplayName":"VTX_PWR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_VTX_PWR_Y":{"Description":"Vertical position on screen","DisplayName":"VTX_PWR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_WAYPOINT_EN":{"Description":"Displays bearing and distance to next waypoint","DisplayName":"WAYPOINT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WAYPOINT_EN\n // @Description: Displays bearing and distance to next waypoint\n // @Values: 0:Disabled,1:Enabled"},"OSD1_WAYPOINT_X":{"Description":"Horizontal position on screen","DisplayName":"WAYPOINT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_WAYPOINT_Y":{"Description":"Vertical position on screen","DisplayName":"WAYPOINT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_WIND_EN":{"Description":"Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted","DisplayName":"WIND_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WIND_EN\n // @Description: Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted\n // @Values: 0:Disabled,1:Enabled"},"OSD1_WIND_X":{"Description":"Horizontal position on screen","DisplayName":"WIND_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WIND_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_WIND_Y":{"Description":"Vertical position on screen","DisplayName":"WIND_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WIND_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD1_XTRACK_EN":{"Description":"Displays crosstrack error","DisplayName":"XTRACK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: XTRACK_EN\n // @Description: Displays crosstrack error\n // @Values: 0:Disabled,1:Enabled"},"OSD1_XTRACK_X":{"Description":"Horizontal position on screen","DisplayName":"XTRACK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD1_XTRACK_Y":{"Description":"Vertical position on screen","DisplayName":"XTRACK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ACRVOLT_EN":{"Description":"Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"ACRVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ACRVOLT_EN\n // @Description: Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ACRVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"ACRVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ACRVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"ACRVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ALTITUDE_EN":{"Description":"Enables display of altitude AGL","DisplayName":"ALTITUDE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ALTITUDE_EN\n // @Description: Enables display of altitude AGL\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ALTITUDE_X":{"Description":"Horizontal position on screen","DisplayName":"ALTITUDE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ALTITUDE_Y":{"Description":"Vertical position on screen","DisplayName":"ALTITUDE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ARMING_EN":{"Description":"Displays arming status (MSP OSD only)","DisplayName":"ARMING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ARMING_EN\n // @Description: Displays arming status (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ARMING_X":{"Description":"Horizontal position on screen","DisplayName":"ARMING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ARMING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ARMING_Y":{"Description":"Vertical position on screen","DisplayName":"ARMING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ARMING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ASPD1_EN":{"Description":"Displays airspeed reported directly from primary airspeed sensor","DisplayName":"ASPD1_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD1_EN\n // @Description: Displays airspeed reported directly from primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ASPD1_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD1_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ASPD1_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD1_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ASPD2_EN":{"Description":"Displays airspeed reported directly from secondary airspeed sensor","DisplayName":"ASPD2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD2_EN\n // @Description: Displays airspeed reported directly from secondary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ASPD2_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ASPD2_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ASPEED_EN":{"Description":"Displays airspeed value being used by TECS (fused value)","DisplayName":"ASPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPEED_EN\n // @Description: Displays airspeed value being used by TECS (fused value)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ASPEED_X":{"Description":"Horizontal position on screen","DisplayName":"ASPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ASPEED_Y":{"Description":"Vertical position on screen","DisplayName":"ASPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ATEMP_EN":{"Description":"Displays temperature reported by primary airspeed sensor","DisplayName":"ATEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ATEMP_EN\n // @Description: Displays temperature reported by primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ATEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ATEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ATEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ATEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_AVGCELLV_EN":{"Description":"Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"AVGCELLV_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: AVGCELLV_EN\n // @Description: Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD2_AVGCELLV_X":{"Description":"Horizontal position on screen","DisplayName":"AVGCELLV_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_AVGCELLV_Y":{"Description":"Vertical position on screen","DisplayName":"AVGCELLV_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BAT2USED_EN":{"Description":"Displays secondary battery mAh consumed","DisplayName":"BAT2USED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2USED_EN\n // @Description: Displays secondary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BAT2USED_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2USED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BAT2USED_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2USED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BAT2_VLT_EN":{"Description":"Displays battery2 voltage","DisplayName":"BAT2VLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2VLT_EN\n // @Description: Displays battery2 voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BAT2_VLT_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2VLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BAT2_VLT_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2VLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BATTBAR_EN":{"Description":"Displays battery usage bar (MSP OSD only)","DisplayName":"BATT_BAR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATT_BAR_EN\n // @Description: Displays battery usage bar (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BATTBAR_X":{"Description":"Horizontal position on screen","DisplayName":"BATT_BAR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BATTBAR_Y":{"Description":"Vertical position on screen","DisplayName":"BATT_BAR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BATUSED_EN":{"Description":"Displays primary battery mAh consumed","DisplayName":"BATUSED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATUSED_EN\n // @Description: Displays primary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BATUSED_X":{"Description":"Horizontal position on screen","DisplayName":"BATUSED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BATUSED_Y":{"Description":"Vertical position on screen","DisplayName":"BATUSED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BAT_VOLT_EN":{"Description":"Displays main battery voltage","DisplayName":"BATVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATVOLT_EN\n // @Description: Displays main battery voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BAT_VOLT_X":{"Description":"Horizontal position on screen","DisplayName":"BATVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BAT_VOLT_Y":{"Description":"Vertical position on screen","DisplayName":"BATVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_BTEMP_EN":{"Description":"Displays temperature reported by secondary barometer","DisplayName":"BTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BTEMP_EN\n // @Description: Displays temperature reported by secondary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD2_BTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"BTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_BTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"BTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CALLSIGN_EN":{"Description":"Displays callsign from callsign.txt on microSD card","DisplayName":"CALLSIGN_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CALLSIGN_EN\n // @Description: Displays callsign from callsign.txt on microSD card\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CALLSIGN_X":{"Description":"Horizontal position on screen","DisplayName":"CALLSIGN_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CALLSIGN_Y":{"Description":"Vertical position on screen","DisplayName":"CALLSIGN_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CELLVOLT_EN":{"Description":"Displays average cell voltage (MSP OSD only)","DisplayName":"CELL_VOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CELL_VOLT_EN\n // @Description: Displays average cell voltage (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CELLVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"CELL_VOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CELLVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"CELL_VOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD2_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD2_CLIMBEFF_EN":{"Description":"Displays climb efficiency (climb rate/current)","DisplayName":"CLIMBEFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLIMBEFF_EN\n // @Description: Displays climb efficiency (climb rate/current)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CLIMBEFF_X":{"Description":"Horizontal position on screen","DisplayName":"CLIMBEFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CLIMBEFF_Y":{"Description":"Vertical position on screen","DisplayName":"CLIMBEFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CLK_EN":{"Description":"Displays a clock panel based on AP_RTC local time","DisplayName":"CLK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLK_EN\n // @Description: Displays a clock panel based on AP_RTC local time\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CLK_X":{"Description":"Horizontal position on screen","DisplayName":"CLK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CLK_Y":{"Description":"Vertical position on screen","DisplayName":"CLK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_COMPASS_EN":{"Description":"Enables display of compass rose","DisplayName":"COMPASS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: COMPASS_EN\n // @Description: Enables display of compass rose\n // @Values: 0:Disabled,1:Enabled"},"OSD2_COMPASS_X":{"Description":"Horizontal position on screen","DisplayName":"COMPASS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_COMPASS_Y":{"Description":"Vertical position on screen","DisplayName":"COMPASS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CRSSHAIR_EN":{"Description":"Displays artificial horizon crosshair (MSP OSD only)","DisplayName":"CRSSHAIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CRSSHAIR_EN\n // @Description: Displays artificial horizon crosshair (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CRSSHAIR_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD2_CRSSHAIR_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD2_CURRENT2_EN":{"Description":"Displays 2nd battery current","DisplayName":"CURRENT2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT2_EN\n // @Description: Displays 2nd battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CURRENT2_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CURRENT2_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_CURRENT_EN":{"Description":"Displays main battery current","DisplayName":"CURRENT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT_EN\n // @Description: Displays main battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD2_CURRENT_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_CURRENT_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_DIST_EN":{"Description":"Displays total distance flown","DisplayName":"DIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DIST_EN\n // @Description: Displays total distance flown\n // @Values: 0:Disabled,1:Enabled"},"OSD2_DIST_X":{"Description":"Horizontal position on screen","DisplayName":"DIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: DIST_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_DIST_Y":{"Description":"Vertical position on screen","DisplayName":"DIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: DIST_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_EFF_EN":{"Description":"Displays flight efficiency (mAh/km or /mi)","DisplayName":"EFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFF_EN\n // @Description: Displays flight efficiency (mAh/km or /mi)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_EFF_X":{"Description":"Horizontal position on screen","DisplayName":"EFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: EFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_EFF_Y":{"Description":"Vertical position on screen","DisplayName":"EFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: EFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD2_ESCAMPS_EN":{"Description":"Displays first esc's current","DisplayName":"ESCAMPS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCAMPS_EN\n // @Description: Displays first esc's current\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ESCAMPS_X":{"Description":"Horizontal position on screen","DisplayName":"ESCAMPS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ESCAMPS_Y":{"Description":"Vertical position on screen","DisplayName":"ESCAMPS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ESCRPM_EN":{"Description":"Displays first esc's rpm","DisplayName":"ESCRPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCRPM_EN\n // @Description: Displays first esc's rpm\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ESCRPM_X":{"Description":"Horizontal position on screen","DisplayName":"ESCRPM_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ESCRPM_Y":{"Description":"Vertical position on screen","DisplayName":"ESCRPM_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ESCTEMP_EN":{"Description":"Displays first esc's temp","DisplayName":"ESCTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCTEMP_EN\n // @Description: Displays first esc's temp\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ESCTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ESCTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ESCTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ESCTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_FENCE_EN":{"Description":"Displays indication of fence enable and breach","DisplayName":"FENCE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FENCE_EN\n // @Description: Displays indication of fence enable and breach\n // @Values: 0:Disabled,1:Enabled"},"OSD2_FENCE_X":{"Description":"Horizontal position on screen","DisplayName":"FENCE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FENCE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_FENCE_Y":{"Description":"Vertical position on screen","DisplayName":"FENCE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FENCE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_FLTIME_EN":{"Description":"Displays total flight time","DisplayName":"FLTIME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTIME_EN\n // @Description: Displays total flight time\n // @Values: 0:Disabled,1:Enabled"},"OSD2_FLTIME_X":{"Description":"Horizontal position on screen","DisplayName":"FLTIME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_FLTIME_Y":{"Description":"Vertical position on screen","DisplayName":"FLTIME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_FLTMODE_EN":{"Description":"Displays flight mode","DisplayName":"FLTMODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTMODE_EN\n // @Description: Displays flight mode\n // @Values: 0:Disabled,1:Enabled"},"OSD2_FLTMODE_X":{"Description":"Horizontal position on screen","DisplayName":"FLTMODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_FLTMODE_Y":{"Description":"Vertical position on screen","DisplayName":"FLTMODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_FONT":{"Description":"Sets the font index for this screen (MSP DisplayPort only)","DisplayName":"Sets the font index for this screen (MSP DisplayPort only)","Range":{"high":"21","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Sets the font index for this screen (MSP DisplayPort only)\n // @Description: Sets the font index for this screen (MSP DisplayPort only)\n // @Range: 0 21\n // @User: Standard"},"OSD2_GPSLAT_EN":{"Description":"Displays GPS latitude","DisplayName":"GPSLAT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLAT_EN\n // @Description: Displays GPS latitude\n // @Values: 0:Disabled,1:Enabled"},"OSD2_GPSLAT_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLAT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_GPSLAT_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLAT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_GPSLONG_EN":{"Description":"Displays GPS longitude","DisplayName":"GPSLONG_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLONG_EN\n // @Description: Displays GPS longitude\n // @Values: 0:Disabled,1:Enabled"},"OSD2_GPSLONG_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLONG_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_GPSLONG_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLONG_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_GSPEED_EN":{"Description":"Displays GPS ground speed","DisplayName":"GSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GSPEED_EN\n // @Description: Displays GPS ground speed\n // @Values: 0:Disabled,1:Enabled"},"OSD2_GSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"GSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_GSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"GSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_HDOP_EN":{"Description":"Displays Horizontal Dilution Of Position","DisplayName":"HDOP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HDOP_EN\n // @Description: Displays Horizontal Dilution Of Position\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HDOP_X":{"Description":"Horizontal position on screen","DisplayName":"HDOP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HDOP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_HDOP_Y":{"Description":"Vertical position on screen","DisplayName":"HDOP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HDOP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_HEADING_EN":{"Description":"Displays heading","DisplayName":"HEADING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HEADING_EN\n // @Description: Displays heading\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HEADING_X":{"Description":"Horizontal position on screen","DisplayName":"HEADING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HEADING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_HEADING_Y":{"Description":"Vertical position on screen","DisplayName":"HEADING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HEADING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_HOMEDIR_EN":{"Description":"Displays relative direction to HOME (MSP OSD only)","DisplayName":"HOMEDIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIR_EN\n // @Description: Displays relative direction to HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HOMEDIR_X":{"Description":"Horizontal position on screen","DisplayName":"HOMEDIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_HOMEDIR_Y":{"Description":"Vertical position on screen","DisplayName":"HOMEDIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_HOMEDIST_EN":{"Description":"Displays distance from HOME (MSP OSD only)","DisplayName":"HOMEDIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIST_EN\n // @Description: Displays distance from HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HOMEDIST_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"HOMEDIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD2_HOMEDIST_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"HOMEDIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD2_HOME_EN":{"Description":"Displays distance and relative direction to HOME","DisplayName":"HOME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOME_EN\n // @Description: Displays distance and relative direction to HOME\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HOME_X":{"Description":"Horizontal position on screen","DisplayName":"HOME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_HOME_Y":{"Description":"Vertical position on screen","DisplayName":"HOME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_HORIZON_EN":{"Description":"Displays artificial horizon","DisplayName":"HORIZON_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HORIZON_EN\n // @Description: Displays artificial horizon\n // @Values: 0:Disabled,1:Enabled"},"OSD2_HORIZON_X":{"Description":"Horizontal position on screen","DisplayName":"HORIZON_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_HORIZON_Y":{"Description":"Vertical position on screen","DisplayName":"HORIZON_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_LINK_Q_EN":{"Description":"Displays Receiver link quality","DisplayName":"LINK_Q_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: LINK_Q_EN\n // @Description: Displays Receiver link quality\n // @Values: 0:Disabled,1:Enabled"},"OSD2_LINK_Q_X":{"Description":"Horizontal position on screen","DisplayName":"LINK_Q_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_LINK_Q_Y":{"Description":"Vertical position on screen","DisplayName":"LINK_Q_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_MESSAGE_EN":{"Description":"Displays Mavlink messages","DisplayName":"MESSAGE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: MESSAGE_EN\n // @Description: Displays Mavlink messages\n // @Values: 0:Disabled,1:Enabled"},"OSD2_MESSAGE_X":{"Description":"Horizontal position on screen","DisplayName":"MESSAGE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_MESSAGE_Y":{"Description":"Vertical position on screen","DisplayName":"MESSAGE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_PITCH_EN":{"Description":"Displays degrees of pitch from level","DisplayName":"PITCH_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PITCH_EN\n // @Description: Displays degrees of pitch from level\n // @Values: 0:Disabled,1:Enabled"},"OSD2_PITCH_X":{"Description":"Horizontal position on screen","DisplayName":"PITCH_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PITCH_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_PITCH_Y":{"Description":"Vertical position on screen","DisplayName":"PITCH_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PITCH_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_PLUSCODE_EN":{"Description":"Displays pluscode (OLC) element","DisplayName":"PLUSCODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PLUSCODE_EN\n // @Description: Displays pluscode (OLC) element\n // @Values: 0:Disabled,1:Enabled"},"OSD2_PLUSCODE_X":{"Description":"Horizontal position on screen","DisplayName":"PLUSCODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_PLUSCODE_Y":{"Description":"Vertical position on screen","DisplayName":"PLUSCODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_POWER_EN":{"Description":"Displays power (MSP OSD only)","DisplayName":"POWER_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: POWER_EN\n // @Description: Displays power (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_POWER_X":{"Description":"Horizontal position on screen","DisplayName":"POWER_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: POWER_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_POWER_Y":{"Description":"Vertical position on screen","DisplayName":"POWER_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: POWER_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_RESTVOLT_EN":{"Description":"Displays main battery resting voltage","DisplayName":"RESTVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RESTVOLT_EN\n // @Description: Displays main battery resting voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD2_RESTVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"RESTVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_RESTVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"RESTVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_RNGF_EN":{"Description":"Displays a rangefinder's distance in cm","DisplayName":"RNGF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RNGF_EN\n // @Description: Displays a rangefinder's distance in cm\n // @Values: 0:Disabled,1:Enabled"},"OSD2_RNGF_X":{"Description":"Horizontal position on screen","DisplayName":"RNGF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RNGF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_RNGF_Y":{"Description":"Vertical position on screen","DisplayName":"RNGF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RNGF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_ROLL_EN":{"Description":"Displays degrees of roll from level","DisplayName":"ROLL_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ROLL_EN\n // @Description: Displays degrees of roll from level\n // @Values: 0:Disabled,1:Enabled"},"OSD2_ROLL_X":{"Description":"Horizontal position on screen","DisplayName":"ROLL_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ROLL_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_ROLL_Y":{"Description":"Vertical position on screen","DisplayName":"ROLL_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ROLL_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_RPM_EN":{"Description":"Displays main rotor revs/min","DisplayName":"RPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n\t// @DisplayName: RPM_EN\n\t// @Description: Displays main rotor revs/min\n\t// @Values: 0:Disabled,1:Enabled"},"OSD2_RPM_X":{"Description":"Horizontal position on screen","DisplayName":"RPM_X","Range":{"high":"29","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_X\n\t// @Description: Horizontal position on screen\n\t// @Range: 0 29"},"OSD2_RPM_Y":{"Description":"Vertical position on screen","DisplayName":"RPM_Y","Range":{"high":"15","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_Y\n\t// @Description: Vertical position on screen\n\t// @Range: 0 15"},"OSD2_RSSI_EN":{"Description":"Displays RC signal strength","DisplayName":"RSSI_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RSSI_EN\n // @Description: Displays RC signal strength\n // @Values: 0:Disabled,1:Enabled"},"OSD2_RSSI_X":{"Description":"Horizontal position on screen","DisplayName":"RSSI_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RSSI_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_RSSI_Y":{"Description":"Vertical position on screen","DisplayName":"RSSI_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RSSI_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_SATS_EN":{"Description":"Displays number of acquired satellites","DisplayName":"SATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SATS_EN\n // @Description: Displays number of acquired satellites\n // @Values: 0:Disabled,1:Enabled"},"OSD2_SATS_X":{"Description":"Horizontal position on screen","DisplayName":"SATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_SATS_Y":{"Description":"Vertical position on screen","DisplayName":"SATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_SIDEBARS_EN":{"Description":"Displays artificial horizon side bars","DisplayName":"SIDEBARS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SIDEBARS_EN\n // @Description: Displays artificial horizon side bars\n // @Values: 0:Disabled,1:Enabled"},"OSD2_SIDEBARS_X":{"Description":"Horizontal position on screen","DisplayName":"SIDEBARS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_SIDEBARS_Y":{"Description":"Vertical position on screen","DisplayName":"SIDEBARS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_STATS_EN":{"Description":"Displays flight stats","DisplayName":"STATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: STATS_EN\n // @Description: Displays flight stats\n // @Values: 0:Disabled,1:Enabled"},"OSD2_STATS_X":{"Description":"Horizontal position on screen","DisplayName":"STATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: STATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_STATS_Y":{"Description":"Vertical position on screen","DisplayName":"STATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: STATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_TEMP_EN":{"Description":"Displays temperature reported by primary barometer","DisplayName":"TEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TEMP_EN\n // @Description: Displays temperature reported by primary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD2_TEMP_X":{"Description":"Horizontal position on screen","DisplayName":"TEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_TEMP_Y":{"Description":"Vertical position on screen","DisplayName":"TEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_TER_HGT_EN":{"Description":"Displays Height above terrain","DisplayName":"TER_HGT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TER_HGT_EN\n // @Description: Displays Height above terrain\n // @Values: 0:Disabled,1:Enabled"},"OSD2_TER_HGT_X":{"Description":"Horizontal position on screen","DisplayName":"TER_HGT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_TER_HGT_Y":{"Description":"Vertical position on screen","DisplayName":"TER_HGT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_THROTTLE_EN":{"Description":"Displays actual throttle percentage being sent to motor(s)","DisplayName":"THROTTLE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: THROTTLE_EN\n // @Description: Displays actual throttle percentage being sent to motor(s)\n // @Values: 0:Disabled,1:Enabled"},"OSD2_THROTTLE_X":{"Description":"Horizontal position on screen","DisplayName":"THROTTLE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_THROTTLE_Y":{"Description":"Vertical position on screen","DisplayName":"THROTTLE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_TXT_RES":{"Description":"Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)","DisplayName":"Sets the overlay text resolution (MSP DisplayPort only)","User":"Standard","Values":{"0":"30x16","1":"50x18"},"__field_text":"\n // @DisplayName: Sets the overlay text resolution (MSP DisplayPort only)\n // @Description: Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)\n // @Values: 0:30x16,1:50x18\n // @User: Standard"},"OSD2_VSPEED_EN":{"Description":"Displays climb rate","DisplayName":"VSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VSPEED_EN\n // @Description: Displays climb rate\n // @Values: 0:Disabled,1:Enabled"},"OSD2_VSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"VSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_VSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"VSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_VTX_PWR_EN":{"Description":"Displays VTX Power","DisplayName":"VTX_PWR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VTX_PWR_EN\n // @Description: Displays VTX Power\n // @Values: 0:Disabled,1:Enabled"},"OSD2_VTX_PWR_X":{"Description":"Horizontal position on screen","DisplayName":"VTX_PWR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_VTX_PWR_Y":{"Description":"Vertical position on screen","DisplayName":"VTX_PWR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_WAYPOINT_EN":{"Description":"Displays bearing and distance to next waypoint","DisplayName":"WAYPOINT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WAYPOINT_EN\n // @Description: Displays bearing and distance to next waypoint\n // @Values: 0:Disabled,1:Enabled"},"OSD2_WAYPOINT_X":{"Description":"Horizontal position on screen","DisplayName":"WAYPOINT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_WAYPOINT_Y":{"Description":"Vertical position on screen","DisplayName":"WAYPOINT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_WIND_EN":{"Description":"Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted","DisplayName":"WIND_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WIND_EN\n // @Description: Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted\n // @Values: 0:Disabled,1:Enabled"},"OSD2_WIND_X":{"Description":"Horizontal position on screen","DisplayName":"WIND_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WIND_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_WIND_Y":{"Description":"Vertical position on screen","DisplayName":"WIND_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WIND_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD2_XTRACK_EN":{"Description":"Displays crosstrack error","DisplayName":"XTRACK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: XTRACK_EN\n // @Description: Displays crosstrack error\n // @Values: 0:Disabled,1:Enabled"},"OSD2_XTRACK_X":{"Description":"Horizontal position on screen","DisplayName":"XTRACK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD2_XTRACK_Y":{"Description":"Vertical position on screen","DisplayName":"XTRACK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ACRVOLT_EN":{"Description":"Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"ACRVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ACRVOLT_EN\n // @Description: Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ACRVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"ACRVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ACRVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"ACRVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ALTITUDE_EN":{"Description":"Enables display of altitude AGL","DisplayName":"ALTITUDE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ALTITUDE_EN\n // @Description: Enables display of altitude AGL\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ALTITUDE_X":{"Description":"Horizontal position on screen","DisplayName":"ALTITUDE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ALTITUDE_Y":{"Description":"Vertical position on screen","DisplayName":"ALTITUDE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ARMING_EN":{"Description":"Displays arming status (MSP OSD only)","DisplayName":"ARMING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ARMING_EN\n // @Description: Displays arming status (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ARMING_X":{"Description":"Horizontal position on screen","DisplayName":"ARMING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ARMING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ARMING_Y":{"Description":"Vertical position on screen","DisplayName":"ARMING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ARMING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ASPD1_EN":{"Description":"Displays airspeed reported directly from primary airspeed sensor","DisplayName":"ASPD1_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD1_EN\n // @Description: Displays airspeed reported directly from primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ASPD1_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD1_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ASPD1_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD1_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ASPD2_EN":{"Description":"Displays airspeed reported directly from secondary airspeed sensor","DisplayName":"ASPD2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD2_EN\n // @Description: Displays airspeed reported directly from secondary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ASPD2_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ASPD2_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ASPEED_EN":{"Description":"Displays airspeed value being used by TECS (fused value)","DisplayName":"ASPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPEED_EN\n // @Description: Displays airspeed value being used by TECS (fused value)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ASPEED_X":{"Description":"Horizontal position on screen","DisplayName":"ASPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ASPEED_Y":{"Description":"Vertical position on screen","DisplayName":"ASPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ATEMP_EN":{"Description":"Displays temperature reported by primary airspeed sensor","DisplayName":"ATEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ATEMP_EN\n // @Description: Displays temperature reported by primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ATEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ATEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ATEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ATEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_AVGCELLV_EN":{"Description":"Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"AVGCELLV_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: AVGCELLV_EN\n // @Description: Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD3_AVGCELLV_X":{"Description":"Horizontal position on screen","DisplayName":"AVGCELLV_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_AVGCELLV_Y":{"Description":"Vertical position on screen","DisplayName":"AVGCELLV_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BAT2USED_EN":{"Description":"Displays secondary battery mAh consumed","DisplayName":"BAT2USED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2USED_EN\n // @Description: Displays secondary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BAT2USED_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2USED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BAT2USED_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2USED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BAT2_VLT_EN":{"Description":"Displays battery2 voltage","DisplayName":"BAT2VLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2VLT_EN\n // @Description: Displays battery2 voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BAT2_VLT_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2VLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BAT2_VLT_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2VLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BATTBAR_EN":{"Description":"Displays battery usage bar (MSP OSD only)","DisplayName":"BATT_BAR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATT_BAR_EN\n // @Description: Displays battery usage bar (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BATTBAR_X":{"Description":"Horizontal position on screen","DisplayName":"BATT_BAR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BATTBAR_Y":{"Description":"Vertical position on screen","DisplayName":"BATT_BAR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BATUSED_EN":{"Description":"Displays primary battery mAh consumed","DisplayName":"BATUSED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATUSED_EN\n // @Description: Displays primary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BATUSED_X":{"Description":"Horizontal position on screen","DisplayName":"BATUSED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BATUSED_Y":{"Description":"Vertical position on screen","DisplayName":"BATUSED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BAT_VOLT_EN":{"Description":"Displays main battery voltage","DisplayName":"BATVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATVOLT_EN\n // @Description: Displays main battery voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BAT_VOLT_X":{"Description":"Horizontal position on screen","DisplayName":"BATVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BAT_VOLT_Y":{"Description":"Vertical position on screen","DisplayName":"BATVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_BTEMP_EN":{"Description":"Displays temperature reported by secondary barometer","DisplayName":"BTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BTEMP_EN\n // @Description: Displays temperature reported by secondary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD3_BTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"BTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_BTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"BTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CALLSIGN_EN":{"Description":"Displays callsign from callsign.txt on microSD card","DisplayName":"CALLSIGN_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CALLSIGN_EN\n // @Description: Displays callsign from callsign.txt on microSD card\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CALLSIGN_X":{"Description":"Horizontal position on screen","DisplayName":"CALLSIGN_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CALLSIGN_Y":{"Description":"Vertical position on screen","DisplayName":"CALLSIGN_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CELLVOLT_EN":{"Description":"Displays average cell voltage (MSP OSD only)","DisplayName":"CELL_VOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CELL_VOLT_EN\n // @Description: Displays average cell voltage (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CELLVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"CELL_VOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CELLVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"CELL_VOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD3_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD3_CLIMBEFF_EN":{"Description":"Displays climb efficiency (climb rate/current)","DisplayName":"CLIMBEFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLIMBEFF_EN\n // @Description: Displays climb efficiency (climb rate/current)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CLIMBEFF_X":{"Description":"Horizontal position on screen","DisplayName":"CLIMBEFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CLIMBEFF_Y":{"Description":"Vertical position on screen","DisplayName":"CLIMBEFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CLK_EN":{"Description":"Displays a clock panel based on AP_RTC local time","DisplayName":"CLK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLK_EN\n // @Description: Displays a clock panel based on AP_RTC local time\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CLK_X":{"Description":"Horizontal position on screen","DisplayName":"CLK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CLK_Y":{"Description":"Vertical position on screen","DisplayName":"CLK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_COMPASS_EN":{"Description":"Enables display of compass rose","DisplayName":"COMPASS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: COMPASS_EN\n // @Description: Enables display of compass rose\n // @Values: 0:Disabled,1:Enabled"},"OSD3_COMPASS_X":{"Description":"Horizontal position on screen","DisplayName":"COMPASS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_COMPASS_Y":{"Description":"Vertical position on screen","DisplayName":"COMPASS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CRSSHAIR_EN":{"Description":"Displays artificial horizon crosshair (MSP OSD only)","DisplayName":"CRSSHAIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CRSSHAIR_EN\n // @Description: Displays artificial horizon crosshair (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CRSSHAIR_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD3_CRSSHAIR_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD3_CURRENT2_EN":{"Description":"Displays 2nd battery current","DisplayName":"CURRENT2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT2_EN\n // @Description: Displays 2nd battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CURRENT2_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CURRENT2_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_CURRENT_EN":{"Description":"Displays main battery current","DisplayName":"CURRENT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT_EN\n // @Description: Displays main battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD3_CURRENT_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_CURRENT_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_DIST_EN":{"Description":"Displays total distance flown","DisplayName":"DIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DIST_EN\n // @Description: Displays total distance flown\n // @Values: 0:Disabled,1:Enabled"},"OSD3_DIST_X":{"Description":"Horizontal position on screen","DisplayName":"DIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: DIST_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_DIST_Y":{"Description":"Vertical position on screen","DisplayName":"DIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: DIST_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_EFF_EN":{"Description":"Displays flight efficiency (mAh/km or /mi)","DisplayName":"EFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFF_EN\n // @Description: Displays flight efficiency (mAh/km or /mi)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_EFF_X":{"Description":"Horizontal position on screen","DisplayName":"EFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: EFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_EFF_Y":{"Description":"Vertical position on screen","DisplayName":"EFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: EFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD3_ESCAMPS_EN":{"Description":"Displays first esc's current","DisplayName":"ESCAMPS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCAMPS_EN\n // @Description: Displays first esc's current\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ESCAMPS_X":{"Description":"Horizontal position on screen","DisplayName":"ESCAMPS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ESCAMPS_Y":{"Description":"Vertical position on screen","DisplayName":"ESCAMPS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ESCRPM_EN":{"Description":"Displays first esc's rpm","DisplayName":"ESCRPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCRPM_EN\n // @Description: Displays first esc's rpm\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ESCRPM_X":{"Description":"Horizontal position on screen","DisplayName":"ESCRPM_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ESCRPM_Y":{"Description":"Vertical position on screen","DisplayName":"ESCRPM_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ESCTEMP_EN":{"Description":"Displays first esc's temp","DisplayName":"ESCTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCTEMP_EN\n // @Description: Displays first esc's temp\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ESCTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ESCTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ESCTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ESCTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_FENCE_EN":{"Description":"Displays indication of fence enable and breach","DisplayName":"FENCE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FENCE_EN\n // @Description: Displays indication of fence enable and breach\n // @Values: 0:Disabled,1:Enabled"},"OSD3_FENCE_X":{"Description":"Horizontal position on screen","DisplayName":"FENCE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FENCE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_FENCE_Y":{"Description":"Vertical position on screen","DisplayName":"FENCE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FENCE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_FLTIME_EN":{"Description":"Displays total flight time","DisplayName":"FLTIME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTIME_EN\n // @Description: Displays total flight time\n // @Values: 0:Disabled,1:Enabled"},"OSD3_FLTIME_X":{"Description":"Horizontal position on screen","DisplayName":"FLTIME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_FLTIME_Y":{"Description":"Vertical position on screen","DisplayName":"FLTIME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_FLTMODE_EN":{"Description":"Displays flight mode","DisplayName":"FLTMODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTMODE_EN\n // @Description: Displays flight mode\n // @Values: 0:Disabled,1:Enabled"},"OSD3_FLTMODE_X":{"Description":"Horizontal position on screen","DisplayName":"FLTMODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_FLTMODE_Y":{"Description":"Vertical position on screen","DisplayName":"FLTMODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_FONT":{"Description":"Sets the font index for this screen (MSP DisplayPort only)","DisplayName":"Sets the font index for this screen (MSP DisplayPort only)","Range":{"high":"21","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Sets the font index for this screen (MSP DisplayPort only)\n // @Description: Sets the font index for this screen (MSP DisplayPort only)\n // @Range: 0 21\n // @User: Standard"},"OSD3_GPSLAT_EN":{"Description":"Displays GPS latitude","DisplayName":"GPSLAT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLAT_EN\n // @Description: Displays GPS latitude\n // @Values: 0:Disabled,1:Enabled"},"OSD3_GPSLAT_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLAT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_GPSLAT_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLAT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_GPSLONG_EN":{"Description":"Displays GPS longitude","DisplayName":"GPSLONG_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLONG_EN\n // @Description: Displays GPS longitude\n // @Values: 0:Disabled,1:Enabled"},"OSD3_GPSLONG_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLONG_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_GPSLONG_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLONG_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_GSPEED_EN":{"Description":"Displays GPS ground speed","DisplayName":"GSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GSPEED_EN\n // @Description: Displays GPS ground speed\n // @Values: 0:Disabled,1:Enabled"},"OSD3_GSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"GSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_GSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"GSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_HDOP_EN":{"Description":"Displays Horizontal Dilution Of Position","DisplayName":"HDOP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HDOP_EN\n // @Description: Displays Horizontal Dilution Of Position\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HDOP_X":{"Description":"Horizontal position on screen","DisplayName":"HDOP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HDOP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_HDOP_Y":{"Description":"Vertical position on screen","DisplayName":"HDOP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HDOP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_HEADING_EN":{"Description":"Displays heading","DisplayName":"HEADING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HEADING_EN\n // @Description: Displays heading\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HEADING_X":{"Description":"Horizontal position on screen","DisplayName":"HEADING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HEADING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_HEADING_Y":{"Description":"Vertical position on screen","DisplayName":"HEADING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HEADING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_HOMEDIR_EN":{"Description":"Displays relative direction to HOME (MSP OSD only)","DisplayName":"HOMEDIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIR_EN\n // @Description: Displays relative direction to HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HOMEDIR_X":{"Description":"Horizontal position on screen","DisplayName":"HOMEDIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_HOMEDIR_Y":{"Description":"Vertical position on screen","DisplayName":"HOMEDIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_HOMEDIST_EN":{"Description":"Displays distance from HOME (MSP OSD only)","DisplayName":"HOMEDIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIST_EN\n // @Description: Displays distance from HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HOMEDIST_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"HOMEDIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD3_HOMEDIST_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"HOMEDIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD3_HOME_EN":{"Description":"Displays distance and relative direction to HOME","DisplayName":"HOME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOME_EN\n // @Description: Displays distance and relative direction to HOME\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HOME_X":{"Description":"Horizontal position on screen","DisplayName":"HOME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_HOME_Y":{"Description":"Vertical position on screen","DisplayName":"HOME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_HORIZON_EN":{"Description":"Displays artificial horizon","DisplayName":"HORIZON_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HORIZON_EN\n // @Description: Displays artificial horizon\n // @Values: 0:Disabled,1:Enabled"},"OSD3_HORIZON_X":{"Description":"Horizontal position on screen","DisplayName":"HORIZON_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_HORIZON_Y":{"Description":"Vertical position on screen","DisplayName":"HORIZON_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_LINK_Q_EN":{"Description":"Displays Receiver link quality","DisplayName":"LINK_Q_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: LINK_Q_EN\n // @Description: Displays Receiver link quality\n // @Values: 0:Disabled,1:Enabled"},"OSD3_LINK_Q_X":{"Description":"Horizontal position on screen","DisplayName":"LINK_Q_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_LINK_Q_Y":{"Description":"Vertical position on screen","DisplayName":"LINK_Q_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_MESSAGE_EN":{"Description":"Displays Mavlink messages","DisplayName":"MESSAGE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: MESSAGE_EN\n // @Description: Displays Mavlink messages\n // @Values: 0:Disabled,1:Enabled"},"OSD3_MESSAGE_X":{"Description":"Horizontal position on screen","DisplayName":"MESSAGE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_MESSAGE_Y":{"Description":"Vertical position on screen","DisplayName":"MESSAGE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_PITCH_EN":{"Description":"Displays degrees of pitch from level","DisplayName":"PITCH_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PITCH_EN\n // @Description: Displays degrees of pitch from level\n // @Values: 0:Disabled,1:Enabled"},"OSD3_PITCH_X":{"Description":"Horizontal position on screen","DisplayName":"PITCH_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PITCH_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_PITCH_Y":{"Description":"Vertical position on screen","DisplayName":"PITCH_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PITCH_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_PLUSCODE_EN":{"Description":"Displays pluscode (OLC) element","DisplayName":"PLUSCODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PLUSCODE_EN\n // @Description: Displays pluscode (OLC) element\n // @Values: 0:Disabled,1:Enabled"},"OSD3_PLUSCODE_X":{"Description":"Horizontal position on screen","DisplayName":"PLUSCODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_PLUSCODE_Y":{"Description":"Vertical position on screen","DisplayName":"PLUSCODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_POWER_EN":{"Description":"Displays power (MSP OSD only)","DisplayName":"POWER_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: POWER_EN\n // @Description: Displays power (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_POWER_X":{"Description":"Horizontal position on screen","DisplayName":"POWER_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: POWER_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_POWER_Y":{"Description":"Vertical position on screen","DisplayName":"POWER_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: POWER_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_RESTVOLT_EN":{"Description":"Displays main battery resting voltage","DisplayName":"RESTVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RESTVOLT_EN\n // @Description: Displays main battery resting voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD3_RESTVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"RESTVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_RESTVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"RESTVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_RNGF_EN":{"Description":"Displays a rangefinder's distance in cm","DisplayName":"RNGF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RNGF_EN\n // @Description: Displays a rangefinder's distance in cm\n // @Values: 0:Disabled,1:Enabled"},"OSD3_RNGF_X":{"Description":"Horizontal position on screen","DisplayName":"RNGF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RNGF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_RNGF_Y":{"Description":"Vertical position on screen","DisplayName":"RNGF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RNGF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_ROLL_EN":{"Description":"Displays degrees of roll from level","DisplayName":"ROLL_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ROLL_EN\n // @Description: Displays degrees of roll from level\n // @Values: 0:Disabled,1:Enabled"},"OSD3_ROLL_X":{"Description":"Horizontal position on screen","DisplayName":"ROLL_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ROLL_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_ROLL_Y":{"Description":"Vertical position on screen","DisplayName":"ROLL_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ROLL_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_RPM_EN":{"Description":"Displays main rotor revs/min","DisplayName":"RPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n\t// @DisplayName: RPM_EN\n\t// @Description: Displays main rotor revs/min\n\t// @Values: 0:Disabled,1:Enabled"},"OSD3_RPM_X":{"Description":"Horizontal position on screen","DisplayName":"RPM_X","Range":{"high":"29","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_X\n\t// @Description: Horizontal position on screen\n\t// @Range: 0 29"},"OSD3_RPM_Y":{"Description":"Vertical position on screen","DisplayName":"RPM_Y","Range":{"high":"15","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_Y\n\t// @Description: Vertical position on screen\n\t// @Range: 0 15"},"OSD3_RSSI_EN":{"Description":"Displays RC signal strength","DisplayName":"RSSI_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RSSI_EN\n // @Description: Displays RC signal strength\n // @Values: 0:Disabled,1:Enabled"},"OSD3_RSSI_X":{"Description":"Horizontal position on screen","DisplayName":"RSSI_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RSSI_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_RSSI_Y":{"Description":"Vertical position on screen","DisplayName":"RSSI_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RSSI_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_SATS_EN":{"Description":"Displays number of acquired satellites","DisplayName":"SATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SATS_EN\n // @Description: Displays number of acquired satellites\n // @Values: 0:Disabled,1:Enabled"},"OSD3_SATS_X":{"Description":"Horizontal position on screen","DisplayName":"SATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_SATS_Y":{"Description":"Vertical position on screen","DisplayName":"SATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_SIDEBARS_EN":{"Description":"Displays artificial horizon side bars","DisplayName":"SIDEBARS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SIDEBARS_EN\n // @Description: Displays artificial horizon side bars\n // @Values: 0:Disabled,1:Enabled"},"OSD3_SIDEBARS_X":{"Description":"Horizontal position on screen","DisplayName":"SIDEBARS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_SIDEBARS_Y":{"Description":"Vertical position on screen","DisplayName":"SIDEBARS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_STATS_EN":{"Description":"Displays flight stats","DisplayName":"STATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: STATS_EN\n // @Description: Displays flight stats\n // @Values: 0:Disabled,1:Enabled"},"OSD3_STATS_X":{"Description":"Horizontal position on screen","DisplayName":"STATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: STATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_STATS_Y":{"Description":"Vertical position on screen","DisplayName":"STATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: STATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_TEMP_EN":{"Description":"Displays temperature reported by primary barometer","DisplayName":"TEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TEMP_EN\n // @Description: Displays temperature reported by primary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD3_TEMP_X":{"Description":"Horizontal position on screen","DisplayName":"TEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_TEMP_Y":{"Description":"Vertical position on screen","DisplayName":"TEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_TER_HGT_EN":{"Description":"Displays Height above terrain","DisplayName":"TER_HGT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TER_HGT_EN\n // @Description: Displays Height above terrain\n // @Values: 0:Disabled,1:Enabled"},"OSD3_TER_HGT_X":{"Description":"Horizontal position on screen","DisplayName":"TER_HGT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_TER_HGT_Y":{"Description":"Vertical position on screen","DisplayName":"TER_HGT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_THROTTLE_EN":{"Description":"Displays actual throttle percentage being sent to motor(s)","DisplayName":"THROTTLE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: THROTTLE_EN\n // @Description: Displays actual throttle percentage being sent to motor(s)\n // @Values: 0:Disabled,1:Enabled"},"OSD3_THROTTLE_X":{"Description":"Horizontal position on screen","DisplayName":"THROTTLE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_THROTTLE_Y":{"Description":"Vertical position on screen","DisplayName":"THROTTLE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_TXT_RES":{"Description":"Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)","DisplayName":"Sets the overlay text resolution (MSP DisplayPort only)","User":"Standard","Values":{"0":"30x16","1":"50x18"},"__field_text":"\n // @DisplayName: Sets the overlay text resolution (MSP DisplayPort only)\n // @Description: Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)\n // @Values: 0:30x16,1:50x18\n // @User: Standard"},"OSD3_VSPEED_EN":{"Description":"Displays climb rate","DisplayName":"VSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VSPEED_EN\n // @Description: Displays climb rate\n // @Values: 0:Disabled,1:Enabled"},"OSD3_VSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"VSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_VSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"VSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_VTX_PWR_EN":{"Description":"Displays VTX Power","DisplayName":"VTX_PWR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VTX_PWR_EN\n // @Description: Displays VTX Power\n // @Values: 0:Disabled,1:Enabled"},"OSD3_VTX_PWR_X":{"Description":"Horizontal position on screen","DisplayName":"VTX_PWR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_VTX_PWR_Y":{"Description":"Vertical position on screen","DisplayName":"VTX_PWR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_WAYPOINT_EN":{"Description":"Displays bearing and distance to next waypoint","DisplayName":"WAYPOINT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WAYPOINT_EN\n // @Description: Displays bearing and distance to next waypoint\n // @Values: 0:Disabled,1:Enabled"},"OSD3_WAYPOINT_X":{"Description":"Horizontal position on screen","DisplayName":"WAYPOINT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_WAYPOINT_Y":{"Description":"Vertical position on screen","DisplayName":"WAYPOINT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_WIND_EN":{"Description":"Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted","DisplayName":"WIND_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WIND_EN\n // @Description: Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted\n // @Values: 0:Disabled,1:Enabled"},"OSD3_WIND_X":{"Description":"Horizontal position on screen","DisplayName":"WIND_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WIND_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_WIND_Y":{"Description":"Vertical position on screen","DisplayName":"WIND_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WIND_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD3_XTRACK_EN":{"Description":"Displays crosstrack error","DisplayName":"XTRACK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: XTRACK_EN\n // @Description: Displays crosstrack error\n // @Values: 0:Disabled,1:Enabled"},"OSD3_XTRACK_X":{"Description":"Horizontal position on screen","DisplayName":"XTRACK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD3_XTRACK_Y":{"Description":"Vertical position on screen","DisplayName":"XTRACK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ACRVOLT_EN":{"Description":"Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"ACRVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ACRVOLT_EN\n // @Description: Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ACRVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"ACRVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ACRVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"ACRVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ACRVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ALTITUDE_EN":{"Description":"Enables display of altitude AGL","DisplayName":"ALTITUDE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ALTITUDE_EN\n // @Description: Enables display of altitude AGL\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ALTITUDE_X":{"Description":"Horizontal position on screen","DisplayName":"ALTITUDE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ALTITUDE_Y":{"Description":"Vertical position on screen","DisplayName":"ALTITUDE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ALTITUDE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ARMING_EN":{"Description":"Displays arming status (MSP OSD only)","DisplayName":"ARMING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ARMING_EN\n // @Description: Displays arming status (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ARMING_X":{"Description":"Horizontal position on screen","DisplayName":"ARMING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ARMING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ARMING_Y":{"Description":"Vertical position on screen","DisplayName":"ARMING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ARMING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ASPD1_EN":{"Description":"Displays airspeed reported directly from primary airspeed sensor","DisplayName":"ASPD1_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD1_EN\n // @Description: Displays airspeed reported directly from primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ASPD1_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD1_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ASPD1_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD1_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD1_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ASPD2_EN":{"Description":"Displays airspeed reported directly from secondary airspeed sensor","DisplayName":"ASPD2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPD2_EN\n // @Description: Displays airspeed reported directly from secondary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ASPD2_X":{"Description":"Horizontal position on screen","DisplayName":"ASPD2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ASPD2_Y":{"Description":"Vertical position on screen","DisplayName":"ASPD2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPD2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ASPEED_EN":{"Description":"Displays airspeed value being used by TECS (fused value)","DisplayName":"ASPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ASPEED_EN\n // @Description: Displays airspeed value being used by TECS (fused value)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ASPEED_X":{"Description":"Horizontal position on screen","DisplayName":"ASPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ASPEED_Y":{"Description":"Vertical position on screen","DisplayName":"ASPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ASPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ATEMP_EN":{"Description":"Displays temperature reported by primary airspeed sensor","DisplayName":"ATEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ATEMP_EN\n // @Description: Displays temperature reported by primary airspeed sensor\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ATEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ATEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ATEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ATEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ATEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_AVGCELLV_EN":{"Description":"Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).","DisplayName":"AVGCELLV_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: AVGCELLV_EN\n // @Description: Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).\n // @Values: 0:Disabled,1:Enabled"},"OSD4_AVGCELLV_X":{"Description":"Horizontal position on screen","DisplayName":"AVGCELLV_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_AVGCELLV_Y":{"Description":"Vertical position on screen","DisplayName":"AVGCELLV_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: AVGCELLV_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BAT2USED_EN":{"Description":"Displays secondary battery mAh consumed","DisplayName":"BAT2USED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2USED_EN\n // @Description: Displays secondary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BAT2USED_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2USED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BAT2USED_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2USED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2USED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BAT2_VLT_EN":{"Description":"Displays battery2 voltage","DisplayName":"BAT2VLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BAT2VLT_EN\n // @Description: Displays battery2 voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BAT2_VLT_X":{"Description":"Horizontal position on screen","DisplayName":"BAT2VLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BAT2_VLT_Y":{"Description":"Vertical position on screen","DisplayName":"BAT2VLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BAT2VLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BATTBAR_EN":{"Description":"Displays battery usage bar (MSP OSD only)","DisplayName":"BATT_BAR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATT_BAR_EN\n // @Description: Displays battery usage bar (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BATTBAR_X":{"Description":"Horizontal position on screen","DisplayName":"BATT_BAR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BATTBAR_Y":{"Description":"Vertical position on screen","DisplayName":"BATT_BAR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATT_BAR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BATUSED_EN":{"Description":"Displays primary battery mAh consumed","DisplayName":"BATUSED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATUSED_EN\n // @Description: Displays primary battery mAh consumed\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BATUSED_X":{"Description":"Horizontal position on screen","DisplayName":"BATUSED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BATUSED_Y":{"Description":"Vertical position on screen","DisplayName":"BATUSED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATUSED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BAT_VOLT_EN":{"Description":"Displays main battery voltage","DisplayName":"BATVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BATVOLT_EN\n // @Description: Displays main battery voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BAT_VOLT_X":{"Description":"Horizontal position on screen","DisplayName":"BATVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BAT_VOLT_Y":{"Description":"Vertical position on screen","DisplayName":"BATVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BATVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_BTEMP_EN":{"Description":"Displays temperature reported by secondary barometer","DisplayName":"BTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BTEMP_EN\n // @Description: Displays temperature reported by secondary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD4_BTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"BTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_BTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"BTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: BTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CALLSIGN_EN":{"Description":"Displays callsign from callsign.txt on microSD card","DisplayName":"CALLSIGN_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CALLSIGN_EN\n // @Description: Displays callsign from callsign.txt on microSD card\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CALLSIGN_X":{"Description":"Horizontal position on screen","DisplayName":"CALLSIGN_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CALLSIGN_Y":{"Description":"Vertical position on screen","DisplayName":"CALLSIGN_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CALLSIGN_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CELLVOLT_EN":{"Description":"Displays average cell voltage (MSP OSD only)","DisplayName":"CELL_VOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CELL_VOLT_EN\n // @Description: Displays average cell voltage (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CELLVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"CELL_VOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CELLVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"CELL_VOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CELL_VOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD4_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD4_CLIMBEFF_EN":{"Description":"Displays climb efficiency (climb rate/current)","DisplayName":"CLIMBEFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLIMBEFF_EN\n // @Description: Displays climb efficiency (climb rate/current)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CLIMBEFF_X":{"Description":"Horizontal position on screen","DisplayName":"CLIMBEFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CLIMBEFF_Y":{"Description":"Vertical position on screen","DisplayName":"CLIMBEFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLIMBEFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CLK_EN":{"Description":"Displays a clock panel based on AP_RTC local time","DisplayName":"CLK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CLK_EN\n // @Description: Displays a clock panel based on AP_RTC local time\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CLK_X":{"Description":"Horizontal position on screen","DisplayName":"CLK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CLK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CLK_Y":{"Description":"Vertical position on screen","DisplayName":"CLK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CLK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_COMPASS_EN":{"Description":"Enables display of compass rose","DisplayName":"COMPASS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: COMPASS_EN\n // @Description: Enables display of compass rose\n // @Values: 0:Disabled,1:Enabled"},"OSD4_COMPASS_X":{"Description":"Horizontal position on screen","DisplayName":"COMPASS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_COMPASS_Y":{"Description":"Vertical position on screen","DisplayName":"COMPASS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: COMPASS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CRSSHAIR_EN":{"Description":"Displays artificial horizon crosshair (MSP OSD only)","DisplayName":"CRSSHAIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CRSSHAIR_EN\n // @Description: Displays artificial horizon crosshair (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CRSSHAIR_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD4_CRSSHAIR_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"CRSSHAIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CRSSHAIR_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD4_CURRENT2_EN":{"Description":"Displays 2nd battery current","DisplayName":"CURRENT2_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT2_EN\n // @Description: Displays 2nd battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CURRENT2_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT2_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CURRENT2_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT2_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT2_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_CURRENT_EN":{"Description":"Displays main battery current","DisplayName":"CURRENT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: CURRENT_EN\n // @Description: Displays main battery current\n // @Values: 0:Disabled,1:Enabled"},"OSD4_CURRENT_X":{"Description":"Horizontal position on screen","DisplayName":"CURRENT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_CURRENT_Y":{"Description":"Vertical position on screen","DisplayName":"CURRENT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: CURRENT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_DIST_EN":{"Description":"Displays total distance flown","DisplayName":"DIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: DIST_EN\n // @Description: Displays total distance flown\n // @Values: 0:Disabled,1:Enabled"},"OSD4_DIST_X":{"Description":"Horizontal position on screen","DisplayName":"DIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: DIST_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_DIST_Y":{"Description":"Vertical position on screen","DisplayName":"DIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: DIST_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_EFF_EN":{"Description":"Displays flight efficiency (mAh/km or /mi)","DisplayName":"EFF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: EFF_EN\n // @Description: Displays flight efficiency (mAh/km or /mi)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_EFF_X":{"Description":"Horizontal position on screen","DisplayName":"EFF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: EFF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_EFF_Y":{"Description":"Vertical position on screen","DisplayName":"EFF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: EFF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD4_ESCAMPS_EN":{"Description":"Displays first esc's current","DisplayName":"ESCAMPS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCAMPS_EN\n // @Description: Displays first esc's current\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ESCAMPS_X":{"Description":"Horizontal position on screen","DisplayName":"ESCAMPS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ESCAMPS_Y":{"Description":"Vertical position on screen","DisplayName":"ESCAMPS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCAMPS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ESCRPM_EN":{"Description":"Displays first esc's rpm","DisplayName":"ESCRPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCRPM_EN\n // @Description: Displays first esc's rpm\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ESCRPM_X":{"Description":"Horizontal position on screen","DisplayName":"ESCRPM_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ESCRPM_Y":{"Description":"Vertical position on screen","DisplayName":"ESCRPM_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCRPM_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ESCTEMP_EN":{"Description":"Displays first esc's temp","DisplayName":"ESCTEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ESCTEMP_EN\n // @Description: Displays first esc's temp\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ESCTEMP_X":{"Description":"Horizontal position on screen","DisplayName":"ESCTEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ESCTEMP_Y":{"Description":"Vertical position on screen","DisplayName":"ESCTEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ESCTEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_FENCE_EN":{"Description":"Displays indication of fence enable and breach","DisplayName":"FENCE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FENCE_EN\n // @Description: Displays indication of fence enable and breach\n // @Values: 0:Disabled,1:Enabled"},"OSD4_FENCE_X":{"Description":"Horizontal position on screen","DisplayName":"FENCE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FENCE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_FENCE_Y":{"Description":"Vertical position on screen","DisplayName":"FENCE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FENCE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_FLTIME_EN":{"Description":"Displays total flight time","DisplayName":"FLTIME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTIME_EN\n // @Description: Displays total flight time\n // @Values: 0:Disabled,1:Enabled"},"OSD4_FLTIME_X":{"Description":"Horizontal position on screen","DisplayName":"FLTIME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_FLTIME_Y":{"Description":"Vertical position on screen","DisplayName":"FLTIME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTIME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_FLTMODE_EN":{"Description":"Displays flight mode","DisplayName":"FLTMODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: FLTMODE_EN\n // @Description: Displays flight mode\n // @Values: 0:Disabled,1:Enabled"},"OSD4_FLTMODE_X":{"Description":"Horizontal position on screen","DisplayName":"FLTMODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_FLTMODE_Y":{"Description":"Vertical position on screen","DisplayName":"FLTMODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: FLTMODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_FONT":{"Description":"Sets the font index for this screen (MSP DisplayPort only)","DisplayName":"Sets the font index for this screen (MSP DisplayPort only)","Range":{"high":"21","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Sets the font index for this screen (MSP DisplayPort only)\n // @Description: Sets the font index for this screen (MSP DisplayPort only)\n // @Range: 0 21\n // @User: Standard"},"OSD4_GPSLAT_EN":{"Description":"Displays GPS latitude","DisplayName":"GPSLAT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLAT_EN\n // @Description: Displays GPS latitude\n // @Values: 0:Disabled,1:Enabled"},"OSD4_GPSLAT_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLAT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_GPSLAT_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLAT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLAT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_GPSLONG_EN":{"Description":"Displays GPS longitude","DisplayName":"GPSLONG_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPSLONG_EN\n // @Description: Displays GPS longitude\n // @Values: 0:Disabled,1:Enabled"},"OSD4_GPSLONG_X":{"Description":"Horizontal position on screen","DisplayName":"GPSLONG_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_GPSLONG_Y":{"Description":"Vertical position on screen","DisplayName":"GPSLONG_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GPSLONG_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_GSPEED_EN":{"Description":"Displays GPS ground speed","DisplayName":"GSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GSPEED_EN\n // @Description: Displays GPS ground speed\n // @Values: 0:Disabled,1:Enabled"},"OSD4_GSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"GSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_GSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"GSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: GSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_HDOP_EN":{"Description":"Displays Horizontal Dilution Of Position","DisplayName":"HDOP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HDOP_EN\n // @Description: Displays Horizontal Dilution Of Position\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HDOP_X":{"Description":"Horizontal position on screen","DisplayName":"HDOP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HDOP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_HDOP_Y":{"Description":"Vertical position on screen","DisplayName":"HDOP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HDOP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_HEADING_EN":{"Description":"Displays heading","DisplayName":"HEADING_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HEADING_EN\n // @Description: Displays heading\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HEADING_X":{"Description":"Horizontal position on screen","DisplayName":"HEADING_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HEADING_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_HEADING_Y":{"Description":"Vertical position on screen","DisplayName":"HEADING_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HEADING_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_HOMEDIR_EN":{"Description":"Displays relative direction to HOME (MSP OSD only)","DisplayName":"HOMEDIR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIR_EN\n // @Description: Displays relative direction to HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HOMEDIR_X":{"Description":"Horizontal position on screen","DisplayName":"HOMEDIR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_HOMEDIR_Y":{"Description":"Vertical position on screen","DisplayName":"HOMEDIR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_HOMEDIST_EN":{"Description":"Displays distance from HOME (MSP OSD only)","DisplayName":"HOMEDIST_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOMEDIST_EN\n // @Description: Displays distance from HOME (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HOMEDIST_X":{"Description":"Horizontal position on screen (MSP OSD only)","DisplayName":"HOMEDIST_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_X\n // @Description: Horizontal position on screen (MSP OSD only)\n // @Range: 0 59"},"OSD4_HOMEDIST_Y":{"Description":"Vertical position on screen (MSP OSD only)","DisplayName":"HOMEDIST_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOMEDIST_Y\n // @Description: Vertical position on screen (MSP OSD only)\n // @Range: 0 21"},"OSD4_HOME_EN":{"Description":"Displays distance and relative direction to HOME","DisplayName":"HOME_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HOME_EN\n // @Description: Displays distance and relative direction to HOME\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HOME_X":{"Description":"Horizontal position on screen","DisplayName":"HOME_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HOME_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_HOME_Y":{"Description":"Vertical position on screen","DisplayName":"HOME_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HOME_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_HORIZON_EN":{"Description":"Displays artificial horizon","DisplayName":"HORIZON_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: HORIZON_EN\n // @Description: Displays artificial horizon\n // @Values: 0:Disabled,1:Enabled"},"OSD4_HORIZON_X":{"Description":"Horizontal position on screen","DisplayName":"HORIZON_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_HORIZON_Y":{"Description":"Vertical position on screen","DisplayName":"HORIZON_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: HORIZON_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_LINK_Q_EN":{"Description":"Displays Receiver link quality","DisplayName":"LINK_Q_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: LINK_Q_EN\n // @Description: Displays Receiver link quality\n // @Values: 0:Disabled,1:Enabled"},"OSD4_LINK_Q_X":{"Description":"Horizontal position on screen","DisplayName":"LINK_Q_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_LINK_Q_Y":{"Description":"Vertical position on screen","DisplayName":"LINK_Q_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: LINK_Q_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_MESSAGE_EN":{"Description":"Displays Mavlink messages","DisplayName":"MESSAGE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: MESSAGE_EN\n // @Description: Displays Mavlink messages\n // @Values: 0:Disabled,1:Enabled"},"OSD4_MESSAGE_X":{"Description":"Horizontal position on screen","DisplayName":"MESSAGE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_MESSAGE_Y":{"Description":"Vertical position on screen","DisplayName":"MESSAGE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: MESSAGE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_PITCH_EN":{"Description":"Displays degrees of pitch from level","DisplayName":"PITCH_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PITCH_EN\n // @Description: Displays degrees of pitch from level\n // @Values: 0:Disabled,1:Enabled"},"OSD4_PITCH_X":{"Description":"Horizontal position on screen","DisplayName":"PITCH_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PITCH_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_PITCH_Y":{"Description":"Vertical position on screen","DisplayName":"PITCH_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PITCH_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_PLUSCODE_EN":{"Description":"Displays pluscode (OLC) element","DisplayName":"PLUSCODE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: PLUSCODE_EN\n // @Description: Displays pluscode (OLC) element\n // @Values: 0:Disabled,1:Enabled"},"OSD4_PLUSCODE_X":{"Description":"Horizontal position on screen","DisplayName":"PLUSCODE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_PLUSCODE_Y":{"Description":"Vertical position on screen","DisplayName":"PLUSCODE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: PLUSCODE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_POWER_EN":{"Description":"Displays power (MSP OSD only)","DisplayName":"POWER_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: POWER_EN\n // @Description: Displays power (MSP OSD only)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_POWER_X":{"Description":"Horizontal position on screen","DisplayName":"POWER_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: POWER_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_POWER_Y":{"Description":"Vertical position on screen","DisplayName":"POWER_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: POWER_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_RESTVOLT_EN":{"Description":"Displays main battery resting voltage","DisplayName":"RESTVOLT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RESTVOLT_EN\n // @Description: Displays main battery resting voltage\n // @Values: 0:Disabled,1:Enabled"},"OSD4_RESTVOLT_X":{"Description":"Horizontal position on screen","DisplayName":"RESTVOLT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_RESTVOLT_Y":{"Description":"Vertical position on screen","DisplayName":"RESTVOLT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RESTVOLT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_RNGF_EN":{"Description":"Displays a rangefinder's distance in cm","DisplayName":"RNGF_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RNGF_EN\n // @Description: Displays a rangefinder's distance in cm\n // @Values: 0:Disabled,1:Enabled"},"OSD4_RNGF_X":{"Description":"Horizontal position on screen","DisplayName":"RNGF_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RNGF_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_RNGF_Y":{"Description":"Vertical position on screen","DisplayName":"RNGF_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RNGF_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_ROLL_EN":{"Description":"Displays degrees of roll from level","DisplayName":"ROLL_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ROLL_EN\n // @Description: Displays degrees of roll from level\n // @Values: 0:Disabled,1:Enabled"},"OSD4_ROLL_X":{"Description":"Horizontal position on screen","DisplayName":"ROLL_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: ROLL_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_ROLL_Y":{"Description":"Vertical position on screen","DisplayName":"ROLL_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: ROLL_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_RPM_EN":{"Description":"Displays main rotor revs/min","DisplayName":"RPM_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n\t// @DisplayName: RPM_EN\n\t// @Description: Displays main rotor revs/min\n\t// @Values: 0:Disabled,1:Enabled"},"OSD4_RPM_X":{"Description":"Horizontal position on screen","DisplayName":"RPM_X","Range":{"high":"29","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_X\n\t// @Description: Horizontal position on screen\n\t// @Range: 0 29"},"OSD4_RPM_Y":{"Description":"Vertical position on screen","DisplayName":"RPM_Y","Range":{"high":"15","low":"0"},"__field_text":"\n\t// @DisplayName: RPM_Y\n\t// @Description: Vertical position on screen\n\t// @Range: 0 15"},"OSD4_RSSI_EN":{"Description":"Displays RC signal strength","DisplayName":"RSSI_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: RSSI_EN\n // @Description: Displays RC signal strength\n // @Values: 0:Disabled,1:Enabled"},"OSD4_RSSI_X":{"Description":"Horizontal position on screen","DisplayName":"RSSI_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: RSSI_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_RSSI_Y":{"Description":"Vertical position on screen","DisplayName":"RSSI_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: RSSI_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_SATS_EN":{"Description":"Displays number of acquired satellites","DisplayName":"SATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SATS_EN\n // @Description: Displays number of acquired satellites\n // @Values: 0:Disabled,1:Enabled"},"OSD4_SATS_X":{"Description":"Horizontal position on screen","DisplayName":"SATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_SATS_Y":{"Description":"Vertical position on screen","DisplayName":"SATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_SIDEBARS_EN":{"Description":"Displays artificial horizon side bars","DisplayName":"SIDEBARS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: SIDEBARS_EN\n // @Description: Displays artificial horizon side bars\n // @Values: 0:Disabled,1:Enabled"},"OSD4_SIDEBARS_X":{"Description":"Horizontal position on screen","DisplayName":"SIDEBARS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_SIDEBARS_Y":{"Description":"Vertical position on screen","DisplayName":"SIDEBARS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: SIDEBARS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_STATS_EN":{"Description":"Displays flight stats","DisplayName":"STATS_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: STATS_EN\n // @Description: Displays flight stats\n // @Values: 0:Disabled,1:Enabled"},"OSD4_STATS_X":{"Description":"Horizontal position on screen","DisplayName":"STATS_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: STATS_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_STATS_Y":{"Description":"Vertical position on screen","DisplayName":"STATS_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: STATS_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_TEMP_EN":{"Description":"Displays temperature reported by primary barometer","DisplayName":"TEMP_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TEMP_EN\n // @Description: Displays temperature reported by primary barometer\n // @Values: 0:Disabled,1:Enabled"},"OSD4_TEMP_X":{"Description":"Horizontal position on screen","DisplayName":"TEMP_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TEMP_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_TEMP_Y":{"Description":"Vertical position on screen","DisplayName":"TEMP_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TEMP_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_TER_HGT_EN":{"Description":"Displays Height above terrain","DisplayName":"TER_HGT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: TER_HGT_EN\n // @Description: Displays Height above terrain\n // @Values: 0:Disabled,1:Enabled"},"OSD4_TER_HGT_X":{"Description":"Horizontal position on screen","DisplayName":"TER_HGT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_TER_HGT_Y":{"Description":"Vertical position on screen","DisplayName":"TER_HGT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: TER_HGT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_THROTTLE_EN":{"Description":"Displays actual throttle percentage being sent to motor(s)","DisplayName":"THROTTLE_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: THROTTLE_EN\n // @Description: Displays actual throttle percentage being sent to motor(s)\n // @Values: 0:Disabled,1:Enabled"},"OSD4_THROTTLE_X":{"Description":"Horizontal position on screen","DisplayName":"THROTTLE_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_THROTTLE_Y":{"Description":"Vertical position on screen","DisplayName":"THROTTLE_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: THROTTLE_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_TXT_RES":{"Description":"Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)","DisplayName":"Sets the overlay text resolution (MSP DisplayPort only)","User":"Standard","Values":{"0":"30x16","1":"50x18"},"__field_text":"\n // @DisplayName: Sets the overlay text resolution (MSP DisplayPort only)\n // @Description: Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)\n // @Values: 0:30x16,1:50x18\n // @User: Standard"},"OSD4_VSPEED_EN":{"Description":"Displays climb rate","DisplayName":"VSPEED_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VSPEED_EN\n // @Description: Displays climb rate\n // @Values: 0:Disabled,1:Enabled"},"OSD4_VSPEED_X":{"Description":"Horizontal position on screen","DisplayName":"VSPEED_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_VSPEED_Y":{"Description":"Vertical position on screen","DisplayName":"VSPEED_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VSPEED_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_VTX_PWR_EN":{"Description":"Displays VTX Power","DisplayName":"VTX_PWR_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: VTX_PWR_EN\n // @Description: Displays VTX Power\n // @Values: 0:Disabled,1:Enabled"},"OSD4_VTX_PWR_X":{"Description":"Horizontal position on screen","DisplayName":"VTX_PWR_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_VTX_PWR_Y":{"Description":"Vertical position on screen","DisplayName":"VTX_PWR_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: VTX_PWR_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_WAYPOINT_EN":{"Description":"Displays bearing and distance to next waypoint","DisplayName":"WAYPOINT_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WAYPOINT_EN\n // @Description: Displays bearing and distance to next waypoint\n // @Values: 0:Disabled,1:Enabled"},"OSD4_WAYPOINT_X":{"Description":"Horizontal position on screen","DisplayName":"WAYPOINT_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_WAYPOINT_Y":{"Description":"Vertical position on screen","DisplayName":"WAYPOINT_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WAYPOINT_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_WIND_EN":{"Description":"Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted","DisplayName":"WIND_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: WIND_EN\n // @Description: Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted\n // @Values: 0:Disabled,1:Enabled"},"OSD4_WIND_X":{"Description":"Horizontal position on screen","DisplayName":"WIND_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: WIND_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_WIND_Y":{"Description":"Vertical position on screen","DisplayName":"WIND_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: WIND_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD4_XTRACK_EN":{"Description":"Displays crosstrack error","DisplayName":"XTRACK_EN","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: XTRACK_EN\n // @Description: Displays crosstrack error\n // @Values: 0:Disabled,1:Enabled"},"OSD4_XTRACK_X":{"Description":"Horizontal position on screen","DisplayName":"XTRACK_X","Range":{"high":"59","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_X\n // @Description: Horizontal position on screen\n // @Range: 0 59"},"OSD4_XTRACK_Y":{"Description":"Vertical position on screen","DisplayName":"XTRACK_Y","Range":{"high":"21","low":"0"},"__field_text":"\n // @DisplayName: XTRACK_Y\n // @Description: Vertical position on screen\n // @Range: 0 21"},"OSD5_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD5_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD5_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM1_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM1_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM1_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM1_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM2_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM2_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM2_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM2_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM3_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM3_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM3_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM3_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM4_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM4_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM4_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM4_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM5_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM5_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM5_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM5_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM6_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM6_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM6_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM6_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM7_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM7_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM7_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM7_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM8_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM8_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM8_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM8_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_PARAM9_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD5_PARAM9_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD5_PARAM9_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD5_PARAM9_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD5_SAVE_X":{"Description":"Horizontal position of Save button on screen","DisplayName":"SAVE_X","Range":{"high":"25","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: SAVE_X\n // @Description: Horizontal position of Save button on screen\n // @Range: 0 25\n // @User: Advanced"},"OSD5_SAVE_Y":{"Description":"Vertical position of Save button on screen","DisplayName":"SAVE_Y","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: SAVE_Y\n // @Description: Vertical position of Save button on screen\n // @Range: 0 15\n // @User: Advanced"},"OSD6_CHAN_MAX":{"Description":"This sets the PWM upper limit for this screen","DisplayName":"Transmitter switch screen maximum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen maximum pwm\n // @Description: This sets the PWM upper limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD6_CHAN_MIN":{"Description":"This sets the PWM lower limit for this screen","DisplayName":"Transmitter switch screen minimum pwm","Range":{"high":"2100","low":"900"},"User":"Standard","__field_text":"\n // @DisplayName: Transmitter switch screen minimum pwm\n // @Description: This sets the PWM lower limit for this screen\n // @Range: 900 2100\n // @User: Standard"},"OSD6_ENABLE":{"Description":"Enable this screen","DisplayName":"Enable screen","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable screen\n // @Description: Enable this screen\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM1_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM1_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM1_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM1_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM2_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM2_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM2_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM2_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM3_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM3_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM3_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM3_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM4_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM4_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM4_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM4_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM5_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM5_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM5_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM5_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM6_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM6_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM6_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM6_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM7_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM7_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM7_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM7_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM8_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM8_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM8_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM8_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_PARAM9_EN":{"Description":"Enable setting","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable setting\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"OSD6_PARAM9_GRP":{"Description":"Group of the parameter to be displayed and modified","DisplayName":"Parameter group","User":"Standard","__field_text":"\n // @DisplayName: Parameter group\n // @Description: Group of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_IDX":{"Description":"Index of the parameter to be displayed and modified","DisplayName":"Parameter index","User":"Standard","__field_text":"\n // @DisplayName: Parameter index\n // @Description: Index of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_INCR":{"Description":"Increment of the parameter to be displayed and modified","DisplayName":"Parameter increment","User":"Standard","__field_text":"\n // @DisplayName: Parameter increment\n // @Description: Increment of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_KEY":{"Description":"Key of the parameter to be displayed and modified","DisplayName":"Parameter key","User":"Standard","__field_text":"\n // @DisplayName: Parameter key\n // @Description: Key of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_MAX":{"Description":"Maximum of the parameter to be displayed and modified","DisplayName":"Parameter maximum","User":"Standard","__field_text":"\n // @DisplayName: Parameter maximum\n // @Description: Maximum of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_MIN":{"Description":"Minimum value of the parameter to be displayed and modified","DisplayName":"Parameter minimum","User":"Standard","__field_text":"\n // @DisplayName: Parameter minimum\n // @Description: Minimum value of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_TYPE":{"Description":"Type of the parameter to be displayed and modified","DisplayName":"Parameter type","User":"Standard","__field_text":"\n // @DisplayName: Parameter type\n // @Description: Type of the parameter to be displayed and modified\n // @User: Standard"},"OSD6_PARAM9_X":{"Description":"Horizontal position on screen","DisplayName":"X position","Range":{"high":"29","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: X position\n // @Description: Horizontal position on screen\n // @Range: 0 29\n // @User: Standard"},"OSD6_PARAM9_Y":{"Description":"Vertical position on screen","DisplayName":"Y position","Range":{"high":"15","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Y position\n // @Description: Vertical position on screen\n // @Range: 0 15\n // @User: Standard"},"OSD6_SAVE_X":{"Description":"Horizontal position of Save button on screen","DisplayName":"SAVE_X","Range":{"high":"25","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: SAVE_X\n // @Description: Horizontal position of Save button on screen\n // @Range: 0 25\n // @User: Advanced"},"OSD6_SAVE_Y":{"Description":"Vertical position of Save button on screen","DisplayName":"SAVE_Y","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: SAVE_Y\n // @Description: Vertical position of Save button on screen\n // @Range: 0 15\n // @User: Advanced"},"OSD_ARM_SCR":{"Description":"Screen to be shown on Arm event. Zero to disable the feature.","DisplayName":"Arm screen","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Arm screen\n // @Description: Screen to be shown on Arm event. Zero to disable the feature.\n // @Range: 0 4\n // @User: Standard"},"OSD_BTN_DELAY":{"Description":"Debounce time in ms for stick commanded parameter navigation.","DisplayName":"Button delay","Range":{"high":"3000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Button delay\n // @Description: Debounce time in ms for stick commanded parameter navigation.\n // @Range: 0 3000\n // @User: Advanced"},"OSD_CELL_COUNT":{"Description":"Used for average cell voltage display. -1 disables, 0 uses cell count autodetection for well charged LIPO/LIION batteries at connection, other values manually select cell count used.","DisplayName":"Battery cell count","Increment":"1","User":"Advanced","__field_text":"\n // @DisplayName: Battery cell count\n // @Description: Used for average cell voltage display. -1 disables, 0 uses cell count autodetection for well charged LIPO/LIION batteries at connection, other values manually select cell count used.\n // @Increment: 1\n // @User: Advanced"},"OSD_CHAN":{"Description":"This sets the channel used to switch different OSD screens.","DisplayName":"Screen switch transmitter channel","User":"Standard","Values":{"0":"Disable","5":"Chan5","6":"Chan6","7":"Chan7","8":"Chan8","9":"Chan9","10":"Chan10","11":"Chan11","12":"Chan12","13":"Chan13","14":"Chan14","15":"Chan15","16":"Chan16"},"__field_text":"\n // @DisplayName: Screen switch transmitter channel\n // @Description: This sets the channel used to switch different OSD screens.\n // @Values: 0:Disable,5:Chan5,6:Chan6,7:Chan7,8:Chan8,9:Chan9,10:Chan10,11:Chan11,12:Chan12,13:Chan13,14:Chan14,15:Chan15,16:Chan16\n // @User: Standard"},"OSD_DSARM_SCR":{"Description":"Screen to be shown on disarm event. Zero to disable the feature.","DisplayName":"Disarm screen","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Disarm screen\n // @Description: Screen to be shown on disarm event. Zero to disable the feature.\n // @Range: 0 4\n // @User: Standard"},"OSD_FONT":{"Description":"This sets which OSD font to use. It is an integer from 0 to the number of fonts available","DisplayName":"OSD Font","RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: OSD Font\n // @Description: This sets which OSD font to use. It is an integer from 0 to the number of fonts available\n // @User: Standard\n // @RebootRequired: True"},"OSD_FS_SCR":{"Description":"Screen to be shown on failsafe event. Zero to disable the feature.","DisplayName":"Failsafe screen","Range":{"high":"4","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Failsafe screen\n // @Description: Screen to be shown on failsafe event. Zero to disable the feature.\n // @Range: 0 4\n // @User: Standard"},"OSD_H_OFFSET":{"Description":"Sets horizontal offset of the osd inside image","DisplayName":"OSD horizontal offset","Range":{"high":"63","low":"0"},"RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: OSD horizontal offset\n // @Description: Sets horizontal offset of the osd inside image\n // @Range: 0 63\n // @User: Standard\n // @RebootRequired: True"},"OSD_MSG_TIME":{"Description":"Sets message duration seconds","DisplayName":"Message display duration in seconds","Range":{"high":"20","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: Message display duration in seconds\n // @Description: Sets message duration seconds\n // @Range: 1 20\n // @User: Standard"},"OSD_OPTIONS":{"Bitmask":{"0":"UseDecimalPack","1":"InvertedWindArrow","2":"InvertedAHRoll","3":"Convert feet to miles at 5280ft instead of 10000ft","4":"DisableCrosshair","5":"TranslateArrows","6":"AviationStyleAH"},"Description":"This sets options that change the display","DisplayName":"OSD Options","User":"Standard","__field_text":"\n // @DisplayName: OSD Options\n // @Description: This sets options that change the display\n // @Bitmask: 0:UseDecimalPack, 1:InvertedWindArrow, 2:InvertedAHRoll, 3:Convert feet to miles at 5280ft instead of 10000ft, 4:DisableCrosshair, 5:TranslateArrows, 6:AviationStyleAH\n // @User: Standard"},"OSD_SW_METHOD":{"Description":"This sets the method used to switch different OSD screens.","DisplayName":"Screen switch method","User":"Standard","Values":{"0":"switch to next screen if channel value was changed","1":"select screen based on pwm ranges specified for each screen","2":"switch to next screen after low to high transition and every 1s while channel value is high"},"__field_text":"\n // @DisplayName: Screen switch method\n // @Description: This sets the method used to switch different OSD screens.\n // @Values: 0: switch to next screen if channel value was changed, 1: select screen based on pwm ranges specified for each screen, 2: switch to next screen after low to high transition and every 1s while channel value is high\n // @User: Standard"},"OSD_TYPE":{"Description":"OSD type. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.","DisplayName":"OSD type","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"MAX7456","2":"SITL","3":"MSP","4":"TXONLY","5":"MSP_DISPLAYPORT"},"__field_text":"\n // @DisplayName: OSD type\n // @Description: OSD type. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.\n // @Values: 0:None,1:MAX7456,2:SITL,3:MSP,4:TXONLY,5:MSP_DISPLAYPORT\n // @User: Standard\n // @RebootRequired: True"},"OSD_TYPE2":{"Description":"OSD type 2. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.","DisplayName":"OSD type 2","RebootRequired":"True","User":"Standard","Values":{"0":"None","1":"MAX7456","2":"SITL","3":"MSP","4":"TXONLY","5":"MSP_DISPLAYPORT"},"__field_text":"\n // @DisplayName: OSD type 2\n // @Description: OSD type 2. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.\n // @Values: 0:None,1:MAX7456,2:SITL,3:MSP,4:TXONLY,5:MSP_DISPLAYPORT\n // @User: Standard\n // @RebootRequired: True"},"OSD_UNITS":{"Description":"Sets the units to use in displaying items","DisplayName":"Display Units","User":"Standard","Values":{"0":"Metric","1":"Imperial","2":"SI","3":"Aviation"},"__field_text":"\n // @DisplayName: Display Units\n // @Description: Sets the units to use in displaying items\n // @Values: 0:Metric,1:Imperial,2:SI,3:Aviation\n // @User: Standard"},"OSD_V_OFFSET":{"Description":"Sets vertical offset of the osd inside image","DisplayName":"OSD vertical offset","Range":{"high":"31","low":"0"},"RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: OSD vertical offset\n // @Description: Sets vertical offset of the osd inside image\n // @Range: 0 31\n // @User: Standard\n // @RebootRequired: True"},"OSD_W_ACRVOLT":{"Description":"Set level at which ACRVOLT item will flash","DisplayName":"Avg Cell Resting Volt warn level","Range":{"high":"100","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Avg Cell Resting Volt warn level\n // @Description: Set level at which ACRVOLT item will flash\n // @Range: 0 100\n // @User: Standard"},"OSD_W_AVGCELLV":{"Description":"Set level at which AVGCELLV item will flash","DisplayName":"AVGCELLV warn level","Range":{"high":"100","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: AVGCELLV warn level\n // @Description: Set level at which AVGCELLV item will flash\n // @Range: 0 100\n // @User: Standard"},"OSD_W_BATVOLT":{"Description":"Set level at which BAT_VOLT item will flash","DisplayName":"BAT_VOLT warn level","Range":{"high":"100","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: BAT_VOLT warn level\n // @Description: Set level at which BAT_VOLT item will flash\n // @Range: 0 100\n // @User: Standard"},"OSD_W_NSAT":{"Description":"Set level at which NSAT item will flash","DisplayName":"NSAT warn level","Range":{"high":"30","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: NSAT warn level\n // @Description: Set level at which NSAT item will flash\n // @Range: 1 30\n // @User: Standard"},"OSD_W_RESTVOLT":{"Description":"Set level at which RESTVOLT item will flash","DisplayName":"RESTVOLT warn level","Range":{"high":"100","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: RESTVOLT warn level\n // @Description: Set level at which RESTVOLT item will flash\n // @Range: 0 100\n // @User: Standard"},"OSD_W_RSSI":{"Description":"Set level at which RSSI item will flash","DisplayName":"RSSI warn level (in %)","Range":{"high":"99","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: RSSI warn level (in %)\n // @Description: Set level at which RSSI item will flash\n // @Range: 0 99\n // @User: Standard"},"OSD_W_TERR":{"Description":"Set level below which TER_HGT item will flash. -1 disables.","DisplayName":"Terrain warn level","Range":{"high":"3000","low":"-1"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Terrain warn level\n // @Description: Set level below which TER_HGT item will flash. -1 disables.\n // @Range: -1 3000\n // @Units: m\n // @User: Standard"},"PHLD_BRAKE_ANGLE":{"Description":"PosHold flight mode's max lean angle during braking in centi-degrees","DisplayName":"PosHold braking angle max","Increment":"10","Range":{"high":"4500","low":"2000"},"Units":"cdeg","User":"Advanced","__field_text":"\n // @DisplayName: PosHold braking angle max\n // @Description: PosHold flight mode's max lean angle during braking in centi-degrees\n // @Units: cdeg\n // @Increment: 10\n // @Range: 2000 4500\n // @User: Advanced"},"PHLD_BRAKE_RATE":{"Description":"PosHold flight mode's rotation rate during braking in deg/sec","DisplayName":"PosHold braking rate","Range":{"high":"12","low":"4"},"Units":"deg/s","User":"Advanced","__field_text":"\n // @DisplayName: PosHold braking rate\n // @Description: PosHold flight mode's rotation rate during braking in deg/sec\n // @Units: deg/s\n // @Range: 4 12\n // @User: Advanced"},"PILOT_ACCEL_Z":{"Description":"The vertical acceleration used when pilot is controlling the altitude","DisplayName":"Pilot vertical acceleration","Increment":"10","Range":{"high":"500","low":"50"},"Units":"cm/s/s","User":"Standard","__field_text":"\n // @DisplayName: Pilot vertical acceleration\n // @Description: The vertical acceleration used when pilot is controlling the altitude\n // @Units: cm/s/s\n // @Range: 50 500\n // @Increment: 10\n // @User: Standard"},"PILOT_SPEED_DN":{"Description":"The maximum vertical descending velocity the pilot may request in cm/s. If 0 PILOT_SPEED_UP value is used.","DisplayName":"Pilot maximum vertical speed descending","Increment":"10","Range":{"high":"500","low":"0"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Pilot maximum vertical speed descending\n // @Description: The maximum vertical descending velocity the pilot may request in cm/s. If 0 PILOT_SPEED_UP value is used.\n // @Units: cm/s\n // @Range: 0 500\n // @Increment: 10\n // @User: Standard"},"PILOT_SPEED_UP":{"Description":"The maximum vertical ascending velocity the pilot may request in cm/s","DisplayName":"Pilot maximum vertical speed ascending","Increment":"10","Range":{"high":"500","low":"50"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Pilot maximum vertical speed ascending\n // @Description: The maximum vertical ascending velocity the pilot may request in cm/s\n // @Units: cm/s\n // @Range: 50 500\n // @Increment: 10\n // @User: Standard"},"PILOT_THR_BHV":{"Bitmask":{"0":"Feedback from mid stick","1":"High throttle cancels landing","2":"Disarm on land detection"},"Description":"Bitmask containing various throttle stick options. TX with sprung throttle can set PILOT_THR_BHV to \"1\" so motor feedback when landed starts from mid-stick instead of bottom of stick.","DisplayName":"Throttle stick behavior","User":"Standard","Values":{"0":"None","1":"Feedback from mid stick","2":"High throttle cancels landing","4":"Disarm on land detection"},"__field_text":"\n // @DisplayName: Throttle stick behavior\n // @Description: Bitmask containing various throttle stick options. TX with sprung throttle can set PILOT_THR_BHV to \"1\" so motor feedback when landed starts from mid-stick instead of bottom of stick.\n // @User: Standard\n // @Values: 0:None,1:Feedback from mid stick,2:High throttle cancels landing,4:Disarm on land detection\n // @Bitmask: 0:Feedback from mid stick,1:High throttle cancels landing,2:Disarm on land detection"},"PILOT_THR_FILT":{"Description":"Throttle filter cutoff (Hz) - active whenever altitude control is inactive - 0 to disable","DisplayName":"Throttle filter cutoff","Increment":".5","Range":{"high":"10","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Throttle filter cutoff\n // @Description: Throttle filter cutoff (Hz) - active whenever altitude control is inactive - 0 to disable\n // @User: Advanced\n // @Units: Hz\n // @Range: 0 10\n // @Increment: .5"},"PILOT_TKOFF_ALT":{"Description":"Altitude that altitude control modes will climb to when a takeoff is triggered with the throttle stick.","DisplayName":"Pilot takeoff altitude","Increment":"10","Range":{"high":"1000.0","low":"0.0"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Pilot takeoff altitude\n // @Description: Altitude that altitude control modes will climb to when a takeoff is triggered with the throttle stick.\n // @User: Standard\n // @Units: cm\n // @Range: 0.0 1000.0\n // @Increment: 10"},"PILOT_Y_EXPO":{"Description":"Pilot controlled yaw expo to allow faster rotation when stick at edges","DisplayName":"Pilot controlled yaw expo","Range":{"high":"1.0","low":"-0.5"},"User":"Advanced","Values":{"0":"Disabled","0.1":"Very Low","0.2":"Low","0.3":"Medium","0.4":"High","0.5":"Very High"},"__field_text":"\n // @DisplayName: Pilot controlled yaw expo\n // @Description: Pilot controlled yaw expo to allow faster rotation when stick at edges\n // @Values: 0:Disabled,0.1:Very Low,0.2:Low,0.3:Medium,0.4:High,0.5:Very High\n // @Range: -0.5 1.0\n // @User: Advanced"},"PILOT_Y_RATE":{"Description":"Pilot controlled yaw rate max. Used in all pilot controlled modes except Acro","DisplayName":"Pilot controlled yaw rate","Range":{"high":"360","low":"1"},"Units":"deg/s","User":"Standard","__field_text":"\n // @DisplayName: Pilot controlled yaw rate\n // @Description: Pilot controlled yaw rate max. Used in all pilot controlled modes except Acro\n // @Units: deg/s\n // @Range: 1 360\n // @User: Standard"},"PILOT_Y_RATE_TC":{"Description":"Pilot yaw rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response","DisplayName":"Pilot yaw rate control input time constant","Increment":"0.01","Range":{"high":"1","low":"0"},"Units":"s","User":"Standard","Values":{"0.05":"Very Crisp","0.1":"Crisp","0.15":"Medium","0.2":"Soft","0.5":"Very Soft"},"__field_text":"\n // @DisplayName: Pilot yaw rate control input time constant\n // @Description: Pilot yaw rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response\n // @Units: s\n // @Range: 0 1\n // @Increment: 0.01\n // @Values: 0.5:Very Soft, 0.2:Soft, 0.15:Medium, 0.1:Crisp, 0.05:Very Crisp\n // @User: Standard"},"PLDP_DELAY":{"Description":"Delay after release, in seconds, before aircraft starts to climb back to starting altitude.","DisplayName":"Payload Place climb delay","Range":{"high":"120","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Payload Place climb delay\n // @Description: Delay after release, in seconds, before aircraft starts to climb back to starting altitude.\n // @Units: s\n // @Range: 0 120\n // @User: Standard"},"PLDP_RNG_MIN":{"Description":"Minimum range finder altitude in m to trigger payload touchdown, set to zero to disable.","DisplayName":"Payload Place minimum range finder altitude","Range":{"high":"100","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Payload Place minimum range finder altitude\n // @Description: Minimum range finder altitude in m to trigger payload touchdown, set to zero to disable.\n // @Units: m\n // @Range: 0 100\n // @User: Standard"},"PLDP_SPEED_DN":{"Description":"The maximum vertical decent velocity in m/s. If 0 LAND_SPEED value is used.","DisplayName":"Payload Place decent speed","Range":{"high":"5","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Payload Place decent speed\n // @Description: The maximum vertical decent velocity in m/s. If 0 LAND_SPEED value is used.\n // @Units: m/s\n // @Range: 0 5\n // @User: Standard"},"PLDP_THRESH":{"Description":"Ratio of vertical thrust during decent below which payload touchdown will trigger.","DisplayName":"Payload Place thrust ratio threshold","Range":{"high":"0.9","low":"0.5"},"User":"Standard","__field_text":"\n // @DisplayName: Payload Place thrust ratio threshold\n // @Description: Ratio of vertical thrust during decent below which payload touchdown will trigger.\n // @Range: 0.5 0.9\n // @User: Standard"},"PLND_ACC_P_NSE":{"Description":"Kalman Filter Accelerometer Noise, higher values weight the input from the camera more, accels less","DisplayName":"Kalman Filter Accelerometer Noise","Range":{"high":"5","low":"0.5"},"User":"Advanced","__field_text":"\n // @DisplayName: Kalman Filter Accelerometer Noise\n // @Description: Kalman Filter Accelerometer Noise, higher values weight the input from the camera more, accels less\n // @Range: 0.5 5\n // @User: Advanced"},"PLND_ALT_MAX":{"Description":"Vehicle will continue landing vertically until this height if target is not found. Below this height if landing target is not found, landing retry/failsafe might be attempted. This needs a rangefinder to work. Set to zero to disable this.","DisplayName":"PrecLand maximum alt for retry","Range":{"high":"50","low":"0"},"Units":"m","__field_text":"\n // @DisplayName: PrecLand maximum alt for retry\n // @Description: Vehicle will continue landing vertically until this height if target is not found. Below this height if landing target is not found, landing retry/failsafe might be attempted. This needs a rangefinder to work. Set to zero to disable this.\n // @Range: 0 50\n // @Units: m"},"PLND_ALT_MIN":{"Description":"Vehicle will continue landing vertically even if target is lost below this height. This needs a rangefinder to work. Set to zero to disable this.","DisplayName":"PrecLand minimum alt for retry","Range":{"high":"5","low":"0"},"Units":"m","__field_text":"\n // @DisplayName: PrecLand minimum alt for retry\n // @Description: Vehicle will continue landing vertically even if target is lost below this height. This needs a rangefinder to work. Set to zero to disable this.\n // @Range: 0 5\n // @Units: m"},"PLND_BUS":{"Description":"Precland sensor bus for I2C sensors.","DisplayName":"Sensor Bus","User":"Advanced","Values":{"0":"InternalI2C","1":"ExternalI2C","-1":"DefaultBus"},"__field_text":"\n // @DisplayName: Sensor Bus\n // @Description: Precland sensor bus for I2C sensors.\n // @Values: -1:DefaultBus,0:InternalI2C,1:ExternalI2C\n // @User: Advanced"},"PLND_CAM_POS_X":{"Description":"X position of the camera in body frame. Positive X is forward of the origin.","DisplayName":"Camera X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Camera X position offset\n // @Description: X position of the camera in body frame. Positive X is forward of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"PLND_CAM_POS_Y":{"Description":"Y position of the camera in body frame. Positive Y is to the right of the origin.","DisplayName":"Camera Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Camera Y position offset\n // @Description: Y position of the camera in body frame. Positive Y is to the right of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"PLND_CAM_POS_Z":{"Description":"Z position of the camera in body frame. Positive Z is down from the origin.","DisplayName":"Camera Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Camera Z position offset\n // @Description: Z position of the camera in body frame. Positive Z is down from the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"PLND_ENABLED":{"Description":"Precision Land enabled/disabled","DisplayName":"Precision Land enabled/disabled","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Precision Land enabled/disabled\n // @Description: Precision Land enabled/disabled\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"PLND_EST_TYPE":{"Description":"Specifies the estimation method to be used","DisplayName":"Precision Land Estimator Type","User":"Advanced","Values":{"0":"RawSensor","1":"KalmanFilter"},"__field_text":"\n // @DisplayName: Precision Land Estimator Type\n // @Description: Specifies the estimation method to be used\n // @Values: 0:RawSensor, 1:KalmanFilter\n // @User: Advanced"},"PLND_LAG":{"Description":"Precision Landing sensor lag, to cope with variable landing_target latency","DisplayName":"Precision Landing sensor lag","Increment":"1","Range":{"high":"0.250","low":"0.02"},"RebootRequired":"True","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Precision Landing sensor lag\n // @Description: Precision Landing sensor lag, to cope with variable landing_target latency\n // @Range: 0.02 0.250\n // @Increment: 1\n // @Units: s\n // @User: Advanced\n // @RebootRequired: True"},"PLND_LAND_OFS_X":{"Description":"Desired landing position of the camera forward of the target in vehicle body frame","DisplayName":"Land offset forward","Increment":"1","Range":{"high":"20","low":"-20"},"Units":"cm","User":"Advanced","__field_text":"\n // @DisplayName: Land offset forward\n // @Description: Desired landing position of the camera forward of the target in vehicle body frame\n // @Range: -20 20\n // @Increment: 1\n // @User: Advanced\n // @Units: cm"},"PLND_LAND_OFS_Y":{"Description":"desired landing position of the camera right of the target in vehicle body frame","DisplayName":"Land offset right","Increment":"1","Range":{"high":"20","low":"-20"},"Units":"cm","User":"Advanced","__field_text":"\n // @DisplayName: Land offset right\n // @Description: desired landing position of the camera right of the target in vehicle body frame\n // @Range: -20 20\n // @Increment: 1\n // @User: Advanced\n // @Units: cm"},"PLND_OPTIONS":{"Bitmask":{"0":"Moving Landing Target","1":"Allow Precision Landing after manual reposition","2":"Maintain high speed in final descent"},"Description":"Precision Landing Extra Options","DisplayName":"Precision Landing Extra Options","User":"Advanced","__field_text":"\n // @DisplayName: Precision Landing Extra Options\n // @Description: Precision Landing Extra Options\n // @Bitmask: 0: Moving Landing Target, 1: Allow Precision Landing after manual reposition, 2: Maintain high speed in final descent\n // @User: Advanced"},"PLND_ORIENT":{"Description":"Orientation of camera/sensor on body","DisplayName":"Camera Orientation","RebootRequired":"True","User":"Advanced","Values":{"0":"Forward","4":"Back","25":"Down"},"__field_text":"\n // @DisplayName: Camera Orientation\n // @Description: Orientation of camera/sensor on body\n // @Values: 0:Forward, 4:Back, 25:Down\n // @User: Advanced\n // @RebootRequired: True"},"PLND_RET_BEHAVE":{"Description":"Prec Land will do the action selected by this parameter if a retry to a landing is needed","DisplayName":"PrecLand retry behaviour","Values":{"0":"Go to the last location where landing target was detected","1":"Go towards the approximate location of the detected landing target"},"__field_text":"\n // @DisplayName: PrecLand retry behaviour\n // @Description: Prec Land will do the action selected by this parameter if a retry to a landing is needed\n // @Values: 0: Go to the last location where landing target was detected, 1: Go towards the approximate location of the detected landing target"},"PLND_RET_MAX":{"Description":"PrecLand Maximum number of retires for a failed landing. Set to zero to disable landing retry.","DisplayName":"PrecLand Maximum number of retires for a failed landing","Increment":"1","Range":{"high":"10","low":"0"},"__field_text":"\n // @DisplayName: PrecLand Maximum number of retires for a failed landing\n // @Description: PrecLand Maximum number of retires for a failed landing. Set to zero to disable landing retry.\n // @Range: 0 10\n // @Increment: 1"},"PLND_STRICT":{"Description":"How strictly should the vehicle land on the target if target is lost","DisplayName":"PrecLand strictness","Values":{"0":"Land Vertically (Not strict)","1":"Retry Landing(Normal Strictness)","2":"Do not land (just Hover) (Very Strict)"},"__field_text":"\n // @DisplayName: PrecLand strictness\n // @Description: How strictly should the vehicle land on the target if target is lost\n // @Values: 0: Land Vertically (Not strict), 1: Retry Landing(Normal Strictness), 2: Do not land (just Hover) (Very Strict)"},"PLND_TIMEOUT":{"Description":"Time for which vehicle continues descend even if target is lost. After this time period, vehicle will attempt a landing retry depending on PLND_STRICT parameter.","DisplayName":"PrecLand retry timeout","Range":{"high":"20","low":"0"},"Units":"s","__field_text":"\n // @DisplayName: PrecLand retry timeout\n // @Description: Time for which vehicle continues descend even if target is lost. After this time period, vehicle will attempt a landing retry depending on PLND_STRICT parameter.\n // @Range: 0 20\n // @Units: s"},"PLND_TYPE":{"Description":"Precision Land Type","DisplayName":"Precision Land Type","User":"Advanced","Values":{"0":"None","1":"CompanionComputer","2":"IRLock","3":"SITL_Gazebo","4":"SITL"},"__field_text":"\n // @DisplayName: Precision Land Type\n // @Description: Precision Land Type\n // @Values: 0:None, 1:CompanionComputer, 2:IRLock, 3:SITL_Gazebo, 4:SITL\n // @User: Advanced"},"PLND_XY_DIST_MAX":{"Description":"The vehicle will not start descending if the landing target is detected and it is further than this many meters away. Set 0 to always descend.","DisplayName":"Precision Landing maximum distance to target before descending","Range":{"high":"10","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Precision Landing maximum distance to target before descending\n // @Description: The vehicle will not start descending if the landing target is detected and it is further than this many meters away. Set 0 to always descend.\n // @Range: 0 10\n // @Units: m\n // @User: Advanced"},"PLND_YAW_ALIGN":{"Description":"Yaw angle from body x-axis to sensor x-axis.","DisplayName":"Sensor yaw alignment","Increment":"10","Range":{"high":"36000","low":"0"},"Units":"cdeg","User":"Advanced","__field_text":"\n // @DisplayName: Sensor yaw alignment\n // @Description: Yaw angle from body x-axis to sensor x-axis.\n // @Range: 0 36000\n // @Increment: 10\n // @User: Advanced\n // @Units: cdeg"},"POI_DIST_MAX":{"Description":"POI's max distance (in meters) from the vehicle","DisplayName":"Mount POI distance max","Range":{"high":"10000","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Mount POI distance max\n // @Description: POI's max distance (in meters) from the vehicle\n // @Range: 0 10000\n // @User: Standard"},"PREV_ENABLE":{"Description":"Enable parameter reversion system","DisplayName":"parameter reversion enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: parameter reversion enable\n // @Description: Enable parameter reversion system\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"PREV_RC_FUNC":{"Description":"RCn_OPTION number to used to trigger parameter reversion","DisplayName":"param reversion RC function","User":"Standard","__field_text":"\n // @DisplayName: param reversion RC function\n // @Description: RCn_OPTION number to used to trigger parameter reversion\n // @User: Standard"},"PRX1_ADDR":{"Description":"The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"PRX1_IGN_ANG1":{"Description":"Proximity sensor ignore angle 1","DisplayName":"Proximity sensor ignore angle 1","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 1\n // @Description: Proximity sensor ignore angle 1\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX1_IGN_ANG2":{"Description":"Proximity sensor ignore angle 2","DisplayName":"Proximity sensor ignore angle 2","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 2\n // @Description: Proximity sensor ignore angle 2\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX1_IGN_ANG3":{"Description":"Proximity sensor ignore angle 3","DisplayName":"Proximity sensor ignore angle 3","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 3\n // @Description: Proximity sensor ignore angle 3\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX1_IGN_ANG4":{"Description":"Proximity sensor ignore angle 4","DisplayName":"Proximity sensor ignore angle 4","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 4\n // @Description: Proximity sensor ignore angle 4\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX1_IGN_WID1":{"Description":"Proximity sensor ignore width 1","DisplayName":"Proximity sensor ignore width 1","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 1\n // @Description: Proximity sensor ignore width 1\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX1_IGN_WID2":{"Description":"Proximity sensor ignore width 2","DisplayName":"Proximity sensor ignore width 2","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 2\n // @Description: Proximity sensor ignore width 2\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX1_IGN_WID3":{"Description":"Proximity sensor ignore width 3","DisplayName":"Proximity sensor ignore width 3","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 3\n // @Description: Proximity sensor ignore width 3\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX1_IGN_WID4":{"Description":"Proximity sensor ignore width 4","DisplayName":"Proximity sensor ignore width 4","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 4\n // @Description: Proximity sensor ignore width 4\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX1_MAX":{"Description":"Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity maximum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity maximum range\n // @Description: Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX1_MIN":{"Description":"Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity minimum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity minimum range\n // @Description: Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX1_ORIENT":{"Description":"Proximity sensor orientation","DisplayName":"Proximity sensor orientation","User":"Standard","Values":{"0":"Default","1":"Upside Down"},"__field_text":"\n // @DisplayName: Proximity sensor orientation\n // @Description: Proximity sensor orientation\n // @Values: 0:Default,1:Upside Down\n // @User: Standard"},"PRX1_TYPE":{"Description":"What type of proximity sensor is connected","DisplayName":"Proximity type","RebootRequired":"True","User":"Standard","Values":{"0":"None","2":"MAVLink","3":"TeraRangerTower","4":"RangeFinder","5":"RPLidarA2","6":"TeraRangerTowerEvo","7":"LightwareSF40c","8":"LightwareSF45B","10":"SITL","12":"AirSimSITL","13":"CygbotD1","14":"DroneCAN","15":"Scripting","16":"LD06"},"__field_text":"\n // @DisplayName: Proximity type\n // @Description: What type of proximity sensor is connected\n // @Values: 0:None,7:LightwareSF40c,2:MAVLink,3:TeraRangerTower,4:RangeFinder,5:RPLidarA2,6:TeraRangerTowerEvo,8:LightwareSF45B,10:SITL,12:AirSimSITL,13:CygbotD1, 14:DroneCAN, 15:Scripting, 16:LD06\n // @RebootRequired: True\n // @User: Standard"},"PRX1_YAW_CORR":{"Description":"Proximity sensor yaw correction","DisplayName":"Proximity sensor yaw correction","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor yaw correction\n // @Description: Proximity sensor yaw correction\n // @Units: deg\n // @Range: -180 180\n // @User: Standard"},"PRX2_ADDR":{"Description":"The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"PRX2_IGN_ANG1":{"Description":"Proximity sensor ignore angle 1","DisplayName":"Proximity sensor ignore angle 1","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 1\n // @Description: Proximity sensor ignore angle 1\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX2_IGN_ANG2":{"Description":"Proximity sensor ignore angle 2","DisplayName":"Proximity sensor ignore angle 2","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 2\n // @Description: Proximity sensor ignore angle 2\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX2_IGN_ANG3":{"Description":"Proximity sensor ignore angle 3","DisplayName":"Proximity sensor ignore angle 3","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 3\n // @Description: Proximity sensor ignore angle 3\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX2_IGN_ANG4":{"Description":"Proximity sensor ignore angle 4","DisplayName":"Proximity sensor ignore angle 4","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 4\n // @Description: Proximity sensor ignore angle 4\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX2_IGN_WID1":{"Description":"Proximity sensor ignore width 1","DisplayName":"Proximity sensor ignore width 1","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 1\n // @Description: Proximity sensor ignore width 1\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX2_IGN_WID2":{"Description":"Proximity sensor ignore width 2","DisplayName":"Proximity sensor ignore width 2","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 2\n // @Description: Proximity sensor ignore width 2\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX2_IGN_WID3":{"Description":"Proximity sensor ignore width 3","DisplayName":"Proximity sensor ignore width 3","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 3\n // @Description: Proximity sensor ignore width 3\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX2_IGN_WID4":{"Description":"Proximity sensor ignore width 4","DisplayName":"Proximity sensor ignore width 4","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 4\n // @Description: Proximity sensor ignore width 4\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX2_MAX":{"Description":"Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity maximum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity maximum range\n // @Description: Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX2_MIN":{"Description":"Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity minimum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity minimum range\n // @Description: Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX2_ORIENT":{"Description":"Proximity sensor orientation","DisplayName":"Proximity sensor orientation","User":"Standard","Values":{"0":"Default","1":"Upside Down"},"__field_text":"\n // @DisplayName: Proximity sensor orientation\n // @Description: Proximity sensor orientation\n // @Values: 0:Default,1:Upside Down\n // @User: Standard"},"PRX2_TYPE":{"Description":"What type of proximity sensor is connected","DisplayName":"Proximity type","RebootRequired":"True","User":"Standard","Values":{"0":"None","2":"MAVLink","3":"TeraRangerTower","4":"RangeFinder","5":"RPLidarA2","6":"TeraRangerTowerEvo","7":"LightwareSF40c","8":"LightwareSF45B","10":"SITL","12":"AirSimSITL","13":"CygbotD1","14":"DroneCAN","15":"Scripting","16":"LD06"},"__field_text":"\n // @DisplayName: Proximity type\n // @Description: What type of proximity sensor is connected\n // @Values: 0:None,7:LightwareSF40c,2:MAVLink,3:TeraRangerTower,4:RangeFinder,5:RPLidarA2,6:TeraRangerTowerEvo,8:LightwareSF45B,10:SITL,12:AirSimSITL,13:CygbotD1, 14:DroneCAN, 15:Scripting, 16:LD06\n // @RebootRequired: True\n // @User: Standard"},"PRX2_YAW_CORR":{"Description":"Proximity sensor yaw correction","DisplayName":"Proximity sensor yaw correction","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor yaw correction\n // @Description: Proximity sensor yaw correction\n // @Units: deg\n // @Range: -180 180\n // @User: Standard"},"PRX3_ADDR":{"Description":"The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"PRX3_IGN_ANG1":{"Description":"Proximity sensor ignore angle 1","DisplayName":"Proximity sensor ignore angle 1","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 1\n // @Description: Proximity sensor ignore angle 1\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX3_IGN_ANG2":{"Description":"Proximity sensor ignore angle 2","DisplayName":"Proximity sensor ignore angle 2","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 2\n // @Description: Proximity sensor ignore angle 2\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX3_IGN_ANG3":{"Description":"Proximity sensor ignore angle 3","DisplayName":"Proximity sensor ignore angle 3","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 3\n // @Description: Proximity sensor ignore angle 3\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX3_IGN_ANG4":{"Description":"Proximity sensor ignore angle 4","DisplayName":"Proximity sensor ignore angle 4","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 4\n // @Description: Proximity sensor ignore angle 4\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX3_IGN_WID1":{"Description":"Proximity sensor ignore width 1","DisplayName":"Proximity sensor ignore width 1","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 1\n // @Description: Proximity sensor ignore width 1\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX3_IGN_WID2":{"Description":"Proximity sensor ignore width 2","DisplayName":"Proximity sensor ignore width 2","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 2\n // @Description: Proximity sensor ignore width 2\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX3_IGN_WID3":{"Description":"Proximity sensor ignore width 3","DisplayName":"Proximity sensor ignore width 3","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 3\n // @Description: Proximity sensor ignore width 3\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX3_IGN_WID4":{"Description":"Proximity sensor ignore width 4","DisplayName":"Proximity sensor ignore width 4","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 4\n // @Description: Proximity sensor ignore width 4\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX3_MAX":{"Description":"Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity maximum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity maximum range\n // @Description: Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX3_MIN":{"Description":"Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity minimum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity minimum range\n // @Description: Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX3_ORIENT":{"Description":"Proximity sensor orientation","DisplayName":"Proximity sensor orientation","User":"Standard","Values":{"0":"Default","1":"Upside Down"},"__field_text":"\n // @DisplayName: Proximity sensor orientation\n // @Description: Proximity sensor orientation\n // @Values: 0:Default,1:Upside Down\n // @User: Standard"},"PRX3_TYPE":{"Description":"What type of proximity sensor is connected","DisplayName":"Proximity type","RebootRequired":"True","User":"Standard","Values":{"0":"None","2":"MAVLink","3":"TeraRangerTower","4":"RangeFinder","5":"RPLidarA2","6":"TeraRangerTowerEvo","7":"LightwareSF40c","8":"LightwareSF45B","10":"SITL","12":"AirSimSITL","13":"CygbotD1","14":"DroneCAN","15":"Scripting","16":"LD06"},"__field_text":"\n // @DisplayName: Proximity type\n // @Description: What type of proximity sensor is connected\n // @Values: 0:None,7:LightwareSF40c,2:MAVLink,3:TeraRangerTower,4:RangeFinder,5:RPLidarA2,6:TeraRangerTowerEvo,8:LightwareSF45B,10:SITL,12:AirSimSITL,13:CygbotD1, 14:DroneCAN, 15:Scripting, 16:LD06\n // @RebootRequired: True\n // @User: Standard"},"PRX3_YAW_CORR":{"Description":"Proximity sensor yaw correction","DisplayName":"Proximity sensor yaw correction","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor yaw correction\n // @Description: Proximity sensor yaw correction\n // @Units: deg\n // @Range: -180 180\n // @User: Standard"},"PRX4_ADDR":{"Description":"The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: The bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"PRX4_IGN_ANG1":{"Description":"Proximity sensor ignore angle 1","DisplayName":"Proximity sensor ignore angle 1","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 1\n // @Description: Proximity sensor ignore angle 1\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX4_IGN_ANG2":{"Description":"Proximity sensor ignore angle 2","DisplayName":"Proximity sensor ignore angle 2","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 2\n // @Description: Proximity sensor ignore angle 2\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX4_IGN_ANG3":{"Description":"Proximity sensor ignore angle 3","DisplayName":"Proximity sensor ignore angle 3","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 3\n // @Description: Proximity sensor ignore angle 3\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX4_IGN_ANG4":{"Description":"Proximity sensor ignore angle 4","DisplayName":"Proximity sensor ignore angle 4","Range":{"high":"360","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore angle 4\n // @Description: Proximity sensor ignore angle 4\n // @Units: deg\n // @Range: 0 360\n // @User: Standard"},"PRX4_IGN_WID1":{"Description":"Proximity sensor ignore width 1","DisplayName":"Proximity sensor ignore width 1","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 1\n // @Description: Proximity sensor ignore width 1\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX4_IGN_WID2":{"Description":"Proximity sensor ignore width 2","DisplayName":"Proximity sensor ignore width 2","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 2\n // @Description: Proximity sensor ignore width 2\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX4_IGN_WID3":{"Description":"Proximity sensor ignore width 3","DisplayName":"Proximity sensor ignore width 3","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 3\n // @Description: Proximity sensor ignore width 3\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX4_IGN_WID4":{"Description":"Proximity sensor ignore width 4","DisplayName":"Proximity sensor ignore width 4","Range":{"high":"127","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor ignore width 4\n // @Description: Proximity sensor ignore width 4\n // @Units: deg\n // @Range: 0 127\n // @User: Standard"},"PRX4_MAX":{"Description":"Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity maximum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity maximum range\n // @Description: Maximum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX4_MIN":{"Description":"Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.","DisplayName":"Proximity minimum range","Range":{"high":"500","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity minimum range\n // @Description: Minimum expected range for Proximity Sensor. Setting this to 0 will set value to manufacturer reported range.\n // @Units: m\n // @Range: 0 500\n // @User: Advanced"},"PRX4_ORIENT":{"Description":"Proximity sensor orientation","DisplayName":"Proximity sensor orientation","User":"Standard","Values":{"0":"Default","1":"Upside Down"},"__field_text":"\n // @DisplayName: Proximity sensor orientation\n // @Description: Proximity sensor orientation\n // @Values: 0:Default,1:Upside Down\n // @User: Standard"},"PRX4_TYPE":{"Description":"What type of proximity sensor is connected","DisplayName":"Proximity type","RebootRequired":"True","User":"Standard","Values":{"0":"None","2":"MAVLink","3":"TeraRangerTower","4":"RangeFinder","5":"RPLidarA2","6":"TeraRangerTowerEvo","7":"LightwareSF40c","8":"LightwareSF45B","10":"SITL","12":"AirSimSITL","13":"CygbotD1","14":"DroneCAN","15":"Scripting","16":"LD06"},"__field_text":"\n // @DisplayName: Proximity type\n // @Description: What type of proximity sensor is connected\n // @Values: 0:None,7:LightwareSF40c,2:MAVLink,3:TeraRangerTower,4:RangeFinder,5:RPLidarA2,6:TeraRangerTowerEvo,8:LightwareSF45B,10:SITL,12:AirSimSITL,13:CygbotD1, 14:DroneCAN, 15:Scripting, 16:LD06\n // @RebootRequired: True\n // @User: Standard"},"PRX4_YAW_CORR":{"Description":"Proximity sensor yaw correction","DisplayName":"Proximity sensor yaw correction","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Proximity sensor yaw correction\n // @Description: Proximity sensor yaw correction\n // @Units: deg\n // @Range: -180 180\n // @User: Standard"},"PRX_ALT_MIN":{"Description":"Minimum altitude below which proximity should not work.","DisplayName":"Proximity lowest altitude.","Range":{"high":"10","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Proximity lowest altitude.\n // @Description: Minimum altitude below which proximity should not work.\n // @Units: m\n // @Range: 0 10\n // @User: Advanced"},"PRX_FILT":{"Description":"Cutoff frequency for low pass filter applied to each face in the proximity boundary","DisplayName":"Proximity filter cutoff frequency","Range":{"high":"20","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Proximity filter cutoff frequency\n // @Description: Cutoff frequency for low pass filter applied to each face in the proximity boundary\n // @Units: Hz\n // @Range: 0 20\n // @User: Advanced"},"PRX_IGN_GND":{"Description":"Ignore proximity data that is within 1 meter of the ground below the vehicle. This requires a downward facing rangefinder","DisplayName":"Proximity sensor land detection","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Proximity sensor land detection\n // @Description: Ignore proximity data that is within 1 meter of the ground below the vehicle. This requires a downward facing rangefinder\n // @Values: 0:Disabled, 1:Enabled\n // @User: Standard"},"PRX_LOG_RAW":{"Description":"Set this parameter to one if logging unfiltered(raw) distances from sensor should be enabled","DisplayName":"Proximity raw distances log","User":"Advanced","Values":{"0":"Off","1":"On"},"__field_text":"\n // @DisplayName: Proximity raw distances log\n // @Description: Set this parameter to one if logging unfiltered(raw) distances from sensor should be enabled\n // @Values: 0:Off, 1:On\n // @User: Advanced"},"PSC_ACCZ_D":{"Description":"Acceleration (vertical) controller D gain. Compensates for short-term change in desired vertical acceleration vs actual acceleration","DisplayName":"Acceleration (vertical) controller D gain","Range":{"high":"0.400","low":"0.000"},"User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller D gain\n // @Description: Acceleration (vertical) controller D gain. Compensates for short-term change in desired vertical acceleration vs actual acceleration\n // @Range: 0.000 0.400\n // @User: Standard"},"PSC_ACCZ_D_FF":{"Description":"FF D Gain which produces an output that is proportional to the rate of change of the target","DisplayName":"Accel (vertical) Derivative FeedForward Gain","Increment":"0.0001","Range":{"high":"0.02","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Accel (vertical) Derivative FeedForward Gain\n // @Description: FF D Gain which produces an output that is proportional to the rate of change of the target\n // @Range: 0 0.02\n // @Increment: 0.0001\n // @User: Advanced"},"PSC_ACCZ_FF":{"Description":"Acceleration (vertical) controller feed forward","DisplayName":"Acceleration (vertical) controller feed forward","Increment":"0.001","Range":{"high":"0.5","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller feed forward\n // @Description: Acceleration (vertical) controller feed forward\n // @Range: 0 0.5\n // @Increment: 0.001\n // @User: Standard"},"PSC_ACCZ_FLTD":{"Description":"Acceleration (vertical) controller derivative frequency in Hz","DisplayName":"Acceleration (vertical) controller derivative frequency in Hz","Increment":"1","Range":{"high":"100","low":"1"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller derivative frequency in Hz\n // @Description: Acceleration (vertical) controller derivative frequency in Hz\n // @Range: 1 100\n // @Increment: 1\n // @Units: Hz\n // @User: Standard"},"PSC_ACCZ_FLTE":{"Description":"Acceleration (vertical) controller error frequency in Hz","DisplayName":"Acceleration (vertical) controller error frequency in Hz","Increment":"1","Range":{"high":"100","low":"1"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller error frequency in Hz\n // @Description: Acceleration (vertical) controller error frequency in Hz\n // @Range: 1 100\n // @Increment: 1\n // @Units: Hz\n // @User: Standard"},"PSC_ACCZ_FLTT":{"Description":"Acceleration (vertical) controller target frequency in Hz","DisplayName":"Acceleration (vertical) controller target frequency in Hz","Increment":"1","Range":{"high":"50","low":"1"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller target frequency in Hz\n // @Description: Acceleration (vertical) controller target frequency in Hz\n // @Range: 1 50\n // @Increment: 1\n // @Units: Hz\n // @User: Standard"},"PSC_ACCZ_I":{"Description":"Acceleration (vertical) controller I gain. Corrects long-term difference in desired vertical acceleration and actual acceleration","DisplayName":"Acceleration (vertical) controller I gain","Range":{"high":"3.000","low":"0.000"},"User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller I gain\n // @Description: Acceleration (vertical) controller I gain. Corrects long-term difference in desired vertical acceleration and actual acceleration\n // @Range: 0.000 3.000\n // @User: Standard"},"PSC_ACCZ_IMAX":{"Description":"Acceleration (vertical) controller I gain maximum. Constrains the maximum pwm that the I term will generate","DisplayName":"Acceleration (vertical) controller I gain maximum","Range":{"high":"1000","low":"0"},"Units":"d%","User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller I gain maximum\n // @Description: Acceleration (vertical) controller I gain maximum. Constrains the maximum pwm that the I term will generate\n // @Range: 0 1000\n // @Units: d%\n // @User: Standard"},"PSC_ACCZ_NEF":{"Description":"Accel (vertical) Error notch filter index","DisplayName":"Accel (vertical) Error notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Accel (vertical) Error notch filter index\n // @Description: Accel (vertical) Error notch filter index\n // @Range: 1 8\n // @User: Advanced"},"PSC_ACCZ_NTF":{"Description":"Accel (vertical) Target notch filter index","DisplayName":"Accel (vertical) Target notch filter index","Range":{"high":"8","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: Accel (vertical) Target notch filter index\n // @Description: Accel (vertical) Target notch filter index\n // @Range: 1 8\n // @User: Advanced"},"PSC_ACCZ_P":{"Description":"Acceleration (vertical) controller P gain. Converts the difference between desired vertical acceleration and actual acceleration into a motor output","DisplayName":"Acceleration (vertical) controller P gain","Increment":"0.05","Range":{"high":"1.500","low":"0.200"},"User":"Standard","__field_text":"\n // @DisplayName: Acceleration (vertical) controller P gain\n // @Description: Acceleration (vertical) controller P gain. Converts the difference between desired vertical acceleration and actual acceleration into a motor output\n // @Range: 0.200 1.500\n // @Increment: 0.05\n // @User: Standard"},"PSC_ACCZ_PDMX":{"Description":"Acceleration (vertical) controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output","DisplayName":"Acceleration (vertical) controller PD sum maximum","Range":{"high":"1000","low":"0"},"Units":"d%","__field_text":"\n // @DisplayName: Acceleration (vertical) controller PD sum maximum\n // @Description: Acceleration (vertical) controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output\n // @Range: 0 1000\n // @Units: d%"},"PSC_ACCZ_SMAX":{"Description":"Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.","DisplayName":"Accel (vertical) slew rate limit","Increment":"0.5","Range":{"high":"200","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Accel (vertical) slew rate limit\n // @Description: Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.\n // @Range: 0 200\n // @Increment: 0.5\n // @User: Advanced"},"PSC_ACC_XY_FILT":{"Description":"Lower values will slow the response of the navigation controller and reduce twitchiness","DisplayName":"XY Acceleration filter cutoff frequency","Increment":"0.1","Range":{"high":"5","low":"0.5"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: XY Acceleration filter cutoff frequency\n // @Description: Lower values will slow the response of the navigation controller and reduce twitchiness\n // @Units: Hz\n // @Range: 0.5 5\n // @Increment: 0.1\n // @User: Advanced"},"PSC_ANGLE_MAX":{"Description":"Maximum lean angle autopilot can request. Set to zero to use ANGLE_MAX parameter value","DisplayName":"Position Control Angle Max","Increment":"1","Range":{"high":"45","low":"0"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Position Control Angle Max\n // @Description: Maximum lean angle autopilot can request. Set to zero to use ANGLE_MAX parameter value\n // @Units: deg\n // @Range: 0 45\n // @Increment: 1\n // @User: Advanced"},"PSC_JERK_XY":{"Description":"Jerk limit of the horizontal kinematic path generation used to determine how quickly the aircraft varies the acceleration target","DisplayName":"Jerk limit for the horizontal kinematic input shaping","Increment":"1","Range":{"high":"20","low":"1"},"Units":"m/s/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Jerk limit for the horizontal kinematic input shaping\n // @Description: Jerk limit of the horizontal kinematic path generation used to determine how quickly the aircraft varies the acceleration target\n // @Units: m/s/s/s\n // @Range: 1 20\n // @Increment: 1\n // @User: Advanced"},"PSC_JERK_Z":{"Description":"Jerk limit of the vertical kinematic path generation used to determine how quickly the aircraft varies the acceleration target","DisplayName":"Jerk limit for the vertical kinematic input shaping","Increment":"1","Range":{"high":"50","low":"5"},"Units":"m/s/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Jerk limit for the vertical kinematic input shaping\n // @Description: Jerk limit of the vertical kinematic path generation used to determine how quickly the aircraft varies the acceleration target\n // @Units: m/s/s/s\n // @Range: 5 50\n // @Increment: 1\n // @User: Advanced"},"PSC_POSXY_P":{"Description":"Position controller P gain. Converts the distance (in the latitude direction) to the target location into a desired speed which is then passed to the loiter latitude rate controller","DisplayName":"Position (horizontal) controller P gain","Range":{"high":"2.000","low":"0.500"},"User":"Standard","__field_text":"\n // @DisplayName: Position (horizontal) controller P gain\n // @Description: Position controller P gain. Converts the distance (in the latitude direction) to the target location into a desired speed which is then passed to the loiter latitude rate controller\n // @Range: 0.500 2.000\n // @User: Standard"},"PSC_POSZ_P":{"Description":"Position (vertical) controller P gain. Converts the difference between the desired altitude and actual altitude into a climb or descent rate which is passed to the throttle rate controller","DisplayName":"Position (vertical) controller P gain","Range":{"high":"3.000","low":"1.000"},"User":"Standard","__field_text":"\n // @DisplayName: Position (vertical) controller P gain\n // @Description: Position (vertical) controller P gain. Converts the difference between the desired altitude and actual altitude into a climb or descent rate which is passed to the throttle rate controller\n // @Range: 1.000 3.000\n // @User: Standard"},"PSC_VELXY_D":{"Description":"Velocity (horizontal) D gain. Corrects short-term changes in velocity","DisplayName":"Velocity (horizontal) D gain","Increment":"0.001","Range":{"high":"1.00","low":"0.00"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) D gain\n // @Description: Velocity (horizontal) D gain. Corrects short-term changes in velocity\n // @Range: 0.00 1.00\n // @Increment: 0.001\n // @User: Advanced"},"PSC_VELXY_FF":{"Description":"Velocity (horizontal) feed forward gain. Converts the difference between desired velocity to a target acceleration","DisplayName":"Velocity (horizontal) feed forward gain","Increment":"0.01","Range":{"high":"6","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) feed forward gain\n // @Description: Velocity (horizontal) feed forward gain. Converts the difference between desired velocity to a target acceleration\n // @Range: 0 6\n // @Increment: 0.01\n // @User: Advanced"},"PSC_VELXY_FLTD":{"Description":"Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for D term","DisplayName":"Velocity (horizontal) input filter","Range":{"high":"100","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) input filter\n // @Description: Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for D term\n // @Range: 0 100\n // @Units: Hz\n // @User: Advanced"},"PSC_VELXY_FLTE":{"Description":"Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for P and I terms","DisplayName":"Velocity (horizontal) input filter","Range":{"high":"100","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) input filter\n // @Description: Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for P and I terms\n // @Range: 0 100\n // @Units: Hz\n // @User: Advanced"},"PSC_VELXY_I":{"Description":"Velocity (horizontal) I gain. Corrects long-term difference between desired and actual velocity to a target acceleration","DisplayName":"Velocity (horizontal) I gain","Increment":"0.01","Range":{"high":"1.00","low":"0.02"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) I gain\n // @Description: Velocity (horizontal) I gain. Corrects long-term difference between desired and actual velocity to a target acceleration\n // @Range: 0.02 1.00\n // @Increment: 0.01\n // @User: Advanced"},"PSC_VELXY_IMAX":{"Description":"Velocity (horizontal) integrator maximum. Constrains the target acceleration that the I gain will output","DisplayName":"Velocity (horizontal) integrator maximum","Increment":"10","Range":{"high":"4500","low":"0"},"Units":"cm/s/s","User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) integrator maximum\n // @Description: Velocity (horizontal) integrator maximum. Constrains the target acceleration that the I gain will output\n // @Range: 0 4500\n // @Increment: 10\n // @Units: cm/s/s\n // @User: Advanced"},"PSC_VELXY_P":{"Description":"Velocity (horizontal) P gain. Converts the difference between desired and actual velocity to a target acceleration","DisplayName":"Velocity (horizontal) P gain","Increment":"0.1","Range":{"high":"6.0","low":"0.1"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (horizontal) P gain\n // @Description: Velocity (horizontal) P gain. Converts the difference between desired and actual velocity to a target acceleration\n // @Range: 0.1 6.0\n // @Increment: 0.1\n // @User: Advanced"},"PSC_VELZ_D":{"Description":"Velocity (vertical) controller D gain. Corrects short-term changes in velocity","DisplayName":"Velocity (vertical) controller D gain","Increment":"0.001","Range":{"high":"1.00","low":"0.00"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (vertical) controller D gain\n // @Description: Velocity (vertical) controller D gain. Corrects short-term changes in velocity\n // @Range: 0.00 1.00\n // @Increment: 0.001\n // @User: Advanced"},"PSC_VELZ_FF":{"Description":"Velocity (vertical) controller Feed Forward gain. Produces an output that is proportional to the magnitude of the target","DisplayName":"Velocity (vertical) controller Feed Forward gain","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (vertical) controller Feed Forward gain\n // @Description: Velocity (vertical) controller Feed Forward gain. Produces an output that is proportional to the magnitude of the target\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Advanced"},"PSC_VELZ_FLTD":{"Description":"Velocity (vertical) input filter for D term. This filter (in Hz) is applied to the input for D terms","DisplayName":"Velocity (vertical) input filter for D term","Range":{"high":"100","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Velocity (vertical) input filter for D term\n // @Description: Velocity (vertical) input filter for D term. This filter (in Hz) is applied to the input for D terms\n // @Range: 0 100\n // @Units: Hz\n // @User: Advanced"},"PSC_VELZ_FLTE":{"Description":"Velocity (vertical) error filter. This filter (in Hz) is applied to the input for P and I terms","DisplayName":"Velocity (vertical) error filter","Range":{"high":"100","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Velocity (vertical) error filter\n // @Description: Velocity (vertical) error filter. This filter (in Hz) is applied to the input for P and I terms\n // @Range: 0 100\n // @Units: Hz\n // @User: Advanced"},"PSC_VELZ_I":{"Description":"Velocity (vertical) controller I gain. Corrects long-term difference in desired velocity to a target acceleration","DisplayName":"Velocity (vertical) controller I gain","Increment":"0.01","Range":{"high":"1.00","low":"0.02"},"User":"Advanced","__field_text":"\n // @DisplayName: Velocity (vertical) controller I gain\n // @Description: Velocity (vertical) controller I gain. Corrects long-term difference in desired velocity to a target acceleration\n // @Range: 0.02 1.00\n // @Increment: 0.01\n // @User: Advanced"},"PSC_VELZ_IMAX":{"Description":"Velocity (vertical) controller I gain maximum. Constrains the target acceleration that the I gain will output","DisplayName":"Velocity (vertical) controller I gain maximum","Range":{"high":"8.000","low":"1.000"},"User":"Standard","__field_text":"\n // @DisplayName: Velocity (vertical) controller I gain maximum\n // @Description: Velocity (vertical) controller I gain maximum. Constrains the target acceleration that the I gain will output\n // @Range: 1.000 8.000\n // @User: Standard"},"PSC_VELZ_P":{"Description":"Velocity (vertical) controller P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller","DisplayName":"Velocity (vertical) controller P gain","Range":{"high":"8.000","low":"1.000"},"User":"Standard","__field_text":"\n // @DisplayName: Velocity (vertical) controller P gain\n // @Description: Velocity (vertical) controller P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller\n // @Range: 1.000 8.000\n // @User: Standard"},"QUIK_AUTO_FILTER":{"Description":"When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER","DisplayName":"Quicktune auto filter enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Quicktune auto filter enable\n // @Description: When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"QUIK_AUTO_SAVE":{"Description":"Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune","DisplayName":"Quicktune auto save","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Quicktune auto save\n // @Description: Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune\n // @Units: s\n // @User: Standard"},"QUIK_AXES":{"Bitmask":{"0":"Roll","1":"Pitch","2":"Yaw"},"Description":"axes to tune","DisplayName":"Quicktune axes","User":"Standard","__field_text":"\n // @DisplayName: Quicktune axes\n // @Description: axes to tune\n // @Bitmask: 0:Roll,1:Pitch,2:Yaw\n // @User: Standard"},"QUIK_DOUBLE_TIME":{"Description":"Time to double a tuning parameter. Raise this for a slower tune.","DisplayName":"Quicktune doubling time","Range":{"high":"20","low":"5"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Quicktune doubling time\n // @Description: Time to double a tuning parameter. Raise this for a slower tune.\n // @Range: 5 20\n // @Units: s\n // @User: Standard"},"QUIK_ENABLE":{"Description":"Enable quicktune system","DisplayName":"Quicktune enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Quicktune enable\n // @Description: Enable quicktune system\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"QUIK_GAIN_MARGIN":{"Description":"Reduction in gain after oscillation detected. Raise this number to get a more conservative tune","DisplayName":"Quicktune gain margin","Range":{"high":"80","low":"20"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Quicktune gain margin\n // @Description: Reduction in gain after oscillation detected. Raise this number to get a more conservative tune\n // @Range: 20 80\n // @Units: %\n // @User: Standard"},"QUIK_MAX_REDUCE":{"Description":"This controls how much quicktune is allowed to lower gains from the original gains. If the vehicle already has a reasonable tune and is not oscillating then you can set this to zero to prevent gain reductions. The default of 20% is reasonable for most vehicles. Using a maximum gain reduction lowers the chance of an angle P oscillation happening if quicktune gets a false positive oscillation at a low gain, which can result in very low rate gains and a dangerous angle P oscillation.","DisplayName":"Quicktune maximum gain reduction","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Quicktune maximum gain reduction\n // @Description: This controls how much quicktune is allowed to lower gains from the original gains. If the vehicle already has a reasonable tune and is not oscillating then you can set this to zero to prevent gain reductions. The default of 20% is reasonable for most vehicles. Using a maximum gain reduction lowers the chance of an angle P oscillation happening if quicktune gets a false positive oscillation at a low gain, which can result in very low rate gains and a dangerous angle P oscillation.\n // @Units: %\n // @Range: 0 100\n // @User: Standard"},"QUIK_OPTIONS":{"Bitmask":{"0":"UseTwoPositionSwitch"},"Description":"Additional options. When the Two Position Switch option is enabled then a high switch position will start the tune, low will disable the tune. you should also set a QUIK_AUTO_SAVE time so that you will be able to save the tune.","DisplayName":"Quicktune options","User":"Standard","__field_text":"\n // @DisplayName: Quicktune options\n // @Description: Additional options. When the Two Position Switch option is enabled then a high switch position will start the tune, low will disable the tune. you should also set a QUIK_AUTO_SAVE time so that you will be able to save the tune.\n // @Bitmask: 0:UseTwoPositionSwitch\n // @User: Standard"},"QUIK_OSC_SMAX":{"Description":"Threshold for oscillation detection. A lower value will lead to a more conservative tune.","DisplayName":"Quicktune oscillation rate threshold","Range":{"high":"10","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: Quicktune oscillation rate threshold\n // @Description: Threshold for oscillation detection. A lower value will lead to a more conservative tune.\n // @Range: 1 10\n // @User: Standard"},"QUIK_RC_FUNC":{"Description":"RCn_OPTION number to use to control tuning stop/start/save","DisplayName":"Quicktune RC function","User":"Standard","__field_text":"\n // @DisplayName: Quicktune RC function\n // @Description: RCn_OPTION number to use to control tuning stop/start/save\n // @User: Standard"},"QUIK_RP_PI_RATIO":{"Description":"Ratio between P and I gains for roll and pitch. Raise this to get a lower I gain","DisplayName":"Quicktune roll/pitch PI ratio","Range":{"high":"1.0","low":"0.5"},"User":"Standard","__field_text":"\n // @DisplayName: Quicktune roll/pitch PI ratio\n // @Description: Ratio between P and I gains for roll and pitch. Raise this to get a lower I gain\n // @Range: 0.5 1.0\n // @User: Standard"},"QUIK_YAW_D_MAX":{"Description":"Maximum value for yaw D gain","DisplayName":"Quicktune Yaw D max","Range":{"high":"1","low":"0.001"},"User":"Standard","__field_text":"\n // @DisplayName: Quicktune Yaw D max\n // @Description: Maximum value for yaw D gain\n // @Range: 0.001 1\n // @User: Standard"},"QUIK_YAW_P_MAX":{"Description":"Maximum value for yaw P gain","DisplayName":"Quicktune Yaw P max","Range":{"high":"3","low":"0.1"},"User":"Standard","__field_text":"\n // @DisplayName: Quicktune Yaw P max\n // @Description: Maximum value for yaw P gain\n // @Range: 0.1 3\n // @User: Standard"},"QUIK_Y_PI_RATIO":{"Description":"Ratio between P and I gains for yaw. Raise this to get a lower I gain","DisplayName":"Quicktune Yaw PI ratio","Range":{"high":"20","low":"0.5"},"User":"Standard","__field_text":"\n // @DisplayName: Quicktune Yaw PI ratio\n // @Description: Ratio between P and I gains for yaw. Raise this to get a lower I gain\n // @Range: 0.5 20\n // @User: Standard"},"RALLY_INCL_HOME":{"Description":"Controls if Home is included as a Rally point (i.e. as a safe landing place) for RTL","DisplayName":"Rally Include Home","User":"Standard","Values":{"0":"DoNotIncludeHome","1":"IncludeHome"},"__field_text":"\n // @DisplayName: Rally Include Home\n // @Description: Controls if Home is included as a Rally point (i.e. as a safe landing place) for RTL\n // @User: Standard\n // @Values: 0:DoNotIncludeHome,1:IncludeHome"},"RALLY_LIMIT_KM":{"Description":"Maximum distance to rally point. If the closest rally point is more than this number of kilometers from the current position and the home location is closer than any of the rally points from the current position then do RTL to home rather than to the closest rally point. This prevents a leftover rally point from a different airfield being used accidentally. If this is set to 0 then the closest rally point is always used.","DisplayName":"Rally Limit","Increment":"0.1","Units":"km","User":"Advanced","__field_text":"\n // @DisplayName: Rally Limit\n // @Description: Maximum distance to rally point. If the closest rally point is more than this number of kilometers from the current position and the home location is closer than any of the rally points from the current position then do RTL to home rather than to the closest rally point. This prevents a leftover rally point from a different airfield being used accidentally. If this is set to 0 then the closest rally point is always used.\n // @User: Advanced\n // @Units: km\n // @Increment: 0.1"},"RALLY_TOTAL":{"Description":"Number of rally points currently loaded","DisplayName":"Rally Total","User":"Advanced","__field_text":"\n // @DisplayName: Rally Total\n // @Description: Number of rally points currently loaded\n // @User: Advanced"},"RC10_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC10_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC10_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC10_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC10_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC10_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC11_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC11_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC11_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC11_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC11_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC11_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC12_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC12_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC12_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC12_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC12_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC12_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC13_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC13_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC13_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC13_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC13_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC13_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC14_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC14_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC14_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC14_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC14_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC14_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC15_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC15_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC15_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC15_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC15_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC15_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC16_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC16_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC16_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC16_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC16_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC16_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC1_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC1_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC1_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC1_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC1_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC1_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC2_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC2_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC2_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC2_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC2_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC2_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC3_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC3_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC3_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC3_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC3_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC3_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC4_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC4_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC4_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC4_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC4_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC4_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC5_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC5_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC5_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC5_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC5_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC5_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC6_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC6_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC6_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC6_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC6_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC6_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC7_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC7_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC7_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC7_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC7_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC7_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC8_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC8_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC8_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC8_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC8_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC8_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC9_DZ":{"Description":"PWM dead zone in microseconds around trim or bottom","DisplayName":"RC dead-zone","Range":{"high":"200","low":"0"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC dead-zone\n // @Description: PWM dead zone in microseconds around trim or bottom\n // @Units: PWM\n // @Range: 0 200\n // @User: Advanced"},"RC9_MAX":{"Description":"RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC max PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC max PWM\n // @Description: RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC9_MIN":{"Description":"RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC min PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC min PWM\n // @Description: RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RC9_OPTION":{"Description":"Function assigned to this RC channel","DisplayName":"RC input option","User":"Standard","Values":{"0":"Do Nothing","2":"FLIP Mode","3":"Simple Mode","4":"RTL","5":"Save Trim","7":"Save WP","9":"Camera Trigger","10":"RangeFinder Enable","11":"Fence Enable","13":"Super Simple Mode","14":"Acro Trainer","15":"Sprayer Enable","16":"AUTO Mode","17":"AUTOTUNE Mode","18":"LAND Mode","19":"Gripper Release","21":"Parachute Enable","22":"Parachute Release","23":"Parachute 3pos","24":"Auto Mission Reset","25":"AttCon Feed Forward","26":"AttCon Accel Limits","27":"Retract Mount1","28":"Relay On/Off","29":"Landing Gear","30":"Lost Copter Sound","31":"Motor Emergency Stop","32":"Motor Interlock","33":"BRAKE Mode","34":"Relay2 On/Off","35":"Relay3 On/Off","36":"Relay4 On/Off","37":"THROW Mode","38":"ADSB Avoidance Enable","39":"PrecLoiter Enable","40":"Proximity Avoidance Enable","41":"ArmDisarm (4.1 and lower)","42":"SMARTRTL Mode","43":"InvertedFlight Enable","44":"Winch Enable","45":"Winch Control","46":"RC Override Enable","47":"User Function 1","48":"User Function 2","49":"User Function 3","52":"ACRO Mode","55":"GUIDED Mode","56":"LOITER Mode","57":"FOLLOW Mode","58":"Clear Waypoints","60":"ZigZag Mode","61":"ZigZag SaveWP","62":"Compass Learn","65":"GPS Disable","66":"Relay5 On/Off","67":"Relay6 On/Off","68":"STABILIZE Mode","69":"POSHOLD Mode","70":"ALTHOLD Mode","71":"FLOWHOLD Mode","72":"CIRCLE Mode","73":"DRIFT Mode","75":"SurfaceTrackingUpDown","76":"STANDBY Mode","78":"RunCam Control","79":"RunCam OSD Control","80":"VisOdom Align","81":"Disarm","83":"ZigZag Auto","84":"AirMode","85":"Generator","90":"EKF Pos Source","94":"VTX Power","99":"AUTO RTL","100":"KillIMU1","101":"KillIMU2","102":"Camera Mode Toggle","105":"GPS Disable Yaw","109":"use Custom Controller","110":"KillIMU3","112":"SwitchExternalAHRS","151":"TURTLE Mode","152":"SIMPLE heading reset","153":"ArmDisarm (4.2 and higher)","154":"ArmDisarm with AirMode (4.2 and higher)","158":"Optflow Calibration","159":"Force IS_Flying","161":"Turbine Start(heli)","162":"FFT Tune","163":"Mount Lock","164":"Pause Stream Logging","165":"Arm/Emergency Motor Stop","166":"Camera Record Video","167":"Camera Zoom","168":"Camera Manual Focus","169":"Camera Auto Focus","171":"Calibrate Compasses","172":"Battery MPPT Enable","174":"Camera Image Tracking","175":"Camera Lens","212":"Mount1 Roll","213":"Mount1 Pitch","214":"Mount1 Yaw","215":"Mount2 Roll","216":"Mount2 Pitch","217":"Mount2 Yaw","300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: RC input option\n // @Description: Function assigned to this RC channel\n // @Values{Copter, Rover, Plane, Blimp}: 0:Do Nothing\n // @Values{Copter}: 2:FLIP Mode\n // @Values{Copter}: 3:Simple Mode\n // @Values{Copter, Rover, Plane}: 4:RTL\n // @Values{Copter}: 5:Save Trim\n // @Values{Rover}: 5:Save Trim (4.1 and lower)\n // @Values{Copter, Rover}: 7:Save WP\n // @Values{Copter, Rover, Plane}: 9:Camera Trigger\n // @Values{Copter}: 10:RangeFinder Enable\n // @Values{Copter, Rover, Plane}: 11:Fence Enable\n // @Values{Copter}: 13:Super Simple Mode\n // @Values{Copter}: 14:Acro Trainer\n // @Values{Copter}: 15:Sprayer Enable\n // @Values{Copter, Rover, Plane}: 16:AUTO Mode\n // @Values{Copter}: 17:AUTOTUNE Mode\n // @Values{Copter, Blimp}: 18:LAND Mode\n // @Values{Copter, Rover}: 19:Gripper Release\n // @Values{Copter}: 21:Parachute Enable\n // @Values{Copter, Plane}: 22:Parachute Release\n // @Values{Copter}: 23:Parachute 3pos\n // @Values{Copter, Rover, Plane}: 24:Auto Mission Reset\n // @Values{Copter}: 25:AttCon Feed Forward\n // @Values{Copter}: 26:AttCon Accel Limits\n // @Values{Copter, Rover, Plane}: 27:Retract Mount1\n // @Values{Copter, Rover, Plane}: 28:Relay On/Off\n // @Values{Copter, Plane}: 29:Landing Gear\n // @Values{Copter}: 30:Lost Copter Sound\n // @Values{Rover}: 30:Lost Rover Sound\n // @Values{Plane}: 30:Lost Plane Sound\n // @Values{Copter, Rover, Plane}: 31:Motor Emergency Stop\n // @Values{Copter}: 32:Motor Interlock\n // @Values{Copter}: 33:BRAKE Mode\n // @Values{Copter, Rover, Plane}: 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off\n // @Values{Copter}: 37:THROW Mode\n // @Values{Copter, Plane}: 38:ADSB Avoidance Enable\n // @Values{Copter}: 39:PrecLoiter Enable\n // @Values{Copter, Rover}: 40:Proximity Avoidance Enable\n // @Values{Copter, Rover, Plane}: 41:ArmDisarm (4.1 and lower)\n // @Values{Copter, Rover}: 42:SMARTRTL Mode\n // @Values{Copter, Plane}: 43:InvertedFlight Enable\n // @Values{Copter}: 44:Winch Enable, 45:Winch Control\n // @Values{Copter, Rover, Plane, Blimp}: 46:RC Override Enable\n // @Values{Copter}: 47:User Function 1, 48:User Function 2, 49:User Function 3\n // @Values{Rover}: 50:LearnCruise Speed\n // @Values{Rover, Plane}: 51:MANUAL Mode\n // @Values{Copter, Rover, Plane}: 52:ACRO Mode\n // @Values{Rover}: 53:STEERING Mode\n // @Values{Rover}: 54:HOLD Mode\n // @Values{Copter, Rover, Plane}: 55:GUIDED Mode\n // @Values{Copter, Rover, Plane}: 56:LOITER Mode\n // @Values{Copter, Rover}: 57:FOLLOW Mode\n // @Values{Copter, Rover, Plane}: 58:Clear Waypoints\n // @Values{Rover}: 59:Simple Mode\n // @Values{Copter}: 60:ZigZag Mode\n // @Values{Copter}: 61:ZigZag SaveWP\n // @Values{Copter, Rover, Plane}: 62:Compass Learn\n // @Values{Rover}: 63:Sailboat Tack\n // @Values{Plane}: 64:Reverse Throttle\n // @Values{Copter, Rover, Plane, Blimp}: 65:GPS Disable\n // @Values{Copter, Rover, Plane}: 66:Relay5 On/Off, 67:Relay6 On/Off\n // @Values{Copter}: 68:STABILIZE Mode\n // @Values{Copter}: 69:POSHOLD Mode\n // @Values{Copter}: 70:ALTHOLD Mode\n // @Values{Copter}: 71:FLOWHOLD Mode\n // @Values{Copter,Rover,Plane}: 72:CIRCLE Mode\n // @Values{Copter}: 73:DRIFT Mode\n // @Values{Rover}: 74:Sailboat motoring 3pos\n // @Values{Copter}: 75:SurfaceTrackingUpDown\n // @Values{Copter}: 76:STANDBY Mode\n // @Values{Plane}: 77:TAKEOFF Mode\n // @Values{Copter, Rover, Plane}: 78:RunCam Control\n // @Values{Copter, Rover, Plane}: 79:RunCam OSD Control\n // @Values{Copter}: 80:VisOdom Align\n // @Values{Rover}: 80:VisoOdom Align\n // @Values{Copter, Rover, Plane, Blimp}: 81:Disarm\n // @Values{Plane}: 82:QAssist 3pos\n // @Values{Copter}: 83:ZigZag Auto\n // @Values{Copter, Plane}: 84:AirMode\n // @Values{Copter, Plane}: 85:Generator\n // @Values{Plane}: 86:Non Auto Terrain Follow Disable\n // @Values{Plane}: 87:Crow Select\n // @Values{Plane}: 88:Soaring Enable\n // @Values{Plane}: 89:Landing Flare\n // @Values{Copter, Rover, Plane, Blimp}: 90:EKF Pos Source\n // @Values{Plane}: 91:Airspeed Ratio Calibration\n // @Values{Plane}: 92:FBWA Mode\n // @Values{Copter, Rover, Plane}: 94:VTX Power\n // @Values{Plane}: 95:FBWA taildragger takeoff mode\n // @Values{Plane}: 96:Trigger re-reading of mode switch\n // @Values{Rover}: 97:Windvane home heading direction offset\n // @Values{Plane}: 98:TRAINING Mode\n // @Values{Copter}: 99:AUTO RTL\n // @Values{Copter, Rover, Plane, Blimp}: 100:KillIMU1, 101:KillIMU2\n // @Values{Copter, Rover, Plane}: 102:Camera Mode Toggle\n // @Values{Copter, Rover, Plane}: 105:GPS Disable Yaw\n // @Values{Rover, Plane}: 106:Disable Airspeed Use\n // @Values{Plane}: 107:Enable FW Autotune\n // @Values{Plane}: 108:QRTL Mode\n // @Values{Copter}: 109:use Custom Controller\n // @Values{Copter, Rover, Plane, Blimp}: 110:KillIMU3\n // @Values{Copter,Plane,Rover,Blimp,Sub,Tracker}: 112:SwitchExternalAHRS\n // @Values{Plane}: 150:CRUISE Mode\n // @Values{Copter}: 151:TURTLE Mode\n // @Values{Copter}: 152:SIMPLE heading reset\n // @Values{Copter, Rover, Plane}: 153:ArmDisarm (4.2 and higher)\n // @Values{Blimp}: 153:ArmDisarm\n // @Values{Copter}: 154:ArmDisarm with AirMode (4.2 and higher)\n // @Values{Plane}: 154:ArmDisarm with Quadplane AirMode (4.2 and higher)\n // @Values{Rover}: 155:Set steering trim to current servo and RC\n // @Values{Plane}: 155:Set roll pitch and yaw trim to current servo and RC\n // @Values{Rover}: 156:Torqeedo Clear Err\n // @Values{Plane}: 157:Force FS Action to FBWA\n // @Values{Copter, Plane}: 158:Optflow Calibration\n // @Values{Copter}: 159:Force IS_Flying\n // @Values{Plane}: 160:Weathervane Enable\n // @Values{Copter}: 161:Turbine Start(heli)\n // @Values{Copter, Rover, Plane}: 162:FFT Tune\n // @Values{Copter, Rover, Plane}: 163:Mount Lock\n // @Values{Copter, Rover, Plane, Blimp}: 164:Pause Stream Logging\n // @Values{Copter, Rover, Plane}: 165:Arm/Emergency Motor Stop\n // @Values{Copter, Rover, Plane, Blimp}: 166:Camera Record Video, 167:Camera Zoom, 168:Camera Manual Focus, 169:Camera Auto Focus\n // @Values{Plane}: 170:QSTABILIZE Mode\n // @Values{Copter, Rover, Plane, Blimp}: 171:Calibrate Compasses\n // @Values{Copter, Rover, Plane, Blimp}: 172:Battery MPPT Enable\n // @Values{Plane}: 173:Plane AUTO Mode Landing Abort\n // @Values{Copter, Rover, Plane, Blimp}: 174:Camera Image Tracking\n // @Values{Copter, Rover, Plane, Blimp}: 175:Camera Lens\n // @Values{Plane}: 176:Quadplane Fwd Throttle Override enable\n // @Values{Rover}: 201:Roll\n // @Values{Rover}: 202:Pitch\n // @Values{Rover}: 207:MainSail\n // @Values{Rover, Plane}: 208:Flap\n // @Values{Plane}: 209:VTOL Forward Throttle\n // @Values{Plane}: 210:Airbrakes\n // @Values{Rover}: 211:Walking Height\n // @Values{Copter, Rover, Plane}: 212:Mount1 Roll, 213:Mount1 Pitch, 214:Mount1 Yaw, 215:Mount2 Roll, 216:Mount2 Pitch, 217:Mount2 Yaw\n // @Values{Copter, Rover, Plane}: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RC9_REVERSED":{"Description":"Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.","DisplayName":"RC reversed","User":"Advanced","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: RC reversed\n // @Description: Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Advanced"},"RC9_TRIM":{"Description":"RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"RC trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: RC trim PWM\n // @Description: RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Advanced"},"RCK_DEBUG":{"Description":"Sends Rockblock debug text to GCS via statustexts","DisplayName":"Display Rockblock debugging text","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Display Rockblock debugging text\n // @Description: Sends Rockblock debug text to GCS via statustexts\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"RCK_ENABLE":{"Description":"Enables the Rockblock sending and recieving","DisplayName":"Enable Message transmission","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable Message transmission\n // @Description: Enables the Rockblock sending and recieving\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"RCK_FORCEHL":{"Description":"Automatically enables High Latency mode if not already enabled","DisplayName":"Force enable High Latency mode","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Force enable High Latency mode\n // @Description: Automatically enables High Latency mode if not already enabled\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"RCK_PERIOD":{"Description":"When in High Latency mode, send Rockblock updates every N seconds","DisplayName":"Update rate","Range":{"high":"600","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Update rate\n // @Description: When in High Latency mode, send Rockblock updates every N seconds\n // @Range: 0 600\n // @Units: s\n // @User: Standard"},"RCMAP_PITCH":{"Description":"Pitch channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Pitch is normally on channel 2, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.","DisplayName":"Pitch channel","Increment":"1","Range":{"high":"16","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Pitch channel\n // @Description: Pitch channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Pitch is normally on channel 2, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.\n // @Range: 1 16\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"RCMAP_ROLL":{"Description":"Roll channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Roll is normally on channel 1, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.","DisplayName":"Roll channel","Increment":"1","Range":{"high":"16","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Roll channel\n // @Description: Roll channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Roll is normally on channel 1, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.\n // @Range: 1 16\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"RCMAP_THROTTLE":{"Description":"Throttle channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Throttle is normally on channel 3, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.","DisplayName":"Throttle channel","Increment":"1","Range":{"high":"16","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Throttle channel\n // @Description: Throttle channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Throttle is normally on channel 3, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.\n // @Range: 1 16\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"RCMAP_YAW":{"Description":"Yaw channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Yaw (also known as rudder) is normally on channel 4, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.","DisplayName":"Yaw channel","Increment":"1","Range":{"high":"16","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Yaw channel\n // @Description: Yaw channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Yaw (also known as rudder) is normally on channel 4, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.\n // @Range: 1 16\n // @Increment: 1\n // @User: Advanced\n // @RebootRequired: True"},"RC_FS_TIMEOUT":{"Description":"RC failsafe will trigger this many seconds after loss of RC","DisplayName":"RC Failsafe timeout","Range":{"high":"10.0","low":"0.5"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: RC Failsafe timeout\n // @Description: RC failsafe will trigger this many seconds after loss of RC\n // @User: Standard\n // @Range: 0.5 10.0\n // @Units: s"},"RC_OPTIONS":{"Bitmask":{"0":"Ignore RC Receiver","1":"Ignore MAVLink Overrides","2":"Ignore Receiver Failsafe bit but allow other RC failsafes if setup","3":"FPort Pad","4":"Log RC input bytes","5":"Arming check throttle for 0 input","6":"Skip the arming check for neutral Roll/Pitch/Yaw sticks","7":"Allow Switch reverse","8":"Use passthrough for CRSF telemetry","9":"Suppress CRSF mode/rate message for ELRS systems","10":"Enable multiple receiver support","11":"Use Link Quality for RSSI with CRSF","12":"Annotate CRSF flight mode with * on disarm","13":"Use 420kbaud for ELRS protocol"},"Description":"RC input options","DisplayName":"RC options","User":"Advanced","__field_text":"\n // @DisplayName: RC options\n // @Description: RC input options\n // @User: Advanced\n // @Bitmask: 0:Ignore RC Receiver, 1:Ignore MAVLink Overrides, 2:Ignore Receiver Failsafe bit but allow other RC failsafes if setup, 3:FPort Pad, 4:Log RC input bytes, 5:Arming check throttle for 0 input, 6:Skip the arming check for neutral Roll/Pitch/Yaw sticks, 7:Allow Switch reverse, 8:Use passthrough for CRSF telemetry, 9:Suppress CRSF mode/rate message for ELRS systems,10:Enable multiple receiver support, 11:Use Link Quality for RSSI with CRSF, 12:Annotate CRSF flight mode with * on disarm, 13: Use 420kbaud for ELRS protocol"},"RC_OVERRIDE_TIME":{"Description":"Timeout after which RC overrides will no longer be used, and RC input will resume, 0 will disable RC overrides, -1 will never timeout, and continue using overrides until they are disabled","DisplayName":"RC override timeout","Range":{"high":"120.0","low":"0.0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: RC override timeout\n // @Description: Timeout after which RC overrides will no longer be used, and RC input will resume, 0 will disable RC overrides, -1 will never timeout, and continue using overrides until they are disabled\n // @User: Advanced\n // @Range: 0.0 120.0\n // @Units: s"},"RC_PROTOCOLS":{"Bitmask":{"0":"All","1":"PPM","2":"IBUS","3":"SBUS","4":"SBUS_NI","5":"DSM","6":"SUMD","7":"SRXL","8":"SRXL2","9":"CRSF","10":"ST24","11":"FPORT","12":"FPORT2","13":"FastSBUS","14":"DroneCAN","15":"Ghost"},"Description":"Bitmask of enabled RC protocols. Allows narrowing the protocol detection to only specific types of RC receivers which can avoid issues with incorrect detection. Set to 1 to enable all protocols.","DisplayName":"RC protocols enabled","User":"Advanced","__field_text":"\n // @DisplayName: RC protocols enabled\n // @Description: Bitmask of enabled RC protocols. Allows narrowing the protocol detection to only specific types of RC receivers which can avoid issues with incorrect detection. Set to 1 to enable all protocols.\n // @User: Advanced\n // @Bitmask: 0:All,1:PPM,2:IBUS,3:SBUS,4:SBUS_NI,5:DSM,6:SUMD,7:SRXL,8:SRXL2,9:CRSF,10:ST24,11:FPORT,12:FPORT2,13:FastSBUS,14:DroneCAN,15:Ghost"},"RC_SPEED":{"Description":"This is the speed in Hertz that your ESCs will receive updates","DisplayName":"ESC Update Speed","Increment":"1","Range":{"high":"490","low":"50"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ESC Update Speed\n // @Description: This is the speed in Hertz that your ESCs will receive updates\n // @Units: Hz\n // @Range: 50 490\n // @Increment: 1\n // @User: Advanced"},"RELAY10_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY10_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY10_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY11_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY11_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY11_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY12_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY12_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY12_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY13_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY13_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY13_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY14_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY14_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY14_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY15_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY15_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY15_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY16_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY16_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY16_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY1_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY1_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY1_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY2_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY2_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY2_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY3_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY3_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY3_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY4_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY4_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY4_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY5_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY5_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY5_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY6_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY6_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY6_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY7_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY7_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY7_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY8_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY8_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY8_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RELAY9_DEFAULT":{"Description":"Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.","DisplayName":"Relay default state","User":"Standard","Values":{"0":"Off","1":"On","2":"NoChange"},"__field_text":"\n // @DisplayName: Relay default state\n // @Description: Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters.\n // @Values: 0: Off,1:On,2:NoChange\n // @User: Standard"},"RELAY9_FUNCTION":{"Description":"The function the relay channel is mapped to.","DisplayName":"Relay function","Values":{"0":"None","1":"Relay","3":"Parachute","4":"Camera"},"__field_text":"\n // @DisplayName: Relay function\n // @Description: The function the relay channel is mapped to.\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 0:None\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 1:Relay\n // @Values{Plane}: 2:Ignition\n // @Values{Plane, Copter}: 3:Parachute\n // @Values{Copter, Rover, Plane, Blimp,Sub}: 4:Camera\n // @Values{Rover}: 5:Bushed motor reverse 1 throttle or throttle-left or omni motor 1\n // @Values{Rover}: 6:Bushed motor reverse 2 throttle-right or omni motor 2\n // @Values{Rover}: 7:Bushed motor reverse 3 omni motor 3\n // @Values{Rover}: 8:Bushed motor reverse 4 omni motor 4\n // @Values{Plane}: 9:ICE Starter\n // @Values{AP_Periph}: 10: DroneCAN Hardpoint ID 0\n // @Values{AP_Periph}: 11: DroneCAN Hardpoint ID 1\n // @Values{AP_Periph}: 12: DroneCAN Hardpoint ID 2\n // @Values{AP_Periph}: 13: DroneCAN Hardpoint ID 3\n // @Values{AP_Periph}: 14: DroneCAN Hardpoint ID 4\n // @Values{AP_Periph}: 15: DroneCAN Hardpoint ID 5\n // @Values{AP_Periph}: 16: DroneCAN Hardpoint ID 6\n // @Values{AP_Periph}: 17: DroneCAN Hardpoint ID 7\n // @Values{AP_Periph}: 18: DroneCAN Hardpoint ID 8\n // @Values{AP_Periph}: 19: DroneCAN Hardpoint ID 9\n // @Values{AP_Periph}: 20: DroneCAN Hardpoint ID 10\n // @Values{AP_Periph}: 21: DroneCAN Hardpoint ID 11\n // @Values{AP_Periph}: 22: DroneCAN Hardpoint ID 12\n // @Values{AP_Periph}: 23: DroneCAN Hardpoint ID 13\n // @Values{AP_Periph}: 24: DroneCAN Hardpoint ID 14\n // @Values{AP_Periph}: 25: DroneCAN Hardpoint ID 15"},"RELAY9_PIN":{"Description":"Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Relay pin","User":"Standard","Values":{"49":"BB Blue GP0 pin 4","50":"AUXOUT1","51":"AUXOUT2","52":"AUXOUT3","53":"AUXOUT4","54":"AUXOUT5","55":"AUXOUT6","57":"BB Blue GP0 pin 3","62":"BBBMini Pin P8.13","101":"MainOut1","102":"MainOut2","103":"MainOut3","104":"MainOut4","105":"MainOut5","106":"MainOut6","107":"MainOut7","108":"MainOut8","113":"BB Blue GP0 pin 6","116":"BB Blue GP0 pin 5","1000":"DroneCAN Hardpoint ID 0","1001":"DroneCAN Hardpoint ID 1","1002":"DroneCAN Hardpoint ID 2","1003":"DroneCAN Hardpoint ID 3","1004":"DroneCAN Hardpoint ID 4","1005":"DroneCAN Hardpoint ID 5","1006":"DroneCAN Hardpoint ID 6","1007":"DroneCAN Hardpoint ID 7","1008":"DroneCAN Hardpoint ID 8","1009":"DroneCAN Hardpoint ID 9","1010":"DroneCAN Hardpoint ID 10","1011":"DroneCAN Hardpoint ID 11","1012":"DroneCAN Hardpoint ID 12","1013":"DroneCAN Hardpoint ID 13","1014":"DroneCAN Hardpoint ID 14","1015":"DroneCAN Hardpoint ID 15","-1":"Disabled"},"__field_text":"\n // @DisplayName: Relay pin\n // @Description: Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,49:BB Blue GP0 pin 4,50:AUXOUT1,51:AUXOUT2,52:AUXOUT3,53:AUXOUT4,54:AUXOUT5,55:AUXOUT6,57:BB Blue GP0 pin 3,113:BB Blue GP0 pin 6,116:BB Blue GP0 pin 5,62:BBBMini Pin P8.13,101:MainOut1,102:MainOut2,103:MainOut3,104:MainOut4,105:MainOut5,106:MainOut6,107:MainOut7,108:MainOut8\n // @Values: 1000: DroneCAN Hardpoint ID 0\n // @Values: 1001: DroneCAN Hardpoint ID 1\n // @Values: 1002: DroneCAN Hardpoint ID 2\n // @Values: 1003: DroneCAN Hardpoint ID 3\n // @Values: 1004: DroneCAN Hardpoint ID 4\n // @Values: 1005: DroneCAN Hardpoint ID 5\n // @Values: 1006: DroneCAN Hardpoint ID 6\n // @Values: 1007: DroneCAN Hardpoint ID 7\n // @Values: 1008: DroneCAN Hardpoint ID 8\n // @Values: 1009: DroneCAN Hardpoint ID 9\n // @Values: 1010: DroneCAN Hardpoint ID 10\n // @Values: 1011: DroneCAN Hardpoint ID 11\n // @Values: 1012: DroneCAN Hardpoint ID 12\n // @Values: 1013: DroneCAN Hardpoint ID 13\n // @Values: 1014: DroneCAN Hardpoint ID 14\n // @Values: 1015: DroneCAN Hardpoint ID 15\n // @User: Standard"},"RNGFND1_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND1_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND1_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND1_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND1_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND1_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND1_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND1_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND1_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND1_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND1_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND1_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND1_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND1_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND1_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND1_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND1_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND1_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND1_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND1_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND1_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND1_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND1_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND1_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND2_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND2_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND2_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND2_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND2_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND2_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND2_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND2_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND2_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND2_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND2_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND2_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND2_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND2_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND2_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND2_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND2_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND2_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND2_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND2_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND2_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND2_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND2_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND2_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND3_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND3_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND3_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND3_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND3_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND3_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND3_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND3_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND3_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND3_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND3_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND3_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND3_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND3_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND3_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND3_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND3_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND3_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND3_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND3_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND3_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND3_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND3_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND3_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND4_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND4_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND4_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND4_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND4_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND4_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND4_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND4_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND4_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND4_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND4_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND4_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND4_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND4_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND4_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND4_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND4_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND4_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND4_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND4_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND4_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND4_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND4_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND4_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND5_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND5_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND5_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND5_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND5_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND5_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND5_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND5_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND5_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND5_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND5_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND5_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND5_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND5_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND5_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND5_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND5_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND5_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND5_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND5_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND5_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND5_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND5_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND5_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND6_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND6_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND6_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND6_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND6_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND6_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND6_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND6_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND6_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND6_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND6_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND6_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND6_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND6_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND6_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND6_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND6_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND6_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND6_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND6_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND6_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND6_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND6_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND6_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND7_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND7_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND7_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND7_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND7_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND7_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND7_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND7_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND7_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND7_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND7_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND7_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND7_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND7_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND7_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND7_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND7_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND7_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND7_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND7_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND7_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND7_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND7_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND7_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND8_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND8_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND8_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND8_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND8_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND8_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND8_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND8_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND8_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND8_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND8_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND8_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND8_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND8_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND8_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND8_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND8_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND8_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND8_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND8_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND8_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND8_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND8_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND8_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND9_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFND9_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFND9_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFND9_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND9_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFND9_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND9_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFND9_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFND9_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND9_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND9_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFND9_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFND9_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND9_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFND9_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFND9_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFND9_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFND9_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFND9_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFND9_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFND9_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFND9_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFND9_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFND9_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFNDA_ADDR":{"Description":"This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.","DisplayName":"Bus address of sensor","Increment":"1","Range":{"high":"127","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Bus address of sensor\n // @Description: This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.\n // @Range: 0 127\n // @Increment: 1\n // @User: Standard"},"RNGFNDA_FUNCTION":{"Description":"Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.","DisplayName":"Rangefinder function","User":"Standard","Values":{"0":"Linear","1":"Inverted","2":"Hyperbolic"},"__field_text":"\n // @DisplayName: Rangefinder function\n // @Description: Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.\n // @Values: 0:Linear,1:Inverted,2:Hyperbolic\n // @User: Standard"},"RNGFNDA_GNDCLEAR":{"Description":"This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.","DisplayName":"Distance (in cm) from the range finder to the ground","Increment":"1","Range":{"high":"127","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Distance (in cm) from the range finder to the ground\n // @Description: This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.\n // @Units: cm\n // @Range: 5 127\n // @Increment: 1\n // @User: Standard"},"RNGFNDA_MAX_CM":{"Description":"Maximum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder maximum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder maximum distance\n // @Description: Maximum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFNDA_MIN_CM":{"Description":"Minimum distance in centimeters that rangefinder can reliably read","DisplayName":"Rangefinder minimum distance","Increment":"1","Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder minimum distance\n // @Description: Minimum distance in centimeters that rangefinder can reliably read\n // @Units: cm\n // @Increment: 1\n // @User: Standard"},"RNGFNDA_OFFSET":{"Description":"Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars","DisplayName":"rangefinder offset","Increment":"0.001","Units":"V","User":"Standard","__field_text":"\n // @DisplayName: rangefinder offset\n // @Description: Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars\n // @Units: V\n // @Increment: 0.001\n // @User: Standard"},"RNGFNDA_ORIENT":{"Description":"Orientation of rangefinder","DisplayName":"Rangefinder orientation","User":"Advanced","Values":{"0":"Forward","1":"Forward-Right","2":"Right","3":"Back-Right","4":"Back","5":"Back-Left","6":"Left","7":"Forward-Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Rangefinder orientation\n // @Description: Orientation of rangefinder\n // @Values: 0:Forward, 1:Forward-Right, 2:Right, 3:Back-Right, 4:Back, 5:Back-Left, 6:Left, 7:Forward-Left, 24:Up, 25:Down\n // @User: Advanced"},"RNGFNDA_PIN":{"Description":"Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.","DisplayName":"Rangefinder pin","User":"Standard","Values":{"11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder pin\n // @Description: Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.\n // @Values: -1:Not Used,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RNGFNDA_POS_X":{"Description":"X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.","DisplayName":" X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: X position offset\n // @Description: X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFNDA_POS_Y":{"Description":"Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.","DisplayName":"Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Y position offset\n // @Description: Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFNDA_POS_Z":{"Description":"Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.","DisplayName":"Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Z position offset\n // @Description: Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"RNGFNDA_PWRRNG":{"Description":"This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled","DisplayName":"Powersave range","Range":{"high":"32767","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Powersave range\n // @Description: This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled\n // @Units: m\n // @Range: 0 32767\n // @User: Standard"},"RNGFNDA_RECV_ID":{"Description":"The receive ID of the CAN frames. A value of zero means all IDs are accepted.","DisplayName":"RangeFinder CAN receive ID","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder CAN receive ID\n // @Description: The receive ID of the CAN frames. A value of zero means all IDs are accepted.\n // @Range: 0 65535\n // @User: Advanced"},"RNGFNDA_RMETRIC":{"Description":"This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.","DisplayName":"Ratiometric","User":"Standard","Values":{"0":"No","1":"Yes"},"__field_text":"\n // @DisplayName: Ratiometric\n // @Description: This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.\n // @Values: 0:No,1:Yes\n // @User: Standard"},"RNGFNDA_SCALING":{"Description":"Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.","DisplayName":"Rangefinder scaling","Increment":"0.001","Units":"m/V","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder scaling\n // @Description: Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.\n // @Units: m/V\n // @Increment: 0.001\n // @User: Standard"},"RNGFNDA_SNR_MIN":{"Description":"RangeFinder Minimum signal strength (SNR) to accept distance","DisplayName":"RangeFinder Minimum signal strength","Range":{"high":"65535","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: RangeFinder Minimum signal strength\n // @Description: RangeFinder Minimum signal strength (SNR) to accept distance\n // @Range: 0 65535\n // @User: Advanced"},"RNGFNDA_STOP_PIN":{"Description":"Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Rangefinder stop pin","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","111":"PX4 FMU Relay1","112":"PX4 FMU Relay2","113":"PX4IO Relay1","114":"PX4IO Relay2","115":"PX4IO ACC1","116":"PX4IO ACC2","-1":"Not Used"},"__field_text":"\n // @DisplayName: Rangefinder stop pin\n // @Description: Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Not Used,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2\n // @User: Standard"},"RNGFNDA_TYPE":{"Description":"Type of connected rangefinder","DisplayName":"Rangefinder type","User":"Standard","Values":{"0":"None","1":"Analog","2":"MaxbotixI2C","3":"LidarLite-I2C","5":"PWM","6":"BBB-PRU","7":"LightWareI2C","8":"LightWareSerial","9":"Bebop","10":"MAVLink","11":"USD1_Serial","12":"LeddarOne","13":"MaxbotixSerial","14":"TeraRangerI2C","15":"LidarLiteV3-I2C","16":"VL53L0X or VL53L1X","17":"NMEA","18":"WASP-LRF","19":"BenewakeTF02","20":"Benewake-Serial","21":"LidarLightV3HP","22":"PWM","23":"BlueRoboticsPing","24":"DroneCAN","25":"BenewakeTFminiPlus-I2C","26":"LanbaoPSK-CM8JL65-CC5","27":"BenewakeTF03","28":"VL53L1X-ShortRange","29":"LeddarVu8-Serial","30":"HC-SR04","31":"GYUS42v2","32":"MSP","33":"USD1_CAN","34":"Benewake_CAN","35":"TeraRangerSerial","36":"Lua_Scripting","37":"NoopLoop_TOFSense","38":"NoopLoop_TOFSense_CAN","39":"NRA24_CAN","40":"NoopLoop_TOFSenseF_I2C","41":"JRE_Serial","100":"SITL"},"__field_text":"\n // @DisplayName: Rangefinder type\n // @Description: Type of connected rangefinder\n // @Values: 0:None,1:Analog,2:MaxbotixI2C,3:LidarLite-I2C,5:PWM,6:BBB-PRU,7:LightWareI2C,8:LightWareSerial,9:Bebop,10:MAVLink,11:USD1_Serial,12:LeddarOne,13:MaxbotixSerial,14:TeraRangerI2C,15:LidarLiteV3-I2C,16:VL53L0X or VL53L1X,17:NMEA,18:WASP-LRF,19:BenewakeTF02,20:Benewake-Serial,21:LidarLightV3HP,22:PWM,23:BlueRoboticsPing,24:DroneCAN,25:BenewakeTFminiPlus-I2C,26:LanbaoPSK-CM8JL65-CC5,27:BenewakeTF03,28:VL53L1X-ShortRange,29:LeddarVu8-Serial,30:HC-SR04,31:GYUS42v2,32:MSP,33:USD1_CAN,34:Benewake_CAN,35:TeraRangerSerial,36:Lua_Scripting,37:NoopLoop_TOFSense,38:NoopLoop_TOFSense_CAN,39:NRA24_CAN,40:NoopLoop_TOFSenseF_I2C,41:JRE_Serial,100:SITL\n // @User: Standard"},"RNGFNDA_WSP_AVG":{"Description":"Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement","DisplayName":"Multi-pulse averages","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Multi-pulse averages\n // @Description: Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement\n // @Range: 0 255\n // @User: Advanced"},"RNGFNDA_WSP_BAUD":{"Description":"Desired baud rate","DisplayName":"Baud rate","User":"Advanced","Values":{"0":"Low Speed","1":"High Speed"},"__field_text":"\n // @DisplayName: Baud rate\n // @Description: Desired baud rate\n // @Values: 0:Low Speed,1:High Speed\n // @User: Advanced"},"RNGFNDA_WSP_FRQ":{"Description":"Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.","DisplayName":"Frequency","Range":{"high":"10000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Frequency\n // @Description: Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.\n // @Range: 0 10000\n // @User: Advanced"},"RNGFNDA_WSP_MAVG":{"Description":"Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results","DisplayName":"Moving Average Range","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Average Range\n // @Description: Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results\n // @Range: 0 255\n // @User: Advanced"},"RNGFNDA_WSP_MEDF":{"Description":"Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active","DisplayName":"Moving Median Filter","Range":{"high":"255","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Moving Median Filter\n // @Description: Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active\n // @Range: 0 255\n // @User: Advanced"},"RNGFNDA_WSP_THR":{"Description":"Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments","DisplayName":"Sensitivity threshold","Range":{"high":"255","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Sensitivity threshold\n // @Description: Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments\n // @Range: -1 255\n // @User: Advanced"},"RNGFND_FILT":{"Description":"Rangefinder filter to smooth distance. Set to zero to disable filtering","DisplayName":"Rangefinder filter","Increment":"0.05","Range":{"high":"5","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: Rangefinder filter\n // @Description: Rangefinder filter to smooth distance. Set to zero to disable filtering\n // @Units: Hz\n // @Range: 0 5\n // @Increment: 0.05\n // @User: Standard\n // @RebootRequired: True"},"RPM1_ESC_INDEX":{"Description":"ESC Telemetry Index to write RPM to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write RPM to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write RPM to\n // @Description: ESC Telemetry Index to write RPM to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"RPM1_ESC_MASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16"},"Description":"Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged","DisplayName":"Bitmask of ESC telemetry channels to average","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of ESC telemetry channels to average\n // @Description: Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16\n // @User: Advanced"},"RPM1_MAX":{"Description":"Maximum RPM to report. Only used on type = GPIO.","DisplayName":"Maximum RPM","Increment":"1","User":"Standard","__field_text":"\n // @DisplayName: Maximum RPM\n // @Description: Maximum RPM to report. Only used on type = GPIO.\n // @Increment: 1\n // @User: Standard"},"RPM1_MIN":{"Description":"Minimum RPM to report. Only used on type = GPIO.","DisplayName":"Minimum RPM","Increment":"1","User":"Standard","__field_text":"\n // @DisplayName: Minimum RPM\n // @Description: Minimum RPM to report. Only used on type = GPIO.\n // @Increment: 1\n // @User: Standard"},"RPM1_MIN_QUAL":{"Description":"Minimum data quality to be used","DisplayName":"Minimum Quality","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Minimum Quality\n // @Description: Minimum data quality to be used\n // @Increment: 0.1\n // @User: Advanced"},"RPM1_PIN":{"Description":"Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Input pin number","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Input pin number\n // @Description: Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard"},"RPM1_SCALING":{"Description":"Scaling factor between sensor reading and RPM.","DisplayName":"RPM scaling","Increment":"0.001","User":"Standard","__field_text":"\n // @DisplayName: RPM scaling\n // @Description: Scaling factor between sensor reading and RPM.\n // @Increment: 0.001\n // @User: Standard"},"RPM1_TYPE":{"Description":"What type of RPM sensor is connected","DisplayName":"RPM type","User":"Standard","Values":{"0":"None","1":"Not Used","2":"GPIO","3":"EFI","4":"Harmonic Notch","5":"ESC Telemetry Motors Bitmask","6":"Generator"},"__field_text":"\n // @DisplayName: RPM type\n // @Description: What type of RPM sensor is connected\n // @Values: 0:None,1:Not Used,2:GPIO,3:EFI,4:Harmonic Notch,5:ESC Telemetry Motors Bitmask,6:Generator\n // @User: Standard"},"RPM2_ESC_INDEX":{"Description":"ESC Telemetry Index to write RPM to. Use 0 to disable.","DisplayName":"ESC Telemetry Index to write RPM to","Increment":"1","Range":{"high":"10","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: ESC Telemetry Index to write RPM to\n // @Description: ESC Telemetry Index to write RPM to. Use 0 to disable.\n // @Range: 0 10\n // @Increment: 1\n // @User: Advanced"},"RPM2_ESC_MASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16"},"Description":"Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged","DisplayName":"Bitmask of ESC telemetry channels to average","User":"Advanced","__field_text":"\n // @DisplayName: Bitmask of ESC telemetry channels to average\n // @Description: Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16\n // @User: Advanced"},"RPM2_MAX":{"Description":"Maximum RPM to report. Only used on type = GPIO.","DisplayName":"Maximum RPM","Increment":"1","User":"Standard","__field_text":"\n // @DisplayName: Maximum RPM\n // @Description: Maximum RPM to report. Only used on type = GPIO.\n // @Increment: 1\n // @User: Standard"},"RPM2_MIN":{"Description":"Minimum RPM to report. Only used on type = GPIO.","DisplayName":"Minimum RPM","Increment":"1","User":"Standard","__field_text":"\n // @DisplayName: Minimum RPM\n // @Description: Minimum RPM to report. Only used on type = GPIO.\n // @Increment: 1\n // @User: Standard"},"RPM2_MIN_QUAL":{"Description":"Minimum data quality to be used","DisplayName":"Minimum Quality","Increment":"0.1","User":"Advanced","__field_text":"\n // @DisplayName: Minimum Quality\n // @Description: Minimum data quality to be used\n // @Increment: 0.1\n // @User: Advanced"},"RPM2_PIN":{"Description":"Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.","DisplayName":"Input pin number","User":"Standard","Values":{"50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Input pin number\n // @Description: Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.\n // @Values: -1:Disabled,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6\n // @User: Standard"},"RPM2_SCALING":{"Description":"Scaling factor between sensor reading and RPM.","DisplayName":"RPM scaling","Increment":"0.001","User":"Standard","__field_text":"\n // @DisplayName: RPM scaling\n // @Description: Scaling factor between sensor reading and RPM.\n // @Increment: 0.001\n // @User: Standard"},"RPM2_TYPE":{"Description":"What type of RPM sensor is connected","DisplayName":"RPM type","User":"Standard","Values":{"0":"None","1":"Not Used","2":"GPIO","3":"EFI","4":"Harmonic Notch","5":"ESC Telemetry Motors Bitmask","6":"Generator"},"__field_text":"\n // @DisplayName: RPM type\n // @Description: What type of RPM sensor is connected\n // @Values: 0:None,1:Not Used,2:GPIO,3:EFI,4:Harmonic Notch,5:ESC Telemetry Motors Bitmask,6:Generator\n // @User: Standard"},"RSSI_ANA_PIN":{"Description":"Pin used to read the RSSI voltage or PWM value","DisplayName":"Receiver RSSI sensing pin","User":"Standard","Values":{"8":"V5 Nano","11":"Pixracer","13":"Pixhawk ADC4","14":"Pixhawk ADC3","15":"Pixhawk ADC6/Pixhawk2 ADC","50":"AUX1","51":"AUX2","52":"AUX3","53":"AUX4","54":"AUX5","55":"AUX6","103":"Pixhawk SBUS"},"__field_text":"\n // @DisplayName: Receiver RSSI sensing pin\n // @Description: Pin used to read the RSSI voltage or PWM value\n // @Values: 8:V5 Nano,11:Pixracer,13:Pixhawk ADC4,14:Pixhawk ADC3,15:Pixhawk ADC6/Pixhawk2 ADC,50:AUX1,51:AUX2,52:AUX3,53:AUX4,54:AUX5,55:AUX6,103:Pixhawk SBUS\n // @User: Standard"},"RSSI_CHANNEL":{"Description":"The channel number where RSSI will be output by the radio receiver (5 and above).","DisplayName":"Receiver RSSI channel number","Range":{"high":"16","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Receiver RSSI channel number\n // @Description: The channel number where RSSI will be output by the radio receiver (5 and above).\n // @Range: 0 16\n // @User: Standard"},"RSSI_CHAN_HIGH":{"Description":"PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers output inverted values so this value may be higher than RSSI_CHAN_LOW","DisplayName":"Receiver RSSI PWM high value","Range":{"high":"2000","low":"0"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Receiver RSSI PWM high value\n // @Description: PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers output inverted values so this value may be higher than RSSI_CHAN_LOW\n // @Units: PWM\n // @Range: 0 2000\n // @User: Standard"},"RSSI_CHAN_LOW":{"Description":"PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers output inverted values so this value may be lower than RSSI_CHAN_HIGH","DisplayName":"RSSI PWM low value","Range":{"high":"2000","low":"0"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: RSSI PWM low value\n // @Description: PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers output inverted values so this value may be lower than RSSI_CHAN_HIGH\n // @Units: PWM\n // @Range: 0 2000\n // @User: Standard"},"RSSI_PIN_HIGH":{"Description":"RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers put out inverted values so this value may be lower than RSSI_PIN_LOW. When using pin 103, the maximum value of the parameter is 3.3V.","DisplayName":"RSSI pin's highest voltage","Increment":"0.01","Range":{"high":"5.0","low":"0"},"Units":"V","User":"Standard","__field_text":"\n // @DisplayName: RSSI pin's highest voltage\n // @Description: RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers put out inverted values so this value may be lower than RSSI_PIN_LOW. When using pin 103, the maximum value of the parameter is 3.3V.\n // @Units: V\n // @Increment: 0.01\n // @Range: 0 5.0\n // @User: Standard"},"RSSI_PIN_LOW":{"Description":"RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers put out inverted values so this value may be higher than RSSI_PIN_HIGH. When using pin 103, the maximum value of the parameter is 3.3V.","DisplayName":"RSSI pin's lowest voltage","Increment":"0.01","Range":{"high":"5.0","low":"0"},"Units":"V","User":"Standard","__field_text":"\n // @DisplayName: RSSI pin's lowest voltage\n // @Description: RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers put out inverted values so this value may be higher than RSSI_PIN_HIGH. When using pin 103, the maximum value of the parameter is 3.3V.\n // @Units: V\n // @Increment: 0.01\n // @Range: 0 5.0\n // @User: Standard"},"RSSI_TYPE":{"Description":"Radio Receiver RSSI type. If your radio receiver supports RSSI of some kind, set it here, then set its associated RSSI_XXXXX parameters, if any.","DisplayName":"RSSI Type","User":"Standard","Values":{"0":"Disabled","1":"AnalogPin","2":"RCChannelPwmValue","3":"ReceiverProtocol","4":"PWMInputPin","5":"TelemetryRadioRSSI"},"__field_text":"\n // @DisplayName: RSSI Type\n // @Description: Radio Receiver RSSI type. If your radio receiver supports RSSI of some kind, set it here, then set its associated RSSI_XXXXX parameters, if any.\n // @Values: 0:Disabled,1:AnalogPin,2:RCChannelPwmValue,3:ReceiverProtocol,4:PWMInputPin,5:TelemetryRadioRSSI\n // @User: Standard"},"RTL_ALT":{"Description":"The minimum alt above home the vehicle will climb to before returning. If the vehicle is flying higher than this value it will return at its current altitude.","DisplayName":"RTL Altitude","Increment":"1","Range":{"high":"300000","low":"200"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: RTL Altitude\n // @Description: The minimum alt above home the vehicle will climb to before returning. If the vehicle is flying higher than this value it will return at its current altitude.\n // @Units: cm\n // @Range: 200 300000\n // @Increment: 1\n // @User: Standard"},"RTL_ALT_FINAL":{"Description":"This is the altitude the vehicle will move to as the final stage of Returning to Launch or after completing a mission. Set to zero to land.","DisplayName":"RTL Final Altitude","Increment":"1","Range":{"high":"1000","low":"0"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: RTL Final Altitude\n // @Description: This is the altitude the vehicle will move to as the final stage of Returning to Launch or after completing a mission. Set to zero to land.\n // @Units: cm\n // @Range: 0 1000\n // @Increment: 1\n // @User: Standard"},"RTL_ALT_TYPE":{"Description":"RTL altitude type. Set to 1 for Terrain following during RTL and then set WPNAV_RFND_USE=1 to use rangefinder or WPNAV_RFND_USE=0 to use Terrain database","DisplayName":"RTL mode altitude type","User":"Standard","Values":{"0":"Relative to Home","1":"Terrain"},"__field_text":"\n // @DisplayName: RTL mode altitude type\n // @Description: RTL altitude type. Set to 1 for Terrain following during RTL and then set WPNAV_RFND_USE=1 to use rangefinder or WPNAV_RFND_USE=0 to use Terrain database\n // @Values: 0:Relative to Home, 1:Terrain\n // @User: Standard"},"RTL_CLIMB_MIN":{"Description":"The vehicle will climb this many cm during the initial climb portion of the RTL","DisplayName":"RTL minimum climb","Increment":"10","Range":{"high":"3000","low":"0"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: RTL minimum climb\n // @Description: The vehicle will climb this many cm during the initial climb portion of the RTL\n // @Units: cm\n // @Range: 0 3000\n // @Increment: 10\n // @User: Standard"},"RTL_CONE_SLOPE":{"Description":"Defines a cone above home which determines maximum climb","DisplayName":"RTL cone slope","Increment":".1","Range":{"high":"10.0","low":"0.5"},"User":"Standard","Values":{"0":"Disabled","1":"Shallow","3":"Steep"},"__field_text":"\n // @DisplayName: RTL cone slope\n // @Description: Defines a cone above home which determines maximum climb\n // @Range: 0.5 10.0\n // @Increment: .1\n // @Values: 0:Disabled,1:Shallow,3:Steep\n // @User: Standard"},"RTL_LOIT_TIME":{"Description":"Time (in milliseconds) to loiter above home before beginning final descent","DisplayName":"RTL loiter time","Increment":"1000","Range":{"high":"60000","low":"0"},"Units":"ms","User":"Standard","__field_text":"\n // @DisplayName: RTL loiter time\n // @Description: Time (in milliseconds) to loiter above home before beginning final descent\n // @Units: ms\n // @Range: 0 60000\n // @Increment: 1000\n // @User: Standard"},"RTL_OPTIONS":{"Bitmask":{"2":"Ignore pilot yaw"},"Description":"Options that can be applied to change RTL mode behaviour","DisplayName":"RTL mode options","User":"Advanced","__field_text":"\n // @DisplayName: RTL mode options\n // @Description: Options that can be applied to change RTL mode behaviour\n // @Bitmask: 2:Ignore pilot yaw\n // @User: Advanced"},"RTL_SPEED":{"Description":"Defines the speed in cm/s which the aircraft will attempt to maintain horizontally while flying home. If this is set to zero, WPNAV_SPEED will be used instead.","DisplayName":"RTL speed","Increment":"50","Range":{"high":"2000","low":"0"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: RTL speed\n // @Description: Defines the speed in cm/s which the aircraft will attempt to maintain horizontally while flying home. If this is set to zero, WPNAV_SPEED will be used instead.\n // @Units: cm/s\n // @Range: 0 2000\n // @Increment: 50\n // @User: Standard"},"RTUN_AUTO_FILTER":{"Description":"When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER","DisplayName":"Rover Quicktune auto filter enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Rover Quicktune auto filter enable\n // @Description: When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"RTUN_AUTO_SAVE":{"Description":"Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune","DisplayName":"Rover Quicktune auto save","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune auto save\n // @Description: Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune\n // @Units: s\n // @User: Standard"},"RTUN_AXES":{"Bitmask":{"0":"Steering","1":"Speed"},"Description":"axes to tune","DisplayName":"Rover Quicktune axes","User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune axes\n // @Description: axes to tune\n // @Bitmask: 0:Steering,1:Speed\n // @User: Standard"},"RTUN_ENABLE":{"Description":"Enable quicktune system","DisplayName":"Rover Quicktune enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Rover Quicktune enable\n // @Description: Enable quicktune system\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"RTUN_RC_FUNC":{"Description":"RCn_OPTION number to use to control tuning stop/start/save","DisplayName":"Rover Quicktune RC function","User":"Standard","Values":{"300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: Rover Quicktune RC function\n // @Description: RCn_OPTION number to use to control tuning stop/start/save\n // @Values: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"RTUN_SPD_FFRATIO":{"Description":"Ratio between measured response and CRUISE_THROTTLE value. Raise this to get a higher CRUISE_THROTTLE value","DisplayName":"Rover Quicktune Speed FeedForward (equivalent) ratio","Range":{"high":"1.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Speed FeedForward (equivalent) ratio\n // @Description: Ratio between measured response and CRUISE_THROTTLE value. Raise this to get a higher CRUISE_THROTTLE value\n // @Range: 0 1.0\n // @User: Standard"},"RTUN_SPD_I_RATIO":{"Description":"Ratio between speed FF and I gain. Raise this to get a higher I gain, 0 to leave I unchanged","DisplayName":"Rover Quicktune Speed FF to I ratio","Range":{"high":"2.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Speed FF to I ratio\n // @Description: Ratio between speed FF and I gain. Raise this to get a higher I gain, 0 to leave I unchanged\n // @Range: 0 2.0\n // @User: Standard"},"RTUN_SPD_P_RATIO":{"Description":"Ratio between speed FF and P gain. Raise this to get a higher P gain, 0 to leave P unchanged","DisplayName":"Rover Quicktune Speed FF to P ratio","Range":{"high":"2.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Speed FF to P ratio\n // @Description: Ratio between speed FF and P gain. Raise this to get a higher P gain, 0 to leave P unchanged\n // @Range: 0 2.0\n // @User: Standard"},"RTUN_STR_FFRATIO":{"Description":"Ratio between measured response and FF gain. Raise this to get a higher FF gain","DisplayName":"Rover Quicktune Steering Rate FeedForward ratio","Range":{"high":"1.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Steering Rate FeedForward ratio\n // @Description: Ratio between measured response and FF gain. Raise this to get a higher FF gain\n // @Range: 0 1.0\n // @User: Standard"},"RTUN_STR_I_RATIO":{"Description":"Ratio between steering FF and I gains. Raise this to get a higher I gain, 0 to leave I unchanged","DisplayName":"Rover Quicktune Steering FF to I ratio","Range":{"high":"2.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Steering FF to I ratio\n // @Description: Ratio between steering FF and I gains. Raise this to get a higher I gain, 0 to leave I unchanged\n // @Range: 0 2.0\n // @User: Standard"},"RTUN_STR_P_RATIO":{"Description":"Ratio between steering FF and P gains. Raise this to get a higher P gain, 0 to leave P unchanged","DisplayName":"Rover Quicktune Steering FF to P ratio","Range":{"high":"2.0","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Rover Quicktune Steering FF to P ratio\n // @Description: Ratio between steering FF and P gains. Raise this to get a higher P gain, 0 to leave P unchanged\n // @Range: 0 2.0\n // @User: Standard"},"SCHED_DEBUG":{"Description":"Set to non-zero to enable scheduler debug messages. When set to show \"Slips\" the scheduler will display a message whenever a scheduled task is delayed due to too much CPU load. When set to ShowOverruns the scheduled will display a message whenever a task takes longer than the limit promised in the task table.","DisplayName":"Scheduler debug level","User":"Advanced","Values":{"0":"Disabled","2":"ShowSlips","3":"ShowOverruns"},"__field_text":"\n // @DisplayName: Scheduler debug level\n // @Description: Set to non-zero to enable scheduler debug messages. When set to show \"Slips\" the scheduler will display a message whenever a scheduled task is delayed due to too much CPU load. When set to ShowOverruns the scheduled will display a message whenever a task takes longer than the limit promised in the task table.\n // @Values: 0:Disabled,2:ShowSlips,3:ShowOverruns\n // @User: Advanced"},"SCHED_LOOP_RATE":{"Description":"This controls the rate of the main control loop in Hz. This should only be changed by developers. This only takes effect on restart. Values over 400 are considered highly experimental.","DisplayName":"Scheduling main loop rate","RebootRequired":"True","User":"Advanced","Values":{"50":"50Hz","100":"100Hz","200":"200Hz","250":"250Hz","300":"300Hz","400":"400Hz"},"__field_text":"\n // @DisplayName: Scheduling main loop rate\n // @Description: This controls the rate of the main control loop in Hz. This should only be changed by developers. This only takes effect on restart. Values over 400 are considered highly experimental.\n // @Values: 50:50Hz,100:100Hz,200:200Hz,250:250Hz,300:300Hz,400:400Hz\n // @RebootRequired: True\n // @User: Advanced"},"SCHED_OPTIONS":{"Bitmask":{"0":"Enable per-task perf info"},"Description":"This controls optional aspects of the scheduler.","DisplayName":"Scheduling options","User":"Advanced","__field_text":"\n // @DisplayName: Scheduling options\n // @Description: This controls optional aspects of the scheduler.\n // @Bitmask: 0:Enable per-task perf info\n // @User: Advanced"},"SCR_DEBUG_OPTS":{"Bitmask":{"0":"No Scripts to run message if all scripts have stopped","1":"Runtime messages for memory usage and execution time","2":"Suppress logging scripts to dataflash","3":"log runtime memory usage and execution time","4":"Disable pre-arm check","5":"Save CRC of current scripts to loaded and running checksum parameters enabling pre-arm"},"Description":"Debugging options","DisplayName":"Scripting Debug Level","User":"Advanced","__field_text":"\n // @DisplayName: Scripting Debug Level\n // @Description: Debugging options\n // @Bitmask: 0: No Scripts to run message if all scripts have stopped\n // @Bitmask: 1: Runtime messages for memory usage and execution time\n // @Bitmask: 2: Suppress logging scripts to dataflash\n // @Bitmask: 3: log runtime memory usage and execution time\n // @Bitmask: 4: Disable pre-arm check\n // @Bitmask: 5: Save CRC of current scripts to loaded and running checksum parameters enabling pre-arm\n // @User: Advanced"},"SCR_DIR_DISABLE":{"Bitmask":{"0":"ROMFS","1":"APM/scripts"},"Description":"This will stop scripts being loaded from the given locations","DisplayName":"Directory disable","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Directory disable\n // @Description: This will stop scripts being loaded from the given locations\n // @Bitmask: 0:ROMFS, 1:APM/scripts\n // @RebootRequired: True\n // @User: Advanced"},"SCR_ENABLE":{"Description":"Controls if scripting is enabled","DisplayName":"Enable Scripting","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"Lua Scripts"},"__field_text":"\n // @DisplayName: Enable Scripting\n // @Description: Controls if scripting is enabled\n // @Values: 0:None,1:Lua Scripts\n // @RebootRequired: True\n // @User: Advanced"},"SCR_HEAP_SIZE":{"Description":"Amount of memory available for scripting","DisplayName":"Scripting Heap Size","Increment":"1024","Range":{"high":"1048576","low":"1024"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Scripting Heap Size\n // @Description: Amount of memory available for scripting\n // @Range: 1024 1048576\n // @Increment: 1024\n // @User: Advanced\n // @RebootRequired: True"},"SCR_LD_CHECKSUM":{"Description":"Required XOR of CRC32 checksum of loaded scripts, vehicle will not arm with incorrect scripts loaded, -1 disables","DisplayName":"Loaded script checksum","User":"Advanced","__field_text":"\n // @DisplayName: Loaded script checksum\n // @Description: Required XOR of CRC32 checksum of loaded scripts, vehicle will not arm with incorrect scripts loaded, -1 disables\n // @User: Advanced"},"SCR_RUN_CHECKSUM":{"Description":"Required XOR of CRC32 checksum of running scripts, vehicle will not arm with incorrect scripts running, -1 disables","DisplayName":"Running script checksum","User":"Advanced","__field_text":"\n // @DisplayName: Running script checksum\n // @Description: Required XOR of CRC32 checksum of running scripts, vehicle will not arm with incorrect scripts running, -1 disables\n // @User: Advanced"},"SCR_THD_PRIORITY":{"Description":"This sets the priority of the scripting thread. This is normally set to a low priority to prevent scripts from interfering with other parts of the system. Advanced users can change this priority if scripting needs to be prioritised for realtime applications. WARNING: changing this parameter can impact the stability of your flight controller. The scipting thread priority in this parameter is chosen based on a set of system level priorities for other subsystems. It is strongly recommended that you use the lowest priority that is sufficient for your application. Note that all scripts run at the same priority, so if you raise this priority you must carefully audit all lua scripts for behaviour that does not interfere with the operation of the system.","DisplayName":"Scripting thread priority","RebootRequired":"True","User":"Advanced","Values":{"0":"Normal","1":"IO Priority","2":"Storage Priority","3":"UART Priority","4":"I2C Priority","5":"SPI Priority","6":"Timer Priority","7":"Main Priority","8":"Boost Priority"},"__field_text":"\n // @DisplayName: Scripting thread priority\n // @Description: This sets the priority of the scripting thread. This is normally set to a low priority to prevent scripts from interfering with other parts of the system. Advanced users can change this priority if scripting needs to be prioritised for realtime applications. WARNING: changing this parameter can impact the stability of your flight controller. The scipting thread priority in this parameter is chosen based on a set of system level priorities for other subsystems. It is strongly recommended that you use the lowest priority that is sufficient for your application. Note that all scripts run at the same priority, so if you raise this priority you must carefully audit all lua scripts for behaviour that does not interfere with the operation of the system.\n // @Values: 0:Normal, 1:IO Priority, 2:Storage Priority, 3:UART Priority, 4:I2C Priority, 5:SPI Priority, 6:Timer Priority, 7:Main Priority, 8:Boost Priority\n // @RebootRequired: True\n // @User: Advanced"},"SCR_USER1":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter1","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter1\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_USER2":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter2","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter2\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_USER3":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter3","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter3\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_USER4":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter4","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter4\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_USER5":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter5","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter5\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_USER6":{"Description":"General purpose user variable input for scripts","DisplayName":"Scripting User Parameter6","User":"Standard","__field_text":"\n // @DisplayName: Scripting User Parameter6\n // @Description: General purpose user variable input for scripts\n // @User: Standard"},"SCR_VM_I_COUNT":{"Description":"The number virtual machine instructions that can be run before considering a script to have taken an excessive amount of time","DisplayName":"Scripting Virtual Machine Instruction Count","Increment":"10000","Range":{"high":"1000000","low":"1000"},"User":"Advanced","__field_text":"\n // @DisplayName: Scripting Virtual Machine Instruction Count\n // @Description: The number virtual machine instructions that can be run before considering a script to have taken an excessive amount of time\n // @Range: 1000 1000000\n // @Increment: 10000\n // @User: Advanced"},"SERIAL0_BAUD":{"Description":"The baud rate used on the USB console. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial0 baud rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: Serial0 baud rate\n // @Description: The baud rate used on the USB console. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.\n // @Values: 1:1200,2:2400,4:4800,9:9600,19:19200,38:38400,57:57600,111:111100,115:115200,230:230400,256:256000,460:460800,500:500000,921:921600,1500:1500000,2000:2000000\n // @User: Standard"},"SERIAL0_PROTOCOL":{"Description":"Control what protocol to use on the console. ","DisplayName":"Console protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVlink1","2":"MAVLink2"},"__field_text":"\n // @DisplayName: Console protocol selection\n // @Description: Control what protocol to use on the console. \n // @Values: 1:MAVlink1, 2:MAVLink2\n // @User: Standard\n // @RebootRequired: True"},"SERIAL1_BAUD":{"Description":"The baud rate used on the Telem1 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Telem1 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @DisplayName: Telem1 Baud Rate\n // @Description: The baud rate used on the Telem1 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.\n // @Values: 1:1200,2:2400,4:4800,9:9600,19:19200,38:38400,57:57600,111:111100,115:115200,230:230400,256:256000,460:460800,500:500000,921:921600,1500:1500000,2000:2000000\n // @User: Standard"},"SERIAL1_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Telem1 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Telem1 options\n // @Description: Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.\n // @Bitmask: 0:InvertRX, 1:InvertTX, 2:HalfDuplex, 3:SwapTXRX, 4: RX_PullDown, 5: RX_PullUp, 6: TX_PullDown, 7: TX_PullUp, 8: RX_NoDMA, 9: TX_NoDMA, 10: Don't forward mavlink to/from, 11: DisableFIFO, 12: Ignore Streamrate\n // @User: Advanced\n // @RebootRequired: True"},"SERIAL1_PROTOCOL":{"Description":"Control what protocol to use on the Telem1 port. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Telem1 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @DisplayName: Telem1 protocol selection\n // @Description: Control what protocol to use on the Telem1 port. Note that the Frsky options require external converter hardware. See the wiki for details.\n // @Values: -1:None, 1:MAVLink1, 2:MAVLink2, 3:Frsky D, 4:Frsky SPort, 5:GPS, 7:Alexmos Gimbal Serial, 8:Gimbal, 9:Rangefinder, 10:FrSky SPort Passthrough (OpenTX), 11:Lidar360, 13:Beacon, 14:Volz servo out, 15:SBus servo out, 16:ESC Telemetry, 17:Devo Telemetry, 18:OpticalFlow, 19:RobotisServo, 20:NMEA Output, 21:WindVane, 22:SLCAN, 23:RCIN, 24:EFI Serial, 25:LTM, 26:RunCam, 27:HottTelem, 28:Scripting, 29:Crossfire VTX, 30:Generator, 31:Winch, 32:MSP, 33:DJI FPV, 34:AirSpeed, 35:ADSB, 36:AHRS, 37:SmartAudio, 38:FETtecOneWire, 39:Torqeedo, 40:AIS, 41:CoDevESC, 42:DisplayPort, 43:MAVLink High Latency, 44:IRC Tramp, 45:DDS XRCE, 46:IMUDATA\n // @User: Standard\n // @RebootRequired: True"},"SERIAL2_BAUD":{"Description":"The baud rate of the Telem2 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Telemetry 2 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Telemetry 2 Baud Rate\n // @Description: The baud rate of the Telem2 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL2_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Telem2 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Telem2 options"},"SERIAL2_PROTOCOL":{"Description":"Control what protocol to use on the Telem2 port. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Telemetry 2 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Telemetry 2 protocol selection\n // @Description: Control what protocol to use on the Telem2 port. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL3_BAUD":{"Description":"The baud rate used for the Serial 3 (GPS). Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 3 (GPS) Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 3 (GPS) Baud Rate\n // @Description: The baud rate used for the Serial 3 (GPS). Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL3_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial3 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial3 options"},"SERIAL3_PROTOCOL":{"Description":"Control what protocol Serial 3 (GPS) should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial 3 (GPS) protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial 3 (GPS) protocol selection\n // @Description: Control what protocol Serial 3 (GPS) should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL4_BAUD":{"Description":"The baud rate used for Serial4. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 4 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 4 Baud Rate\n // @Description: The baud rate used for Serial4. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL4_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial4 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial4 options"},"SERIAL4_PROTOCOL":{"Description":"Control what protocol Serial4 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial4 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial4 protocol selection\n // @Description: Control what protocol Serial4 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL5_BAUD":{"Description":"The baud rate used for Serial5. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 5 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 5 Baud Rate\n // @Description: The baud rate used for Serial5. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL5_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial5 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial5 options"},"SERIAL5_PROTOCOL":{"Description":"Control what protocol Serial5 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial5 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial5 protocol selection\n // @Description: Control what protocol Serial5 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL6_BAUD":{"Description":"The baud rate used for Serial6. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 6 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 6 Baud Rate\n // @Description: The baud rate used for Serial6. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL6_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial6 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial6 options"},"SERIAL6_PROTOCOL":{"Description":"Control what protocol Serial6 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial6 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial6 protocol selection\n // @Description: Control what protocol Serial6 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL7_BAUD":{"Description":"The baud rate used for Serial7. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 7 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 7 Baud Rate\n // @Description: The baud rate used for Serial7. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL7_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial7 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial7 options"},"SERIAL7_PROTOCOL":{"Description":"Control what protocol Serial7 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial7 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial7 protocol selection\n // @Description: Control what protocol Serial7 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL8_BAUD":{"Description":"The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 8 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 8 Baud Rate\n // @Description: The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL8_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial8 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial8 options"},"SERIAL8_PROTOCOL":{"Description":"Control what protocol Serial8 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial8 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial8 protocol selection\n // @Description: Control what protocol Serial8 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL9_BAUD":{"Description":"The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.","DisplayName":"Serial 9 Baud Rate","User":"Standard","Values":{"1":"1200","2":"2400","4":"4800","9":"9600","19":"19200","38":"38400","57":"57600","111":"111100","115":"115200","230":"230400","256":"256000","460":"460800","500":"500000","921":"921600","1500":"1500000","2000":"2000000"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_BAUD\n // @DisplayName: Serial 9 Baud Rate\n // @Description: The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults."},"SERIAL9_OPTIONS":{"Bitmask":{"0":"InvertRX","1":"InvertTX","2":"HalfDuplex","3":"SwapTXRX","4":"RX_PullDown","5":"RX_PullUp","6":"TX_PullDown","7":"TX_PullUp","8":"RX_NoDMA","9":"TX_NoDMA","10":"Don't forward mavlink to/from","11":"DisableFIFO","12":"Ignore Streamrate"},"Description":"Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.","DisplayName":"Serial9 options","RebootRequired":"True","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SERIAL1_OPTIONS\n // @DisplayName: Serial9 options"},"SERIAL9_PROTOCOL":{"Description":"Control what protocol Serial9 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.","DisplayName":"Serial9 protocol selection","RebootRequired":"True","User":"Standard","Values":{"1":"MAVLink1","2":"MAVLink2","3":"Frsky D","4":"Frsky SPort","5":"GPS","7":"Alexmos Gimbal Serial","8":"Gimbal","9":"Rangefinder","10":"FrSky SPort Passthrough (OpenTX)","11":"Lidar360","13":"Beacon","14":"Volz servo out","15":"SBus servo out","16":"ESC Telemetry","17":"Devo Telemetry","18":"OpticalFlow","19":"RobotisServo","20":"NMEA Output","21":"WindVane","22":"SLCAN","23":"RCIN","24":"EFI Serial","25":"LTM","26":"RunCam","27":"HottTelem","28":"Scripting","29":"Crossfire VTX","30":"Generator","31":"Winch","32":"MSP","33":"DJI FPV","34":"AirSpeed","35":"ADSB","36":"AHRS","37":"SmartAudio","38":"FETtecOneWire","39":"Torqeedo","40":"AIS","41":"CoDevESC","42":"DisplayPort","43":"MAVLink High Latency","44":"IRC Tramp","45":"DDS XRCE","46":"IMUDATA","-1":"None"},"__field_text":"\n // @CopyFieldsFrom: SERIAL1_PROTOCOL\n // @DisplayName: Serial9 protocol selection\n // @Description: Control what protocol Serial9 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details."},"SERIAL_PASS1":{"Description":"This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port","DisplayName":"Serial passthru first port","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial passthru first port\n // @Description: This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @User: Advanced"},"SERIAL_PASS2":{"Description":"This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port","DisplayName":"Serial passthru second port","User":"Advanced","Values":{"0":"Serial0","1":"Serial1","2":"Serial2","3":"Serial3","4":"Serial4","5":"Serial5","6":"Serial6","-1":"Disabled"},"__field_text":"\n // @DisplayName: Serial passthru second port\n // @Description: This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port\n // @Values: -1:Disabled,0:Serial0,1:Serial1,2:Serial2,3:Serial3,4:Serial4,5:Serial5,6:Serial6\n // @User: Advanced"},"SERIAL_PASSTIMO":{"Description":"This sets a timeout for serial pass-through in seconds. When the pass-through is enabled by setting the SERIAL_PASS1 and SERIAL_PASS2 parameters then it remains in effect until no data comes from the first port for SERIAL_PASSTIMO seconds. This allows the port to revent to its normal usage (such as MAVLink connection to a GCS) when it is no longer needed. A value of 0 means no timeout.","DisplayName":"Serial passthru timeout","Range":{"high":"120","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Serial passthru timeout\n // @Description: This sets a timeout for serial pass-through in seconds. When the pass-through is enabled by setting the SERIAL_PASS1 and SERIAL_PASS2 parameters then it remains in effect until no data comes from the first port for SERIAL_PASSTIMO seconds. This allows the port to revent to its normal usage (such as MAVLink connection to a GCS) when it is no longer needed. A value of 0 means no timeout.\n // @Range: 0 120\n // @Units: s\n // @User: Advanced"},"SERVO10_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO10_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO10_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO10_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO10_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO11_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO11_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO11_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO11_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO11_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO12_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO12_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO12_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO12_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO12_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO13_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO13_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO13_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO13_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO13_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO14_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO14_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO14_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO14_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO14_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO15_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO15_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO15_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO15_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO15_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO16_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO16_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO16_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO16_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO16_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO17_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO17_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO17_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO17_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO17_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO18_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO18_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO18_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO18_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO18_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO19_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO19_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO19_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO19_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO19_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO1_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO1_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO1_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO1_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO1_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO20_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO20_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO20_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO20_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO20_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO21_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO21_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO21_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO21_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO21_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO22_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO22_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO22_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO22_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO22_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO23_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO23_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO23_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO23_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO23_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO24_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO24_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO24_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO24_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO24_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO25_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO25_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO25_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO25_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO25_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO26_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO26_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO26_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO26_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO26_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO27_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO27_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO27_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO27_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO27_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO28_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO28_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO28_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO28_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO28_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO29_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO29_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO29_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO29_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO29_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO2_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO2_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO2_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO2_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO2_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO30_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO30_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO30_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO30_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO30_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO31_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO31_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO31_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO31_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO31_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO32_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO32_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO32_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO32_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO32_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO3_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO3_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO3_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO3_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO3_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO4_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO4_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO4_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO4_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO4_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO5_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO5_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO5_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO5_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO5_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO6_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO6_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO6_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO6_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO6_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO7_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO7_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO7_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO7_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO7_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO8_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO8_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO8_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO8_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO8_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO9_FUNCTION":{"Description":"Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function","DisplayName":"Servo output function","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"RCPassThru","6":"Mount1Yaw","7":"Mount1Pitch","8":"Mount1Roll","9":"Mount1Retract","10":"CameraTrigger","12":"Mount2Yaw","13":"Mount2Pitch","14":"Mount2Roll","15":"Mount2Retract","22":"SprayerPump","23":"SprayerSpinner","27":"Parachute","28":"Gripper","29":"LandingGear","30":"EngineRunEnable","31":"HeliRSC","32":"HeliTailRSC","33":"Motor1","34":"Motor2","35":"Motor3","36":"Motor4","37":"Motor5","38":"Motor6","39":"Motor7","40":"Motor8","51":"RCIN1","52":"RCIN2","53":"RCIN3","54":"RCIN4","55":"RCIN5","56":"RCIN6","57":"RCIN7","58":"RCIN8","59":"RCIN9","60":"RCIN10","61":"RCIN11","62":"RCIN12","63":"RCIN13","64":"RCIN14","65":"RCIN15","66":"RCIN16","73":"ThrottleLeft","74":"ThrottleRight","75":"TiltMotorFrontLeft","76":"TiltMotorFrontRight","81":"BoostThrottle","82":"Motor9","83":"Motor10","84":"Motor11","85":"Motor12","88":"Winch","90":"CameraISO","91":"CameraAperture","92":"CameraFocus","93":"CameraShutterSpeed","94":"Script1","95":"Script2","96":"Script3","97":"Script4","98":"Script5","99":"Script6","100":"Script7","101":"Script8","102":"Script9","103":"Script10","104":"Script11","105":"Script12","106":"Script13","107":"Script14","108":"Script15","109":"Script16","120":"NeoPixel1","121":"NeoPixel2","122":"NeoPixel3","123":"NeoPixel4","124":"RateRoll","125":"RatePitch","126":"RateThrust","127":"RateYaw","129":"ProfiLED1","130":"ProfiLED2","131":"ProfiLED3","132":"ProfiLEDClock","133":"Winch Clutch","134":"SERVOn_MIN","135":"SERVOn_TRIM","136":"SERVOn_MAX","138":"Alarm","139":"Alarm Inverted","140":"RCIN1Scaled","141":"RCIN2Scaled","142":"RCIN3Scaled","143":"RCIN4Scaled","144":"RCIN5Scaled","145":"RCIN6Scaled","146":"RCIN7Scaled","147":"RCIN8Scaled","148":"RCIN9Scaled","149":"RCIN10Scaled","150":"RCIN11Scaled","151":"RCIN12Scaled","152":"RCIN13Scaled","153":"RCIN14Scaled","154":"RCIN15Scaled","155":"RCIN16Scaled","-1":"GPIO"},"__field_text":"\n // @DisplayName: Servo output function\n // @Description: Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function\n // @Values: -1:GPIO\n // @Values{Plane, Copter, Rover}: -1:GPIO\n // @Values: 0:Disabled\n // @Values{Plane, Copter, Rover}: 0:Disabled\n // @Values: 1:RCPassThru\n // @Values{Plane, Copter, Rover}: 1:RCPassThru\n // @Values: 2:Flap, 3:FlapAuto\n // @Values{Plane}: 2:Flap,3:FlapAuto\n // @Values: 4:Aileron\n // @Values{Plane}: 4:Aileron\n // @Values: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values{Plane, Copter, Rover}: 6:Mount1Yaw,7:Mount1Pitch,8:Mount1Roll,9:Mount1Retract\n // @Values: 10:CameraTrigger\n // @Values{Plane, Copter, Rover}: 10:CameraTrigger\n // @Values: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values{Plane, Copter, Rover}: 12:Mount2Yaw,13:Mount2Pitch,14:Mount2Roll,15:Mount2Retract\n // @Values: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values{Plane}: 16:DifferentialSpoilerLeft1,17:DifferentialSpoilerRight1\n // @Values: 19:Elevator\n // @Values{Plane}: 19:Elevator\n // @Values: 21:Rudder\n // @Values{Plane}: 21:Rudder\n // @Values: 22:SprayerPump,23:SprayerSpinner\n // @Values{Plane, Copter, Rover}: 22:SprayerPump,23:SprayerSpinner\n // @Values: 24:FlaperonLeft,25:FlaperonRight\n // @Values{Plane}: 24:FlaperonLeft,25:FlaperonRight\n // @Values: 26:GroundSteering\n // @Values{Plane, Rover}: 26:GroundSteering\n // @Values: 27:Parachute\n // @Values{Plane, Copter}: 27:Parachute\n // @Values: 28:Gripper\n // @Values{Plane, Copter, Rover}: 28:Gripper\n // @Values: 29:LandingGear\n // @Values{Plane, Copter}: 29:LandingGear\n // @Values: 30:EngineRunEnable\n // @Values{Plane, Copter}: 30:EngineRunEnable\n // @Values: 31:HeliRSC,32:HeliTailRSC\n // @Values{Copter}: 31:HeliRSC,32:HeliTailRSC\n // @Values: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Plane}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7/TailTiltServo,40:Motor8\n // @Values{Copter}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4,37:Motor5,38:Motor6,39:Motor7,40:Motor8\n // @Values{Rover}: 33:Motor1,34:Motor2,35:Motor3,36:Motor4\n // @Values: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values{Plane}: 41:TiltMotorsFront,45:TiltMotorsRear,46:TiltMotorRearLeft,47:TiltMotorRearRight\n // @Values: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values{Plane, Copter, Rover}: 51:RCIN1,52:RCIN2,53:RCIN3,54:RCIN4,55:RCIN5,56:RCIN6,57:RCIN7,58:RCIN8,59:RCIN9,60:RCIN10,61:RCIN11,62:RCIN12,63:RCIN13,64:RCIN14,65:RCIN15,66:RCIN16\n // @Values: 67:Ignition,69:Starter\n // @Values{Plane}: 67:Ignition,69:Starter\n // @Values: 70:Throttle\n // @Values{Plane, Rover}: 70:Throttle\n // @Values: 71:TrackerYaw,72:TrackerPitch\n // @Values: 73:ThrottleLeft,74:ThrottleRight\n // @Values{Plane, Copter, Rover}: 73:ThrottleLeft,74:ThrottleRight\n // @Values: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values{Plane, Copter}: 75:TiltMotorFrontLeft,76:TiltMotorFrontRight\n // @Values: 77:ElevonLeft,78:ElevonRight\n // @Values{Plane}: 77:ElevonLeft,78:ElevonRight\n // @Values: 79:VTailLeft,80:VTailRight\n // @Values{Plane}: 79:VTailLeft,80:VTailRight\n // @Values: 81:BoostThrottle\n // @Values{Copter}: 81:BoostThrottle\n // @Values: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values{Plane, Copter}: 82:Motor9,83:Motor10,84:Motor11,85:Motor12\n // @Values: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values{Plane}: 86:DifferentialSpoilerLeft2,87:DifferentialSpoilerRight2\n // @Values: 88:Winch\n // @Values{Copter, Rover}: 88:Winch\n // @Values: 89:Main Sail\n // @Values{Rover}: 89:Main Sail\n // @Values: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values{Plane, Copter, Rover}: 90:CameraISO,91:CameraAperture,92:CameraFocus,93:CameraShutterSpeed\n // @Values: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane, Copter, Rover}: 94:Script1,95:Script2,96:Script3,97:Script4,98:Script5,99:Script6,100:Script7,101:Script8,102:Script9,103:Script10,104:Script11,105:Script12,106:Script13,107:Script14,108:Script15,109:Script16\n // @Values{Plane}: 110:Airbrakes\n // @Values: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values{Plane, Copter, Rover}: 120:NeoPixel1,121:NeoPixel2,122:NeoPixel3,123:NeoPixel4\n // @Values: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values{Plane, Copter}: 124:RateRoll,125:RatePitch,126:RateThrust,127:RateYaw\n // @Values: 128:WingSailElevator\n // @Values{Rover}: 128:WingSailElevator\n // @Values: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values{Plane, Copter, Rover}: 129:ProfiLED1,130:ProfiLED2,131:ProfiLED3,132:ProfiLEDClock\n // @Values: 133:Winch Clutch\n // @Values{Copter, Rover}: 133:Winch Clutch\n // @Values: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values{Plane, Copter, Rover}: 134:SERVOn_MIN,135:SERVOn_TRIM,136:SERVOn_MAX\n // @Values: 137:SailMastRotation\n // @Values{Rover}: 137:SailMastRotation\n // @Values: 138:Alarm,139:Alarm Inverted\n // @Values{Plane, Copter, Rover}: 138:Alarm,139:Alarm Inverted\n // @Values: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @Values{Plane, Copter, Rover}: 140:RCIN1Scaled,141:RCIN2Scaled,142:RCIN3Scaled,143:RCIN4Scaled,144:RCIN5Scaled,145:RCIN6Scaled,146:RCIN7Scaled,147:RCIN8Scaled,148:RCIN9Scaled,149:RCIN10Scaled,150:RCIN11Scaled,151:RCIN12Scaled,152:RCIN13Scaled,153:RCIN14Scaled,154:RCIN15Scaled,155:RCIN16Scaled\n // @User: Standard\n // @RebootRequired: True"},"SERVO9_MAX":{"Description":"maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Maximum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Maximum PWM\n // @Description: maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO9_MIN":{"Description":"minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Minimum PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Minimum PWM\n // @Description: minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO9_REVERSED":{"Description":"Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.","DisplayName":"Servo reverse","User":"Standard","Values":{"0":"Normal","1":"Reversed"},"__field_text":"\n // @DisplayName: Servo reverse\n // @Description: Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.\n // @Values: 0:Normal,1:Reversed\n // @User: Standard"},"SERVO9_TRIM":{"Description":"Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.","DisplayName":"Trim PWM","Increment":"1","Range":{"high":"2200","low":"800"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Trim PWM\n // @Description: Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.\n // @Units: PWM\n // @Range: 800 2200\n // @Increment: 1\n // @User: Standard"},"SERVO_32_ENABLE":{"Description":"This allows for up to 32 outputs, enabling parameters for outputs above 16","DisplayName":"Enable outputs 17 to 31","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Enable outputs 17 to 31\n // @Description: This allows for up to 32 outputs, enabling parameters for outputs above 16\n // @User: Advanced\n // @Values: 0:Disabled,1:Enabled"},"SERVO_BLH_3DMASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16","16":"Channel 17","17":"Channel 18","18":"Channel 19","19":"Channel 20","20":"Channel 21","21":"Channel 22","22":"Channel 23","23":"Channel 24","24":"Channel 25","25":"Channel 26","26":"Channel 27","27":"Channel 28","28":"Channel 29","29":"Channel 30","30":"Channel 31","31":"Channel 32"},"Description":"Mask of channels which are dynamically reversible. This is used to configure ESCs in '3D' mode, allowing for the motor to spin in either direction","DisplayName":"BLHeli bitmask of 3D channels","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: BLHeli bitmask of 3D channels\n // @Description: Mask of channels which are dynamically reversible. This is used to configure ESCs in '3D' mode, allowing for the motor to spin in either direction\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16, 16:Channel 17, 17: Channel 18, 18: Channel 19, 19: Channel 20, 20: Channel 21, 21: Channel 22, 22: Channel 23, 23: Channel 24, 24: Channel 25, 25: Channel 26, 26: Channel 27, 27: Channel 28, 28: Channel 29, 29: Channel 30, 30: Channel 31, 31: Channel 32\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_AUTO":{"Description":"If set to 1 this auto-enables BLHeli pass-thru support for all multicopter motors","DisplayName":"BLHeli pass-thru auto-enable for multicopter motors","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BLHeli pass-thru auto-enable for multicopter motors\n // @Description: If set to 1 this auto-enables BLHeli pass-thru support for all multicopter motors\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard\n // @RebootRequired: True"},"SERVO_BLH_BDMASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16","16":"Channel 17","17":"Channel 18","18":"Channel 19","19":"Channel 20","20":"Channel 21","21":"Channel 22","22":"Channel 23","23":"Channel 24","24":"Channel 25","25":"Channel 26","26":"Channel 27","27":"Channel 28","28":"Channel 29","29":"Channel 30","30":"Channel 31","31":"Channel 32"},"Description":"Mask of channels which support bi-directional dshot. This is used for ESCs which have firmware that supports bi-directional dshot allowing fast rpm telemetry values to be returned for the harmonic notch.","DisplayName":"BLHeli bitmask of bi-directional dshot channels","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: BLHeli bitmask of bi-directional dshot channels\n // @Description: Mask of channels which support bi-directional dshot. This is used for ESCs which have firmware that supports bi-directional dshot allowing fast rpm telemetry values to be returned for the harmonic notch.\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16, 16:Channel 17, 17: Channel 18, 18: Channel 19, 19: Channel 20, 20: Channel 21, 21: Channel 22, 22: Channel 23, 23: Channel 24, 24: Channel 25, 25: Channel 26, 26: Channel 27, 27: Channel 28, 28: Channel 29, 29: Channel 30, 30: Channel 31, 31: Channel 32\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_DEBUG":{"Description":"When set to 1 this enabled verbose debugging output over MAVLink when the blheli protocol is active. This can be used to diagnose failures.","DisplayName":"BLHeli debug level","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: BLHeli debug level\n // @Description: When set to 1 this enabled verbose debugging output over MAVLink when the blheli protocol is active. This can be used to diagnose failures.\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"SERVO_BLH_MASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16","16":"Channel 17","17":"Channel 18","18":"Channel 19","19":"Channel 20","20":"Channel 21","21":"Channel 22","22":"Channel 23","23":"Channel 24","24":"Channel 25","25":"Channel 26","26":"Channel 27","27":"Channel 28","28":"Channel 29","29":"Channel 30","30":"Channel 31","31":"Channel 32"},"Description":"Enable of BLHeli pass-thru servo protocol support to specific channels. This mask is in addition to motors enabled using SERVO_BLH_AUTO (if any)","DisplayName":"BLHeli Channel Bitmask","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: BLHeli Channel Bitmask\n // @Description: Enable of BLHeli pass-thru servo protocol support to specific channels. This mask is in addition to motors enabled using SERVO_BLH_AUTO (if any)\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16, 16:Channel 17, 17: Channel 18, 18: Channel 19, 19: Channel 20, 20: Channel 21, 21: Channel 22, 22: Channel 23, 23: Channel 24, 24: Channel 25, 25: Channel 26, 26: Channel 27, 27: Channel 28, 28: Channel 29, 29: Channel 30, 30: Channel 31, 31: Channel 32\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_OTYPE":{"Description":"When set to a non-zero value this overrides the output type for the output channels given by SERVO_BLH_MASK. This can be used to enable DShot on outputs that are not part of the multicopter motors group.","DisplayName":"BLHeli output type override","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"OneShot","2":"OneShot125","3":"Brushed","4":"DShot150","5":"DShot300","6":"DShot600","7":"DShot1200"},"__field_text":"\n // @DisplayName: BLHeli output type override\n // @Description: When set to a non-zero value this overrides the output type for the output channels given by SERVO_BLH_MASK. This can be used to enable DShot on outputs that are not part of the multicopter motors group.\n // @Values: 0:None,1:OneShot,2:OneShot125,3:Brushed,4:DShot150,5:DShot300,6:DShot600,7:DShot1200\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_POLES":{"Description":"This allows calculation of true RPM from ESC's eRPM. The default is 14.","DisplayName":"BLHeli Motor Poles","Range":{"high":"127","low":"1"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: BLHeli Motor Poles\n // @Description: This allows calculation of true RPM from ESC's eRPM. The default is 14.\n // @Range: 1 127\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_PORT":{"Description":"This sets the mavlink channel to use for blheli pass-thru. The channel number is determined by the number of serial ports configured to use mavlink. So 0 is always the console, 1 is the next serial port using mavlink, 2 the next after that and so on.","DisplayName":"Control port","User":"Advanced","Values":{"0":"Console","1":"Mavlink Serial Channel1","2":"Mavlink Serial Channel2","3":"Mavlink Serial Channel3","4":"Mavlink Serial Channel4","5":"Mavlink Serial Channel5"},"__field_text":"\n // @DisplayName: Control port\n // @Description: This sets the mavlink channel to use for blheli pass-thru. The channel number is determined by the number of serial ports configured to use mavlink. So 0 is always the console, 1 is the next serial port using mavlink, 2 the next after that and so on.\n // @Values: 0:Console,1:Mavlink Serial Channel1,2:Mavlink Serial Channel2,3:Mavlink Serial Channel3,4:Mavlink Serial Channel4,5:Mavlink Serial Channel5\n // @User: Advanced"},"SERVO_BLH_RVMASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16","16":"Channel 17","17":"Channel 18","18":"Channel 19","19":"Channel 20","20":"Channel 21","21":"Channel 22","22":"Channel 23","23":"Channel 24","24":"Channel 25","25":"Channel 26","26":"Channel 27","27":"Channel 28","28":"Channel 29","29":"Channel 30","30":"Channel 31","31":"Channel 32"},"Description":"Mask of channels which are reversed. This is used to configure ESCs in reversed mode","DisplayName":"BLHeli bitmask of reversed channels","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: BLHeli bitmask of reversed channels\n // @Description: Mask of channels which are reversed. This is used to configure ESCs in reversed mode\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16, 16:Channel 17, 17: Channel 18, 18: Channel 19, 19: Channel 20, 20: Channel 21, 21: Channel 22, 22: Channel 23, 23: Channel 24, 24: Channel 25, 25: Channel 26, 26: Channel 27, 27: Channel 28, 28: Channel 29, 29: Channel 30, 30: Channel 31, 31: Channel 32\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_BLH_TEST":{"Description":"Setting SERVO_BLH_TEST to a motor number enables an internal test of the BLHeli ESC protocol to the corresponding ESC. The debug output is displayed on the USB console.","DisplayName":"BLHeli internal interface test","User":"Advanced","Values":{"0":"Disabled","1":"TestMotor1","2":"TestMotor2","3":"TestMotor3","4":"TestMotor4","5":"TestMotor5","6":"TestMotor6","7":"TestMotor7","8":"TestMotor8"},"__field_text":"\n // @DisplayName: BLHeli internal interface test\n // @Description: Setting SERVO_BLH_TEST to a motor number enables an internal test of the BLHeli ESC protocol to the corresponding ESC. The debug output is displayed on the USB console.\n // @Values: 0:Disabled,1:TestMotor1,2:TestMotor2,3:TestMotor3,4:TestMotor4,5:TestMotor5,6:TestMotor6,7:TestMotor7,8:TestMotor8\n // @User: Advanced"},"SERVO_BLH_TMOUT":{"Description":"This sets the inactivity timeout for the BLHeli protocol in seconds. If no packets are received in this time normal MAVLink operations are resumed. A value of 0 means no timeout","DisplayName":"BLHeli protocol timeout","Range":{"high":"300","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: BLHeli protocol timeout\n // @Description: This sets the inactivity timeout for the BLHeli protocol in seconds. If no packets are received in this time normal MAVLink operations are resumed. A value of 0 means no timeout\n // @Units: s\n // @Range: 0 300\n // @User: Standard"},"SERVO_BLH_TRATE":{"Description":"This sets the rate in Hz for requesting telemetry from ESCs. It is the rate per ESC. Setting to zero disables telemetry requests","DisplayName":"BLHeli telemetry rate","Range":{"high":"500","low":"0"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: BLHeli telemetry rate\n // @Description: This sets the rate in Hz for requesting telemetry from ESCs. It is the rate per ESC. Setting to zero disables telemetry requests\n // @Units: Hz\n // @Range: 0 500\n // @User: Standard"},"SERVO_DSHOT_ESC":{"Description":"DShot ESC type for all outputs. The ESC type affects the range of DShot commands available and the bit widths used. None means that no dshot commands will be executed. Some ESC types support Extended DShot Telemetry (EDT) which allows telemetry other than RPM data to be returned when using bi-directional dshot. If you enable EDT you must install EDT capable firmware for correct operation.","DisplayName":"Servo DShot ESC type","User":"Advanced","Values":{"0":"None","1":"BLHeli32/Kiss","2":"BLHeli_S","3":"BLHeli32/Kiss+EDT","4":"BLHeli_S+EDT"},"__field_text":"\n // @DisplayName: Servo DShot ESC type\n // @Description: DShot ESC type for all outputs. The ESC type affects the range of DShot commands available and the bit widths used. None means that no dshot commands will be executed. Some ESC types support Extended DShot Telemetry (EDT) which allows telemetry other than RPM data to be returned when using bi-directional dshot. If you enable EDT you must install EDT capable firmware for correct operation.\n // @Values: 0:None,1:BLHeli32/Kiss,2:BLHeli_S,3:BLHeli32/Kiss+EDT,4:BLHeli_S+EDT\n // @User: Advanced"},"SERVO_DSHOT_RATE":{"Description":"DShot output rate for all outputs as a multiple of the loop rate. 0 sets the output rate to be fixed at 1Khz for low loop rates. This value should never be set below 500Hz.","DisplayName":"Servo DShot output rate","User":"Advanced","Values":{"0":"1Khz","1":"loop-rate","2":"double loop-rate","3":"triple loop-rate","4":"quadruple loop rate"},"__field_text":"\n // @DisplayName: Servo DShot output rate\n // @Description: DShot output rate for all outputs as a multiple of the loop rate. 0 sets the output rate to be fixed at 1Khz for low loop rates. This value should never be set below 500Hz.\n // @Values: 0:1Khz,1:loop-rate,2:double loop-rate,3:triple loop-rate,4:quadruple loop rate\n // @User: Advanced"},"SERVO_FTW_MASK":{"Bitmask":{"0":"SERVO1","1":"SERVO2","2":"SERVO3","3":"SERVO4","4":"SERVO5","5":"SERVO6","6":"SERVO7","7":"SERVO8","8":"SERVO9","9":"SERVO10","10":"SERVO11","11":"SERVO12"},"Description":"Servo channel mask specifying FETtec ESC output.","DisplayName":"Servo channel output bitmask","RebootRequired":"True","User":"Standard","__field_text":"\n // @DisplayName: Servo channel output bitmask\n // @Description: Servo channel mask specifying FETtec ESC output.\n // @Bitmask: 0:SERVO1,1:SERVO2,2:SERVO3,3:SERVO4,4:SERVO5,5:SERVO6,6:SERVO7,7:SERVO8,8:SERVO9,9:SERVO10,10:SERVO11,11:SERVO12\n // @RebootRequired: True\n // @User: Standard"},"SERVO_FTW_POLES":{"Description":"Number of motor electrical poles","DisplayName":"Nr. electrical poles","Range":{"high":"50","low":"2"},"User":"Standard","__field_text":"\n // @DisplayName: Nr. electrical poles\n // @Description: Number of motor electrical poles\n // @Range: 2 50\n // @User: Standard"},"SERVO_FTW_RVMASK":{"Bitmask":{"0":"SERVO1","1":"SERVO2","2":"SERVO3","3":"SERVO4","4":"SERVO5","5":"SERVO6","6":"SERVO7","7":"SERVO8","8":"SERVO9","9":"SERVO10","10":"SERVO11","11":"SERVO12"},"Description":"Servo channel mask to reverse rotation of FETtec ESC outputs.","DisplayName":"Servo channel reverse rotation bitmask","User":"Standard","__field_text":"\n // @DisplayName: Servo channel reverse rotation bitmask\n // @Description: Servo channel mask to reverse rotation of FETtec ESC outputs.\n // @Bitmask: 0:SERVO1,1:SERVO2,2:SERVO3,3:SERVO4,4:SERVO5,5:SERVO6,6:SERVO7,7:SERVO8,8:SERVO9,9:SERVO10,10:SERVO11,11:SERVO12\n // @User: Standard"},"SERVO_GPIO_MASK":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16","16":"Servo 17","17":"Servo 18","18":"Servo 19","19":"Servo 20","20":"Servo 21","21":"Servo 22","22":"Servo 23","23":"Servo 24","24":"Servo 25","25":"Servo 26","26":"Servo 27","27":"Servo 28","28":"Servo 29","29":"Servo 30","30":"Servo 31","31":"Servo 32"},"Description":"Bitmask of outputs which will be available as GPIOs. Any output with either the function set to -1 or with the corresponding bit set in this mask will be available for use as a GPIO pin","DisplayName":"Servo GPIO mask","RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Servo GPIO mask\n // @Description: Bitmask of outputs which will be available as GPIOs. Any output with either the function set to -1 or with the corresponding bit set in this mask will be available for use as a GPIO pin\n // @Bitmask: 0:Servo 1, 1:Servo 2, 2:Servo 3, 3:Servo 4, 4:Servo 5, 5:Servo 6, 6:Servo 7, 7:Servo 8, 8:Servo 9, 9:Servo 10, 10:Servo 11, 11:Servo 12, 12:Servo 13, 13:Servo 14, 14:Servo 15, 15:Servo 16, 16:Servo 17, 17:Servo 18, 18:Servo 19, 19:Servo 20, 20:Servo 21, 21:Servo 22, 22:Servo 23, 23:Servo 24, 24:Servo 25, 25:Servo 26, 26:Servo 27, 27:Servo 28, 28:Servo 29, 29:Servo 30, 30:Servo 31, 31:Servo 32\n // @User: Advanced\n // @RebootRequired: True"},"SERVO_RATE":{"Description":"Default output rate in Hz for all PWM outputs.","DisplayName":"Servo default output rate","Range":{"high":"400","low":"25"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Servo default output rate\n // @Description: Default output rate in Hz for all PWM outputs.\n // @Range: 25 400\n // @User: Advanced\n // @Units: Hz"},"SERVO_RC_FS_MSK":{"Bitmask":{"0":"RCIN1Scaled","1":"RCIN2Scaled","2":"RCIN3Scaled","3":"RCIN4Scaled","4":"RCIN5Scaled","5":"RCIN6Scaled","6":"RCIN7Scaled","7":"RCIN8Scaled","8":"RCIN9Scaled","9":"RCIN10Scaled","10":"RCIN11Scaled","11":"SRCIN12Scaled","12":"RCIN13Scaled","13":"RCIN14Scaled","14":"RCIN15Scaled","15":"RCIN16Scaled"},"Description":"Bitmask of scaled passthru output channels which will be set to their trim value during rc failsafe instead of holding their last position before failsafe.","DisplayName":"Servo RC Failsafe Mask","User":"Advanced","__field_text":"\n // @DisplayName: Servo RC Failsafe Mask\n // @Description: Bitmask of scaled passthru output channels which will be set to their trim value during rc failsafe instead of holding their last position before failsafe.\n // @Bitmask: 0:RCIN1Scaled, 1:RCIN2Scaled, 2:RCIN3Scaled, 3:RCIN4Scaled, 4:RCIN5Scaled, 5:RCIN6Scaled, 6:RCIN7Scaled, 7:RCIN8Scaled, 8:RCIN9Scaled, 9:RCIN10Scaled, 10:RCIN11Scaled, 11:SRCIN12Scaled, 12:RCIN13Scaled, 13:RCIN14Scaled, 14:RCIN15Scaled, 15:RCIN16Scaled\n // @User: Advanced"},"SERVO_ROB_POSMAX":{"Description":"Position maximum at servo max value. This should be within the position control range of the servos, normally 0 to 4095","DisplayName":"Robotis servo position max","Range":{"high":"4095","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Robotis servo position max\n // @Description: Position maximum at servo max value. This should be within the position control range of the servos, normally 0 to 4095\n // @Range: 0 4095\n // @User: Standard"},"SERVO_ROB_POSMIN":{"Description":"Position minimum at servo min value. This should be within the position control range of the servos, normally 0 to 4095","DisplayName":"Robotis servo position min","Range":{"high":"4095","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Robotis servo position min\n // @Description: Position minimum at servo min value. This should be within the position control range of the servos, normally 0 to 4095\n // @Range: 0 4095\n // @User: Standard"},"SERVO_SBUS_RATE":{"Description":"This sets the SBUS output frame rate in Hz.","DisplayName":"SBUS default output rate","Range":{"high":"250","low":"25"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: SBUS default output rate\n // @Description: This sets the SBUS output frame rate in Hz.\n // @Range: 25 250\n // @User: Advanced\n // @Units: Hz"},"SERVO_VOLZ_MASK":{"Bitmask":{"0":"Channel1","1":"Channel2","2":"Channel3","3":"Channel4","4":"Channel5","5":"Channel6","6":"Channel7","7":"Channel8","8":"Channel9","9":"Channel10","10":"Channel11","11":"Channel12","12":"Channel13","13":"Channel14","14":"Channel15","15":"Channel16","16":"Channel17","17":"Channel18","18":"Channel19","19":"Channel20","20":"Channel21","21":"Channel22","22":"Channel23","23":"Channel24","24":"Channel25","25":"Channel26","26":"Channel27","28":"Channel29","29":"Channel30","30":"Channel31","31":"Channel32"},"Description":"Enable of volz servo protocol to specific channels","DisplayName":"Channel Bitmask","User":"Standard","__field_text":"\n // @DisplayName: Channel Bitmask\n // @Description: Enable of volz servo protocol to specific channels\n // @Bitmask: 0:Channel1,1:Channel2,2:Channel3,3:Channel4,4:Channel5,5:Channel6,6:Channel7,7:Channel8,8:Channel9,9:Channel10,10:Channel11,11:Channel12,12:Channel13,13:Channel14,14:Channel15,15:Channel16,16:Channel17,17:Channel18,18:Channel19,19:Channel20,20:Channel21,21:Channel22,22:Channel23,23:Channel24,24:Channel25,25:Channel26,26:Channel27,28:Channel29,29:Channel30,30:Channel31,31:Channel32\n // @User: Standard"},"SHIP_AUTO_OFS":{"Description":"Settings this parameter to one triggers an automatic follow offset calculation based on current position of the vehicle and the landing target. NOTE: This parameter will auto-reset to zero once the offset has been calculated.","DisplayName":"Ship automatic offset trigger","User":"Standard","Values":{"0":"Disabled","1":"Trigger"},"__field_text":"\n // @DisplayName: Ship automatic offset trigger\n // @Description: Settings this parameter to one triggers an automatic follow offset calculation based on current position of the vehicle and the landing target. NOTE: This parameter will auto-reset to zero once the offset has been calculated.\n // @Values: 0:Disabled,1:Trigger\n // @User: Standard"},"SHIP_ENABLE":{"Description":"Enable ship landing system","DisplayName":"Ship landing enable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Ship landing enable\n // @Description: Enable ship landing system\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"SHIP_LAND_ANGLE":{"Description":"Angle from the stern of the ship for landing approach. Use this to ensure that on a go-around that ship superstructure and cables are avoided. A value of zero means to approach from the rear of the ship. A value of 90 means the landing will approach from the port (left) side of the ship. A value of -90 will mean approaching from the starboard (right) side of the ship. A value of 180 will approach from the bow of the ship. This parameter is combined with the sign of the RTL_RADIUS parameter to determine the holdoff pattern. If RTL_RADIUS is positive then a clockwise loiter is performed, if RTL_RADIUS is negative then a counter-clockwise loiter is used.","DisplayName":"Ship landing angle","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Ship landing angle\n // @Description: Angle from the stern of the ship for landing approach. Use this to ensure that on a go-around that ship superstructure and cables are avoided. A value of zero means to approach from the rear of the ship. A value of 90 means the landing will approach from the port (left) side of the ship. A value of -90 will mean approaching from the starboard (right) side of the ship. A value of 180 will approach from the bow of the ship. This parameter is combined with the sign of the RTL_RADIUS parameter to determine the holdoff pattern. If RTL_RADIUS is positive then a clockwise loiter is performed, if RTL_RADIUS is negative then a counter-clockwise loiter is used.\n // @Range: -180 180\n // @Units: deg\n // @User: Standard"},"SID_AXIS":{"Description":"Controls which axis are being excited. Set to non-zero to see more parameters","DisplayName":"System identification axis","User":"Standard","Values":{"0":"None","1":"Input Roll Angle","2":"Input Pitch Angle","3":"Input Yaw Angle","4":"Recovery Roll Angle","5":"Recovery Pitch Angle","6":"Recovery Yaw Angle","7":"Rate Roll","8":"Rate Pitch","9":"Rate Yaw","10":"Mixer Roll","11":"Mixer Pitch","12":"Mixer Yaw","13":"Mixer Thrust"},"__field_text":"\n // @DisplayName: System identification axis\n // @Description: Controls which axis are being excited. Set to non-zero to see more parameters\n // @User: Standard\n // @Values: 0:None, 1:Input Roll Angle, 2:Input Pitch Angle, 3:Input Yaw Angle, 4:Recovery Roll Angle, 5:Recovery Pitch Angle, 6:Recovery Yaw Angle, 7:Rate Roll, 8:Rate Pitch, 9:Rate Yaw, 10:Mixer Roll, 11:Mixer Pitch, 12:Mixer Yaw, 13:Mixer Thrust"},"SID_F_START_HZ":{"Description":"Frequency at the start of the sweep","DisplayName":"System identification Start Frequency","Range":{"high":"100","low":"0.01"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: System identification Start Frequency\n // @Description: Frequency at the start of the sweep\n // @Range: 0.01 100\n // @Units: Hz\n // @User: Standard"},"SID_F_STOP_HZ":{"Description":"Frequency at the end of the sweep","DisplayName":"System identification Stop Frequency","Range":{"high":"100","low":"0.01"},"Units":"Hz","User":"Standard","__field_text":"\n // @DisplayName: System identification Stop Frequency\n // @Description: Frequency at the end of the sweep\n // @Range: 0.01 100\n // @Units: Hz\n // @User: Standard"},"SID_MAGNITUDE":{"Description":"Magnitude of sweep in deg, deg/s and 0-1 for mixer outputs.","DisplayName":"System identification Chirp Magnitude","User":"Standard","__field_text":"\n // @DisplayName: System identification Chirp Magnitude\n // @Description: Magnitude of sweep in deg, deg/s and 0-1 for mixer outputs.\n // @User: Standard"},"SID_T_FADE_IN":{"Description":"Time to reach maximum amplitude of sweep","DisplayName":"System identification Fade in time","Range":{"high":"20","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: System identification Fade in time\n // @Description: Time to reach maximum amplitude of sweep\n // @Range: 0 20\n // @Units: s\n // @User: Standard"},"SID_T_FADE_OUT":{"Description":"Time to reach zero amplitude at the end of the sweep","DisplayName":"System identification Fade out time","Range":{"high":"5","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: System identification Fade out time\n // @Description: Time to reach zero amplitude at the end of the sweep\n // @Range: 0 5\n // @Units: s\n // @User: Standard"},"SID_T_REC":{"Description":"Time taken to complete the sweep","DisplayName":"System identification Total Sweep length","Range":{"high":"255","low":"0"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: System identification Total Sweep length\n // @Description: Time taken to complete the sweep\n // @Range: 0 255\n // @Units: s\n // @User: Standard"},"SIMPLE":{"Bitmask":{"0":"SwitchPos1","1":"SwitchPos2","2":"SwitchPos3","3":"SwitchPos4","4":"SwitchPos5","5":"SwitchPos6"},"Description":"Bitmask which holds which flight modes use simple heading mode (eg bit 0 = 1 means Flight Mode 0 uses simple mode). The bitmask is for flightmode switch positions.","DisplayName":"Simple mode bitmask","User":"Advanced","__field_text":"\n // @DisplayName: Simple mode bitmask\n // @Description: Bitmask which holds which flight modes use simple heading mode (eg bit 0 = 1 means Flight Mode 0 uses simple mode). The bitmask is for flightmode switch positions.\n // @Bitmask: 0:SwitchPos1, 1:SwitchPos2, 2:SwitchPos3, 3:SwitchPos4, 4:SwitchPos5, 5:SwitchPos6\n // @User: Advanced"},"SIM_ACC1_BIAS_X":{"Description":"bias of simulated accelerometer sensor (X-axis)","DisplayName":"Accel 1 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 bias\n // @Description: bias of simulated accelerometer sensor\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC1_BIAS_Y":{"Description":"bias of simulated accelerometer sensor (Y-axis)","DisplayName":"Accel 1 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 bias\n // @Description: bias of simulated accelerometer sensor\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC1_BIAS_Z":{"Description":"bias of simulated accelerometer sensor (Z-axis)","DisplayName":"Accel 1 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 bias\n // @Description: bias of simulated accelerometer sensor\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC1_SCAL_X":{"Description":"scaling factors applied to simulated accelerometer (X-axis)","DisplayName":"Accel 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 scaling factor\n // @Description: scaling factors applied to simulated accelerometer\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC1_SCAL_Y":{"Description":"scaling factors applied to simulated accelerometer (Y-axis)","DisplayName":"Accel 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 scaling factor\n // @Description: scaling factors applied to simulated accelerometer\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC1_SCAL_Z":{"Description":"scaling factors applied to simulated accelerometer (Z-axis)","DisplayName":"Accel 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 1 scaling factor\n // @Description: scaling factors applied to simulated accelerometer\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_ACC2_BIAS_X":{"Description":"bias of simulated accelerometer sensor (X-axis)","DisplayName":"Accel 2 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC2_BIAS_Y":{"Description":"bias of simulated accelerometer sensor (Y-axis)","DisplayName":"Accel 2 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC2_BIAS_Z":{"Description":"bias of simulated accelerometer sensor (Z-axis)","DisplayName":"Accel 2 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC2_SCAL_X":{"Description":"scaling factors applied to simulated accelerometer (X-axis)","DisplayName":"Accel 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC2_SCAL_Y":{"Description":"scaling factors applied to simulated accelerometer (Y-axis)","DisplayName":"Accel 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC2_SCAL_Z":{"Description":"scaling factors applied to simulated accelerometer (Z-axis)","DisplayName":"Accel 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 2 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC3_BIAS_X":{"Description":"bias of simulated accelerometer sensor (X-axis)","DisplayName":"Accel 3 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC3_BIAS_Y":{"Description":"bias of simulated accelerometer sensor (Y-axis)","DisplayName":"Accel 3 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC3_BIAS_Z":{"Description":"bias of simulated accelerometer sensor (Z-axis)","DisplayName":"Accel 3 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC3_SCAL_X":{"Description":"scaling factors applied to simulated accelerometer (X-axis)","DisplayName":"Accel 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC3_SCAL_Y":{"Description":"scaling factors applied to simulated accelerometer (Y-axis)","DisplayName":"Accel 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC3_SCAL_Z":{"Description":"scaling factors applied to simulated accelerometer (Z-axis)","DisplayName":"Accel 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 3 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC4_BIAS_X":{"Description":"bias of simulated accelerometer sensor (X-axis)","DisplayName":"Accel 4 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC4_BIAS_Y":{"Description":"bias of simulated accelerometer sensor (Y-axis)","DisplayName":"Accel 4 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC4_BIAS_Z":{"Description":"bias of simulated accelerometer sensor (Z-axis)","DisplayName":"Accel 4 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC4_SCAL_X":{"Description":"scaling factors applied to simulated accelerometer (X-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC4_SCAL_Y":{"Description":"scaling factors applied to simulated accelerometer (Y-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC4_SCAL_Z":{"Description":"scaling factors applied to simulated accelerometer (Z-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC5_BIAS_X":{"Description":"bias of simulated accelerometer sensor (X-axis)","DisplayName":"Accel 5 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 5 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC5_BIAS_Y":{"Description":"bias of simulated accelerometer sensor (Y-axis)","DisplayName":"Accel 5 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 5 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC5_BIAS_Z":{"Description":"bias of simulated accelerometer sensor (Z-axis)","DisplayName":"Accel 5 bias","User":"Advanced","__field_text":"\n // @DisplayName: Accel 5 bias\n // @CopyFieldsFrom: SIM_ACC1_BIAS\n // @Vector3Parameter: 1"},"SIM_ACC5_SCAL_X":{"Description":"scaling factors applied to simulated accelerometer (X-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC5_SCAL_Y":{"Description":"scaling factors applied to simulated accelerometer (Y-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACC5_SCAL_Z":{"Description":"scaling factors applied to simulated accelerometer (Z-axis)","DisplayName":"Accel 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Accel 4 scaling factor\n // @CopyFieldsFrom: SIM_ACC1_SCAL\n // @Vector3Parameter: 1"},"SIM_ACCEL1_FAIL":{"Description":"Simulated failure of ACCEL1","DisplayName":"ACCEL1 Failure","User":"Advanced","Values":{"0":"Disabled","1":"ACCEL1 Failure"},"__field_text":"\n // @DisplayName: ACCEL1 Failure\n // @Description: Simulated failure of ACCEL1\n // @Values: 0:Disabled, 1:ACCEL1 Failure\n // @User: Advanced"},"SIM_ACCEL2_FAIL":{"Description":"Simulated failure of ACCEL2","DisplayName":"ACCEL2 Failure","User":"Advanced","Values":{"0":"Disabled","1":"ACCEL2 Failure"},"__field_text":"\n // @DisplayName: ACCEL2 Failure\n // @Description: Simulated failure of ACCEL2\n // @Values: 0:Disabled, 1:ACCEL2 Failure\n // @User: Advanced"},"SIM_ACCEL3_FAIL":{"Description":"Simulated failure of ACCEL3","DisplayName":"ACCEL3 Failure","User":"Advanced","Values":{"0":"Disabled","1":"ACCEL3 Failure"},"__field_text":"\n // @DisplayName: ACCEL3 Failure\n // @Description: Simulated failure of ACCEL3\n // @Values: 0:Disabled, 1:ACCEL3 Failure\n // @User: Advanced"},"SIM_ACCEL4_FAIL":{"Description":"Simulated failure of ACCEL4","DisplayName":"ACCEL4 Failure","User":"Advanced","Values":{"0":"Disabled","1":"ACCEL4 Failure"},"__field_text":"\n // @DisplayName: ACCEL4 Failure\n // @Description: Simulated failure of ACCEL4\n // @Values: 0:Disabled, 1:ACCEL4 Failure\n // @User: Advanced"},"SIM_ACCEL5_FAIL":{"Description":"Simulated failure of ACCEL5","DisplayName":"ACCEL5 Failure","User":"Advanced","Values":{"0":"Disabled","1":"ACCEL5 Failure"},"__field_text":"\n // @DisplayName: ACCEL5 Failure\n // @Description: Simulated failure of ACCEL5\n // @Values: 0:Disabled, 1:ACCEL5 Failure\n // @User: Advanced"},"SIM_ACC_FAIL_MSK":{"Description":"Determines if the acclerometer reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params","DisplayName":"Accelerometer Failure Mask","User":"Advanced","Values":{"0":"Disabled","1":"Readings stopped"},"__field_text":"\n // @DisplayName: Accelerometer Failure Mask\n // @Description: Determines if the acclerometer reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params\n // @Values: 0:Disabled, 1:Readings stopped\n // @User: Advanced"},"SIM_ADSB_TYPES":{"Bitmask":{"0":"MAVLink","3":"SageTechMXS"},"Description":"specifies which simulated ADSB types are active","DisplayName":"Simulated ADSB Type mask","User":"Advanced","__field_text":"\n // @DisplayName: Simulated ADSB Type mask\n // @Description: specifies which simulated ADSB types are active\n // @User: Advanced\n // @Bitmask: 0:MAVLink,3:SageTechMXS"},"SIM_ARSPD2_FAIL":{"Description":"Simulates Airspeed sensor 1 failure","DisplayName":"Airspeed sensor failure","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Airspeed sensor failure\n // @Description: Simulates Airspeed sensor 1 failure\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_ARSPD2_FAILP":{"Description":"Simulated airspeed sensor failure pressure","DisplayName":"Airspeed sensor failure pressure","Units":"Pa","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed sensor failure pressure\n // @Description: Simulated airspeed sensor failure pressure\n // @Units: Pa\n // @User: Advanced"},"SIM_ARSPD2_PITOT":{"Description":"Simulated airspeed sensor pitot tube failure pressure","DisplayName":"Airspeed pitot tube failure pressure","Units":"Pa","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed pitot tube failure pressure\n // @Description: Simulated airspeed sensor pitot tube failure pressure\n // @Units: Pa\n // @User: Advanced"},"SIM_ARSPD2_RATIO":{"Description":"Simulated airspeed sensor ratio","DisplayName":"Airspeed ratios","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ratios\n // @Description: Simulated airspeed sensor ratio\n // @User: Advanced"},"SIM_ARSPD2_SIGN":{"Description":"Simulated airspeed sensor with reversed pitot/static connections","DisplayName":"Airspeed signflip","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Airspeed signflip\n // @Description: Simulated airspeed sensor with reversed pitot/static connections\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_ARSPD_FAIL":{"Description":"Simulates Airspeed sensor 1 failure","DisplayName":"Airspeed sensor failure","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Airspeed sensor failure\n // @Description: Simulates Airspeed sensor 1 failure\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_ARSPD_FAILP":{"Description":"Simulated airspeed sensor failure pressure","DisplayName":"Airspeed sensor failure pressure","Units":"Pa","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed sensor failure pressure\n // @Description: Simulated airspeed sensor failure pressure\n // @Units: Pa\n // @User: Advanced"},"SIM_ARSPD_PITOT":{"Description":"Simulated airspeed sensor pitot tube failure pressure","DisplayName":"Airspeed pitot tube failure pressure","Units":"Pa","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed pitot tube failure pressure\n // @Description: Simulated airspeed sensor pitot tube failure pressure\n // @Units: Pa\n // @User: Advanced"},"SIM_ARSPD_RATIO":{"Description":"Simulated airspeed sensor ratio","DisplayName":"Airspeed ratios","User":"Advanced","__field_text":"\n // @DisplayName: Airspeed ratios\n // @Description: Simulated airspeed sensor ratio\n // @User: Advanced"},"SIM_ARSPD_SIGN":{"Description":"Simulated airspeed sensor with reversed pitot/static connections","DisplayName":"Airspeed signflip","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Airspeed signflip\n // @Description: Simulated airspeed sensor with reversed pitot/static connections\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_BAR2_GLITCH":{"Description":"Glitch for 2nd baro","DisplayName":"Baro2 Glitch","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro2 Glitch\n // @Description: Glitch for 2nd baro\n // @Units: m\n // @User: Advanced"},"SIM_BAR2_RND":{"Description":"Amount of (evenly-distributed) noise injected into the 2nd baro","DisplayName":"Baro2 Noise","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro2 Noise\n // @Description: Amount of (evenly-distributed) noise injected into the 2nd baro\n // @Units: m\n // @User: Advanced"},"SIM_BAR3_GLITCH":{"Description":"Glitch for 2nd baro","DisplayName":"Baro3 Glitch","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro3 Glitch\n // @Description: Glitch for 2nd baro\n // @Units: m\n // @User: Advanced"},"SIM_BAR3_RND":{"Description":"Amount of (evenly-distributed) noise injected into the 3rd baro","DisplayName":"Baro3 Noise","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro3 Noise\n // @Description: Amount of (evenly-distributed) noise injected into the 3rd baro\n // @Units: m\n // @User: Advanced"},"SIM_BARO_GLITCH":{"Description":"Glitch for 1st baro","DisplayName":"Baro Glitch","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro Glitch\n // @Description: Glitch for 1st baro\n // @Units: m\n // @User: Advanced"},"SIM_BARO_RND":{"Description":"Amount of (evenly-distributed) noise injected into the 1st baro","DisplayName":"Baro Noise","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Baro Noise\n // @Description: Amount of (evenly-distributed) noise injected into the 1st baro\n // @Units: m\n // @User: Advanced"},"SIM_BATT_VOLTAGE":{"Description":"Simulated battery (constant) voltage","DisplayName":"Simulated battery voltage","Units":"V","User":"Advanced","__field_text":"\n // @DisplayName: Simulated battery voltage\n // @Description: Simulated battery (constant) voltage\n // @Units: V\n // @User: Advanced"},"SIM_CAN_SRV_MSK":{"Bitmask":{"0":"Servo 1","1":"Servo 2","2":"Servo 3","3":"Servo 4","4":"Servo 5","5":"Servo 6","6":"Servo 7","7":"Servo 8","8":"Servo 9","9":"Servo 10","10":"Servo 11","11":"Servo 12","12":"Servo 13","13":"Servo 14","14":"Servo 15","15":"Servo 16","16":"Servo 17","17":"Servo 18","18":"Servo 19","19":"Servo 20","20":"Servo 21","21":"Servo 22","22":"Servo 23","23":"Servo 24","24":"Servo 25","25":"Servo 26","26":"Servo 27","27":"Servo 28","28":"Servo 29","29":"Servo 30","30":"Servo 31","31":"Servo 32"},"Description":"The set of actuators controlled externally by CAN SITL AP_Periph","DisplayName":"Mask of CAN servos/ESCs","User":"Advanced","__field_text":"\n // @DisplayName: Mask of CAN servos/ESCs\n // @Description: The set of actuators controlled externally by CAN SITL AP_Periph\n // @Bitmask: 0: Servo 1, 1: Servo 2, 2: Servo 3, 3: Servo 4, 4: Servo 5, 5: Servo 6, 6: Servo 7, 7: Servo 8, 8: Servo 9, 9: Servo 10, 10: Servo 11, 11: Servo 12, 12: Servo 13, 13: Servo 14, 14: Servo 15, 15: Servo 16, 16: Servo 17, 17: Servo 18, 18: Servo 19, 19: Servo 20, 20: Servo 21, 21: Servo 22, 22: Servo 23, 23: Servo 24, 24: Servo 25, 25: Servo 26, 26: Servo 27, 27: Servo 28, 28: Servo 29, 29: Servo 30, 30: Servo 31, 31: Servo 32\n // @User: Advanced"},"SIM_CAN_TYPE1":{"Description":"transport type for first CAN interface","DisplayName":"transport type for first CAN interface","User":"Advanced","Values":{"0":"MulticastUDP","1":"SocketCAN"},"__field_text":"\n // @DisplayName: transport type for first CAN interface\n // @Description: transport type for first CAN interface\n // @Values: 0:MulticastUDP,1:SocketCAN\n // @User: Advanced"},"SIM_CAN_TYPE2":{"Description":"transport type for second CAN interface","DisplayName":"transport type for second CAN interface","User":"Advanced","Values":{"0":"MulticastUDP","1":"SocketCAN"},"__field_text":"\n // @DisplayName: transport type for second CAN interface\n // @Description: transport type for second CAN interface\n // @Values: 0:MulticastUDP,1:SocketCAN\n // @User: Advanced"},"SIM_ESC_TELEM":{"Description":"enable perfect simulated ESC telemetry","DisplayName":"Simulated ESC Telemetry","User":"Advanced","__field_text":"\n // @DisplayName: Simulated ESC Telemetry\n // @Description: enable perfect simulated ESC telemetry\n // @User: Advanced"},"SIM_FLOAT_EXCEPT":{"Description":"If set, if a numerical error occurs SITL will die with a floating point exception.","DisplayName":"Generate floating point exceptions","User":"Advanced","__field_text":"\n // @DisplayName: Generate floating point exceptions\n // @Description: If set, if a numerical error occurs SITL will die with a floating point exception.\n // @User: Advanced"},"SIM_FLOW_DELAY":{"Description":"Opflow data delay","DisplayName":"Opflow Delay","Units":"ms","__field_text":"\n // @DisplayName: Opflow Delay\n // @Description: Opflow data delay\n // @Units: ms"},"SIM_FLOW_ENABLE":{"Description":"Enable simulated Optical Flow sensor","DisplayName":"Opflow Enable","Values":{"0":"Disable","1":"Enabled"},"__field_text":"\n // @DisplayName: Opflow Enable\n // @Description: Enable simulated Optical Flow sensor\n // @Values: 0:Disable,1:Enabled"},"SIM_FLOW_POS_X":{"Description":"XYZ position of the optical flow sensor focal point relative to the body frame origin (X-axis)","DisplayName":"Opflow Pos","Units":"m","__field_text":"\n // @DisplayName: Opflow Pos\n // @Description: XYZ position of the optical flow sensor focal point relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_FLOW_POS_Y":{"Description":"XYZ position of the optical flow sensor focal point relative to the body frame origin (Y-axis)","DisplayName":"Opflow Pos","Units":"m","__field_text":"\n // @DisplayName: Opflow Pos\n // @Description: XYZ position of the optical flow sensor focal point relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_FLOW_POS_Z":{"Description":"XYZ position of the optical flow sensor focal point relative to the body frame origin (Z-axis)","DisplayName":"Opflow Pos","Units":"m","__field_text":"\n // @DisplayName: Opflow Pos\n // @Description: XYZ position of the optical flow sensor focal point relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_FLOW_RATE":{"Description":"Opflow Data Rate","DisplayName":"Opflow Rate","Units":"Hz","__field_text":"\n // @DisplayName: Opflow Rate\n // @Description: Opflow Data Rate\n // @Units: Hz"},"SIM_FLOW_RND":{"Description":"Optical Flow sensor measurement noise in rad/sec","DisplayName":"Opflow noise","__field_text":"\n // @DisplayName: Opflow noise\n // @Description: Optical Flow sensor measurement noise in rad/sec"},"SIM_GPS2_ACC":{"Description":"GPS 2 Accuracy","DisplayName":"GPS 2 Accuracy","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Accuracy\n // @Description: GPS 2 Accuracy\n // @User: Advanced"},"SIM_GPS2_ALT_OFS":{"Description":"GPS 2 Altitude Error","DisplayName":"GPS 2 Altitude Offset","Units":"m","__field_text":"\n // @DisplayName: GPS 2 Altitude Offset\n // @Description: GPS 2 Altitude Error\n // @Units: m"},"SIM_GPS2_BYTELOS":{"Description":"Percent of bytes lost from GPS 2","DisplayName":"GPS 2 Byteloss","Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Byteloss\n // @Description: Percent of bytes lost from GPS 2\n // @Units: %\n // @User: Advanced"},"SIM_GPS2_DISABLE":{"Description":"Disables GPS 2","DisplayName":"GPS 2 disable","User":"Advanced","Values":{"0":"Enable","1":"GPS Disabled"},"__field_text":"\n // @DisplayName: GPS 2 disable\n // @Description: Disables GPS 2\n // @Values: 0:Enable, 1:GPS Disabled\n // @User: Advanced"},"SIM_GPS2_DRFTALT":{"Description":"GPS 2 altitude drift error","DisplayName":"GPS 2 Altitude Drift","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Altitude Drift\n // @Description: GPS 2 altitude drift error\n // @Units: m\n // @User: Advanced"},"SIM_GPS2_GLTCH_X":{"Description":"Glitch offsets of simulated GPS 2 sensor (X-axis)","DisplayName":"GPS 2 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Glitch\n // @Description: Glitch offsets of simulated GPS 2 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS2_GLTCH_Y":{"Description":"Glitch offsets of simulated GPS 2 sensor (Y-axis)","DisplayName":"GPS 2 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Glitch\n // @Description: Glitch offsets of simulated GPS 2 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS2_GLTCH_Z":{"Description":"Glitch offsets of simulated GPS 2 sensor (Z-axis)","DisplayName":"GPS 2 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Glitch\n // @Description: Glitch offsets of simulated GPS 2 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS2_HDG":{"Description":"Enable GPS2 output of NMEA heading HDT sentence or UBLOX_RELPOSNED","DisplayName":"GPS 2 Heading","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPS 2 Heading\n // @Description: Enable GPS2 output of NMEA heading HDT sentence or UBLOX_RELPOSNED\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_GPS2_HZ":{"Description":"GPS 2 Update rate","DisplayName":"GPS 2 Hz","Units":"Hz","__field_text":"\n // @DisplayName: GPS 2 Hz\n // @Description: GPS 2 Update rate\n // @Units: Hz"},"SIM_GPS2_JAM":{"Description":"Enable simulated GPS jamming","DisplayName":"GPS jamming enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPS jamming enable\n // @Description: Enable simulated GPS jamming\n // @User: Advanced\n // @Values: 0:Disabled, 1:Enabled"},"SIM_GPS2_LAG_MS":{"Description":"GPS 2 lag in ms","DisplayName":"GPS 2 Lag","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Lag\n // @Description: GPS 2 lag in ms\n // @Units: ms\n // @User: Advanced"},"SIM_GPS2_LCKTIME":{"Description":"Delay in seconds before GPS2 acquires lock","DisplayName":"GPS 2 Lock Time","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Lock Time\n // @Description: Delay in seconds before GPS2 acquires lock\n // @Units: s\n // @User: Advanced"},"SIM_GPS2_NOISE":{"Description":"Amplitude of the GPS2 altitude error","DisplayName":"GPS 2 Noise","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Noise\n // @Description: Amplitude of the GPS2 altitude error\n // @Units: m\n // @User: Advanced"},"SIM_GPS2_NUMSATS":{"Description":"Number of satellites GPS 2 has in view","DisplayName":"GPS 2 Num Satellites","__field_text":"\n // @DisplayName: GPS 2 Num Satellites\n // @Description: Number of satellites GPS 2 has in view"},"SIM_GPS2_POS_X":{"Description":"GPS 2 antenna phase center position relative to the body frame origin (X-axis)","DisplayName":"GPS 2 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 2 Position\n // @Description: GPS 2 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS2_POS_Y":{"Description":"GPS 2 antenna phase center position relative to the body frame origin (Y-axis)","DisplayName":"GPS 2 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 2 Position\n // @Description: GPS 2 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS2_POS_Z":{"Description":"GPS 2 antenna phase center position relative to the body frame origin (Z-axis)","DisplayName":"GPS 2 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 2 Position\n // @Description: GPS 2 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS2_TYPE":{"Description":"Sets the type of simulation used for GPS 2","DisplayName":"GPS 2 type","User":"Advanced","Values":{"0":"None","1":"UBlox","5":"NMEA","6":"SBP","7":"File","8":"Nova","9":"SBP","10":"Trimble","19":"MSP"},"__field_text":"\n // @CopyFieldsFrom: SIM_GPS_TYPE\n // @DisplayName: GPS 2 type\n // @Description: Sets the type of simulation used for GPS 2"},"SIM_GPS2_VERR_X":{"Description":"GPS 2 Velocity Error Offsets in NED (X-axis)","DisplayName":"GPS 2 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Velocity Error\n // @Description: GPS 2 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS2_VERR_Y":{"Description":"GPS 2 Velocity Error Offsets in NED (Y-axis)","DisplayName":"GPS 2 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Velocity Error\n // @Description: GPS 2 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS2_VERR_Z":{"Description":"GPS 2 Velocity Error Offsets in NED (Z-axis)","DisplayName":"GPS 2 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 2 Velocity Error\n // @Description: GPS 2 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_ACC":{"Description":"GPS 1 Accuracy","DisplayName":"GPS 1 Accuracy","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Accuracy\n // @Description: GPS 1 Accuracy\n // @User: Advanced"},"SIM_GPS_ALT_OFS":{"Description":"GPS 1 Altitude Error","DisplayName":"GPS 1 Altitude Offset","Units":"m","__field_text":"\n // @DisplayName: GPS 1 Altitude Offset\n // @Description: GPS 1 Altitude Error\n // @Units: m"},"SIM_GPS_BYTELOSS":{"Description":"Percent of bytes lost from GPS 1","DisplayName":"GPS Byteloss","Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: GPS Byteloss\n // @Description: Percent of bytes lost from GPS 1\n // @Units: %\n // @User: Advanced"},"SIM_GPS_DISABLE":{"Description":"Disables GPS 1","DisplayName":"GPS 1 disable","User":"Advanced","Values":{"0":"Enable","1":"GPS Disabled"},"__field_text":"\n // @DisplayName: GPS 1 disable\n // @Description: Disables GPS 1\n // @Values: 0:Enable, 1:GPS Disabled\n // @User: Advanced"},"SIM_GPS_DRIFTALT":{"Description":"GPS 1 altitude drift error","DisplayName":"GPS 1 Altitude Drift","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Altitude Drift\n // @Description: GPS 1 altitude drift error\n // @Units: m\n // @User: Advanced"},"SIM_GPS_GLITCH_X":{"Description":"Glitch offsets of simulated GPS 1 sensor (X-axis)","DisplayName":"GPS 1 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Glitch\n // @Description: Glitch offsets of simulated GPS 1 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_GLITCH_Y":{"Description":"Glitch offsets of simulated GPS 1 sensor (Y-axis)","DisplayName":"GPS 1 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Glitch\n // @Description: Glitch offsets of simulated GPS 1 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_GLITCH_Z":{"Description":"Glitch offsets of simulated GPS 1 sensor (Z-axis)","DisplayName":"GPS 1 Glitch","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Glitch\n // @Description: Glitch offsets of simulated GPS 1 sensor\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_HDG":{"Description":"Enable GPS1 output of NMEA heading HDT sentence or UBLOX_RELPOSNED","DisplayName":"GPS 1 Heading","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPS 1 Heading\n // @Description: Enable GPS1 output of NMEA heading HDT sentence or UBLOX_RELPOSNED\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_GPS_HZ":{"Description":"GPS 1 Update rate","DisplayName":"GPS 1 Hz","Units":"Hz","__field_text":"\n // @DisplayName: GPS 1 Hz\n // @Description: GPS 1 Update rate\n // @Units: Hz"},"SIM_GPS_JAM":{"Description":"Enable simulated GPS jamming","DisplayName":"GPS jamming enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: GPS jamming enable\n // @Description: Enable simulated GPS jamming\n // @User: Advanced\n // @Values: 0:Disabled, 1:Enabled"},"SIM_GPS_LAG_MS":{"Description":"GPS 1 lag","DisplayName":"GPS 1 Lag","Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Lag\n // @Description: GPS 1 lag\n // @Units: ms\n // @User: Advanced"},"SIM_GPS_LOCKTIME":{"Description":"Delay in seconds before GPS1 acquires lock","DisplayName":"GPS 1 Lock Time","Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Lock Time\n // @Description: Delay in seconds before GPS1 acquires lock\n // @Units: s\n // @User: Advanced"},"SIM_GPS_LOG_NUM":{"Description":"Log number for GPS:update_file()","DisplayName":"GPS Log Number","__field_text":"\n // @DisplayName: GPS Log Number\n // @Description: Log number for GPS:update_file()"},"SIM_GPS_NOISE":{"Description":"Amplitude of the GPS1 altitude error","DisplayName":"GPS 1 Noise","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Noise\n // @Description: Amplitude of the GPS1 altitude error\n // @Units: m\n // @User: Advanced"},"SIM_GPS_NUMSATS":{"Description":"Number of satellites GPS 1 has in view","DisplayName":"GPS 1 Num Satellites","__field_text":"\n // @DisplayName: GPS 1 Num Satellites\n // @Description: Number of satellites GPS 1 has in view"},"SIM_GPS_POS_X":{"Description":"GPS 1 antenna phase center position relative to the body frame origin (X-axis)","DisplayName":"GPS 1 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 1 Position\n // @Description: GPS 1 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS_POS_Y":{"Description":"GPS 1 antenna phase center position relative to the body frame origin (Y-axis)","DisplayName":"GPS 1 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 1 Position\n // @Description: GPS 1 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS_POS_Z":{"Description":"GPS 1 antenna phase center position relative to the body frame origin (Z-axis)","DisplayName":"GPS 1 Position","Units":"m","__field_text":"\n // @DisplayName: GPS 1 Position\n // @Description: GPS 1 antenna phase center position relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_GPS_TYPE":{"Description":"Sets the type of simulation used for GPS 1","DisplayName":"GPS 1 type","User":"Advanced","Values":{"0":"None","1":"UBlox","5":"NMEA","6":"SBP","7":"File","8":"Nova","9":"SBP","10":"Trimble","19":"MSP"},"__field_text":"\n // @DisplayName: GPS 1 type\n // @Description: Sets the type of simulation used for GPS 1\n // @Values: 0:None, 1:UBlox, 5:NMEA, 6:SBP, 7:File, 8:Nova, 9:SBP, 10:Trimble, 19:MSP\n // @User: Advanced"},"SIM_GPS_VERR_X":{"Description":"GPS 1 Velocity Error Offsets in NED (X-axis)","DisplayName":"GPS 1 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Velocity Error\n // @Description: GPS 1 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_VERR_Y":{"Description":"GPS 1 Velocity Error Offsets in NED (Y-axis)","DisplayName":"GPS 1 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Velocity Error\n // @Description: GPS 1 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GPS_VERR_Z":{"Description":"GPS 1 Velocity Error Offsets in NED (Z-axis)","DisplayName":"GPS 1 Velocity Error","User":"Advanced","__field_text":"\n // @DisplayName: GPS 1 Velocity Error\n // @Description: GPS 1 Velocity Error Offsets in NED\n // @Vector3Parameter: 1\n // @User: Advanced"},"SIM_GRPE_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the gripper servo simulation","DisplayName":"Gripper servo Sim enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Gripper servo Sim enable/disable\n // @Description: Allows you to enable (1) or disable (0) the gripper servo simulation\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"SIM_GRPE_PIN":{"Description":"The pin number that the gripper emp is connected to. (start at 1)","DisplayName":"Gripper emp pin","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Gripper emp pin\n // @Description: The pin number that the gripper emp is connected to. (start at 1)\n // @Range: 0 15\n // @User: Advanced"},"SIM_GRPS_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the gripper servo simulation","DisplayName":"Gripper servo Sim enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Gripper servo Sim enable/disable\n // @Description: Allows you to enable (1) or disable (0) the gripper servo simulation\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"SIM_GRPS_GRAB":{"Description":"PWM value in microseconds sent to Gripper to initiate grabbing the cargo","DisplayName":"Gripper Grab PWM","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Gripper Grab PWM\n // @Description: PWM value in microseconds sent to Gripper to initiate grabbing the cargo\n // @User: Advanced\n // @Range: 1000 2000\n // @Units: PWM"},"SIM_GRPS_PIN":{"Description":"The pin number that the gripper servo is connected to. (start at 1)","DisplayName":"Gripper servo pin","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Gripper servo pin\n // @Description: The pin number that the gripper servo is connected to. (start at 1)\n // @Range: 0 15\n // @User: Advanced"},"SIM_GRPS_RELEASE":{"Description":"PWM value in microseconds sent to Gripper to release the cargo","DisplayName":"Gripper Release PWM","Range":{"high":"2000","low":"1000"},"Units":"PWM","User":"Advanced","__field_text":"\n // @DisplayName: Gripper Release PWM\n // @Description: PWM value in microseconds sent to Gripper to release the cargo\n // @User: Advanced\n // @Range: 1000 2000\n // @Units: PWM"},"SIM_GRPS_REVERSE":{"Description":"Reverse the closing direction.","DisplayName":"Gripper close direction","User":"Advanced","Values":{"0":"Normal","1":"Reverse"},"__field_text":"\n // @DisplayName: Gripper close direction\n // @Description: Reverse the closing direction.\n // @User: Advanced\n // @Values: 0:Normal,1:Reverse"},"SIM_GYR1_BIAS_X":{"Description":"First Gyro bias on X axis","DisplayName":"First Gyro bias on X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: First Gyro bias on X axis\n // @Description: First Gyro bias on X axis\n // @Units: rad/s\n // @User: Advanced"},"SIM_GYR1_BIAS_Y":{"Description":"First Gyro bias on Y axis","DisplayName":"First Gyro bias on Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: First Gyro bias on Y axis\n // @Description: First Gyro bias on Y axis\n // @Units: rad/s\n // @User: Advanced"},"SIM_GYR1_BIAS_Z":{"Description":"First Gyro bias on Z axis","DisplayName":"First Gyro bias on Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @DisplayName: First Gyro bias on Z axis\n // @Description: First Gyro bias on Z axis\n // @Units: rad/s\n // @User: Advanced"},"SIM_GYR1_SCALE_X":{"Description":"scaling factors applied to simulated gyroscope (X-axis)","DisplayName":"Gyro 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 1 scaling factor\n // @Description: scaling factors applied to simulated gyroscope\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_GYR1_SCALE_Y":{"Description":"scaling factors applied to simulated gyroscope (Y-axis)","DisplayName":"Gyro 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 1 scaling factor\n // @Description: scaling factors applied to simulated gyroscope\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_GYR1_SCALE_Z":{"Description":"scaling factors applied to simulated gyroscope (Z-axis)","DisplayName":"Gyro 1 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 1 scaling factor\n // @Description: scaling factors applied to simulated gyroscope\n // @User: Advanced\n // @Vector3Parameter: 1"},"SIM_GYR2_BIAS_X":{"Description":"Second Gyro bias on X axis","DisplayName":"Second Gyro bias on X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_X\n // @DisplayName: Second Gyro bias on X axis\n // @Description: Second Gyro bias on X axis"},"SIM_GYR2_BIAS_Y":{"Description":"Second Gyro bias on Y axis","DisplayName":"Second Gyro bias on Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Y\n // @DisplayName: Second Gyro bias on Y axis\n // @Description: Second Gyro bias on Y axis"},"SIM_GYR2_BIAS_Z":{"Description":"Second Gyro bias on Z axis","DisplayName":"Second Gyro bias on Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Z\n // @DisplayName: Second Gyro bias on Z axis\n // @Description: Second Gyro bias on Z axis"},"SIM_GYR2_SCALE_X":{"Description":"scaling factors applied to simulated gyroscope (X-axis)","DisplayName":"Gyro 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 2 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR2_SCALE_Y":{"Description":"scaling factors applied to simulated gyroscope (Y-axis)","DisplayName":"Gyro 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 2 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR2_SCALE_Z":{"Description":"scaling factors applied to simulated gyroscope (Z-axis)","DisplayName":"Gyro 2 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 2 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR3_BIAS_X":{"Description":"Third Gyro bias on X axis","DisplayName":"Third Gyro bias on X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_X\n // @DisplayName: Third Gyro bias on X axis\n // @Description: Third Gyro bias on X axis"},"SIM_GYR3_BIAS_Y":{"Description":"Third Gyro bias on Y axis","DisplayName":"Third Gyro bias on Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Y\n // @DisplayName: Third Gyro bias on Y axis\n // @Description: Third Gyro bias on Y axis"},"SIM_GYR3_BIAS_Z":{"Description":"Third Gyro bias on Z axis","DisplayName":"Third Gyro bias on Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Z\n // @DisplayName: Third Gyro bias on Z axis\n // @Description: Third Gyro bias on Z axis"},"SIM_GYR3_SCALE_X":{"Description":"scaling factors applied to simulated gyroscope (X-axis)","DisplayName":"Gyro 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 3 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR3_SCALE_Y":{"Description":"scaling factors applied to simulated gyroscope (Y-axis)","DisplayName":"Gyro 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 3 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR3_SCALE_Z":{"Description":"scaling factors applied to simulated gyroscope (Z-axis)","DisplayName":"Gyro 3 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 3 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR4_BIAS_X":{"Description":"Fourth Gyro bias on X axis","DisplayName":"Fourth Gyro bias on X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_X\n // @DisplayName: Fourth Gyro bias on X axis\n // @Description: Fourth Gyro bias on X axis"},"SIM_GYR4_BIAS_Y":{"Description":"Fourth Gyro bias on Y axis","DisplayName":"Fourth Gyro bias on Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Y\n // @DisplayName: Fourth Gyro bias on Y axis\n // @Description: Fourth Gyro bias on Y axis"},"SIM_GYR4_BIAS_Z":{"Description":"Fourth Gyro bias on Z axis","DisplayName":"Fourth Gyro bias on Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Z\n // @DisplayName: Fourth Gyro bias on Z axis\n // @Description: Fourth Gyro bias on Z axis"},"SIM_GYR4_SCALE_X":{"Description":"scaling factors applied to simulated gyroscope (X-axis)","DisplayName":"Gyro 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 4 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR4_SCALE_Y":{"Description":"scaling factors applied to simulated gyroscope (Y-axis)","DisplayName":"Gyro 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 4 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR4_SCALE_Z":{"Description":"scaling factors applied to simulated gyroscope (Z-axis)","DisplayName":"Gyro 4 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 4 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR5_BIAS_X":{"Description":"Fifth Gyro bias on X axis","DisplayName":"Fifth Gyro bias on X axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_X\n // @DisplayName: Fifth Gyro bias on X axis\n // @Description: Fifth Gyro bias on X axis"},"SIM_GYR5_BIAS_Y":{"Description":"Fifth Gyro bias on Y axis","DisplayName":"Fifth Gyro bias on Y axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Y\n // @DisplayName: Fifth Gyro bias on Y axis\n // @Description: Fifth Gyro bias on Y axis"},"SIM_GYR5_BIAS_Z":{"Description":"Fifth Gyro bias on Z axis","DisplayName":"Fifth Gyro bias on Z axis","Units":"rad/s","User":"Advanced","__field_text":"\n // @CopyFieldsFrom: SIM_GYR1_BIAS_Z\n // @DisplayName: Fifth Gyro bias on Z axis\n // @Description: Fifth Gyro bias on Z axis"},"SIM_GYR5_SCALE_X":{"Description":"scaling factors applied to simulated gyroscope (X-axis)","DisplayName":"Gyro 5 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 5 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR5_SCALE_Y":{"Description":"scaling factors applied to simulated gyroscope (Y-axis)","DisplayName":"Gyro 5 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 5 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYR5_SCALE_Z":{"Description":"scaling factors applied to simulated gyroscope (Z-axis)","DisplayName":"Gyro 5 scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Gyro 5 scaling factor\n // @CopyFieldsFrom: SIM_GYR1_SCALE\n // @Vector3Parameter: 1"},"SIM_GYRO_FAIL_MSK":{"Description":"Determines if the gyro reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params","DisplayName":"Gyro Failure Mask","User":"Advanced","Values":{"0":"Disabled","1":"Readings stopped"},"__field_text":"\n // @DisplayName: Gyro Failure Mask\n // @Description: Determines if the gyro reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params\n // @Values: 0:Disabled, 1:Readings stopped\n // @User: Advanced"},"SIM_IMU_COUNT":{"Description":"Number of simulated IMUs to create","DisplayName":"IMU count","__field_text":"\n // @DisplayName: IMU count\n // @Description: Number of simulated IMUs to create"},"SIM_IMU_POS_X":{"Description":"XYZ position of the IMU accelerometer relative to the body frame origin (X-axis)","DisplayName":"IMU Offsets","Units":"m","__field_text":"\n // @DisplayName: IMU Offsets\n // @Description: XYZ position of the IMU accelerometer relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_IMU_POS_Y":{"Description":"XYZ position of the IMU accelerometer relative to the body frame origin (Y-axis)","DisplayName":"IMU Offsets","Units":"m","__field_text":"\n // @DisplayName: IMU Offsets\n // @Description: XYZ position of the IMU accelerometer relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_IMU_POS_Z":{"Description":"XYZ position of the IMU accelerometer relative to the body frame origin (Z-axis)","DisplayName":"IMU Offsets","Units":"m","__field_text":"\n // @DisplayName: IMU Offsets\n // @Description: XYZ position of the IMU accelerometer relative to the body frame origin\n // @Units: m\n // @Vector3Parameter: 1"},"SIM_INIT_ALT_OFS":{"Description":"GPS initial alt offset from origin","DisplayName":"Initial Altitude Offset","__field_text":"\n // @DisplayName: Initial Altitude Offset\n // @Description: GPS initial alt offset from origin"},"SIM_INIT_LAT_OFS":{"Description":"GPS initial lat offset from origin","DisplayName":"Initial Latitude Offset","__field_text":"\n // @DisplayName: Initial Latitude Offset\n // @Description: GPS initial lat offset from origin"},"SIM_INIT_LON_OFS":{"Description":"GPS initial lon offset from origin","DisplayName":"Initial Longitude Offset","__field_text":"\n // @DisplayName: Initial Longitude Offset\n // @Description: GPS initial lon offset from origin"},"SIM_JSON_MASTER":{"Description":"the instance number to take servos from","DisplayName":"JSON master instance","__field_text":"\n // @DisplayName: JSON master instance\n // @Description: the instance number to take servos from"},"SIM_MAG1_DEVID":{"Description":"Device ID of simulated compass 1","DisplayName":"MAG1 Device ID","User":"Advanced","__field_text":"\n // @DisplayName: MAG1 Device ID\n // @Description: Device ID of simulated compass 1\n // @User: Advanced"},"SIM_MAG1_FAIL":{"Description":"Simulated failure of MAG1","DisplayName":"MAG1 Failure","User":"Advanced","Values":{"0":"Disabled","1":"MAG1 Failure"},"__field_text":"\n // @DisplayName: MAG1 Failure\n // @Description: Simulated failure of MAG1\n // @Values: 0:Disabled, 1:MAG1 Failure\n // @User: Advanced"},"SIM_MAG2_FAIL":{"Description":"Simulated failure of MAG2","DisplayName":"MAG2 Failure","User":"Advanced","Values":{"0":"Disabled","1":"MAG2 Failure"},"__field_text":"\n // @DisplayName: MAG2 Failure\n // @Description: Simulated failure of MAG2\n // @Values: 0:Disabled, 1:MAG2 Failure\n // @User: Advanced"},"SIM_MAG3_FAIL":{"Description":"Simulated failure of MAG3","DisplayName":"MAG3 Failure","User":"Advanced","Values":{"0":"Disabled","1":"MAG3 Failure"},"__field_text":"\n // @DisplayName: MAG3 Failure\n // @Description: Simulated failure of MAG3\n // @Values: 0:Disabled, 1:MAG3 Failure\n // @User: Advanced"},"SIM_MAG_SAVE_IDS":{"Description":"This forces saving of compass devids on startup so that simulated compasses start as calibrated","DisplayName":"Save MAG devids on startup","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Save MAG devids on startup\n // @Description: This forces saving of compass devids on startup so that simulated compasses start as calibrated\n // @Values: 0:Disabled, 1:Enabled\n // @User: Advanced"},"SIM_OH_MASK":{"Description":"channels which are passed through to actual hardware when running sim on actual hardware","DisplayName":"SIM-on_hardware Output Enable Mask","__field_text":"\n // @DisplayName: SIM-on_hardware Output Enable Mask\n // @Description: channels which are passed through to actual hardware when running sim on actual hardware"},"SIM_OH_RELAY_MSK":{"Description":"Allow relay output operation when running SIM-on-hardware","DisplayName":"SIM-on_hardware Relay Enable Mask","__field_text":"\n // @DisplayName: SIM-on_hardware Relay Enable Mask\n // @Description: Allow relay output operation when running SIM-on-hardware"},"SIM_OPOS_ALT":{"Description":"Specifies vehicle's startup altitude (AMSL)","DisplayName":"Original Position (Altitude)","User":"Advanced","__field_text":"\n // @DisplayName: Original Position (Altitude)\n // @Description: Specifies vehicle's startup altitude (AMSL)\n // @User: Advanced"},"SIM_OPOS_HDG":{"Description":"Specifies vehicle's startup heading (0-360)","DisplayName":"Original Position (Heading)","User":"Advanced","__field_text":"\n // @DisplayName: Original Position (Heading)\n // @Description: Specifies vehicle's startup heading (0-360)\n // @User: Advanced"},"SIM_OPOS_LAT":{"Description":"Specifies vehicle's startup latitude","DisplayName":"Original Position (Latitude)","User":"Advanced","__field_text":"\n // @DisplayName: Original Position (Latitude)\n // @Description: Specifies vehicle's startup latitude\n // @User: Advanced"},"SIM_OPOS_LNG":{"Description":"Specifies vehicle's startup longitude","DisplayName":"Original Position (Longitude)","User":"Advanced","__field_text":"\n // @DisplayName: Original Position (Longitude)\n // @Description: Specifies vehicle's startup longitude\n // @User: Advanced"},"SIM_PLD_ALT_LIMIT":{"Description":"Precland device maximum range altitude","DisplayName":"Precland device alt range","Range":{"high":"100","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Precland device alt range\n // @Description: Precland device maximum range altitude\n // @Units: m\n // @Range: 0 100\n // @User: Advanced"},"SIM_PLD_DIST_LIMIT":{"Description":"Precland device maximum lateral range","DisplayName":"Precland device lateral range","Range":{"high":"100","low":"5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Precland device lateral range\n // @Description: Precland device maximum lateral range\n // @Units: m\n // @Range: 5 100\n // @User: Advanced"},"SIM_PLD_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the Preland simulation","DisplayName":"Preland device Sim enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Preland device Sim enable/disable\n // @Description: Allows you to enable (1) or disable (0) the Preland simulation\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"SIM_PLD_HEIGHT":{"Description":"Precland device center's height above sealevel assume a 2x2m square as station base","DisplayName":"Precland device center's height above sealevel","Increment":"1","Range":{"high":"10000","low":"0"},"Units":"cm","User":"Advanced","__field_text":"\n // @DisplayName: Precland device center's height above sealevel\n // @Description: Precland device center's height above sealevel assume a 2x2m square as station base\n // @Units: cm\n // @Increment: 1\n // @Range: 0 10000\n // @User: Advanced"},"SIM_PLD_LAT":{"Description":"Precland device center's latitude","DisplayName":"Precland device center's latitude","Increment":"0.000001","Range":{"high":"90","low":"-90"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Precland device center's latitude\n // @Description: Precland device center's latitude\n // @Units: deg\n // @Increment: 0.000001\n // @Range: -90 90\n // @User: Advanced"},"SIM_PLD_LON":{"Description":"Precland device center's longitude","DisplayName":"Precland device center's longitude","Increment":"0.000001","Range":{"high":"180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Precland device center's longitude\n // @Description: Precland device center's longitude\n // @Units: deg\n // @Increment: 0.000001\n // @Range: -180 180\n // @User: Advanced"},"SIM_PLD_OPTIONS":{"Bitmask":{"0":"Enable target distance"},"Description":"SIM_Precland extra options","DisplayName":"SIM_Precland extra options","User":"Advanced","__field_text":"\n // @DisplayName: SIM_Precland extra options\n // @Description: SIM_Precland extra options\n // @Bitmask: 0: Enable target distance\n // @User: Advanced"},"SIM_PLD_ORIENT":{"Description":"Precland device orientation vector","DisplayName":"Precland device orientation","User":"Advanced","Values":{"0":"Front","4":"Back","24":"Up"},"__field_text":"\n // @DisplayName: Precland device orientation\n // @Description: Precland device orientation vector\n // @Values: 0:Front, 4:Back, 24:Up\n // @User: Advanced"},"SIM_PLD_RATE":{"Description":"Precland device rate. e.g led patter refresh rate, RF message rate, etc.","DisplayName":"Precland device update rate","Range":{"high":"200","low":"0"},"Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Precland device update rate\n // @Description: Precland device rate. e.g led patter refresh rate, RF message rate, etc.\n // @Units: Hz\n // @Range: 0 200\n // @User: Advanced"},"SIM_PLD_TYPE":{"Description":"Precland device radiance type: it can be a cylinder, a cone, or a sphere.","DisplayName":"Precland device radiance type","User":"Advanced","Values":{"0":"cylinder","1":"cone","2":"sphere"},"__field_text":"\n // @DisplayName: Precland device radiance type\n // @Description: Precland device radiance type: it can be a cylinder, a cone, or a sphere.\n // @Values: 0:cylinder,1:cone,2:sphere\n // @User: Advanced"},"SIM_PLD_YAW":{"Description":"Precland device systems rotation from north","DisplayName":"Precland device systems rotation from north","Increment":"1","Range":{"high":"+180","low":"-180"},"Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Precland device systems rotation from north\n // @Description: Precland device systems rotation from north\n // @Units: deg\n // @Increment: 1\n // @Range: -180 +180\n // @User: Advanced"},"SIM_RC_FAIL":{"Description":"Allows you to emulate rc failures in sim","DisplayName":"Simulated RC signal failure","User":"Advanced","Values":{"0":"Disabled","1":"No RC pusles","2":"All Channels neutral except Throttle is 950us"},"__field_text":"\n // @DisplayName: Simulated RC signal failure\n // @Description: Allows you to emulate rc failures in sim\n // @Values: 0:Disabled,1:No RC pusles,2:All Channels neutral except Throttle is 950us\n // @User: Advanced"},"SIM_SPEEDUP":{"Description":"Runs the simulation at multiples of normal speed. Do not use if realtime physics, like RealFlight, is being used","DisplayName":"Sim Speedup","Range":{"high":"10","low":"1"},"User":"Advanced ","__field_text":"\n // @DisplayName: Sim Speedup\n // @Description: Runs the simulation at multiples of normal speed. Do not use if realtime physics, like RealFlight, is being used\n // @Range: 1 10\n // @User: Advanced "},"SIM_SPR_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the Sprayer simulation","DisplayName":"Sprayer Sim enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Sprayer Sim enable/disable\n // @Description: Allows you to enable (1) or disable (0) the Sprayer simulation\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"SIM_SPR_PUMP":{"Description":"The pin number that the Sprayer pump is connected to. (start at 1)","DisplayName":"Sprayer pump pin","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Sprayer pump pin\n // @Description: The pin number that the Sprayer pump is connected to. (start at 1)\n // @Range: 0 15\n // @User: Advanced"},"SIM_SPR_SPIN":{"Description":"The pin number that the Sprayer spinner servo is connected to. (start at 1)","DisplayName":"Sprayer spinner servo pin","Range":{"high":"15","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Sprayer spinner servo pin\n // @Description: The pin number that the Sprayer spinner servo is connected to. (start at 1)\n // @Range: 0 15\n // @User: Advanced"},"SIM_UART_LOSS":{"Description":"Sets percentage of outgoing byte loss on UARTs","DisplayName":"UART byte loss percentage","Units":"%","User":"Advanced","__field_text":"\n // @DisplayName: UART byte loss percentage\n // @Description: Sets percentage of outgoing byte loss on UARTs\n // @Units: %\n // @User: Advanced"},"SIM_WIND_DIR":{"Description":"Allows you to set wind direction (true deg) in sim","DisplayName":"Simulated Wind direction","Units":"deg","User":"Advanced","__field_text":"\n // @DisplayName: Simulated Wind direction\n // @Description: Allows you to set wind direction (true deg) in sim\n // @Units: deg\n // @User: Advanced"},"SIM_WIND_SPD":{"Description":"Allows you to emulate wind in sim","DisplayName":"Simulated Wind speed","Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Simulated Wind speed\n // @Description: Allows you to emulate wind in sim\n // @Units: m/s\n // @User: Advanced"},"SIM_WIND_TURB":{"Description":"Allows you to emulate random wind variations in sim","DisplayName":"Simulated Wind variation","Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Simulated Wind variation\n // @Description: Allows you to emulate random wind variations in sim\n // @Units: m/s\n // @User: Advanced"},"SIM_WIND_T_":{"Description":"Selects how wind varies from surface to WIND_T_ALT","DisplayName":"Wind Profile Type","User":"Advanced ","Values":{"0":"square law","1":"none","2":"linear-see WIND_T_COEF"},"__field_text":"\n // @DisplayName: Wind Profile Type\n // @Description: Selects how wind varies from surface to WIND_T_ALT\n // @Values: 0:square law,1: none, 2:linear-see WIND_T_COEF\n // @User: Advanced "},"SIM_WIND_T_ALT":{"Description":"Altitude at which wind reaches full strength, decaying from full strength as altitude lowers to ground level","DisplayName":"Full Wind Altitude","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Full Wind Altitude\n // @Description: Altitude at which wind reaches full strength, decaying from full strength as altitude lowers to ground level\n // @Units: m\n // @User: Advanced"},"SIM_WIND_T_COEF":{"Description":"For linear wind profile,wind is reduced by (Altitude-WIND_T_ALT) x this value","DisplayName":"Linear Wind Curve Coeff","User":"Advanced","__field_text":"\n // @DisplayName: Linear Wind Curve Coeff\n // @Description: For linear wind profile,wind is reduced by (Altitude-WIND_T_ALT) x this value\n // @User: Advanced"},"SIM_WOW_PIN":{"Description":"SITL set this simulated pin to true if vehicle is on ground","DisplayName":"Weight on Wheels Pin","User":"Advanced","__field_text":"\n // @DisplayName: Weight on Wheels Pin\n // @Description: SITL set this simulated pin to true if vehicle is on ground\n // @User: Advanced"},"SPRAY_ENABLE":{"Description":"Allows you to enable (1) or disable (0) the sprayer","DisplayName":"Sprayer enable/disable","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Sprayer enable/disable\n // @Description: Allows you to enable (1) or disable (0) the sprayer\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"SPRAY_PUMP_MIN":{"Description":"Minimum pump speed expressed as a percentage","DisplayName":"Pump speed minimum","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Pump speed minimum\n // @Description: Minimum pump speed expressed as a percentage\n // @Units: %\n // @Range: 0 100\n // @User: Standard"},"SPRAY_PUMP_RATE":{"Description":"Desired pump speed when travelling 1m/s expressed as a percentage","DisplayName":"Pump speed","Range":{"high":"100","low":"0"},"Units":"%","User":"Standard","__field_text":"\n // @DisplayName: Pump speed\n // @Description: Desired pump speed when travelling 1m/s expressed as a percentage\n // @Units: %\n // @Range: 0 100\n // @User: Standard"},"SPRAY_SPEED_MIN":{"Description":"Speed minimum at which we will begin spraying","DisplayName":"Speed minimum","Range":{"high":"1000","low":"0"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Speed minimum\n // @Description: Speed minimum at which we will begin spraying\n // @Units: cm/s\n // @Range: 0 1000\n // @User: Standard"},"SPRAY_SPINNER":{"Description":"Spinner's rotation speed in PWM (a higher rate will disperse the spray over a wider area horizontally)","DisplayName":"Spinner rotation speed","Range":{"high":"2000","low":"1000"},"Units":"ms","User":"Standard","__field_text":"\n // @DisplayName: Spinner rotation speed\n // @Description: Spinner's rotation speed in PWM (a higher rate will disperse the spray over a wider area horizontally)\n // @Units: ms\n // @Range: 1000 2000\n // @User: Standard"},"SR0_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR0_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR0_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR1_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR1_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR2_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR2_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR3_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR3_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR4_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR4_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR5_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR5_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_ADSB":{"Description":"MAVLink ADSB stream rate","DisplayName":"ADSB stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: ADSB stream rate\n // @Description: MAVLink ADSB stream rate\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_EXTRA1":{"Description":"MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING","DisplayName":"Extra data type 1 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 1 stream rate\n // @Description: MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2 and PID_TUNING\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_EXTRA2":{"Description":"MAVLink Stream rate of VFR_HUD","DisplayName":"Extra data type 2 stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extra data type 2 stream rate\n // @Description: MAVLink Stream rate of VFR_HUD\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_EXTRA3":{"Description":"MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS","DisplayName":"Extra data type 3 stream rate","__field_text":"\n // @DisplayName: Extra data type 3 stream rate\n // @Description: MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY_STATUS, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, RPM, ESC TELEMETRY,GENERATOR_STATUS, and WINCH_STATUS"},"SR6_EXT_STAT":{"Description":"MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT","DisplayName":"Extended status stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Extended status stream rate\n // @Description: MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_PARAMS":{"Description":"MAVLink Stream rate of PARAM_VALUE","DisplayName":"Parameter stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Parameter stream rate\n // @Description: MAVLink Stream rate of PARAM_VALUE\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_POSITION":{"Description":"MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED","DisplayName":"Position stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Position stream rate\n // @Description: MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_RAW_CTRL":{"Description":"Unused","DisplayName":"Unused","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Unused\n // @Description: Unused\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_RAW_SENS":{"Description":"MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3","DisplayName":"Raw sensor stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: Raw sensor stream rate\n // @Description: MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SR6_RC_CHAN":{"Description":"MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS","DisplayName":"RC Channel stream rate","Increment":"1","Range":{"high":"50","low":"0"},"RebootRequired":"True","Units":"Hz","User":"Advanced","__field_text":"\n // @DisplayName: RC Channel stream rate\n // @Description: MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS\n // @Units: Hz\n // @Range: 0 50\n // @Increment: 1\n // @RebootRequired: True\n // @User: Advanced"},"SRTL_ACCURACY":{"Description":"SmartRTL accuracy. The minimum distance between points.","DisplayName":"SmartRTL accuracy","Range":{"high":"10","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: SmartRTL accuracy\n // @Description: SmartRTL accuracy. The minimum distance between points.\n // @Units: m\n // @Range: 0 10\n // @User: Advanced"},"SRTL_OPTIONS":{"Bitmask":{"2":"Ignore pilot yaw"},"Description":"Bitmask of SmartRTL options.","DisplayName":"SmartRTL options","User":"Standard","__field_text":"\n // @DisplayName: SmartRTL options\n // @Description: Bitmask of SmartRTL options.\n // @Bitmask: 2:Ignore pilot yaw\n // @User: Standard"},"SRTL_POINTS":{"Description":"SmartRTL maximum number of points on path. Set to 0 to disable SmartRTL. 100 points consumes about 3k of memory.","DisplayName":"SmartRTL maximum number of points on path","Range":{"high":"500","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: SmartRTL maximum number of points on path\n // @Description: SmartRTL maximum number of points on path. Set to 0 to disable SmartRTL. 100 points consumes about 3k of memory.\n // @Range: 0 500\n // @User: Advanced\n // @RebootRequired: True"},"STAT_BOOTCNT":{"Description":"Number of times board has been booted","DisplayName":"Boot Count","ReadOnly":"True","User":"Standard","__field_text":"\n // @DisplayName: Boot Count\n // @Description: Number of times board has been booted\n // @ReadOnly: True\n // @User: Standard"},"STAT_FLTTIME":{"Description":"Total FlightTime (seconds)","DisplayName":"Total FlightTime","ReadOnly":"True","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Total FlightTime\n // @Description: Total FlightTime (seconds)\n // @Units: s\n // @ReadOnly: True\n // @User: Standard"},"STAT_RESET":{"Description":"Seconds since January 1st 2016 (Unix epoch+1451606400) since statistics reset (set to 0 to reset statistics)","DisplayName":"Statistics Reset Time","ReadOnly":"True","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Statistics Reset Time\n // @Description: Seconds since January 1st 2016 (Unix epoch+1451606400) since statistics reset (set to 0 to reset statistics)\n // @Units: s\n // @ReadOnly: True\n // @User: Standard"},"STAT_RUNTIME":{"Description":"Total time autopilot has run","DisplayName":"Total RunTime","ReadOnly":"True","Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Total RunTime\n // @Description: Total time autopilot has run\n // @Units: s\n // @ReadOnly: True\n // @User: Standard"},"SUPER_SIMPLE":{"Bitmask":{"0":"SwitchPos1","1":"SwitchPos2","2":"SwitchPos3","3":"SwitchPos4","4":"SwitchPos5","5":"SwitchPos6"},"Description":"Bitmask to enable Super Simple mode for some flight modes. Setting this to Disabled(0) will disable Super Simple Mode. The bitmask is for flight mode switch positions","DisplayName":"Super Simple Mode","User":"Standard","__field_text":"\n // @DisplayName: Super Simple Mode\n // @Description: Bitmask to enable Super Simple mode for some flight modes. Setting this to Disabled(0) will disable Super Simple Mode. The bitmask is for flight mode switch positions\n // @Bitmask: 0:SwitchPos1, 1:SwitchPos2, 2:SwitchPos3, 3:SwitchPos4, 4:SwitchPos5, 5:SwitchPos6\n // @User: Standard"},"SURFTRAK_MODE":{"Description":"set which surface to track in surface tracking","DisplayName":"Surface Tracking Mode","RebootRequired":"True","User":"Advanced","Values":{"0":"Do not track","1":"Ground","2":"Ceiling"},"__field_text":"\n // @DisplayName: Surface Tracking Mode\n // @Description: set which surface to track in surface tracking\n // @Values: 0:Do not track, 1:Ground, 2:Ceiling\n // @User: Advanced\n // @RebootRequired: True"},"SURFTRAK_TC":{"Description":"Time to achieve 63.2% of the surface altitude measurement change. If 0 filtering is disabled","DisplayName":"Surface Tracking Filter Time Constant","Range":{"high":"5","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Surface Tracking Filter Time Constant\n // @Description: Time to achieve 63.2% of the surface altitude measurement change. If 0 filtering is disabled\n // @Units: s\n // @Range: 0 5\n // @User: Advanced"},"SYSID_ENFORCE":{"Description":"This controls whether packets from other than the expected GCS system ID will be accepted","DisplayName":"GCS sysid enforcement","User":"Advanced","Values":{"0":"NotEnforced","1":"Enforced"},"__field_text":"\n // @DisplayName: GCS sysid enforcement\n // @Description: This controls whether packets from other than the expected GCS system ID will be accepted\n // @Values: 0:NotEnforced,1:Enforced\n // @User: Advanced"},"SYSID_MYGCS":{"Description":"Allows restricting radio overrides to only come from my ground station","DisplayName":"My ground station number","Increment":"1","Range":{"high":"255","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: My ground station number\n // @Description: Allows restricting radio overrides to only come from my ground station\n // @Range: 1 255\n // @Increment: 1\n // @User: Advanced"},"SYSID_THISMAV":{"Description":"Allows setting an individual MAVLink system id for this vehicle to distinguish it from others on the same network","DisplayName":"MAVLink system ID of this vehicle","Range":{"high":"255","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: MAVLink system ID of this vehicle\n // @Description: Allows setting an individual MAVLink system id for this vehicle to distinguish it from others on the same network\n // @Range: 1 255\n // @User: Advanced"},"TCAL_BARO_EXP":{"Description":"Learned exponent for barometer temperature correction","DisplayName":"Temperature Calibration barometer exponent","ReadOnly":"True","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Temperature Calibration barometer exponent\n // @Description: Learned exponent for barometer temperature correction\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"TCAL_ENABLED":{"Description":"Enable temperature calibration. Set to 0 to disable. Set to 1 to use learned values. Set to 2 to learn new values and use the values","DisplayName":"Temperature calibration enable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"EnableAndLearn"},"__field_text":"\n // @DisplayName: Temperature calibration enable\n // @Description: Enable temperature calibration. Set to 0 to disable. Set to 1 to use learned values. Set to 2 to learn new values and use the values\n // @Values: 0:Disabled,1:Enabled,2:EnableAndLearn\n // @User: Advanced"},"TCAL_TEMP_MAX":{"Description":"Maximum learned temperature. This is automatically set by the learning process","DisplayName":"Temperature calibration max learned temperature","ReadOnly":"True","Units":"degC","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Temperature calibration max learned temperature\n // @Description: Maximum learned temperature. This is automatically set by the learning process\n // @Units: degC\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"TCAL_TEMP_MIN":{"Description":"Minimum learned temperature. This is automatically set by the learning process","DisplayName":"Temperature calibration min learned temperature","ReadOnly":"True","Units":"degC","User":"Advanced","Volatile":"True","__field_text":"\n // @DisplayName: Temperature calibration min learned temperature\n // @Description: Minimum learned temperature. This is automatically set by the learning process\n // @Units: degC\n // @ReadOnly: True\n // @Volatile: True\n // @User: Advanced"},"TELEM_DELAY":{"Description":"The amount of time (in seconds) to delay radio telemetry to prevent an Xbee bricking on power up","DisplayName":"Telemetry startup delay","Increment":"1","Range":{"high":"30","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: Telemetry startup delay\n // @Description: The amount of time (in seconds) to delay radio telemetry to prevent an Xbee bricking on power up\n // @User: Advanced\n // @Units: s\n // @Range: 0 30\n // @Increment: 1"},"TEMP1_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP1_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP1_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP1_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP1_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP1_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP1_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP1_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP1_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP1_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP1_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP2_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP2_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP2_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP2_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP2_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP2_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP2_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP2_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP2_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP2_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP2_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP3_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP3_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP3_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP3_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP3_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP3_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP3_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP3_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP3_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP3_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP3_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP4_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP4_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP4_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP4_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP4_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP4_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP4_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP4_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP4_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP4_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP4_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP5_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP5_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP5_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP5_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP5_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP5_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP5_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP5_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP5_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP5_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP5_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP6_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP6_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP6_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP6_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP6_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP6_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP6_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP6_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP6_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP6_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP6_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP7_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP7_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP7_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP7_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP7_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP7_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP7_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP7_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP7_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP7_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP7_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP8_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP8_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP8_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP8_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP8_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP8_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP8_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP8_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP8_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP8_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP8_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP9_A0":{"Description":"a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 0th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 0th polynomial coefficient\n // @Description: a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP9_A1":{"Description":"a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 1st polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 1st polynomial coefficient\n // @Description: a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP9_A2":{"Description":"a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 2nd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 2nd polynomial coefficient\n // @Description: a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP9_A3":{"Description":"a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 3rd polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 3rd polynomial coefficient\n // @Description: a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP9_A4":{"Description":"a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4","DisplayName":"Temperature sensor analog 4th polynomial coefficient","__field_text":"\n // @DisplayName: Temperature sensor analog 4th polynomial coefficient\n // @Description: a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4"},"TEMP9_ADDR":{"Description":"Temperature sensor address, typically used for I2C address","DisplayName":"Temperature sensor address","Range":{"high":"127","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor address\n // @Description: Temperature sensor address, typically used for I2C address\n // @Range: 0 127\n // @User: Advanced\n // @RebootRequired: True"},"TEMP9_BUS":{"Description":"Temperature sensor bus number, typically used to select from multiple I2C buses","DisplayName":"Temperature sensor bus","Range":{"high":"3","low":"0"},"RebootRequired":"True","User":"Advanced","__field_text":"\n // @DisplayName: Temperature sensor bus\n // @Description: Temperature sensor bus number, typically used to select from multiple I2C buses\n // @Range: 0 3\n // @User: Advanced\n // @RebootRequired: True"},"TEMP9_PIN":{"Description":"Sets the analog input pin that should be used for temprature monitoring.","DisplayName":"Temperature sensor analog voltage sensing pin","User":"Standard","Values":{"2":"Pixhawk/Pixracer/Navio2/Pixhawk2_PM1","5":"Navigator","13":"Pixhawk2_PM2/CubeOrange_PM2","14":"CubeOrange","16":"Durandal","100":"PX4-v1","-1":"Disabled"},"__field_text":"\n // @DisplayName: Temperature sensor analog voltage sensing pin\n // @Description: Sets the analog input pin that should be used for temprature monitoring.\n // @Values: -1:Disabled, 2:Pixhawk/Pixracer/Navio2/Pixhawk2_PM1, 5:Navigator, 13:Pixhawk2_PM2/CubeOrange_PM2, 14:CubeOrange, 16:Durandal, 100:PX4-v1\n // @User: Standard"},"TEMP9_SRC":{"Description":"Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.","DisplayName":"Sensor Source","User":"Standard","Values":{"0":"None","1":"ESC","2":"Motor(not implemented yet)","3":"Battery Index","4":"Battery ID/SerialNumber","5":"CAN based Pitot tube"},"__field_text":"\n // @DisplayName: Sensor Source\n // @Description: Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.\n // @Values: 0: None, 1:ESC, 2:Motor(not implemented yet), 3:Battery Index, 4:Battery ID/SerialNumber, 5: CAN based Pitot tube\n // @User: Standard"},"TEMP9_SRC_ID":{"Description":"Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.","DisplayName":"Sensor Source Identification","__field_text":"\n // @DisplayName: Sensor Source Identification\n // @Description: Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42."},"TEMP9_TYPE":{"Description":"Enables temperature sensors","DisplayName":"Temperature Sensor Type","RebootRequired":"True","User":"Standard","Values":{"0":"Disabled","1":"TSYS01","2":"MCP9600","3":"MAX31865","4":"TSYS03","5":"Analog"},"__field_text":"\n // @DisplayName: Temperature Sensor Type\n // @Description: Enables temperature sensors\n // @Values: 0:Disabled, 1:TSYS01, 2:MCP9600, 3:MAX31865, 4:TSYS03, 5:Analog\n // @User: Standard\n // @RebootRequired: True"},"TEMP_LOG":{"Description":"Enables temperature sensor logging","DisplayName":"Logging","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Logging\n // @Description: Enables temperature sensor logging\n // @Values: 0:Disabled, 1:Enabled\n // @User: Standard"},"TERRAIN_ENABLE":{"Description":"enable terrain data. This enables the vehicle storing a database of terrain data on the SD card. The terrain data is requested from the ground station as needed, and stored for later use on the SD card. To be useful the ground station must support TERRAIN_REQUEST messages and have access to a terrain database, such as the SRTM database.","DisplayName":"Terrain data enable","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Terrain data enable\n // @Description: enable terrain data. This enables the vehicle storing a database of terrain data on the SD card. The terrain data is requested from the ground station as needed, and stored for later use on the SD card. To be useful the ground station must support TERRAIN_REQUEST messages and have access to a terrain database, such as the SRTM database.\n // @Values: 0:Disable,1:Enable\n // @User: Advanced"},"TERRAIN_MARGIN":{"Description":"Margin in centi-meters to accept terrain data from the GCS. This can be used to allow older terrain data generated with less accurate latitude/longitude scaling to be used","DisplayName":"Acceptance margin","Range":{"high":"50000","low":"0.05"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Acceptance margin\n // @Description: Margin in centi-meters to accept terrain data from the GCS. This can be used to allow older terrain data generated with less accurate latitude/longitude scaling to be used\n // @Units: m\n // @Range: 0.05 50000\n // @User: Advanced"},"TERRAIN_OFS_MAX":{"Description":"The maximum adjustment of terrain altitude based on the assumption that the vehicle is on the ground when it is armed. When the vehicle is armed the location of the vehicle is recorded, and when terrain data is available for that location a height adjustment for terrain data is calculated that aligns the terrain height at that location with the altitude recorded at arming. This height adjustment is applied to all terrain data. This parameter clamps the amount of adjustment. A value of zero disables the use of terrain height adjustment.","DisplayName":"Terrain reference offset maximum","Range":{"high":"50","low":"0"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Terrain reference offset maximum\n // @Description: The maximum adjustment of terrain altitude based on the assumption that the vehicle is on the ground when it is armed. When the vehicle is armed the location of the vehicle is recorded, and when terrain data is available for that location a height adjustment for terrain data is calculated that aligns the terrain height at that location with the altitude recorded at arming. This height adjustment is applied to all terrain data. This parameter clamps the amount of adjustment. A value of zero disables the use of terrain height adjustment.\n // @Units: m\n // @Range: 0 50\n // @User: Advanced"},"TERRAIN_OPTIONS":{"Bitmask":{"0":"Disable Download"},"Description":"Options to change behaviour of terrain system","DisplayName":"Terrain options","User":"Advanced","__field_text":"\n // @DisplayName: Terrain options\n // @Description: Options to change behaviour of terrain system\n // @Bitmask: 0:Disable Download\n // @User: Advanced"},"TERRAIN_SPACING":{"Description":"Distance between terrain grid points in meters. This controls the horizontal resolution of the terrain data that is stored on te SD card and requested from the ground station. If your GCS is using the ArduPilot SRTM database like Mission Planner or MAVProxy, then a resolution of 100 meters is appropriate. Grid spacings lower than 100 meters waste SD card space if the GCS cannot provide that resolution. The grid spacing also controls how much data is kept in memory during flight. A larger grid spacing will allow for a larger amount of data in memory. A grid spacing of 100 meters results in the vehicle keeping 12 grid squares in memory with each grid square having a size of 2.7 kilometers by 3.2 kilometers. Any additional grid squares are stored on the SD once they are fetched from the GCS and will be loaded as needed.","DisplayName":"Terrain grid spacing","Increment":"1","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Terrain grid spacing\n // @Description: Distance between terrain grid points in meters. This controls the horizontal resolution of the terrain data that is stored on te SD card and requested from the ground station. If your GCS is using the ArduPilot SRTM database like Mission Planner or MAVProxy, then a resolution of 100 meters is appropriate. Grid spacings lower than 100 meters waste SD card space if the GCS cannot provide that resolution. The grid spacing also controls how much data is kept in memory during flight. A larger grid spacing will allow for a larger amount of data in memory. A grid spacing of 100 meters results in the vehicle keeping 12 grid squares in memory with each grid square having a size of 2.7 kilometers by 3.2 kilometers. Any additional grid squares are stored on the SD once they are fetched from the GCS and will be loaded as needed.\n // @Units: m\n // @Increment: 1\n // @User: Advanced"},"THROW_ALT_MAX":{"Description":"Maximum altitude under which Throw mode will detect a throw or a drop - 0 to disable the check","DisplayName":"Throw mode maximum altitude","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Throw mode maximum altitude\n // @Description: Maximum altitude under which Throw mode will detect a throw or a drop - 0 to disable the check\n // @Units: m\n // @User: Advanced"},"THROW_ALT_MIN":{"Description":"Minimum altitude above which Throw mode will detect a throw or a drop - 0 to disable the check","DisplayName":"Throw mode minimum altitude","Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Throw mode minimum altitude\n // @Description: Minimum altitude above which Throw mode will detect a throw or a drop - 0 to disable the check\n // @Units: m\n // @User: Advanced"},"THROW_MOT_START":{"Description":"Used by Throw mode. Controls whether motors will run at the speed set by MOT_SPIN_MIN or will be stopped when armed and waiting for the throw.","DisplayName":"Start motors before throwing is detected","User":"Standard","Values":{"0":"Stopped","1":"Running"},"__field_text":"\n // @DisplayName: Start motors before throwing is detected\n // @Description: Used by Throw mode. Controls whether motors will run at the speed set by MOT_SPIN_MIN or will be stopped when armed and waiting for the throw.\n // @Values: 0:Stopped,1:Running\n // @User: Standard"},"THROW_NEXTMODE":{"Description":"Vehicle will switch to this mode after the throw is successfully completed. Default is to stay in throw mode (18)","DisplayName":"Throw mode's follow up mode","User":"Standard","Values":{"3":"Auto","4":"Guided","5":"LOITER","6":"RTL","9":"Land","17":"Brake","18":"Throw"},"__field_text":"\n // @DisplayName: Throw mode's follow up mode\n // @Description: Vehicle will switch to this mode after the throw is successfully completed. Default is to stay in throw mode (18)\n // @Values: 3:Auto,4:Guided,5:LOITER,6:RTL,9:Land,17:Brake,18:Throw\n // @User: Standard"},"THROW_TYPE":{"Description":"Used by Throw mode. Specifies whether Copter is thrown upward or dropped.","DisplayName":"Type of Type","User":"Standard","Values":{"0":"Upward Throw","1":"Drop"},"__field_text":"\n // @DisplayName: Type of Type\n // @Description: Used by Throw mode. Specifies whether Copter is thrown upward or dropped.\n // @Values: 0:Upward Throw,1:Drop\n // @User: Standard"},"THR_DZ":{"Description":"The deadzone above and below mid throttle in PWM microseconds. Used in AltHold, Loiter, PosHold flight modes","DisplayName":"Throttle deadzone","Increment":"1","Range":{"high":"300","low":"0"},"Units":"PWM","User":"Standard","__field_text":"\n // @DisplayName: Throttle deadzone\n // @Description: The deadzone above and below mid throttle in PWM microseconds. Used in AltHold, Loiter, PosHold flight modes\n // @User: Standard\n // @Range: 0 300\n // @Units: PWM\n // @Increment: 1"},"TKOFF_RPM_MAX":{"Description":"Takeoff is not permitted until motors report no more than this RPM. Set to zero to disable check","DisplayName":"Takeoff Check RPM maximum","Range":{"high":"10000","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Takeoff Check RPM maximum\n // @Description: Takeoff is not permitted until motors report no more than this RPM. Set to zero to disable check\n // @Range: 0 10000\n // @User: Standard"},"TKOFF_RPM_MIN":{"Description":"Takeoff is not permitted until motors report at least this RPM. Set to zero to disable check","DisplayName":"Takeoff Check RPM minimum","Range":{"high":"10000","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Takeoff Check RPM minimum\n // @Description: Takeoff is not permitted until motors report at least this RPM. Set to zero to disable check\n // @Range: 0 10000\n // @User: Standard"},"TKOFF_SLEW_TIME":{"Description":"Time to slew the throttle from minimum to maximum while checking for a succsessful takeoff.","DisplayName":"Slew time of throttle during take-off","Range":{"high":"5.0","low":"0.25"},"Units":"s","User":"Standard","__field_text":"\n // @DisplayName: Slew time of throttle during take-off\n // @Description: Time to slew the throttle from minimum to maximum while checking for a succsessful takeoff.\n // @Units: s\n // @Range: 0.25 5.0\n // @User: Standard"},"TKOFF_THR_MAX":{"Description":"Takeoff maximum throttle allowed before controllers assume the aircraft is airborne during the takeoff process.","DisplayName":"Takeoff maximum throttle during take-off ramp up","Range":{"high":"0.9","low":"0.0"},"User":"Advanced","__field_text":"\n // @DisplayName: Takeoff maximum throttle during take-off ramp up\n // @Description: Takeoff maximum throttle allowed before controllers assume the aircraft is airborne during the takeoff process.\n // @Range: 0.0 0.9\n // @User: Advanced"},"TMODE_ACTION1":{"Description":"This is the action taken when the left action button is pressed","DisplayName":"Tmode action 1","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 1\n // @Description: This is the action taken when the left action button is pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ACTION2":{"Description":"This is the action taken when the right action button is pressed","DisplayName":"Tmode action 2","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 2\n // @Description: This is the action taken when the right action button is pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ACTION3":{"Description":"This is the action taken when the power button is pressed","DisplayName":"Tmode action 3","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 3\n // @Description: This is the action taken when the power button is pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ACTION4":{"Description":"This is the action taken when the left action button is pressed while the left (Mode) button is held down","DisplayName":"Tmode action 4","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 4\n // @Description: This is the action taken when the left action button is pressed while the left (Mode) button is held down\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ACTION5":{"Description":"This is the action taken when the right action is pressed while the left (Mode) button is held down","DisplayName":"Tmode action 5","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 5\n // @Description: This is the action taken when the right action is pressed while the left (Mode) button is held down\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ACTION6":{"Description":"This is the action taken when the power button is pressed while the left (Mode) button is held down","DisplayName":"Tmode action 6","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode action 6\n // @Description: This is the action taken when the power button is pressed while the left (Mode) button is held down\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_ENABLE":{"Description":"tmode (or \"toy\" mode) gives a simplified user interface designed for mass market drones. Version1 is for the SkyViper V2450GPS. Version2 is for the F412 based boards","DisplayName":"tmode enable ","User":"Advanced","Values":{"0":"Disabled","1":"EnableVersion1","2":"EnableVersion2"},"__field_text":"\n // @DisplayName: tmode enable \n // @Description: tmode (or \"toy\" mode) gives a simplified user interface designed for mass market drones. Version1 is for the SkyViper V2450GPS. Version2 is for the F412 based boards\n // @Values: 0:Disabled,1:EnableVersion1,2:EnableVersion2\n // @User: Advanced"},"TMODE_FLAGS":{"Bitmask":{"0":"DisarmOnLowThrottle","1":"ArmOnHighThrottle","2":"UpgradeToLoiter","3":"RTLStickCancel"},"Description":"Bitmask of flags to change the behaviour of tmode. DisarmOnLowThrottle means to disarm if throttle is held down for 1 second when landed. ArmOnHighThrottle means to arm if throttle is above 80% for 1 second. UpgradeToLoiter means to allow takeoff in LOITER mode by switching to ALT_HOLD, then auto-upgrading to LOITER once GPS is available. RTLStickCancel means that on large stick inputs in RTL mode that LOITER mode is engaged","DisplayName":"Tmode flags","User":"Standard","__field_text":"\n // @DisplayName: Tmode flags\n // @Description: Bitmask of flags to change the behaviour of tmode. DisarmOnLowThrottle means to disarm if throttle is held down for 1 second when landed. ArmOnHighThrottle means to arm if throttle is above 80% for 1 second. UpgradeToLoiter means to allow takeoff in LOITER mode by switching to ALT_HOLD, then auto-upgrading to LOITER once GPS is available. RTLStickCancel means that on large stick inputs in RTL mode that LOITER mode is engaged\n // @Bitmask: 0:DisarmOnLowThrottle,1:ArmOnHighThrottle,2:UpgradeToLoiter,3:RTLStickCancel\n // @User: Standard"},"TMODE_LEFT":{"Description":"This is the action taken when the left (Mode) button is pressed","DisplayName":"Tmode left action","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode left action\n // @Description: This is the action taken when the left (Mode) button is pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_LEFT_LONG":{"Description":"This is the action taken when the left (Mode) button is long-pressed","DisplayName":"Tmode left long action","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest","24":"ModeFlowHold"},"__field_text":"\n // @DisplayName: Tmode left long action\n // @Description: This is the action taken when the left (Mode) button is long-pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest,24:ModeFlowHold\n // @User: Standard"},"TMODE_LOAD_FILT":{"Description":"This filters the load test output. A value of 1 means no filter. 2 means values are repeated once. 3 means values are repeated 3 times, etc","DisplayName":"Load test filter","Range":{"high":"100","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Load test filter\n // @Description: This filters the load test output. A value of 1 means no filter. 2 means values are repeated once. 3 means values are repeated 3 times, etc\n // @Range: 0 100\n // @User: Advanced"},"TMODE_LOAD_MUL":{"Description":"This scales the load test output, as a value between 0 and 1","DisplayName":"Load test multiplier","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Load test multiplier\n // @Description: This scales the load test output, as a value between 0 and 1\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Advanced"},"TMODE_LOAD_TYPE":{"Description":"This sets the type of load test","DisplayName":"Load test type","User":"Advanced","Values":{"0":"ConstantThrust","1":"LogReplay1","2":"LogReplay2"},"__field_text":"\n // @DisplayName: Load test type\n // @Description: This sets the type of load test\n // @Values: 0:ConstantThrust,1:LogReplay1,2:LogReplay2\n // @User: Advanced"},"TMODE_MODE1":{"Description":"This is the initial mode when the vehicle is first turned on. This mode is assumed to not require GPS","DisplayName":"Tmode first mode","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"FlowHold"},"__field_text":"\n // @DisplayName: Tmode first mode\n // @Description: This is the initial mode when the vehicle is first turned on. This mode is assumed to not require GPS\n // @Values: 0:Stabilize,1:Acro,2:AltHold,3:Auto,4:Guided,5:Loiter,6:RTL,7:Circle,9:Land,11:Drift,13:Sport,14:Flip,15:AutoTune,16:PosHold,17:Brake,18:Throw,19:Avoid_ADSB,20:Guided_NoGPS,21:FlowHold\n // @User: Standard"},"TMODE_MODE2":{"Description":"This is the secondary mode. This mode is assumed to require GPS","DisplayName":"Tmode second mode","User":"Standard","Values":{"0":"Stabilize","1":"Acro","2":"AltHold","3":"Auto","4":"Guided","5":"Loiter","6":"RTL","7":"Circle","9":"Land","11":"Drift","13":"Sport","14":"Flip","15":"AutoTune","16":"PosHold","17":"Brake","18":"Throw","19":"Avoid_ADSB","20":"Guided_NoGPS","21":"FlowHold"},"__field_text":"\n // @DisplayName: Tmode second mode\n // @Description: This is the secondary mode. This mode is assumed to require GPS\n // @Values: 0:Stabilize,1:Acro,2:AltHold,3:Auto,4:Guided,5:Loiter,6:RTL,7:Circle,9:Land,11:Drift,13:Sport,14:Flip,15:AutoTune,16:PosHold,17:Brake,18:Throw,19:Avoid_ADSB,20:Guided_NoGPS,21:FlowHold\n // @User: Standard"},"TMODE_RIGHT":{"Description":"This is the action taken when the right (Return) button is pressed","DisplayName":"Tmode right action","User":"Standard","Values":{"0":"None","1":"TakePhoto","2":"ToggleVideo","3":"ModeAcro","4":"ModeAltHold","5":"ModeAuto","6":"ModeLoiter","7":"ModeRTL","8":"ModeCircle","9":"ModeLand","10":"ModeDrift","11":"ModeSport","12":"ModeAutoTune","13":"ModePosHold","14":"ModeBrake","15":"ModeThrow","16":"Flip","17":"ModeStabilize","18":"Disarm","19":"ToggleMode","20":"Arm-Land-RTL","21":"ToggleSimpleMode","22":"ToggleSuperSimpleMode","23":"MotorLoadTest"},"__field_text":"\n // @DisplayName: Tmode right action\n // @Description: This is the action taken when the right (Return) button is pressed\n // @Values: 0:None,1:TakePhoto,2:ToggleVideo,3:ModeAcro,4:ModeAltHold,5:ModeAuto,6:ModeLoiter,7:ModeRTL,8:ModeCircle,9:ModeLand,10:ModeDrift,11:ModeSport,12:ModeAutoTune,13:ModePosHold,14:ModeBrake,15:ModeThrow,16:Flip,17:ModeStabilize,18:Disarm,19:ToggleMode,20:Arm-Land-RTL,21:ToggleSimpleMode,22:ToggleSuperSimpleMode,23:MotorLoadTest\n // @User: Standard"},"TMODE_TMAX":{"Description":"This sets the thrust multiplier when voltage is low","DisplayName":"Max thrust multiplier","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Max thrust multiplier\n // @Description: This sets the thrust multiplier when voltage is low\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Advanced"},"TMODE_TMIN":{"Description":"This sets the thrust multiplier when voltage is high","DisplayName":"Min thrust multiplier","Increment":"0.01","Range":{"high":"1","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Min thrust multiplier\n // @Description: This sets the thrust multiplier when voltage is high\n // @Range: 0 1\n // @Increment: 0.01\n // @User: Advanced"},"TMODE_TRIM_AUTO":{"Description":"This is the amount of automatic stick trim that can be applied when disarmed with sticks not moving. It is a PWM limit value away from 1500","DisplayName":"Stick auto trim limit","Range":{"high":"100","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Stick auto trim limit\n // @Description: This is the amount of automatic stick trim that can be applied when disarmed with sticks not moving. It is a PWM limit value away from 1500\n // @Range: 0 100\n // @User: Standard"},"TMODE_VMAX":{"Description":"This is the battery voltage above which thrust min is used","DisplayName":"Max voltage for output limiting","Increment":"0.01","Range":{"high":"5","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Max voltage for output limiting\n // @Description: This is the battery voltage above which thrust min is used\n // @Range: 0 5\n // @Increment: 0.01\n // @User: Advanced"},"TMODE_VMIN":{"Description":"This is the battery voltage below which no output limiting is done","DisplayName":"Min voltage for output limiting","Increment":"0.01","Range":{"high":"5","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: Min voltage for output limiting\n // @Description: This is the battery voltage below which no output limiting is done\n // @Range: 0 5\n // @Increment: 0.01\n // @User: Advanced"},"TOFSENSE_ID1":{"Description":"First TOFSENSE-M sensor ID. Leave this at 0 to accept all IDs and if only one sensor is present. You can change ID of sensor from NAssistant Software","DisplayName":"TOFSENSE-M First ID","Range":{"high":"255","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M First ID\n // @Description: First TOFSENSE-M sensor ID. Leave this at 0 to accept all IDs and if only one sensor is present. You can change ID of sensor from NAssistant Software\n // @Range: 1 255\n // @User: Standard"},"TOFSENSE_ID2":{"Description":"Second TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software","DisplayName":"TOFSENSE-M Second ID","Range":{"high":"255","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M Second ID\n // @Description: Second TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software\n // @Range: 1 255\n // @User: Standard"},"TOFSENSE_ID3":{"Description":"Third TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software","DisplayName":"TOFSENSE-M Thir ID","Range":{"high":"255","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M Thir ID\n // @Description: Third TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software\n // @Range: 1 255\n // @User: Standard"},"TOFSENSE_INST1":{"Description":"First TOFSENSE-M sensors backend Instance. Setting this to 1 will pick the first backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)","DisplayName":"TOFSENSE-M First Instance","Range":{"high":"3","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M First Instance\n // @Description: First TOFSENSE-M sensors backend Instance. Setting this to 1 will pick the first backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)\n // @Range: 1 3\n // @User: Standard"},"TOFSENSE_INST2":{"Description":"Second TOFSENSE-M sensors backend Instance. Setting this to 2 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)","DisplayName":"TOFSENSE-M Second Instance","Range":{"high":"3","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M Second Instance\n // @Description: Second TOFSENSE-M sensors backend Instance. Setting this to 2 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)\n // @Range: 1 3\n // @User: Standard"},"TOFSENSE_INST3":{"Description":"Third TOFSENSE-M sensors backend Instance. Setting this to 3 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)","DisplayName":"TOFSENSE-M Third Instance","Range":{"high":"3","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M Third Instance\n // @Description: Third TOFSENSE-M sensors backend Instance. Setting this to 3 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)\n // @Range: 1 3\n // @User: Standard"},"TOFSENSE_MODE":{"Description":"TOFSENSE-M mode to be used. 0 for 8x8 mode. 1 for 4x4 mode","DisplayName":"TOFSENSE-M mode to be used","User":"Standard","Values":{"0":"8x8 mode","1":"4x4 mode"},"__field_text":"\n // @DisplayName: TOFSENSE-M mode to be used\n // @Description: TOFSENSE-M mode to be used. 0 for 8x8 mode. 1 for 4x4 mode\n // @Values: 0: 8x8 mode, 1: 4x4 mode\n // @User: Standard"},"TOFSENSE_NO":{"Description":"Number of TOFSENSE-M CAN sensors connected","DisplayName":"TOFSENSE-M Connected","Range":{"high":"3","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M Connected\n // @Description: Number of TOFSENSE-M CAN sensors connected\n // @Range: 1 3\n // @User: Standard"},"TOFSENSE_PRX":{"Description":"Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)","DisplayName":"TOFSENSE-M to be used as Proximity sensor","User":"Standard","Values":{"0":"Set as Rangefinder","1":"Set as Proximity sensor"},"__field_text":"\n // @DisplayName: TOFSENSE-M to be used as Proximity sensor\n // @Description: Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)\n // @Values: 0:Set as Rangefinder, 1:Set as Proximity sensor\n // @User: Standard"},"TOFSENSE_S1_BR":{"Description":"Serial Port baud rate. Sensor baud rate can be changed from Nassistant software","DisplayName":"TOFSENSE-M serial port baudrate","User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M serial port baudrate\n // @Description: Serial Port baud rate. Sensor baud rate can be changed from Nassistant software\n // @User: Standard"},"TOFSENSE_S1_PRX":{"Description":"Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)","DisplayName":"TOFSENSE-M to be used as Proximity sensor","User":"Standard","Values":{"0":"Set as Rangefinder","1":"Set as Proximity sensor"},"__field_text":"\n // @DisplayName: TOFSENSE-M to be used as Proximity sensor\n // @Description: Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)\n // @Values: 0:Set as Rangefinder, 1:Set as Proximity sensor\n // @User: Standard"},"TOFSENSE_S1_SP":{"Description":"UART instance sensor is connected to. Set 1 if sensor is connected to the port with fist SERIALx_PROTOCOL = 28. ","DisplayName":"TOFSENSE-M serial port config","Range":{"high":"4","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: TOFSENSE-M serial port config\n // @Description: UART instance sensor is connected to. Set 1 if sensor is connected to the port with fist SERIALx_PROTOCOL = 28. \n // @Range: 1 4\n // @User: Standard"},"TRIK_ACT_FN":{"Description":"Setting an RC channel's _OPTION to this value will use it for trick action (abort,announce,execute)","DisplayName":"Trik Action Scripting Function","Range":{"high":"307","low":"301"},"__field_text":"\n // @DisplayName: Trik Action Scripting Function\n // @Description: Setting an RC channel's _OPTION to this value will use it for trick action (abort,announce,execute)\n // @Range: 301 307"},"TRIK_COUNT":{"Description":"Number of tricks which can be selected over the range of the trik selection RC channel","DisplayName":"Trik Count","Range":{"high":"11","low":"1"},"__field_text":"\n // @DisplayName: Trik Count\n // @Description: Number of tricks which can be selected over the range of the trik selection RC channel\n // @Range: 1 11"},"TRIK_ENABLE":{"Description":"Enables Tricks on Switch. TRIK params hidden until enabled","DisplayName":"Tricks on Switch Enable","__field_text":"\n // @DisplayName: Tricks on Switch Enable\n // @Description: Enables Tricks on Switch. TRIK params hidden until enabled"},"TRIK_SEL_FN":{"Description":"Setting an RC channel's _OPTION to this value will use it for trick selection","DisplayName":"Trik Selection Scripting Function","Range":{"high":"307","low":"301"},"__field_text":"\n // @DisplayName: Trik Selection Scripting Function\n // @Description: Setting an RC channel's _OPTION to this value will use it for trick selection\n // @Range: 301 307"},"TUNE":{"Description":"Controls which parameters (normally PID gains) are being tuned with transmitter's channel 6 knob","DisplayName":"Channel 6 Tuning","User":"Standard","Values":{"0":"None","1":"Stab Roll/Pitch kP","3":"Stab Yaw kP","4":"Rate Roll/Pitch kP","5":"Rate Roll/Pitch kI","6":"Rate Yaw kP","7":"Throttle Rate kP","10":"WP Speed","12":"Loiter Pos kP","13":"Heli Ext Gyro","14":"AltHold kP","21":"Rate Roll/Pitch kD","22":"Velocity XY kP","25":"Acro Roll/Pitch deg/s","26":"Rate Yaw kD","28":"Velocity XY kI","34":"Throttle Accel kP","35":"Throttle Accel kI","36":"Throttle Accel kD","38":"Declination","39":"Circle Rate","40":"Acro Yaw deg/s","45":"RC Feel","46":"Rate Pitch kP","47":"Rate Pitch kI","48":"Rate Pitch kD","49":"Rate Roll kP","50":"Rate Roll kI","51":"Rate Roll kD","52":"Rate Pitch FF","53":"Rate Roll FF","54":"Rate Yaw FF","55":"Motor Yaw Headroom","56":"Rate Yaw Filter","58":"SysID Magnitude","59":"PSC Angle Max"},"__field_text":"\n // @DisplayName: Channel 6 Tuning\n // @Description: Controls which parameters (normally PID gains) are being tuned with transmitter's channel 6 knob\n // @User: Standard\n // @Values: 0:None,1:Stab Roll/Pitch kP,4:Rate Roll/Pitch kP,5:Rate Roll/Pitch kI,21:Rate Roll/Pitch kD,3:Stab Yaw kP,6:Rate Yaw kP,26:Rate Yaw kD,56:Rate Yaw Filter,55:Motor Yaw Headroom,14:AltHold kP,7:Throttle Rate kP,34:Throttle Accel kP,35:Throttle Accel kI,36:Throttle Accel kD,12:Loiter Pos kP,22:Velocity XY kP,28:Velocity XY kI,10:WP Speed,25:Acro Roll/Pitch deg/s,40:Acro Yaw deg/s,45:RC Feel,13:Heli Ext Gyro,38:Declination,39:Circle Rate,46:Rate Pitch kP,47:Rate Pitch kI,48:Rate Pitch kD,49:Rate Roll kP,50:Rate Roll kI,51:Rate Roll kD,52:Rate Pitch FF,53:Rate Roll FF,54:Rate Yaw FF,58:SysID Magnitude,59:PSC Angle Max"},"TUNE_MAX":{"Description":"Maximum value that the parameter currently being tuned with the transmitter's channel 6 knob will be set to","DisplayName":"Tuning maximum","User":"Standard","__field_text":"\n // @DisplayName: Tuning maximum\n // @Description: Maximum value that the parameter currently being tuned with the transmitter's channel 6 knob will be set to\n // @User: Standard"},"TUNE_MIN":{"Description":"Minimum value that the parameter currently being tuned with the transmitter's channel 6 knob will be set to","DisplayName":"Tuning minimum","User":"Standard","__field_text":"\n // @DisplayName: Tuning minimum\n // @Description: Minimum value that the parameter currently being tuned with the transmitter's channel 6 knob will be set to\n // @User: Standard"},"VIEP_CAM_SWHIGH":{"Description":"Camera selection when switch is in high position","DisplayName":"ViewPro Camera For Switch High","User":"Standard","Values":{"0":"No change in camera selection","1":"EO1","2":"IR thermal","3":"EO1 + IR Picture-in-picture","4":"IR + EO1 Picture-in-picture","5":"Fusion","6":"IR1 13mm","7":"IR2 52mm"},"__field_text":"\n // @DisplayName: ViewPro Camera For Switch High\n // @Description: Camera selection when switch is in high position\n // @Values: 0:No change in camera selection, 1:EO1, 2:IR thermal, 3:EO1 + IR Picture-in-picture, 4:IR + EO1 Picture-in-picture, 5:Fusion, 6:IR1 13mm, 7:IR2 52mm\n // @User: Standard"},"VIEP_CAM_SWLOW":{"Description":"Camera selection when switch is in low position","DisplayName":"ViewPro Camera For Switch Low","User":"Standard","Values":{"0":"No change in camera selection","1":"EO1","2":"IR thermal","3":"EO1 + IR Picture-in-picture","4":"IR + EO1 Picture-in-picture","5":"Fusion","6":"IR1 13mm","7":"IR2 52mm"},"__field_text":"\n // @DisplayName: ViewPro Camera For Switch Low\n // @Description: Camera selection when switch is in low position\n // @Values: 0:No change in camera selection, 1:EO1, 2:IR thermal, 3:EO1 + IR Picture-in-picture, 4:IR + EO1 Picture-in-picture, 5:Fusion, 6:IR1 13mm, 7:IR2 52mm\n // @User: Standard"},"VIEP_CAM_SWMID":{"Description":"Camera selection when switch is in middle position","DisplayName":"ViewPro Camera For Switch Mid","User":"Standard","Values":{"0":"No change in camera selection","1":"EO1","2":"IR thermal","3":"EO1 + IR Picture-in-picture","4":"IR + EO1 Picture-in-picture","5":"Fusion","6":"IR1 13mm","7":"IR2 52mm"},"__field_text":"\n // @DisplayName: ViewPro Camera For Switch Mid\n // @Description: Camera selection when switch is in middle position\n // @Values: 0:No change in camera selection, 1:EO1, 2:IR thermal, 3:EO1 + IR Picture-in-picture, 4:IR + EO1 Picture-in-picture, 5:Fusion, 6:IR1 13mm, 7:IR2 52mm\n // @User: Standard"},"VIEP_DEBUG":{"Description":"ViewPro debug","DisplayName":"ViewPro debug","User":"Advanced","Values":{"0":"Disabled","1":"Enabled","2":"Enabled including attitude reporting"},"__field_text":"\n // @DisplayName: ViewPro debug\n // @Description: ViewPro debug\n // @Values: 0:Disabled, 1:Enabled, 2:Enabled including attitude reporting\n // @User: Advanced"},"VIEP_ZOOM_MAX":{"Description":"ViewPro Zoom Times Max","DisplayName":"ViewPro Zoom Times Max","Range":{"high":"30","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: ViewPro Zoom Times Max\n // @Description: ViewPro Zoom Times Max\n // @Range: 0 30\n // @User: Standard"},"VIEP_ZOOM_SPEED":{"Description":"ViewPro Zoom Speed. Higher numbers result in faster zooming","DisplayName":"ViewPro Zoom Speed","Range":{"high":"7","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: ViewPro Zoom Speed\n // @Description: ViewPro Zoom Speed. Higher numbers result in faster zooming\n // @Range: 0 7\n // @User: Standard"},"VISO_DELAY_MS":{"Description":"Visual odometry sensor delay relative to inertial measurements","DisplayName":"Visual odometry sensor delay","Range":{"high":"250","low":"0"},"Units":"ms","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry sensor delay\n // @Description: Visual odometry sensor delay relative to inertial measurements\n // @Units: ms\n // @Range: 0 250\n // @User: Advanced"},"VISO_ORIENT":{"Description":"Visual odometery camera orientation","DisplayName":"Visual odometery camera orientation","User":"Advanced","Values":{"0":"Forward","2":"Right","4":"Back","6":"Left","24":"Up","25":"Down"},"__field_text":"\n // @DisplayName: Visual odometery camera orientation\n // @Description: Visual odometery camera orientation\n // @Values: 0:Forward, 2:Right, 4:Back, 6:Left, 24:Up, 25:Down\n // @User: Advanced"},"VISO_POS_M_NSE":{"Description":"Visual odometry position measurement noise minimum (meters). This value will be used if the sensor provides a lower noise value (or no noise value)","DisplayName":"Visual odometry position measurement noise ","Range":{"high":"10.0","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry position measurement noise \n // @Description: Visual odometry position measurement noise minimum (meters). This value will be used if the sensor provides a lower noise value (or no noise value)\n // @Units: m\n // @Range: 0.1 10.0\n // @User: Advanced"},"VISO_POS_X":{"Description":"X position of the camera in body frame. Positive X is forward of the origin.","DisplayName":"Visual odometry camera X position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry camera X position offset\n // @Description: X position of the camera in body frame. Positive X is forward of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"VISO_POS_Y":{"Description":"Y position of the camera in body frame. Positive Y is to the right of the origin.","DisplayName":"Visual odometry camera Y position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry camera Y position offset\n // @Description: Y position of the camera in body frame. Positive Y is to the right of the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"VISO_POS_Z":{"Description":"Z position of the camera in body frame. Positive Z is down from the origin.","DisplayName":"Visual odometry camera Z position offset","Increment":"0.01","Range":{"high":"5","low":"-5"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry camera Z position offset\n // @Description: Z position of the camera in body frame. Positive Z is down from the origin.\n // @Units: m\n // @Range: -5 5\n // @Increment: 0.01\n // @User: Advanced"},"VISO_SCALE":{"Description":"Visual odometry scaling factor applied to position estimates from sensor","DisplayName":"Visual odometry scaling factor","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry scaling factor\n // @Description: Visual odometry scaling factor applied to position estimates from sensor\n // @User: Advanced"},"VISO_TYPE":{"Description":"Visual odometry camera connection type","DisplayName":"Visual odometry camera connection type","RebootRequired":"True","User":"Advanced","Values":{"0":"None","1":"MAVLink","2":"IntelT265","3":"VOXL(ModalAI)"},"__field_text":"\n // @DisplayName: Visual odometry camera connection type\n // @Description: Visual odometry camera connection type\n // @Values: 0:None,1:MAVLink,2:IntelT265,3:VOXL(ModalAI)\n // @User: Advanced\n // @RebootRequired: True"},"VISO_VEL_M_NSE":{"Description":"Visual odometry velocity measurement noise in m/s","DisplayName":"Visual odometry velocity measurement noise","Range":{"high":"5.0","low":"0.05"},"Units":"m/s","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry velocity measurement noise\n // @Description: Visual odometry velocity measurement noise in m/s\n // @Units: m/s\n // @Range: 0.05 5.0\n // @User: Advanced"},"VISO_YAW_M_NSE":{"Description":"Visual odometry yaw measurement noise minimum (radians), This value will be used if the sensor provides a lower noise value (or no noise value)","DisplayName":"Visual odometry yaw measurement noise","Range":{"high":"1.0","low":"0.05"},"Units":"rad","User":"Advanced","__field_text":"\n // @DisplayName: Visual odometry yaw measurement noise\n // @Description: Visual odometry yaw measurement noise minimum (radians), This value will be used if the sensor provides a lower noise value (or no noise value)\n // @Units: rad\n // @Range: 0.05 1.0\n // @User: Advanced"},"VTX_BAND":{"Description":"Video Transmitter Band","DisplayName":"Video Transmitter Band","User":"Standard","Values":{"0":"Band A","1":"Band B","2":"Band E","3":"Airwave","4":"RaceBand","5":"Low RaceBand","6":"1G3 Band A","7":"1G3 Band B"},"__field_text":"\n // @DisplayName: Video Transmitter Band\n // @Description: Video Transmitter Band\n // @User: Standard\n // @Values: 0:Band A,1:Band B,2:Band E,3:Airwave,4:RaceBand,5:Low RaceBand,6:1G3 Band A,7:1G3 Band B"},"VTX_CHANNEL":{"Description":"Video Transmitter Channel","DisplayName":"Video Transmitter Channel","Range":{"high":"7","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Video Transmitter Channel\n // @Description: Video Transmitter Channel\n // @User: Standard\n // @Range: 0 7"},"VTX_ENABLE":{"Description":"Toggles the Video Transmitter on and off","DisplayName":"Is the Video Transmitter enabled or not","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Is the Video Transmitter enabled or not\n // @Description: Toggles the Video Transmitter on and off\n // @Values: 0:Disable,1:Enable"},"VTX_FREQ":{"Description":"Video Transmitter Frequency. The frequency is derived from the setting of BAND and CHANNEL","DisplayName":"Video Transmitter Frequency","Range":{"high":"6000","low":"1000"},"ReadOnly":"True","User":"Standard","__field_text":"\n // @DisplayName: Video Transmitter Frequency\n // @Description: Video Transmitter Frequency. The frequency is derived from the setting of BAND and CHANNEL\n // @User: Standard\n // @ReadOnly: True\n // @Range: 1000 6000"},"VTX_MAX_POWER":{"Description":"Video Transmitter Maximum Power Level. Different VTXs support different power levels, this prevents the power aux switch from requesting too high a power level. The switch supports 6 power levels and the selected power will be a subdivision between 0 and this setting.","DisplayName":"Video Transmitter Max Power Level","Range":{"high":"1000","low":"25"},"__field_text":"\n // @DisplayName: Video Transmitter Max Power Level\n // @Description: Video Transmitter Maximum Power Level. Different VTXs support different power levels, this prevents the power aux switch from requesting too high a power level. The switch supports 6 power levels and the selected power will be a subdivision between 0 and this setting.\n // @Range: 25 1000"},"VTX_OPTIONS":{"Bitmask":{"0":"Pitmode","1":"Pitmode until armed","2":"Pitmode when disarmed","3":"Unlocked","4":"Add leading zero byte to requests","5":"Use 1 stop-bit in SmartAudio","6":"Ignore CRC in SmartAudio","7":"Ignore status updates in CRSF and blindly set VTX options"},"Description":"Video Transmitter Options. Pitmode puts the VTX in a low power state. Unlocked enables certain restricted frequencies and power levels. Do not enable the Unlocked option unless you have appropriate permissions in your jurisdiction to transmit at high power levels. One stop-bit may be required for VTXs that erroneously mimic iNav behaviour.","DisplayName":"Video Transmitter Options","User":"Advanced","__field_text":"\n // @DisplayName: Video Transmitter Options\n // @Description: Video Transmitter Options. Pitmode puts the VTX in a low power state. Unlocked enables certain restricted frequencies and power levels. Do not enable the Unlocked option unless you have appropriate permissions in your jurisdiction to transmit at high power levels. One stop-bit may be required for VTXs that erroneously mimic iNav behaviour.\n // @User: Advanced\n // @Bitmask: 0:Pitmode,1:Pitmode until armed,2:Pitmode when disarmed,3:Unlocked,4:Add leading zero byte to requests,5:Use 1 stop-bit in SmartAudio,6:Ignore CRC in SmartAudio,7:Ignore status updates in CRSF and blindly set VTX options"},"VTX_POWER":{"Description":"Video Transmitter Power Level. Different VTXs support different power levels, the power level chosen will be rounded down to the nearest supported power level","DisplayName":"Video Transmitter Power Level","Range":{"high":"1000","low":"1"},"__field_text":"\n // @DisplayName: Video Transmitter Power Level\n // @Description: Video Transmitter Power Level. Different VTXs support different power levels, the power level chosen will be rounded down to the nearest supported power level\n // @Range: 1 1000"},"WEB_BIND_PORT":{"Description":"web server TCP port","DisplayName":"web server TCP port","Range":{"high":"65535","low":"1"},"User":"Standard","__field_text":"\n // @DisplayName: web server TCP port\n // @Description: web server TCP port\n // @Range: 1 65535\n // @User: Standard"},"WEB_BLOCK_SIZE":{"Description":"web server block size for download","DisplayName":"web server block size","Range":{"high":"65535","low":"1"},"User":"Advanced","__field_text":"\n // @DisplayName: web server block size\n // @Description: web server block size for download\n // @Range: 1 65535\n // @User: Advanced"},"WEB_DEBUG":{"Description":"web server debugging","DisplayName":"web server debugging","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: web server debugging\n // @Description: web server debugging\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"WEB_ENABLE":{"Description":"enable web server","DisplayName":"enable web server","User":"Standard","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: enable web server\n // @Description: enable web server\n // @Values: 0:Disabled,1:Enabled\n // @User: Standard"},"WEB_SENDFILE_MIN":{"Description":"sendfile is an offloading mechanism for faster file download. If this is non-zero and the file is larger than this size then sendfile will be used for file download","DisplayName":"web server minimum file size for sendfile","Range":{"high":"10000000","low":"0"},"User":"Advanced","__field_text":"\n // @DisplayName: web server minimum file size for sendfile\n // @Description: sendfile is an offloading mechanism for faster file download. If this is non-zero and the file is larger than this size then sendfile will be used for file download\n // @Range: 0 10000000\n // @User: Advanced"},"WEB_TIMEOUT":{"Description":"timeout for inactive connections","DisplayName":"web server timeout","Range":{"high":"60","low":"0.1"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: web server timeout\n // @Description: timeout for inactive connections\n // @Units: s\n // @Range: 0.1 60\n // @User: Advanced"},"WINCH_OPTIONS":{"Bitmask":{"0":"Spin freely on startup","1":"Verbose output","2":"Retry if stuck (Daiwa only)"},"Description":"Winch options","DisplayName":"Winch options","User":"Standard","__field_text":"\n // @DisplayName: Winch options\n // @Description: Winch options\n // @Bitmask: 0:Spin freely on startup, 1:Verbose output, 2:Retry if stuck (Daiwa only)\n // @User: Standard"},"WINCH_POS_P":{"Description":"Winch control position error P gain","DisplayName":"Winch control position error P gain","Range":{"high":"10.0","low":"0.01"},"User":"Standard","__field_text":"\n // @DisplayName: Winch control position error P gain\n // @Description: Winch control position error P gain\n // @Range: 0.01 10.0\n // @User: Standard"},"WINCH_RATE_DN":{"Description":"Maximum rate when releasing line","DisplayName":"WinchControl Rate Down","Range":{"high":"5.0","low":"0.1"},"User":"Standard","__field_text":"\n // @DisplayName: WinchControl Rate Down\n // @Description: Maximum rate when releasing line\n // @Range: 0.1 5.0\n // @User: Standard"},"WINCH_RATE_MAX":{"Description":"Winch deploy or retract rate maximum. Set to maximum rate with no load.","DisplayName":"Winch deploy or retract rate maximum","Range":{"high":"10","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Winch deploy or retract rate maximum\n // @Description: Winch deploy or retract rate maximum. Set to maximum rate with no load.\n // @User: Standard\n // @Range: 0 10\n // @Units: m/s"},"WINCH_RATE_UP":{"Description":"Maximum rate when retracting line","DisplayName":"WinchControl Rate Up","Range":{"high":"5.0","low":"0.1"},"User":"Standard","__field_text":"\n // @DisplayName: WinchControl Rate Up\n // @Description: Maximum rate when retracting line\n // @Range: 0.1 5.0\n // @User: Standard"},"WINCH_RC_FUNC":{"Description":"RCn_OPTION number to use to control winch rate","DisplayName":"Winch Rate Control RC function","User":"Standard","Values":{"300":"Scripting1","301":"Scripting2","302":"Scripting3","303":"Scripting4","304":"Scripting5","305":"Scripting6","306":"Scripting7","307":"Scripting8"},"__field_text":"\n // @DisplayName: Winch Rate Control RC function\n // @Description: RCn_OPTION number to use to control winch rate\n // @Values: 300:Scripting1, 301:Scripting2, 302:Scripting3, 303:Scripting4, 304:Scripting5, 305:Scripting6, 306:Scripting7, 307:Scripting8\n // @User: Standard"},"WINCH_TYPE":{"Description":"Winch Type","DisplayName":"Winch Type","User":"Standard","Values":{"0":"None","1":"PWM","2":"Daiwa"},"__field_text":"\n // @DisplayName: Winch Type\n // @Description: Winch Type\n // @User: Standard\n // @Values: 0:None, 1:PWM, 2:Daiwa"},"WPNAV_ACCEL":{"Description":"Defines the horizontal acceleration in cm/s/s used during missions","DisplayName":"Waypoint Acceleration ","Increment":"10","Range":{"high":"500","low":"50"},"Units":"cm/s/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Acceleration \n // @Description: Defines the horizontal acceleration in cm/s/s used during missions\n // @Units: cm/s/s\n // @Range: 50 500\n // @Increment: 10\n // @User: Standard"},"WPNAV_ACCEL_C":{"Description":"Defines the maximum cornering acceleration in cm/s/s used during missions. If zero uses 2x accel value.","DisplayName":"Waypoint Cornering Acceleration","Increment":"10","Range":{"high":"500","low":"0"},"Units":"cm/s/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Cornering Acceleration\n // @Description: Defines the maximum cornering acceleration in cm/s/s used during missions. If zero uses 2x accel value.\n // @Units: cm/s/s\n // @Range: 0 500\n // @Increment: 10\n // @User: Standard"},"WPNAV_ACCEL_Z":{"Description":"Defines the vertical acceleration in cm/s/s used during missions","DisplayName":"Waypoint Vertical Acceleration","Increment":"10","Range":{"high":"500","low":"50"},"Units":"cm/s/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Vertical Acceleration\n // @Description: Defines the vertical acceleration in cm/s/s used during missions\n // @Units: cm/s/s\n // @Range: 50 500\n // @Increment: 10\n // @User: Standard"},"WPNAV_JERK":{"Description":"Defines the horizontal jerk in m/s/s used during missions","DisplayName":"Waypoint Jerk","Range":{"high":"20","low":"1"},"Units":"m/s/s/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Jerk\n // @Description: Defines the horizontal jerk in m/s/s used during missions\n // @Units: m/s/s/s\n // @Range: 1 20\n // @User: Standard"},"WPNAV_RADIUS":{"Description":"Defines the distance from a waypoint, that when crossed indicates the wp has been hit.","DisplayName":"Waypoint Radius","Increment":"1","Range":{"high":"1000","low":"5"},"Units":"cm","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Radius\n // @Description: Defines the distance from a waypoint, that when crossed indicates the wp has been hit.\n // @Units: cm\n // @Range: 5 1000\n // @Increment: 1\n // @User: Standard"},"WPNAV_RFND_USE":{"Description":"This controls if waypoint missions use rangefinder for terrain following","DisplayName":"Waypoint missions use rangefinder for terrain following","User":"Advanced","Values":{"0":"Disable","1":"Enable"},"__field_text":"\n // @DisplayName: Waypoint missions use rangefinder for terrain following\n // @Description: This controls if waypoint missions use rangefinder for terrain following\n // @Values: 0:Disable,1:Enable\n // @User: Advanced"},"WPNAV_SPEED":{"Description":"Defines the speed in cm/s which the aircraft will attempt to maintain horizontally during a WP mission","DisplayName":"Waypoint Horizontal Speed Target","Increment":"50","Range":{"high":"2000","low":"20"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Horizontal Speed Target\n // @Description: Defines the speed in cm/s which the aircraft will attempt to maintain horizontally during a WP mission\n // @Units: cm/s\n // @Range: 20 2000\n // @Increment: 50\n // @User: Standard"},"WPNAV_SPEED_DN":{"Description":"Defines the speed in cm/s which the aircraft will attempt to maintain while descending during a WP mission","DisplayName":"Waypoint Descent Speed Target","Increment":"10","Range":{"high":"500","low":"10"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Descent Speed Target\n // @Description: Defines the speed in cm/s which the aircraft will attempt to maintain while descending during a WP mission\n // @Units: cm/s\n // @Range: 10 500\n // @Increment: 10\n // @User: Standard"},"WPNAV_SPEED_UP":{"Description":"Defines the speed in cm/s which the aircraft will attempt to maintain while climbing during a WP mission","DisplayName":"Waypoint Climb Speed Target","Increment":"50","Range":{"high":"1000","low":"10"},"Units":"cm/s","User":"Standard","__field_text":"\n // @DisplayName: Waypoint Climb Speed Target\n // @Description: Defines the speed in cm/s which the aircraft will attempt to maintain while climbing during a WP mission\n // @Units: cm/s\n // @Range: 10 1000\n // @Increment: 50\n // @User: Standard"},"WPNAV_TER_MARGIN":{"Description":"Waypoint Terrain following altitude margin. Vehicle will stop if distance from target altitude is larger than this margin (in meters)","DisplayName":"Waypoint Terrain following altitude margin","Range":{"high":"100","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Waypoint Terrain following altitude margin\n // @Description: Waypoint Terrain following altitude margin. Vehicle will stop if distance from target altitude is larger than this margin (in meters)\n // @Units: m\n // @Range: 0.1 100\n // @User: Advanced"},"WP_NAVALT_MIN":{"Description":"This is the altitude in meters above which for navigation can begin. This applies in auto takeoff and auto landing.","DisplayName":"Minimum navigation altitude","Range":{"high":"5","low":"0"},"User":"Standard","__field_text":"\n // @DisplayName: Minimum navigation altitude\n // @Description: This is the altitude in meters above which for navigation can begin. This applies in auto takeoff and auto landing.\n // @Range: 0 5\n // @User: Standard"},"WP_YAW_BEHAVIOR":{"Description":"Determines how the autopilot controls the yaw during missions and RTL","DisplayName":"Yaw behaviour during missions","User":"Standard","Values":{"0":"Never change yaw","1":"Face next waypoint","2":"Face next waypoint except RTL","3":"Face along GPS course"},"__field_text":"\n // @DisplayName: Yaw behaviour during missions\n // @Description: Determines how the autopilot controls the yaw during missions and RTL\n // @Values: 0:Never change yaw, 1:Face next waypoint, 2:Face next waypoint except RTL, 3:Face along GPS course\n // @User: Standard"},"WVANE_ANG_MIN":{"Description":"The minimum target roll/pitch angle before active weathervaning will start. This provides a dead zone that is particularly useful for poorly trimmed quadplanes.","DisplayName":"Weathervaning min angle","Increment":"0.1","Range":{"high":"10","low":"0"},"Units":"deg","User":"Standard","__field_text":"\n // @DisplayName: Weathervaning min angle\n // @Description: The minimum target roll/pitch angle before active weathervaning will start. This provides a dead zone that is particularly useful for poorly trimmed quadplanes.\n // @Units: deg\n // @Range: 0 10\n // @Increment: 0.1\n // @User: Standard"},"WVANE_ENABLE":{"Description":"Enable weather vaning. When active, the aircraft will automatically yaw into wind when in a VTOL position controlled mode. Pilot yaw commands override the weathervaning action.","DisplayName":"Enable","User":"Standard","Values":{"0":"Disabled","1":"Nose into wind","2":"Nose or tail into wind","3":"Side into wind","4":"tail into wind","-1":"Only use during takeoffs or landing see weathervane takeoff and land override parameters"},"__field_text":"\n // @DisplayName: Enable\n // @Description: Enable weather vaning. When active, the aircraft will automatically yaw into wind when in a VTOL position controlled mode. Pilot yaw commands override the weathervaning action.\n // @Values: -1:Only use during takeoffs or landing see weathervane takeoff and land override parameters,0:Disabled,1:Nose into wind,2:Nose or tail into wind,3:Side into wind,4:tail into wind\n // @User: Standard"},"WVANE_GAIN":{"Description":"This converts the target roll/pitch angle of the aircraft into the correcting (into wind) yaw rate. e.g. Gain = 2, roll = 30 deg, pitch = 0 deg, yaw rate = 60 deg/s.","DisplayName":"Weathervaning gain","Increment":"0.1","Range":{"high":"4","low":"0.5"},"User":"Standard","__field_text":"\n // @DisplayName: Weathervaning gain\n // @Description: This converts the target roll/pitch angle of the aircraft into the correcting (into wind) yaw rate. e.g. Gain = 2, roll = 30 deg, pitch = 0 deg, yaw rate = 60 deg/s.\n // @Range: 0.5 4\n // @Increment: 0.1\n // @User: Standard"},"WVANE_HGT_MIN":{"Description":"Above this height weathervaning is permitted. If a range finder is fitted or if terrain is enabled, this parameter sets height AGL. Otherwise, this parameter sets height above home. Set zero to ignore minimum height requirement to activate weathervaning.","DisplayName":"Weathervaning min height","Increment":"1","Range":{"high":"50","low":"0"},"Units":"m","User":"Standard","__field_text":"\n // @DisplayName: Weathervaning min height\n // @Description: Above this height weathervaning is permitted. If a range finder is fitted or if terrain is enabled, this parameter sets height AGL. Otherwise, this parameter sets height above home. Set zero to ignore minimum height requirement to activate weathervaning.\n // @Description{Plane}: Above this height weathervaning is permitted. If RNGFND_LANDING is enabled or terrain is enabled then this parameter sets height AGL. Otherwise this parameter sets height above home. Set zero to ignore minimum height requirement to activate weathervaning\n // @Units: m\n // @Range: 0 50\n // @Increment: 1\n // @User: Standard"},"WVANE_LAND":{"Description":"Override the weather vaning behaviour when in landing","DisplayName":"Landing override","User":"Standard","Values":{"0":"Disabled","1":"Nose into wind","2":"Nose or tail into wind","3":"Side into wind","4":"tail into wind","-1":"No override"},"__field_text":"\n // @DisplayName: Landing override\n // @Description: Override the weather vaning behaviour when in landing\n // @Values: -1:No override,0:Disabled,1:Nose into wind,2:Nose or tail into wind,3:Side into wind,4:tail into wind\n // @User: Standard"},"WVANE_OPTIONS":{"Bitmask":{"0":"Use pitch when nose or tail-in for faster weathervaning"},"Description":"Options impacting weathervaning behaviour","DisplayName":"Weathervaning options","User":"Standard","__field_text":"\n // @DisplayName: Weathervaning options\n // @Description: Options impacting weathervaning behaviour\n // @Bitmask: 0:Use pitch when nose or tail-in for faster weathervaning\n // @User: Standard"},"WVANE_SPD_MAX":{"Description":"Below this ground speed weathervaning is permitted. Set to 0 to ignore this condition when checking if vehicle should weathervane.","DisplayName":"Weathervaning max ground speed","Increment":"0.1","Range":{"high":"50","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Weathervaning max ground speed\n // @Description: Below this ground speed weathervaning is permitted. Set to 0 to ignore this condition when checking if vehicle should weathervane.\n // @Units: m/s\n // @Range: 0 50\n // @Increment: 0.1\n // @User: Standard"},"WVANE_TAKEOFF":{"Description":"Override the weather vaning behaviour when in takeoffs","DisplayName":"Takeoff override","User":"Standard","Values":{"0":"Disabled","1":"Nose into wind","2":"Nose or tail into wind","3":"Side into wind","4":"tail into wind","-1":"No override"},"__field_text":"\n // @DisplayName: Takeoff override\n // @Description: Override the weather vaning behaviour when in takeoffs\n // @Values: -1:No override,0:Disabled,1:Nose into wind,2:Nose or tail into wind,3:Side into wind,4:tail into wind\n // @User: Standard"},"WVANE_VELZ_MAX":{"Description":"The maximum climb or descent speed that the vehicle will still attempt to weathervane. Set to 0 to ignore this condition to get the aircraft to weathervane at any climb/descent rate. This is particularly useful for aircraft with low disc loading that struggle with yaw control in decent.","DisplayName":"Weathervaning max vertical speed","Increment":"0.1","Range":{"high":"5","low":"0"},"Units":"m/s","User":"Standard","__field_text":"\n // @DisplayName: Weathervaning max vertical speed\n // @Description: The maximum climb or descent speed that the vehicle will still attempt to weathervane. Set to 0 to ignore this condition to get the aircraft to weathervane at any climb/descent rate. This is particularly useful for aircraft with low disc loading that struggle with yaw control in decent.\n // @Units: m/s\n // @Range: 0 5\n // @Increment: 0.1\n // @User: Standard"},"ZIGZ_AUTO_ENABLE":{"Description":"Allows you to enable (1) or disable (0) ZigZag auto feature","DisplayName":"ZigZag auto enable/disable","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: ZigZag auto enable/disable\n // @Description: Allows you to enable (1) or disable (0) ZigZag auto feature\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"ZIGZ_DIRECTION":{"Description":"The direction to move sideways in ZigZag mode","DisplayName":"Sideways direction in ZigZag auto","User":"Advanced","Values":{"0":"forward","1":"right","2":"backward","3":"left"},"__field_text":"\n // @DisplayName: Sideways direction in ZigZag auto\n // @Description: The direction to move sideways in ZigZag mode\n // @Values: 0:forward, 1:right, 2:backward, 3:left\n // @User: Advanced"},"ZIGZ_LINE_NUM":{"Description":"Total number of lines for ZigZag auto if 1 or more. -1: Infinity, 0: Just moving to sideways","DisplayName":"Total number of lines","Range":{"high":"32767","low":"-1"},"User":"Advanced","__field_text":"\n // @DisplayName: Total number of lines\n // @Description: Total number of lines for ZigZag auto if 1 or more. -1: Infinity, 0: Just moving to sideways\n // @Range: -1 32767\n // @User: Advanced"},"ZIGZ_SIDE_DIST":{"Description":"The distance to move sideways in ZigZag mode","DisplayName":"Sideways distance in ZigZag auto","Range":{"high":"100","low":"0.1"},"Units":"m","User":"Advanced","__field_text":"\n // @DisplayName: Sideways distance in ZigZag auto\n // @Description: The distance to move sideways in ZigZag mode\n // @Units: m\n // @Range: 0.1 100\n // @User: Advanced"},"ZIGZ_SPRAYER":{"Description":"Enable the auto sprayer in ZigZag mode. SPRAY_ENABLE = 1 and SERVOx_FUNCTION = 22(SprayerPump) / 23(SprayerSpinner) also must be set. This makes the sprayer on while moving to destination A or B. The sprayer will stop if the vehicle reaches destination or the flight mode is changed from ZigZag to other.","DisplayName":"Auto sprayer in ZigZag","User":"Advanced","Values":{"0":"Disabled","1":"Enabled"},"__field_text":"\n // @DisplayName: Auto sprayer in ZigZag\n // @Description: Enable the auto sprayer in ZigZag mode. SPRAY_ENABLE = 1 and SERVOx_FUNCTION = 22(SprayerPump) / 23(SprayerSpinner) also must be set. This makes the sprayer on while moving to destination A or B. The sprayer will stop if the vehicle reaches destination or the flight mode is changed from ZigZag to other.\n // @Values: 0:Disabled,1:Enabled\n // @User: Advanced"},"ZIGZ_WP_DELAY":{"Description":"Waiting time after reached the destination","DisplayName":"The delay for zigzag waypoint","Range":{"high":"127","low":"0"},"Units":"s","User":"Advanced","__field_text":"\n // @DisplayName: The delay for zigzag waypoint\n // @Description: Waiting time after reached the destination\n // @Units: s\n // @Range: 0 127\n // @User: Advanced"}} diff --git a/gcs/data/gen_apm_params_def_plane.json b/gcs/data/gen_apm_params_def_plane.json deleted file mode 100644 index a4f544fac..000000000 --- a/gcs/data/gen_apm_params_def_plane.json +++ /dev/null @@ -1 +0,0 @@ -{"ACRO_LOCKING": {"Description": "Enable attitude locking when sticks are released. If set to 2 then quaternion based locking is used if the yaw rate controller is enabled. Quaternion based locking will hold any attitude", "DisplayName": "ACRO mode attitude locking", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled", "2": "Quaternion"}}, "ACRO_PITCH_RATE": {"Description": "The maximum pitch rate at full stick deflection in ACRO mode", "DisplayName": "ACRO mode pitch rate", "Increment": "1", "Range": {"high": "500", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "ACRO_ROLL_RATE": {"Description": "The maximum roll rate at full stick deflection in ACRO mode", "DisplayName": "ACRO mode roll rate", "Increment": "1", "Range": {"high": "500", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "ACRO_YAW_RATE": {"Description": "The maximum yaw rate at full stick deflection in ACRO mode. If this is zero then rudder is directly controlled by rudder stick input. This option is only available if you also set YAW_RATE_ENABLE to 1.", "DisplayName": "ACRO mode yaw rate", "Increment": "1", "Range": {"high": "500", "low": "0"}, "Units": "deg/s", "User": "Standard"}, "ADSB_EMIT_TYPE": {"Description": "ADSB classification for the type of vehicle emitting the transponder signal. Default value is 14 (UAV).", "DisplayName": "Emitter type", "User": "Advanced", "Values": {"0": "NoInfo", "1": "Light", "10": "LightAir", "11": "Parachute", "12": "UltraLight", "13": "RESERVED", "14": "UAV", "15": "Space", "16": "RESERVED", "17": "EmergencySurface", "18": "ServiceSurface", "19": "PointObstacle", "2": "Small", "3": "Large", "4": "HighVortexlarge", "5": "Heavy", "6": "HighlyManuv", "7": "Rotocraft", "8": "RESERVED", "9": "Glider"}}, "ADSB_ICAO_ID": {"Description": "ICAO_ID unique vehicle identification number of this aircraft. This is an integer limited to 24bits. If set to 0 then one will be randomly generated. If set to -1 then static information is not sent, transceiver is assumed pre-programmed.", "DisplayName": "ICAO_ID vehicle identification number", "Range": {"high": "16777215", "low": "-1"}, "User": "Advanced"}, "ADSB_ICAO_SPECL": {"Description": "ICAO_ID of special vehicle that ignores ADSB_LIST_RADIUS and ADSB_LIST_ALT. The vehicle is always tracked. Use 0 to disable.", "DisplayName": "ICAO_ID of special vehicle", "User": "Advanced"}, "ADSB_LEN_WIDTH": {"Description": "Aircraft length and width dimension options in Length and Width in meters. In most cases, use a value of 1 for smallest size.", "DisplayName": "Aircraft length and width", "User": "Advanced", "Values": {"0": "NO_DATA", "1": "L15W23", "10": "L65W59P5", "11": "L65W67", "12": "L75W72P5", "13": "L75W80", "14": "L85W80", "15": "L85W90", "2": "L25W28P5", "3": "L25W34", "4": "L35W33", "5": "L35W38", "6": "L45W39P5", "7": "L45W45", "8": "L55W45", "9": "L55W52"}}, "ADSB_LIST_ALT": {"Description": "ADSB vehicle list altitude filter. Vehicles detected above this altitude will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.", "DisplayName": "ADSB vehicle list altitude filter", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Advanced"}, "ADSB_LIST_MAX": {"Description": "ADSB list size of nearest vehicles. Longer lists take longer to refresh with lower SRx_ADSB values.", "DisplayName": "ADSB vehicle list size", "Range": {"high": "100", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "ADSB_LIST_RADIUS": {"Description": "ADSB vehicle list radius filter. Vehicles detected outside this radius will be completely ignored. They will not show up in the SRx_ADSB stream to the GCS and will not be considered in any avoidance calculations. A value of 0 will disable this filter.", "DisplayName": "ADSB vehicle list radius filter", "Range": {"high": "100000", "low": "0"}, "Units": "m", "User": "Advanced"}, "ADSB_LOG": {"Description": "0: no logging, 1: log only special ID, 2:log all", "DisplayName": "ADS-B logging", "User": "Advanced", "Values": {"0": "no logging", "1": "log only special ID", "2": "log all"}}, "ADSB_OFFSET_LAT": {"Description": "GPS antenna lateral offset. This describes the physical location offset from center of the GPS antenna on the aircraft.", "DisplayName": "GPS antenna lateral offset", "User": "Advanced", "Values": {"0": "NoData", "1": "Left2m", "2": "Left4m", "3": "Left6m", "4": "Center", "5": "Right2m", "6": "Right4m", "7": "Right6m"}}, "ADSB_OFFSET_LON": {"Description": "GPS antenna longitudinal offset. This is usually set to 1, Applied By Sensor", "DisplayName": "GPS antenna longitudinal offset", "User": "Advanced", "Values": {"0": "NO_DATA", "1": "AppliedBySensor"}}, "ADSB_OPTIONS": {"Bitmask": {"0": "Ping200X Send GPS", "1": "Squawk 7400 on RC failsafe", "2": "Squawk 7400 on GCS failsafe", "3": "Sagetech MXS use External Config"}, "Description": "Options for emergency failsafe codes and device capabilities", "DisplayName": "ADS-B Options", "User": "Advanced"}, "ADSB_RF_CAPABLE": {"Bitmask": {"0": "UAT_in", "1": "1090ES_in", "2": "UAT_out", "3": "1090ES_out"}, "Description": "Describes your hardware RF In/Out capabilities.", "DisplayName": "RF capabilities", "User": "Advanced"}, "ADSB_RF_SELECT": {"Bitmask": {"0": "Rx", "1": "Tx"}, "Description": "Transceiver RF selection for Rx enable and/or Tx enable. This only effects devices that can Tx and/or Rx. Rx-only devices should override this to always be Rx-only.", "DisplayName": "Transceiver RF selection", "User": "Advanced"}, "ADSB_SQUAWK": {"Description": "VFR squawk (Mode 3/A) code is a pre-programmed default code when the pilot is flying VFR and not in contact with ATC. In the USA, the VFR squawk code is octal 1200 (hex 0x280, decimal 640) and in most parts of Europe the VFR squawk code is octal 7000. If an invalid octal number is set then it will be reset to 1200.", "DisplayName": "Squawk code", "Range": {"high": "7777", "low": "0"}, "Units": "octal", "User": "Advanced"}, "ADSB_TYPE": {"Description": "Type of ADS-B hardware for ADSB-in and ADSB-out configuration and operation. If any type is selected then MAVLink based ADSB-in messages will always be enabled", "DisplayName": "ADSB Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "uAvionix-MAVLink", "2": "Sagetech", "3": "uAvionix-UCP", "4": "Sagetech MX Series"}}, "AEROM_ALT_ABORT": {"Description": "Maximum allowable loss in altitude during a trick or sequence from its starting altitude.", "DisplayName": "Altitude Abort", "Units": "m"}, "AEROM_ANG_ACCEL": {"Description": "Maximum angular acceleration in maneuvers", "DisplayName": "Angular acceleration limit", "Units": "deg/s/s"}, "AEROM_ANG_TC": {"Description": "This is the time over which we filter the desired roll to smooth it", "DisplayName": "Roll control filtertime constant", "Units": "s"}, "AEROM_BOX_WIDTH": {"Description": "Length of aerobatic \"box\" ", "DisplayName": "Box Width", "Units": "m"}, "AEROM_DEBUG": {"Description": "This controls the printing of extra debug information on paths", "DisplayName": "Debug control"}, "AEROM_ENTRY_RATE": {"Description": "This controls how rapidly we roll into a new orientation", "DisplayName": "The roll rate to use when entering a roll maneuver", "Units": "deg/s"}, "AEROM_ERR_COR_D": {"Description": "This controls how rapidly we correct back onto the desired path", "DisplayName": "D gain for path error corrections"}, "AEROM_ERR_COR_P": {"Description": "This controls how rapidly we correct back onto the desired path", "DisplayName": "P gain for path error corrections"}, "AEROM_KE_RUDD": {"Description": "Percent of rudder normally uses to sustain knife-edge at trick speed", "DisplayName": "KnifeEdge Rudder", "Units": "%"}, "AEROM_KE_RUDD_LK": {"Description": "Time to look ahead in the path to calculate rudder correction for bank angle", "DisplayName": "KnifeEdge Rudder lookahead", "Units": "s"}, "AEROM_LKAHD": {"Description": "This is how much time to look ahead in the path for calculating path rates", "DisplayName": "Lookahead", "Units": "s"}, "AEROM_MIS_ANGLE": {"Description": "When set to a non-zero value, this is the assumed direction of the mission. Otherwise the waypoint angle is used", "DisplayName": "Mission angle", "Units": "deg"}, "AEROM_OPTIONS": {"Bitmask": {"0": "UseRTLOnAbort", "1": "AddAtToMessages", "2": "DualAircraftSynchronised"}, "Description": "Options to control aerobatic behavior", "DisplayName": "Aerobatic options", "Units": "deg"}, "AEROM_PATH_SCALE": {"Description": "Scale factor for Path/Box size. 0.5 would half the distances in maneuvers. Radii are unaffected.", "DisplayName": "Path Scale", "Range": {"high": "100", "low": "0.1"}}, "AEROM_ROL_COR_TC": {"Description": "This is the time constant for correcting roll errors. A smaller value leads to faster roll corrections", "DisplayName": "Roll control time constant", "Units": "s"}, "AEROM_SPD_I": {"Description": "This controls how rapidly the throttle is raised to compensate for a speed error", "DisplayName": "I gain for speed controller", "Units": "%"}, "AEROM_SPD_P": {"Description": "This controls how rapidly the throttle is raised to compensate for a speed error", "DisplayName": "P gain for speed controller", "Units": "%"}, "AEROM_STALL_PIT": {"Description": "Pitch threashold for moving to final stage of stall turn", "DisplayName": "Stall turn pitch threshold", "Units": "deg"}, "AEROM_STALL_THR": {"Description": "Amount of throttle to reduce to for a stall turn", "DisplayName": "Stall turn throttle", "Units": "%"}, "AEROM_THR_BOOST": {"Description": "This is the extra throttle added in schedule elements marked as needing a throttle boost", "DisplayName": "Throttle boost", "Units": "%"}, "AEROM_THR_LKAHD": {"Description": "This controls how far ahead we look in time along the path for the target throttle", "DisplayName": "The lookahead for throttle control", "Units": "s"}, "AEROM_THR_MIN": {"Description": "Lowest throttle used during maneuvers", "DisplayName": "Minimum Throttle", "Units": "%"}, "AEROM_THR_PIT_FF": {"Description": "This controls how much extra throttle to add based on pitch ange. The value is for 90 degrees and is applied in proportion to pitch", "DisplayName": "Throttle feed forward from pitch", "Units": "%"}, "AEROM_TIME_COR_P": {"Description": "This is the time constant for correcting path position errors", "DisplayName": "Time constant for correction of our distance along the path", "Units": "s"}, "AEROM_TS_I": {"Description": "This controls how rapidly two aircraft are brought back into time sync", "DisplayName": "Timesync I gain"}, "AEROM_TS_P": {"Description": "This controls how rapidly two aircraft are brought back into time sync", "DisplayName": "Timesync P gain"}, "AEROM_TS_RATE": {"Description": "This sets the rate we send data for time sync between aircraft", "DisplayName": "Timesync rate of send of NAMED_VALUE_FLOAT data", "Units": "Hz"}, "AEROM_TS_SPDMAX": {"Description": "This sets the maximum speed adjustment for time sync between aircraft", "DisplayName": "Timesync speed max", "Units": "m/s"}, "AEROM_YAW_ACCEL": {"Description": "This is maximum yaw acceleration to use", "DisplayName": "Yaw acceleration", "Units": "deg/s/s"}, "AFS_AMSL_ERR_GPS": {"Description": "This sets margin for error in GPS derived altitude limit. This error margin is only used if the barometer has failed. If the barometer fails then the GPS will be used to enforce the AMSL_LIMIT, but this margin will be subtracted from the AMSL_LIMIT first, to ensure that even with the given amount of GPS altitude error the pressure altitude is not breached. OBC users should set this to comply with their D2 safety case. A value of -1 will mean that barometer failure will lead to immediate termination.", "DisplayName": "Error margin for GPS based AMSL limit", "Units": "m", "User": "Advanced"}, "AFS_AMSL_LIMIT": {"Description": "This sets the AMSL (above mean sea level) altitude limit. If the pressure altitude determined by QNH exceeds this limit then flight termination will be forced. Note that this limit is in meters, whereas pressure altitude limits are often quoted in feet. A value of zero disables the pressure altitude limit.", "DisplayName": "AMSL limit", "Units": "m", "User": "Advanced"}, "AFS_DUAL_LOSS": {"Description": "This enables the dual loss termination part of the AFS system. If this parameter is 1 and both GPS and the ground control station fail simultaneously, this will be considered a \"dual loss\" and cause termination.", "DisplayName": "Enable dual loss terminate due to failure of both GCS and GPS simultaneously", "User": "Advanced"}, "AFS_ENABLE": {"Description": "This enables the advanced failsafe system. If this is set to zero (disable) then all the other AFS options have no effect", "DisplayName": "Enable Advanced Failsafe", "User": "Advanced"}, "AFS_GCS_TIMEOUT": {"Description": "The time (in seconds) of persistent data link loss before GCS failsafe occurs. ", "DisplayName": "GCS timeout", "Units": "s", "User": "Advanced"}, "AFS_GEOFENCE": {"Description": "This enables the geofence part of the AFS. Will only be in effect if AFS_ENABLE is also 1", "DisplayName": "Enable geofence Advanced Failsafe", "User": "Advanced"}, "AFS_HB_PIN": {"Description": "This sets a digital output pin which is cycled at 10Hz when termination is not activated. Note that if a FS_TERM_PIN is set then the heartbeat pin will continue to cycle at 10Hz when termination is activated, to allow the termination board to distinguish between autopilot crash and termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Heartbeat Pin", "User": "Advanced", "Values": {"-1": "Disabled", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3"}}, "AFS_MAN_PIN": {"Description": "This sets a digital output pin to set high when in manual mode. See the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Manual Pin", "User": "Advanced"}, "AFS_MAX_COM_LOSS": {"Description": "Maximum number of comms loss events before the aircraft stops returning to mission on comms recovery. Use zero to allow for any number of comms loss events.", "DisplayName": "Maximum number of comms loss events", "User": "Advanced"}, "AFS_MAX_GPS_LOSS": {"Description": "Maximum number of GPS loss events before the aircraft stops returning to mission on GPS recovery. Use zero to allow for any number of GPS loss events.", "DisplayName": "Maximum number of GPS loss events", "User": "Advanced"}, "AFS_MAX_RANGE": {"Description": "This is the maximum range of the vehicle in kilometers from first arming. If the vehicle goes beyond this range then the TERM_ACTION is performed. A value of zero disables this feature.", "DisplayName": "Max allowed range", "Units": "km", "User": "Advanced"}, "AFS_OPTIONS": {"Bitmask": {"0": "Continue the mission even after comms are recovered (does not go to the mission item at the time comms were lost)", "1": "Enable AFS for all autonomous modes (not just AUTO)"}, "Description": "See description for each bitmask bit description", "DisplayName": "AFS options"}, "AFS_QNH_PRESSURE": {"Description": "This sets the QNH pressure in millibars to be used for pressure altitude in the altitude limit. A value of zero disables the altitude limit.", "DisplayName": "QNH pressure", "Units": "hPa", "User": "Advanced"}, "AFS_RC": {"Description": "This enables the RC part of the AFS. Will only be in effect if AFS_ENABLE is also 1", "DisplayName": "Enable RC Advanced Failsafe", "User": "Advanced"}, "AFS_RC_FAIL_TIME": {"Description": "This is the time in seconds in manual mode that failsafe termination will activate if RC input is lost. For the OBC rules this should be (1.5). Use 0 to disable.", "DisplayName": "RC failure time", "Units": "s", "User": "Advanced"}, "AFS_RC_MAN_ONLY": {"Description": "If this parameter is set to 1, then an RC loss will only cause the plane to terminate in manual control modes. If it is 0, then the plane will terminate in any flight mode.", "DisplayName": "Enable RC Termination only in manual control modes", "User": "Advanced"}, "AFS_TERMINATE": {"Description": "Can be set in flight to force termination of the heartbeat signal", "DisplayName": "Force Terminate", "User": "Advanced"}, "AFS_TERM_ACTION": {"Description": "This can be used to force an action on flight termination. Normally this is handled by an external failsafe board, but you can setup ArduPilot to handle it here. Please consult the wiki for more information on the possible values of the parameter", "DisplayName": "Terminate action", "User": "Advanced"}, "AFS_TERM_PIN": {"Description": "This sets a digital output pin to set high on flight termination. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Terminate Pin", "User": "Advanced", "Values": {"-1": "Disabled", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3"}}, "AFS_WP_COMMS": {"Description": "Waypoint number to navigate to on comms loss", "DisplayName": "Comms Waypoint", "User": "Advanced"}, "AFS_WP_GPS_LOSS": {"Description": "Waypoint number to navigate to on GPS lock loss", "DisplayName": "GPS Loss Waypoint", "User": "Advanced"}, "AHRS_COMP_BETA": {"Description": "This controls the time constant for the cross-over frequency used to fuse AHRS (airspeed and heading) and GPS data to estimate ground velocity. Time constant is 0.1/beta. A larger time constant will use GPS data less and a small time constant will use air data less.", "DisplayName": "AHRS Velocity Complementary Filter Beta Coefficient", "Increment": ".01", "Range": {"high": "0.5", "low": "0.001"}, "User": "Advanced"}, "AHRS_CUSTOM_PIT": {"Description": "Autopilot mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.", "DisplayName": "Board orientation pitch offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "AHRS_CUSTOM_ROLL": {"Description": "Autopilot mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.", "DisplayName": "Board orientation roll offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "AHRS_CUSTOM_YAW": {"Description": "Autopilot mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when AHRS_ORIENTATION is set to CUSTOM.", "DisplayName": "Board orientation yaw offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "AHRS_EKF_TYPE": {"Description": "This controls which NavEKF Kalman filter version is used for attitude and position estimation", "DisplayName": "Use NavEKF Kalman filter for attitude and position estimation", "User": "Advanced", "Values": {"0": "Disabled", "11": "ExternalAHRS", "2": "Enable EKF2", "3": "Enable EKF3"}}, "AHRS_GPS_GAIN": {"Description": "This controls how much to use the GPS to correct the attitude. This should never be set to zero for a plane as it would result in the plane losing control in turns. For a plane please use the default value of 1.0.", "DisplayName": "AHRS GPS gain", "Increment": ".01", "Range": {"high": "1.0", "low": "0.0"}, "User": "Advanced"}, "AHRS_GPS_MINSATS": {"Description": "Minimum number of satellites visible to use GPS for velocity based corrections attitude correction. This defaults to 6, which is about the point at which the velocity numbers from a GPS become too unreliable for accurate correction of the accelerometers.", "DisplayName": "AHRS GPS Minimum satellites", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "AHRS_GPS_USE": {"Description": "This controls whether to use dead-reckoning or GPS based navigation. If set to 0 then the GPS won't be used for navigation, and only dead reckoning will be used. A value of zero should never be used for normal flight. Currently this affects only the DCM-based AHRS: the EKF uses GPS according to its own parameters. A value of 2 means to use GPS for height as well as position - both in DCM estimation and when determining altitude-above-home.", "DisplayName": "AHRS use GPS for DCM navigation and position-down", "User": "Advanced", "Values": {"0": "Disabled", "1": "Use GPS for DCM position", "2": "Use GPS for DCM position and height"}}, "AHRS_OPTIONS": {"Bitmask": {"0": "DisableDCMFallbackFW", "1": "DisableDCMFallbackVTOL"}, "Description": "This controls optional AHRS behaviour. Setting DisableDCMFallbackFW will change the AHRS behaviour for fixed wing aircraft in fly-forward flight to not fall back to DCM when the EKF stops navigating. Setting DisableDCMFallbackVTOL will change the AHRS behaviour for fixed wing aircraft in non fly-forward (VTOL) flight to not fall back to DCM when the EKF stops navigating. ", "DisplayName": "Optional AHRS behaviour", "User": "Advanced"}, "AHRS_ORIENTATION": {"Description": "Overall board orientation relative to the standard orientation for the board type. This rotates the IMU and compass readings to allow the board to be oriented in your vehicle at any 90 or 45 degree angle. The label for each option is specified in the order of rotations for that orientation. This option takes affect on next boot. After changing you will need to re-level your vehicle. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the AHRS_CUSTOM_ROLL/PIT/YAW angles for AHRS orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_ROT1_ROLL/PIT/YAW or CUST_ROT2_ROLL/PIT/YAW angles.", "DisplayName": "Board Orientation", "User": "Advanced", "Values": {"0": "None", "1": "Yaw45", "10": "Yaw90Roll180", "100": "Custom 4.1 and older", "101": "Custom 1", "102": "Custom 2", "11": "Yaw135Roll180", "12": "Pitch180", "13": "Yaw225Roll180", "14": "Yaw270Roll180", "15": "Yaw315Roll180", "16": "Roll90", "17": "Yaw45Roll90", "18": "Yaw90Roll90", "19": "Yaw135Roll90", "2": "Yaw90", "20": "Roll270", "21": "Yaw45Roll270", "22": "Yaw90Roll270", "23": "Yaw135Roll270", "24": "Pitch90", "25": "Pitch270", "26": "Yaw90Pitch180", "27": "Yaw270Pitch180", "28": "Pitch90Roll90", "29": "Pitch90Roll180", "3": "Yaw135", "30": "Pitch90Roll270", "31": "Pitch180Roll90", "32": "Pitch180Roll270", "33": "Pitch270Roll90", "34": "Pitch270Roll180", "35": "Pitch270Roll270", "36": "Yaw90Pitch180Roll90", "37": "Yaw270Roll90", "38": "Yaw293Pitch68Roll180", "39": "Pitch315", "4": "Yaw180", "40": "Pitch315Roll90", "42": "Roll45", "43": "Roll315", "5": "Yaw225", "6": "Yaw270", "7": "Yaw315", "8": "Roll180", "9": "Yaw45Roll180"}}, "AHRS_RP_P": {"Description": "This controls how fast the accelerometers correct the attitude", "DisplayName": "AHRS RP_P", "Increment": ".01", "Range": {"high": "0.4", "low": "0.1"}, "User": "Advanced"}, "AHRS_TRIM_X": {"Description": "Compensates for the roll angle difference between the control board and the frame. Positive values make the vehicle roll right.", "DisplayName": "AHRS Trim Roll", "Increment": "0.01", "Range": {"high": "+0.1745", "low": "-0.1745"}, "Units": "rad", "User": "Standard"}, "AHRS_TRIM_Y": {"Description": "Compensates for the pitch angle difference between the control board and the frame. Positive values make the vehicle pitch up/back.", "DisplayName": "AHRS Trim Pitch", "Increment": "0.01", "Range": {"high": "+0.1745", "low": "-0.1745"}, "Units": "rad", "User": "Standard"}, "AHRS_TRIM_Z": {"Description": "Not Used", "DisplayName": "AHRS Trim Yaw", "Increment": "0.01", "Range": {"high": "+0.1745", "low": "-0.1745"}, "Units": "rad", "User": "Advanced"}, "AHRS_WIND_MAX": {"Description": "This sets the maximum allowable difference between ground speed and airspeed. A value of zero means to use the airspeed as is. This allows the plane to cope with a failing airspeed sensor by clipping it to groundspeed plus/minus this limit. See ARSPD_OPTIONS and ARSPD_WIND_MAX to disable airspeed sensors.", "DisplayName": "Maximum wind", "Increment": "1", "Range": {"high": "127", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "AHRS_YAW_P": {"Description": "This controls the weight the compass or GPS has on the heading. A higher value means the heading will track the yaw source (GPS or compass) more rapidly.", "DisplayName": "Yaw P", "Increment": ".01", "Range": {"high": "0.4", "low": "0.1"}, "User": "Advanced"}, "AIRSPEED_CRUISE": {"Description": "Target cruise airspeed in m/s in automatic throttle modes. Value is as an indicated (calibrated/apparent) airspeed.", "DisplayName": "Target cruise airspeed", "Units": "m/s", "User": "Standard"}, "AIRSPEED_MAX": {"Description": "Maximum airspeed demanded in automatic throttle modes. Should be set slightly less than level flight speed at THR_MAX and also at least 50% above AIRSPEED_MIN to allow for accurate TECS altitude control.", "DisplayName": "Maximum Airspeed", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "m/s", "User": "Standard"}, "AIRSPEED_MIN": {"Description": "Minimum airspeed demanded in automatic throttle modes. Should be set to 20% higher than level flight stall speed.", "DisplayName": "Minimum Airspeed", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "m/s", "User": "Standard"}, "AIS_LIST_MAX": {"Description": "AIS list size of nearest vessels. Longer lists take longer to refresh with lower SRx_ADSB values.", "DisplayName": "AIS vessel list size", "Range": {"high": "100", "low": "1"}, "User": "Advanced"}, "AIS_LOGGING": {"Bitmask": {"0": "Log all AIVDM messages", "1": "Log only unsupported AIVDM messages", "2": "Log decoded messages"}, "Description": "Bitmask of AIS logging options", "DisplayName": "AIS logging options", "User": "Advanced"}, "AIS_TIME_OUT": {"Description": "if no updates are received in this time a vessel will be removed from the list", "DisplayName": "AIS vessel time out", "Range": {"high": "2000", "low": "1"}, "Units": "s", "User": "Advanced"}, "AIS_TYPE": {"Description": "AIS receiver type", "DisplayName": "AIS receiver type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "NMEA AIVDM message"}}, "ALT_OFFSET": {"Description": "This is added to the target altitude in automatic flight. It can be used to add a global altitude offset to a mission", "DisplayName": "Altitude offset", "Increment": "1", "Range": {"high": "32767", "low": "-32767"}, "Units": "m", "User": "Advanced"}, "ARMING_ACCTHRESH": {"Description": "Accelerometer error threshold used to determine inconsistent accelerometers. Compares this error range to other accelerometers to detect a hardware or calibration error. Lower value means tighter check and harder to pass arming check. Not all accelerometers are created equal.", "DisplayName": "Accelerometer error threshold", "Range": {"high": "3.0", "low": "0.25"}, "Units": "m/s/s", "User": "Advanced"}, "ARMING_BBOX_SPD": {"Description": "This is a 3D GPS speed threshold above which we will force arm the vehicle to start logging. WARNING: This should only be used on a vehicle with no propellers attached to the flight controller and when the flight controller is not in control of the vehicle.", "DisplayName": "Blackbox speed", "Increment": "1", "Range": {"high": "20", "low": "1"}, "Units": "m/s", "User": "Advanced"}, "ARMING_CHECK": {"Bitmask": {"0": "All", "1": "Barometer", "10": "Logging Available", "11": "Hardware safety switch", "12": "GPS Configuration", "13": "System", "14": "Mission", "15": "Rangefinder", "16": "Camera", "17": "AuxAuth", "19": "FFT", "2": "Compass", "3": "GPS lock", "4": "INS", "5": "Parameters", "6": "RC Channels", "7": "Board voltage", "8": "Battery Level", "9": "Airspeed"}, "Description": "Checks prior to arming motor. This is a bitmask of checks that will be performed before allowing arming. For most users it is recommended to leave this at the default of 1 (all checks enabled). You can select whatever checks you prefer by adding together the values of each check type to set this parameter. For example, to only allow arming when you have GPS lock and no RC failsafe you would set ARMING_CHECK to 72.", "DisplayName": "Arm Checks to Perform (bitmask)", "User": "Standard"}, "ARMING_CRSDP_IGN": {"Description": "Must have value \"1\" if crashdump data is present on the system, or a prearm failure will be raised. Do not set this parameter unless the risks of doing so are fully understood. The presence of a crash dump means that the firmware currently installed has suffered a critical software failure which resulted in the autopilot immediately rebooting. The crashdump file gives diagnostic information which can help in finding the issue, please contact the ArduPIlot support team. If this crashdump data is present, the vehicle is likely unsafe to fly. Check the ArduPilot documentation for more details.", "DisplayName": "Disable CrashDump Arming check", "User": "Advanced", "Values": {"0": "Crash Dump arming check active", "1": "Crash Dump arming check deactivated"}}, "ARMING_MAGTHRESH": {"Description": "Compass magnetic field strength error threshold vs earth magnetic model. X and y axis are compared using this threhold, Z axis uses 2x this threshold. 0 to disable check", "DisplayName": "Compass magnetic field strength error threshold vs earth magnetic model", "Range": {"high": "500", "low": "0"}, "Units": "mGauss", "User": "Advanced"}, "ARMING_MIS_ITEMS": {"Bitmask": {"0": "Land", "1": "VTOL Land", "2": "DO_LAND_START", "3": "Takeoff", "4": "VTOL Takeoff", "5": "Rallypoint", "6": "RTL"}, "Description": "Bitmask of mission items that are required to be planned in order to arm the aircraft", "DisplayName": "Required mission items", "User": "Advanced"}, "ARMING_OPTIONS": {"Bitmask": {"0": "Disable prearm display", "1": "Do not send status text on state change"}, "Description": "Options that can be applied to change arming behaviour", "DisplayName": "Arming options", "User": "Advanced"}, "ARMING_REQUIRE": {"Description": "Arming disabled until some requirements are met. If 0, there are no requirements (arm immediately). If 1, sends the minimum throttle PWM value to the throttle channel when disarmed. If 2, send 0 PWM (no signal) to throttle channel when disarmed. On planes with ICE enabled and the throttle while disarmed option set in ICE_OPTIONS, the motor will always get THR_MIN when disarmed. Arming will occur using either rudder stick arming (if enabled) or GCS command when all mandatory and ARMING_CHECK items are satisfied. Note, when setting this parameter to 0, a reboot is required to immediately arm the plane.", "DisplayName": "Require Arming Motors ", "User": "Advanced", "Values": {"0": "Disabled", "1": "minimum PWM when disarmed", "2": "0 PWM when disarmed"}}, "ARMING_RUDDER": {"Description": "Allow arm/disarm by rudder input. When enabled arming can be done with right rudder, disarming with left rudder. Rudder arming only works with throttle at zero +- deadzone (RCx_DZ). Depending on vehicle type, arming in certain modes is prevented. See the wiki for each vehicle. Caution is recommended when arming if it is allowed in an auto-throttle mode!", "DisplayName": "Arming with Rudder enable/disable", "User": "Advanced", "Values": {"0": "Disabled", "1": "ArmingOnly", "2": "ArmOrDisarm"}}, "ARSPD2_AUTOCAL": {"Description": "Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.", "DisplayName": "Automatic airspeed ratio calibration", "User": "Advanced"}, "ARSPD2_BUS": {"Description": "Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.", "DisplayName": "Airspeed I2C bus", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Bus0", "1": "Bus1", "2": "Bus2"}}, "ARSPD2_DEVID": {"Description": "Airspeed sensor ID, taking into account its type, bus and instance", "DisplayName": "Airspeed ID", "ReadOnly": "True", "User": "Advanced"}, "ARSPD2_OFFSET": {"Description": "Airspeed calibration offset", "DisplayName": "Airspeed offset", "Increment": "0.1", "User": "Advanced"}, "ARSPD2_PIN": {"Description": "The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. ", "DisplayName": "Airspeed pin", "User": "Advanced"}, "ARSPD2_PSI_RANGE": {"Description": "This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device", "DisplayName": "The PSI range of the device", "User": "Advanced"}, "ARSPD2_RATIO": {"Description": "Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.", "DisplayName": "Airspeed ratio", "Increment": "0.1", "User": "Advanced"}, "ARSPD2_SKIP_CAL": {"Description": "This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.", "DisplayName": "Skip airspeed offset calibration on startup", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "ARSPD2_TUBE_ORDR": {"Description": "This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.", "DisplayName": "Control pitot tube order", "User": "Advanced", "Values": {"0": "Normal", "1": "Swapped", "2": "Auto Detect"}}, "ARSPD2_TYPE": {"Description": "Type of airspeed sensor", "DisplayName": "Airspeed type", "User": "Standard", "Values": {"0": "None", "1": "I2C-MS4525D0", "10": "I2C-DLVR-20in", "100": "SITL", "11": "I2C-DLVR-30in", "12": "I2C-DLVR-60in", "13": "NMEA water speed", "14": "MSP", "15": "ASP5033", "16": "ExternalAHRS", "2": "Analog", "3": "I2C-MS5525", "4": "I2C-MS5525 (0x76)", "5": "I2C-MS5525 (0x77)", "6": "I2C-SDP3X", "7": "I2C-DLVR-5in", "8": "DroneCAN", "9": "I2C-DLVR-10in"}}, "ARSPD2_USE": {"Description": "Enables airspeed use for automatic throttle modes and replaces control from THR_TRIM. Continues to display and log airspeed if set to 0. Uses airspeed for control if set to 1. Only uses airspeed when throttle = 0 if set to 2 (useful for gliders with airspeed sensors behind propellers).", "DisplayName": "Airspeed use", "User": "Standard", "Values": {"0": "DoNotUse", "1": "Use", "2": "UseWhenZeroThrottle"}}, "ARSPD_AUTOCAL": {"Description": "Enables automatic adjustment of airspeed ratio during a calibration flight based on estimation of ground speed and true airspeed. New ratio saved every 2 minutes if change is > 5%. Should not be left enabled.", "DisplayName": "Automatic airspeed ratio calibration", "User": "Advanced"}, "ARSPD_BUS": {"Description": "Bus number of the I2C bus where the airspeed sensor is connected. May not correspond to board's I2C bus number labels. Retry another bus and reboot if airspeed sensor fails to initialize.", "DisplayName": "Airspeed I2C bus", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Bus0", "1": "Bus1", "2": "Bus2"}}, "ARSPD_DEVID": {"Description": "Airspeed sensor ID, taking into account its type, bus and instance", "DisplayName": "Airspeed ID", "ReadOnly": "True", "User": "Advanced"}, "ARSPD_ENABLE": {"Description": "Enable airspeed sensor support", "DisplayName": "Airspeed Enable", "User": "Standard", "Values": {"0": "Disable", "1": "Enable"}}, "ARSPD_OFFSET": {"Description": "Airspeed calibration offset", "DisplayName": "Airspeed offset", "Increment": "0.1", "User": "Advanced"}, "ARSPD_OFF_PCNT": {"Description": "The maximum percentage speed change in airspeed reports that is allowed due to offset changes between calibrations before a warning is issued. This potential speed error is in percent of ASPD_FBW_MIN. 0 disables. Helps warn of calibrations without pitot being covered.", "DisplayName": "Maximum offset cal speed error ", "Range": {"high": "10.0", "low": "0.0"}, "Units": "%", "User": "Advanced"}, "ARSPD_OPTIONS": {"Bitmask": {"0": "SpeedMismatchDisable", "1": "AllowSpeedMismatchRecovery", "2": "DisableVoltageCorrection", "3": "UseEkf3Consistency", "4": "ReportOffset"}, "Description": "Bitmask of options to use with airspeed. 0:Disable use based on airspeed/groundspeed mismatch (see ARSPD_WIND_MAX), 1:Automatically reenable use based on airspeed/groundspeed mismatch recovery (see ARSPD_WIND_MAX) 2:Disable voltage correction, 3:Check that the airspeed is statistically consistent with the navigation EKF vehicle and wind velocity estimates using EKF3 (requires AHRS_EKF_TYPE = 3), 4:Report cal offset to GCS", "DisplayName": "Airspeed options bitmask", "User": "Advanced"}, "ARSPD_PIN": {"Description": "The pin number that the airspeed sensor is connected to for analog sensors. Set to 15 on the Pixhawk for the analog airspeed port. ", "DisplayName": "Airspeed pin", "User": "Advanced"}, "ARSPD_PRIMARY": {"Description": "This selects which airspeed sensor will be the primary if multiple sensors are found", "DisplayName": "Primary airspeed sensor", "User": "Advanced", "Values": {"0": "FirstSensor", "1": "2ndSensor"}}, "ARSPD_PSI_RANGE": {"Description": "This parameter allows you to set the PSI (pounds per square inch) range for your sensor. You should not change this unless you examine the datasheet for your device", "DisplayName": "The PSI range of the device", "User": "Advanced"}, "ARSPD_RATIO": {"Description": "Calibrates pitot tube pressure to velocity. Increasing this value will indicate a higher airspeed at any given dynamic pressure.", "DisplayName": "Airspeed ratio", "Increment": "0.1", "User": "Advanced"}, "ARSPD_SKIP_CAL": {"Description": "This parameter allows you to skip airspeed offset calibration on startup, instead using the offset from the last calibration. This may be desirable if the offset variance between flights for your sensor is low and you want to avoid having to cover the pitot tube on each boot.", "DisplayName": "Skip airspeed offset calibration on startup", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "ARSPD_TUBE_ORDER": {"Description": "This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.", "DisplayName": "Control pitot tube order", "User": "Advanced", "Values": {"0": "Normal", "1": "Swapped", "2": "Auto Detect"}}, "ARSPD_TUBE_ORDR": {"Description": "This parameter allows you to control whether the order in which the tubes are attached to your pitot tube matters. If you set this to 0 then the first (often the top) connector on the sensor needs to be the stagnation pressure (the pressure at the tip of the pitot tube). If set to 1 then the second (often the bottom) connector needs to be the stagnation pressure. If set to 2 (the default) then the airspeed driver will accept either order. The reason you may wish to specify the order is it will allow your airspeed sensor to detect if the aircraft is receiving excessive pressure on the static port compared to the stagnation port such as during a stall, which would otherwise be seen as a positive airspeed.", "DisplayName": "Control pitot tube order", "User": "Advanced", "Values": {"0": "Normal", "1": "Swapped", "2": "Auto Detect"}}, "ARSPD_TYPE": {"Description": "Type of airspeed sensor", "DisplayName": "Airspeed type", "User": "Standard", "Values": {"0": "None", "1": "I2C-MS4525D0", "10": "I2C-DLVR-20in", "100": "SITL", "11": "I2C-DLVR-30in", "12": "I2C-DLVR-60in", "13": "NMEA water speed", "14": "MSP", "15": "ASP5033", "16": "ExternalAHRS", "2": "Analog", "3": "I2C-MS5525", "4": "I2C-MS5525 (0x76)", "5": "I2C-MS5525 (0x77)", "6": "I2C-SDP3X", "7": "I2C-DLVR-5in", "8": "DroneCAN", "9": "I2C-DLVR-10in"}}, "ARSPD_USE": {"Description": "Enables airspeed use for automatic throttle modes and replaces control from THR_TRIM. Continues to display and log airspeed if set to 0. Uses airspeed for control if set to 1. Only uses airspeed when throttle = 0 if set to 2 (useful for gliders with airspeed sensors behind propellers).", "DisplayName": "Airspeed use", "User": "Standard", "Values": {"0": "DoNotUse", "1": "Use", "2": "UseWhenZeroThrottle"}}, "ARSPD_WIND_GATE": {"Description": "Number of standard deviations applied to the re-enable EKF consistency check that is used when ARSPD_OPTIONS bit position 3 is set. Larger values will make the re-enabling of the airspeed sensor faster, but increase the likelihood of re-enabling a degraded sensor. The value can be tuned by using the ARSP.TR log message by setting ARSPD_WIND_GATE to a value that is higher than the value for ARSP.TR observed with a healthy airspeed sensor. Occasional transients in ARSP.TR above the value set by ARSPD_WIND_GATE can be tolerated provided they are less than 5 seconds in duration and less than 10% duty cycle.", "DisplayName": "Re-enable Consistency Check Gate Size", "Range": {"high": "10.0", "low": "0.0"}, "User": "Advanced"}, "ARSPD_WIND_MAX": {"Description": "If the difference between airspeed and ground speed is greater than this value the sensor will be marked unhealthy. Using ARSPD_OPTION this health value can be used to disable the sensor.", "DisplayName": "Maximum airspeed and ground speed difference", "Units": "m/s", "User": "Advanced"}, "ARSPD_WIND_WARN": {"Description": "If the difference between airspeed and GPS speed is greater than this value the sensor will issue a warning. If 0 ARSPD_WIND_MAX is used.", "DisplayName": "Airspeed and GPS speed difference that gives a warning", "Units": "m/s", "User": "Advanced"}, "AUTOTUNE_AXES": {"Bitmask": {"0": "Roll", "1": "Pitch", "2": "Yaw"}, "Description": "1-byte bitmap of axes to autotune", "DisplayName": "Autotune axis bitmask", "User": "Standard"}, "AUTOTUNE_LEVEL": {"Description": "Level of aggressiveness of pitch and roll PID gains. Lower values result in a 'softer' tune. Level 6 recommended for most planes. A value of 0 means to keep the current values of RMAX and TCONST for the controllers, tuning only the PID values", "DisplayName": "Autotune level", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Standard"}, "AUTOTUNE_OPTIONS": {"Bitmask": {"0": "Disable FLTD update by Autotune", "1": "Disable FLTT update by Autotune"}, "Description": "Fixed Wing Autotune specific options. Useful on QuadPlanes with higher INS_GYRO_FILTER settings to prevent these filter values from being set too agressively during Fixed Wing Autotune.", "DisplayName": "Autotune options bitmask", "User": "Advanced"}, "AVD_ENABLE": {"Description": "Enable Avoidance using ADSB", "DisplayName": "Enable Avoidance using ADSB", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "AVD_F_ACTION": {"Description": "Specifies aircraft behaviour when a collision is imminent", "DisplayName": "Collision Avoidance Behavior", "User": "Advanced", "Values": {"0": "None", "1": "Report", "2": "Climb Or Descend", "3": "Move Horizontally", "4": "Move Perpendicularly in 3D", "5": "RTL", "6": "Hover"}}, "AVD_F_ALT_MIN": {"Description": "Minimum AMSL (above mean sea level) altitude for ADS-B avoidance. If the vehicle is below this altitude, no avoidance action will take place. Useful to prevent ADS-B avoidance from activating while below the tree line or around structures. Default of 0 is no minimum.", "DisplayName": "ADS-B avoidance minimum altitude", "Units": "m", "User": "Advanced"}, "AVD_F_DIST_XY": {"Description": "Closest allowed projected distance before F_ACTION is undertaken", "DisplayName": "Distance Fail XY", "Units": "m", "User": "Advanced"}, "AVD_F_DIST_Z": {"Description": "Closest allowed projected distance before BEHAVIOUR_F is undertaken", "DisplayName": "Distance Fail Z", "Units": "m", "User": "Advanced"}, "AVD_F_RCVRY": {"Description": "Determines what the aircraft will do after a fail event is resolved", "DisplayName": "Recovery behaviour after a fail event", "User": "Advanced", "Values": {"0": "Remain in AVOID_ADSB", "1": "Resume previous flight mode", "2": "RTL", "3": "Resume if AUTO else Loiter"}}, "AVD_F_TIME": {"Description": "Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than F_DIST_XY or F_DIST_Z then F_ACTION is undertaken", "DisplayName": "Time Horizon Fail", "Units": "s", "User": "Advanced"}, "AVD_OBS_MAX": {"Description": "Maximum number of obstacles to track", "DisplayName": "Maximum number of obstacles to track", "User": "Advanced"}, "AVD_W_ACTION": {"Description": "Specifies aircraft behaviour when a collision may occur", "DisplayName": "Collision Avoidance Behavior - Warn", "User": "Advanced", "Values": {"0": "None", "1": "Report"}}, "AVD_W_DIST_XY": {"Description": "Closest allowed projected distance before W_ACTION is undertaken", "DisplayName": "Distance Warn XY", "Units": "m", "User": "Advanced"}, "AVD_W_DIST_Z": {"Description": "Closest allowed projected distance before BEHAVIOUR_W is undertaken", "DisplayName": "Distance Warn Z", "Units": "m", "User": "Advanced"}, "AVD_W_TIME": {"Description": "Aircraft velocity vectors are multiplied by this time to determine closest approach. If this results in an approach closer than W_DIST_XY or W_DIST_Z then W_ACTION is undertaken (assuming F_ACTION is not undertaken)", "DisplayName": "Time Horizon Warn", "Units": "s", "User": "Advanced"}, "BARO1_DEVID": {"Description": "Barometer sensor ID, taking into account its type, bus and instance", "DisplayName": "Baro ID", "ReadOnly": "True", "User": "Advanced"}, "BARO1_GND_PRESS": {"Description": "calibrated ground pressure in Pascals", "DisplayName": "Ground Pressure", "Increment": "1", "ReadOnly": "True", "Units": "Pa", "User": "Advanced", "Volatile": "True"}, "BARO1_WCF_BCK": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative X direction (backwards)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO1_WCF_DN": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Z direction (down)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO1_WCF_ENABLE": {"Description": "This enables the use of wind coefficients for barometer compensation", "DisplayName": "Wind coefficient enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "BARO1_WCF_FWD": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive X direction (forward)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO1_WCF_LFT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Y direction (left)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO1_WCF_RGT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Y direction (right)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO1_WCF_UP": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Z direction (up)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_DEVID": {"Description": "Barometer2 sensor ID, taking into account its type, bus and instance", "DisplayName": "Baro ID2", "ReadOnly": "True", "User": "Advanced"}, "BARO2_GND_PRESS": {"Description": "calibrated ground pressure in Pascals", "DisplayName": "Ground Pressure", "Increment": "1", "ReadOnly": "True", "Units": "Pa", "User": "Advanced", "Volatile": "True"}, "BARO2_WCF_BCK": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative X direction (backwards)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_WCF_DN": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Z direction (down)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_WCF_ENABLE": {"Description": "This enables the use of wind coefficients for barometer compensation", "DisplayName": "Wind coefficient enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "BARO2_WCF_FWD": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive X direction (forward)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_WCF_LFT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Y direction (left)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_WCF_RGT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Y direction (right)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO2_WCF_UP": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Z direction (up)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_DEVID": {"Description": "Barometer3 sensor ID, taking into account its type, bus and instance", "DisplayName": "Baro ID3", "ReadOnly": "True", "User": "Advanced"}, "BARO3_GND_PRESS": {"Description": "calibrated ground pressure in Pascals", "DisplayName": "Absolute Pressure", "Increment": "1", "ReadOnly": "True", "Units": "Pa", "User": "Advanced", "Volatile": "True"}, "BARO3_WCF_BCK": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the X body axis. If the baro height estimate rises during backwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative X direction (backwards)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_WCF_DN": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during descending flight (or forward flight with a high backwards lean angle, eg braking manoeuvre), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Z direction (down)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_WCF_ENABLE": {"Description": "This enables the use of wind coefficients for barometer compensation", "DisplayName": "Wind coefficient enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "BARO3_WCF_FWD": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the X body axis. If the baro height estimate rises during forwards flight, then this will be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive X direction (forward)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_WCF_LFT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a negative wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the left, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in negative Y direction (left)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_WCF_RGT": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Y body axis. If the baro height estimate rises during sideways flight to the right, then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Y direction (right)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO3_WCF_UP": {"Description": "This is the ratio of static pressure error to dynamic pressure generated by a positive wind relative velocity along the Z body axis. If the baro height estimate rises above truth height during climbing flight (or forward flight with a high forwards lean angle), then this should be a negative number. Multirotors can use this feature only if using EKF3 and if the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters have been tuned.", "DisplayName": "Pressure error coefficient in positive Z direction (up)", "Increment": "0.05", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "BARO_ALTERR_MAX": {"Description": "This is the maximum acceptable altitude discrepancy between GPS altitude and barometric presssure altitude calculated against a standard atmosphere for arming checks to pass. If you are getting an arming error due to this parameter then you may have a faulty or substituted barometer. A common issue is vendors replacing a MS5611 in a \"Pixhawk\" with a MS5607. If you have that issue then please see BARO_OPTIONS parameter to force the MS5611 to be treated as a MS5607. This check is disabled if the value is zero.", "DisplayName": "Altitude error maximum", "Increment": "1", "Range": {"high": "5000", "low": "0"}, "Units": "m", "User": "Advanced"}, "BARO_ALT_OFFSET": {"Description": "altitude offset in meters added to barometric altitude. This is used to allow for automatic adjustment of the base barometric altitude by a ground station equipped with a barometer. The value is added to the barometric altitude read by the aircraft. It is automatically reset to 0 when the barometer is calibrated on each reboot or when a preflight calibration is performed.", "DisplayName": "altitude offset", "Increment": "0.1", "Units": "m", "User": "Advanced"}, "BARO_EXT_BUS": {"Description": "This selects the bus number for looking for an I2C barometer. When set to -1 it will probe all external i2c buses based on the BARO_PROBE_EXT parameter.", "DisplayName": "External baro bus", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Bus0", "1": "Bus1", "6": "Bus6"}}, "BARO_FIELD_ELV": {"Description": "User provided field elevation in meters. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. Changes to this parameter will only be used when disarmed. A value of 0 means the EKF origin height is used for takeoff height above sea level.", "DisplayName": "field elevation", "Increment": "0.1", "Units": "m", "User": "Advanced", "Volatile": "True"}, "BARO_FLTR_RNG": {"Description": "This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.", "DisplayName": "Range in which sample is accepted", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%"}, "BARO_GND_TEMP": {"Description": "User provided ambient ground temperature in degrees Celsius. This is used to improve the calculation of the altitude the vehicle is at. This parameter is not persistent and will be reset to 0 every time the vehicle is rebooted. A value of 0 means use the internal measurement ambient temperature.", "DisplayName": "ground temperature", "Increment": "1", "Units": "degC", "User": "Advanced", "Volatile": "True"}, "BARO_OPTIONS": {"Bitmask": {"0": "Treat MS5611 as MS5607"}, "Description": "Barometer options", "DisplayName": "Barometer options", "User": "Advanced"}, "BARO_PRIMARY": {"Description": "This selects which barometer will be the primary if multiple barometers are found", "DisplayName": "Primary barometer", "User": "Advanced", "Values": {"0": "FirstBaro", "1": "2ndBaro", "2": "3rdBaro"}}, "BARO_PROBE_EXT": {"Bitmask": {"0": "BMP085", "1": "BMP280", "10": "BMP388", "11": "SPL06", "12": "MSP", "2": "MS5611", "3": "MS5607", "4": "MS5637", "5": "FBM320", "6": "DPS280", "7": "LPS25H", "8": "Keller", "9": "MS5837"}, "Description": "This sets which types of external i2c barometer to look for. It is a bitmask of barometer types. The I2C buses to probe is based on BARO_EXT_BUS. If BARO_EXT_BUS is -1 then it will probe all external buses, otherwise it will probe just the bus number given in BARO_EXT_BUS.", "DisplayName": "External barometers to probe", "User": "Advanced"}, "BATT2_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT2_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT2_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT2__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT2_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT2_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT2_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT2_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT2_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT2_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT2_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT2_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT2_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT2_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT2_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT2_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT2_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT2_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT2_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT2_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT2_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT2_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT2_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT2_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT2_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT2_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT2_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT2_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT2_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT2_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT2_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT2_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT2_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT2_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT2_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT2_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT2_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT2_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT2_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT2_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT2_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT2_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT2_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT2_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT2_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT2_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT3_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT3_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT3_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT3__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT3_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT3_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT3_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT3_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT3_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT3_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT3_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT3_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT3_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT3_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT3_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT3_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT3_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT3_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT3_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT3_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT3_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT3_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT3_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT3_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT3_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT3_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT3_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT3_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT3_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT3_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT3_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT3_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT3_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT3_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT3_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT3_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT3_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT3_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT3_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT3_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT3_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT3_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT3_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT3_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT3_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT3_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT4_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT4_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT4_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT4__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT4_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT4_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT4_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT4_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT4_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT4_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT4_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT4_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT4_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT4_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT4_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT4_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT4_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT4_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT4_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT4_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT4_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT4_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT4_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT4_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT4_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT4_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT4_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT4_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT4_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT4_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT4_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT4_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT4_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT4_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT4_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT4_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT4_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT4_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT4_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT4_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT4_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT4_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT4_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT4_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT4_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT4_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT5_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT5_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT5_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT5__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT5_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT5_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT5_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT5_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT5_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT5_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT5_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT5_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT5_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT5_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT5_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT5_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT5_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT5_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT5_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT5_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT5_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT5_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT5_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT5_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT5_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT5_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT5_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT5_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT5_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT5_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT5_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT5_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT5_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT5_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT5_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT5_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT5_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT5_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT5_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT5_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT5_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT5_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT5_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT5_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT5_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT5_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT6_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT6_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT6_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT6__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT6_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT6_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT6_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT6_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT6_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT6_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT6_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT6_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT6_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT6_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT6_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT6_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT6_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT6_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT6_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT6_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT6_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT6_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT6_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT6_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT6_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT6_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT6_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT6_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT6_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT6_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT6_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT6_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT6_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT6_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT6_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT6_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT6_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT6_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT6_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT6_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT6_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT6_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT6_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT6_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT6_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT6_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT7_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT7_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT7_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT7__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT7_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT7_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT7_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT7_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT7_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT7_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT7_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT7_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT7_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT7_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT7_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT7_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT7_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT7_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT7_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT7_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT7_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT7_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT7_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT7_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT7_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT7_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT7_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT7_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT7_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT7_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT7_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT7_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT7_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT7_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT7_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT7_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT7_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT7_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT7_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT7_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT7_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT7_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT7_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT7_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT7_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT7_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT8_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT8_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT8_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT8__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT8_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT8_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT8_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT8_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT8_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT8_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT8_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT8_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT8_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT8_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT8_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT8_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT8_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT8_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT8_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT8_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT8_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT8_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT8_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT8_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT8_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT8_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT8_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT8_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT8_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT8_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT8_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT8_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT8_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT8_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT8_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT8_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT8_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT8_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT8_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT8_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT8_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT8_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT8_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT8_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT8_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT8_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT9_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT9_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT9_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT9__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT9_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT9_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT9_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT9_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT9_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT9_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT9_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT9_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT9_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT9_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT9_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT9_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT9_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT9_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT9_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT9_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT9_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT9_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT9_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT9_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT9_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT9_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT9_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT9_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT9_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT9_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT9_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT9_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT9_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT9_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT9_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT9_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT9_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT9_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT9_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT9_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT9_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT9_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT9_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT9_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT9_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT9_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTA_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTA_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTA_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTA__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTA_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTA_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTA_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTA_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTA_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTA_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTA_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTA_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTA_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTA_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTA_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTA_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTA_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTA_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTA_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTA_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTA_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTA_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTA_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTA_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTA_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTA_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTA_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTA_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTA_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTA_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTA_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTA_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTA_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTA_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTA_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTA_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTA_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTA_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTA_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTA_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTA_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTA_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTA_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTA_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTA_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTA_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTB_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTB_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTB_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTB__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTB_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTB_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTB_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTB_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTB_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTB_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTB_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTB_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTB_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTB_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTB_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTB_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTB_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTB_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTB_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTB_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTB_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTB_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTB_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTB_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTB_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTB_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTB_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTB_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTB_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTB_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTB_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTB_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTB_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTB_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTB_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTB_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTB_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTB_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTB_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTB_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTB_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTB_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTB_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTB_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTB_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTB_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTC_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTC_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTC_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTC__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTC_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTC_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTC_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTC_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTC_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTC_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTC_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTC_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTC_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTC_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTC_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTC_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTC_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTC_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTC_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTC_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTC_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTC_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTC_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTC_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTC_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTC_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTC_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTC_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTC_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTC_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTC_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTC_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTC_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTC_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTC_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTC_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTC_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTC_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTC_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTC_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTC_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTC_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTC_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTC_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTC_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTC_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTD_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTD_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTD_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTD__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTD_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTD_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTD_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTD_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTD_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTD_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTD_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTD_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTD_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTD_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTD_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTD_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTD_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTD_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTD_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTD_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTD_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTD_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTD_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTD_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTD_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTD_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTD_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTD_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTD_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTD_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTD_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTD_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTD_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTD_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTD_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTD_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTD_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTD_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTD_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTD_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTD_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTD_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTD_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTD_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTD_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTD_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTE_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTE_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTE_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTE__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTE_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTE_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTE_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTE_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTE_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTE_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTE_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTE_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTE_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTE_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTE_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTE_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTE_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTE_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTE_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTE_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTE_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTE_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTE_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTE_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTE_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTE_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTE_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTE_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTE_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTE_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTE_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTE_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTE_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTE_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTE_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTE_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTE_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTE_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTE_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTE_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTE_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTE_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTE_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTE_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTE_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTE_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTF_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTF_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTF_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTF__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTF_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTF_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTF_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTF_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTF_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTF_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTF_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTF_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTF_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTF_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTF_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTF_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTF_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTF_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTF_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTF_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTF_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTF_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTF_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTF_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTF_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTF_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTF_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTF_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTF_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTF_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTF_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTF_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTF_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTF_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTF_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTF_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTF_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTF_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTF_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTF_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTF_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTF_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTF_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTF_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTF_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTF_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATTG_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATTG_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATTG_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATTG__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATTG_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATTG_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTG_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTG_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTG_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTG_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTG_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTG_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATTG_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATTG_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTG_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATTG_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTG_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATTG_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTG_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTG_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATTG_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATTG_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATTG_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATTG_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATTG_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATTG_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATTG_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTG_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATTG_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATTG_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATTG_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATTG_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATTG_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATTG_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATTG_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATTG_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATTG_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATTG_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATTG_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATTG_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATTG_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATTG_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATTG_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATTG_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATTG_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATTG_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BATT_AMP_OFFSET": {"Description": "Voltage offset at zero current on current sensor for Analog Sensors. For Synthetic Current sensor, this offset is the zero throttle system current and is added to the calculated throttle base current.", "DisplayName": "AMP offset", "Units": "V", "User": "Standard"}, "BATT_AMP_PERVLT": {"Description": "Number of amps that a 1V reading on the current sensor corresponds to. With a Pixhawk using the 3DR Power brick this should be set to 17. For the Pixhawk with the 3DR 4in1 ESC this should be 17. For Synthetic Current sensor monitors, this is the maximum, full throttle current draw.", "DisplayName": "Amps per volt", "Units": "A/V", "User": "Standard"}, "BATT_ANX_CANDRV": {"Description": "Set ANX CAN driver", "DisplayName": "Set ANX CAN driver", "User": "Standard", "Values": {"0": "None", "1": "1stCANDriver", "2": "2ndCanDriver"}}, "BATT_ANX_ENABLE": {"Description": "Enable ANX battery support", "DisplayName": "Enable ANX battery support", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "BATT_ANX_INDEX": {"Description": "ANX CAN battery index", "DisplayName": "ANX CAN battery index", "Range": {"high": "10", "low": "1"}, "User": "Standard"}, "BATT_ANX_OPTIONS": {"Bitmask": {"0": "LogAllFrames"}, "Description": "ANX CAN battery options", "DisplayName": "ANX CAN battery options", "User": "Advanced"}, "BATT_ARM_MAH": {"Description": "Battery capacity remaining which is required to arm the aircraft. Set to 0 to allow arming at any capacity. Note that execept for smart batteries rebooting the vehicle will always reset the remaining capacity estimate, which can lead to this check not providing sufficent protection, it is recommended to always use this in conjunction with the BATT__ARM_VOLT parameter.", "DisplayName": "Required arming remaining capacity", "Increment": "50", "Units": "mAh", "User": "Advanced"}, "BATT_ARM_VOLT": {"Description": "Battery voltage level which is required to arm the aircraft. Set to 0 to allow arming at any voltage.", "DisplayName": "Required arming voltage", "Increment": "0.1", "Units": "V", "User": "Advanced"}, "BATT_CAPACITY": {"Description": "Capacity of the battery in mAh when full", "DisplayName": "Battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT_CRT_MAH": {"Description": "Battery capacity at which the critical battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT_FS_CRT_ACT parameter.", "DisplayName": "Battery critical capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT_CRT_VOLT": {"Description": "Battery voltage that triggers a critical battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT_FS_CRT_ACT parameter.", "DisplayName": "Critical battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT_CURR_MULT": {"Description": "Multiplier applied to all current related reports to allow for adjustment if no UAVCAN param access or current splitting applications", "DisplayName": "Scales reported power monitor current", "Range": {"high": "10", "low": ".1"}, "User": "Advanced"}, "BATT_CURR_PIN": {"Description": "Sets the analog input pin that should be used for current monitoring.", "DisplayName": "Battery Current sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "101": "PX4-v1", "14": "Pixhawk2_PM2", "15": "CubeOrange", "17": "Durandal", "3": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "4": "CubeOrange_PM2/Navigator"}}, "BATT_ESC_INDEX": {"Description": "ESC Telemetry Index to write voltage, current, consumption and temperature data to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT_ESC_MASK": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "If 0 all connected ESCs will be used. If non-zero, only those selected in will be used.", "DisplayName": "ESC mask", "User": "Standard"}, "BATT_FL_FF": {"Description": "First order polynomial fit term", "DisplayName": "First order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT_FL_FLTR": {"Description": "Filter frequency in Hertz where a low pass filter is used. This is used to filter out tank slosh from the fuel level reading. A value of -1 disables the filter and unfiltered voltage is used to determine the fuel level. The suggested values at in the range of 0.2 Hz to 0.5 Hz.", "DisplayName": "Fuel level filter frequency", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "BATT_FL_FS": {"Description": "Second order polynomial fit term", "DisplayName": "Second order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT_FL_FT": {"Description": "Third order polynomial fit term", "DisplayName": "Third order term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT_FL_OFF": {"Description": "Offset polynomial fit term", "DisplayName": "Offset term", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "BATT_FL_PIN": {"Description": "Analog input pin that fuel level sensor is connected to. Airspeed ports can be used for Analog input. When using analog pin 103, the maximum value of the input in 3.3V.", "DisplayName": "Fuel level analog pin number", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC"}}, "BATT_FL_VLT_MIN": {"Description": "The voltage seen on the analog pin when the fuel tank is empty. Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Empty fuel level voltage", "Range": {"high": "10", "low": "0.01"}, "Units": "V", "User": "Advanced"}, "BATT_FL_V_MULT": {"Description": "Voltage multiplier to determine what the full tank voltage reading is. This is calculated as 1 / (Voltage_Full - Voltage_Empty) Note: For this type of battery monitor, the voltage seen by the analog pin is displayed as battery voltage on a GCS.", "DisplayName": "Fuel level voltage multiplier", "Range": {"high": "10", "low": "0.01"}, "User": "Advanced"}, "BATT_FS_CRT_ACT": {"Description": "What action the vehicle should perform if it hits a critical battery failsafe", "DisplayName": "Critical battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "5": "Parachute", "6": "Loiter to QLand"}}, "BATT_FS_LOW_ACT": {"Description": "What action the vehicle should perform if it hits a low battery failsafe", "DisplayName": "Low battery failsafe action", "User": "Standard", "Values": {"0": "None", "1": "RTL", "2": "Land", "3": "Terminate", "4": "QLand", "6": "Loiter to QLand"}}, "BATT_FS_VOLTSRC": {"Description": "Voltage type used for detection of low voltage event", "DisplayName": "Failsafe voltage source", "User": "Advanced", "Values": {"0": "Raw Voltage", "1": "Sag Compensated Voltage"}}, "BATT_I2C_ADDR": {"Description": "Battery monitor I2C address. If this is zero then probe list of supported addresses", "DisplayName": "Battery monitor I2C address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT_I2C_BUS": {"Description": "Battery monitor I2C bus number", "DisplayName": "Battery monitor I2C bus number", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "path": "AP_BattMonitor_INA2xx"}, "BATT_LOW_MAH": {"Description": "Battery capacity at which the low battery failsafe is triggered. Set to 0 to disable battery remaining failsafe. If the battery capacity drops below this level the vehicle will perform the failsafe specified by the BATT_FS_LOW_ACT parameter.", "DisplayName": "Low battery capacity", "Increment": "50", "Units": "mAh", "User": "Standard"}, "BATT_LOW_TIMER": {"Description": "This is the timeout in seconds before a low voltage event will be triggered. For aircraft with low C batteries it may be necessary to raise this in order to cope with low voltage on long takeoffs. A value of zero disables low voltage errors.", "DisplayName": "Low voltage timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "BATT_LOW_VOLT": {"Description": "Battery voltage that triggers a low battery failsafe. Set to 0 to disable. If the battery voltage drops below this voltage continuously for more then the period specified by the BATT_LOW_TIMER parameter then the vehicle will perform the failsafe specified by the BATT_FS_LOW_ACT parameter.", "DisplayName": "Low battery voltage", "Increment": "0.1", "Units": "V", "User": "Standard"}, "BATT_MAX_AMPS": {"Description": "This controls the maximum current the INS2XX sensor will work with.", "DisplayName": "Battery monitor max current", "Range": {"high": "400", "low": "1"}, "Units": "A", "User": "Advanced"}, "BATT_MAX_VOLT": {"Description": "Maximum voltage of battery. Provides scaling of current versus voltage", "DisplayName": "Maximum Battery Voltage", "Range": {"high": "100", "low": "7"}, "User": "Advanced"}, "BATT_MONITOR": {"Description": "Controls enabling monitoring of the battery's voltage and current", "DisplayName": "Battery monitoring", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "10": "Sum Of Selected Monitors", "11": "FuelFlow", "12": "FuelLevelPWM", "13": "SMBUS-SUI3", "14": "SMBUS-SUI6", "15": "NeoDesign", "16": "SMBus-Maxell", "17": "Generator-Elec", "18": "Generator-Fuel", "19": "Rotoye", "20": "MPPT", "21": "INA2XX", "22": "LTC2946", "23": "Torqeedo", "24": "FuelLevelAnalog", "25": "Synthetic Current and Analog Voltage", "26": "INA239_SPI", "27": "EFI", "28": "AD7091R5", "29": "Scripting", "3": "Analog Voltage Only", "4": "Analog Voltage and Current", "5": "Solo", "6": "Bebop", "7": "SMBus-Generic", "8": "DroneCAN-BatteryInfo", "9": "ESC"}}, "BATT_OPTIONS": {"Bitmask": {"0": "Ignore DroneCAN SoC", "1": "MPPT reports input voltage and current", "2": "MPPT Powered off when disarmed", "3": "MPPT Powered on when armed", "4": "MPPT Powered off at boot", "5": "MPPT Powered on at boot", "6": "Send resistance compensated voltage to GCS", "7": "Allow DroneCAN InfoAux to be from a different CAN node"}, "Description": "This sets options to change the behaviour of the battery monitor", "DisplayName": "Battery monitor options", "User": "Advanced"}, "BATT_SERIAL_NUM": {"Description": "Battery serial number, automatically filled in for SMBus batteries, otherwise will be -1. With DroneCan it is the battery_id.", "DisplayName": "Battery serial number", "User": "Advanced"}, "BATT_SHUNT": {"Description": "This sets the shunt resistor used in the device", "DisplayName": "Battery monitor shunt resistor", "Range": {"high": "0.01", "low": "0.0001"}, "Units": "Ohm", "User": "Advanced"}, "BATT_SOC1_C1": {"Description": "Battery estimator coefficient1", "DisplayName": "Battery estimator coefficient1", "Range": {"high": "200", "low": "100"}, "User": "Standard"}, "BATT_SOC1_C2": {"Description": "Battery estimator coefficient2", "DisplayName": "Battery estimator coefficient2", "Range": {"high": "5", "low": "2"}, "User": "Standard"}, "BATT_SOC1_C3": {"Description": "Battery estimator coefficient3", "DisplayName": "Battery estimator coefficient3", "Range": {"high": "0.5", "low": "0.01"}, "User": "Standard"}, "BATT_SOC1_IDX": {"Description": "Battery estimator index", "DisplayName": "Battery estimator index", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "BATT_SOC1_NCELL": {"Description": "Battery estimator cell count", "DisplayName": "Battery estimator cell count", "Range": {"high": "48", "low": "0"}, "User": "Standard"}, "BATT_SOC2_C1": {"Description": "Battery estimator coefficient1", "DisplayName": "Battery estimator coefficient1", "Range": {"high": "200", "low": "100"}, "User": "Standard"}, "BATT_SOC2_C2": {"Description": "Battery estimator coefficient2", "DisplayName": "Battery estimator coefficient2", "Range": {"high": "5", "low": "2"}, "User": "Standard"}, "BATT_SOC2_C3": {"Description": "Battery estimator coefficient3", "DisplayName": "Battery estimator coefficient3", "Range": {"high": "0.5", "low": "0.01"}, "User": "Standard"}, "BATT_SOC2_IDX": {"Description": "Battery estimator index", "DisplayName": "Battery estimator index", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "BATT_SOC2_NCELL": {"Description": "Battery estimator cell count", "DisplayName": "Battery estimator cell count", "Range": {"high": "48", "low": "0"}, "User": "Standard"}, "BATT_SOC3_C1": {"Description": "Battery estimator coefficient1", "DisplayName": "Battery estimator coefficient1", "Range": {"high": "200", "low": "100"}, "User": "Standard"}, "BATT_SOC3_C2": {"Description": "Battery estimator coefficient2", "DisplayName": "Battery estimator coefficient2", "Range": {"high": "5", "low": "2"}, "User": "Standard"}, "BATT_SOC3_C3": {"Description": "Battery estimator coefficient3", "DisplayName": "Battery estimator coefficient3", "Range": {"high": "0.5", "low": "0.01"}, "User": "Standard"}, "BATT_SOC3_IDX": {"Description": "Battery estimator index", "DisplayName": "Battery estimator index", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "BATT_SOC3_NCELL": {"Description": "Battery estimator cell count", "DisplayName": "Battery estimator cell count", "Range": {"high": "48", "low": "0"}, "User": "Standard"}, "BATT_SOC4_C1": {"Description": "Battery estimator coefficient1", "DisplayName": "Battery estimator coefficient1", "Range": {"high": "200", "low": "100"}, "User": "Standard"}, "BATT_SOC4_C2": {"Description": "Battery estimator coefficient2", "DisplayName": "Battery estimator coefficient2", "Range": {"high": "5", "low": "2"}, "User": "Standard"}, "BATT_SOC4_C3": {"Description": "Battery estimator coefficient3", "DisplayName": "Battery estimator coefficient3", "Range": {"high": "0.5", "low": "0.01"}, "User": "Standard"}, "BATT_SOC4_IDX": {"Description": "Battery estimator index", "DisplayName": "Battery estimator index", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "BATT_SOC4_NCELL": {"Description": "Battery estimator cell count", "DisplayName": "Battery estimator cell count", "Range": {"high": "48", "low": "0"}, "User": "Standard"}, "BATT_SOC_COUNT": {"Description": "Number of battery SOC estimators", "DisplayName": "Count of SOC estimators", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "BATT_SUM_MASK": {"Bitmask": {"0": "monitor 1", "1": "monitor 2", "2": "monitor 3", "3": "monitor 4", "4": "monitor 5", "5": "monitor 6", "6": "monitor 7", "7": "monitor 8", "8": "monitor 9"}, "Description": "0: sum of remaining battery monitors, If none 0 sum of specified monitors. Current will be summed and voltages averaged.", "DisplayName": "Battery Sum mask", "User": "Standard"}, "BATT_VLT_OFFSET": {"Description": "Voltage offset on voltage pin. This allows for an offset due to a diode. This voltage is subtracted before the scaling is applied.", "DisplayName": "Voltage offset", "Units": "V", "User": "Advanced"}, "BATT_VOLT_MULT": {"Description": "Used to convert the voltage of the voltage sensing pin (BATT_VOLT_PIN) to the actual battery's voltage (pin_voltage * VOLT_MULT). For the 3DR Power brick with a Pixhawk, this should be set to 10.1. For the Pixhawk with the 3DR 4in1 ESC this should be 12.02. For the PX using the PX4IO power supply this should be set to 1.", "DisplayName": "Voltage Multiplier", "User": "Advanced"}, "BATT_VOLT_PIN": {"Description": "Sets the analog input pin that should be used for voltage monitoring.", "DisplayName": "Battery Voltage sensing pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "BATT_WATT_MAX": {"Description": "If battery wattage (voltage * current) exceeds this value then the system will reduce max throttle (THR_MAX, TKOFF_THR_MAX and THR_MIN for reverse thrust) to satisfy this limit. This helps limit high current to low C rated batteries regardless of battery voltage. The max throttle will slowly grow back to THR_MAX (or TKOFF_THR_MAX ) and THR_MIN if demanding the current max and under the watt max. Use 0 to disable.", "DisplayName": "Maximum allowed power (Watts)", "Increment": "1", "Units": "W", "User": "Advanced"}, "BRD_ALT_CONFIG": {"Description": "Select an alternative hardware configuration. A value of zero selects the default configuration for this board. Other values are board specific. Please see the documentation for your board for details on any alternative configuration values that may be available.", "DisplayName": "Alternative HW config", "Increment": "1", "Range": {"high": "10", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "BRD_BOOT_DELAY": {"Description": "This adds a delay in milliseconds to boot to ensure peripherals initialise fully", "DisplayName": "Boot delay", "Range": {"high": "10000", "low": "0"}, "Units": "ms", "User": "Advanced"}, "BRD_HEAT_I": {"Description": "Board Heater integrator gain", "DisplayName": "Board Heater I gain", "Increment": "0.1", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "BRD_HEAT_IMAX": {"Description": "Board Heater integrator maximum", "DisplayName": "Board Heater IMAX", "Increment": "1", "Range": {"high": "100", "low": "0"}, "User": "Advanced"}, "BRD_HEAT_LOWMGN": {"Description": "Arming check will fail if temp is lower than this margin below BRD_HEAT_TARG. 0 disables the low temperature check", "DisplayName": "Board heater temp lower margin", "Range": {"high": "20", "low": "0"}, "Units": "degC", "User": "Advanced"}, "BRD_HEAT_P": {"Description": "Board Heater P gain", "DisplayName": "Board Heater P gain", "Increment": "1", "Range": {"high": "500", "low": "1"}, "User": "Advanced"}, "BRD_HEAT_TARG": {"Description": "Board heater target temperature for boards with controllable heating units. Set to -1 to disable the heater, please reboot after setting to -1.", "DisplayName": "Board heater temperature target", "Range": {"high": "80", "low": "-1"}, "Units": "degC", "User": "Advanced"}, "BRD_IO_DSHOT": {"Description": "This loads the DShot firmware on the IO co-processor", "DisplayName": "Load DShot FW on IO", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "StandardFW", "1": "DshotFW"}}, "BRD_IO_ENABLE": {"Description": "This allows for the IO co-processor on boards with an IOMCU to be disabled. Setting to 2 will enable the IOMCU but not attempt to update firmware on startup", "DisplayName": "Enable IO co-processor", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "EnableNoFWUpdate"}}, "BRD_OPTIONS": {"Bitmask": {"0": "Enable hardware watchdog", "1": "Disable MAVftp", "2": "Enable set of internal parameters", "3": "Enable Debug Pins", "4": "Unlock flash on reboot", "5": "Write protect firmware flash on reboot", "6": "Write protect bootloader flash on reboot", "7": "Skip board validation", "8": "Disable board arming gpio output change on arm/disarm"}, "Description": "Board specific option flags", "DisplayName": "Board options", "User": "Advanced"}, "BRD_PWM_VOLT_SEL": {"Description": "This sets the voltage max for PWM output pulses. 0 for 3.3V and 1 for 5V output. On boards with an IOMCU that support this parameter this option only affects the 8 main outputs, not the 6 auxiliary outputs. Using 5V output can help to reduce the impact of ESC noise interference corrupting signals to the ESCs.", "DisplayName": "Set PWM Out Voltage", "User": "Advanced", "Values": {"0": "3.3V", "1": "5V"}}, "BRD_RADIO_ABLVL": {"Description": "This sets the minimum RSSI of an auto-bind packet for it to be accepted. This should be set so that auto-bind will only happen at short range to minimise the change of an auto-bind happening accidentially", "DisplayName": "Auto-bind level", "Range": {"high": "31", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_ABTIME": {"Description": "When non-zero this sets the time with no transmitter packets before we start looking for auto-bind packets.", "DisplayName": "Auto-bind time", "Range": {"high": "120", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_BZOFS": {"Description": "Set transmitter buzzer note adjustment (adjust frequency up)", "DisplayName": "Transmitter buzzer adjustment", "Range": {"high": "40", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_DEBUG": {"Description": "radio debug level", "DisplayName": "debug level", "Range": {"high": "4", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_DISCRC": {"Description": "disable receive CRC (for debug)", "DisplayName": "disable receive CRC", "User": "Advanced", "Values": {"0": "NotDisabled", "1": "Disabled"}}, "BRD_RADIO_FCCTST": {"Description": "If this is enabled then the radio will continuously transmit as required for FCC testing. The transmit channel is set by the value of the parameter. The radio will not work for RC input while this is enabled", "DisplayName": "Put radio into FCC test mode", "User": "Advanced", "Values": {"0": "Disabled", "1": "MinChannel", "2": "MidChannel", "3": "MaxChannel", "4": "MinChannelCW", "5": "MidChannelCW", "6": "MaxChannelCW"}}, "BRD_RADIO_PPSCH": {"Description": "Channel to show received packet-per-second rate, or zero for disabled", "DisplayName": "Packet rate channel", "Range": {"high": "16", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_PROT": {"Description": "Select air protocol", "DisplayName": "protocol", "User": "Advanced", "Values": {"0": "Auto", "1": "DSM2", "2": "DSMX"}}, "BRD_RADIO_SIGCH": {"Description": "Channel to show receive RSSI signal strength, or zero for disabled", "DisplayName": "RSSI signal strength", "Range": {"high": "16", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_STKMD": {"Description": "This selects between different stick input modes. The default is mode2, which has throttle on the left stick and pitch on the right stick. You can instead set mode1, which has throttle on the right stick and pitch on the left stick.", "DisplayName": "Stick input mode", "User": "Advanced", "Values": {"1": "Mode1", "2": "Mode2"}}, "BRD_RADIO_TELEM": {"Description": "If this is non-zero then telemetry packets will be sent over DSM", "DisplayName": "Enable telemetry", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "BRD_RADIO_TESTCH": {"Description": "This sets the radio to a fixed test channel for factory testing. Using a fixed channel avoids the need for binding in factory testing.", "DisplayName": "Set radio to factory test channel", "User": "Advanced", "Values": {"0": "Disabled", "1": "TestChan1", "2": "TestChan2", "3": "TestChan3", "4": "TestChan4", "5": "TestChan5", "6": "TestChan6", "7": "TestChan7", "8": "TestChan8"}}, "BRD_RADIO_TPPSCH": {"Description": "Channel to show telemetry packets-per-second value, as received at TX", "DisplayName": "Telemetry PPS channel", "Range": {"high": "16", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_TSIGCH": {"Description": "Channel to show telemetry RSSI value as received by TX", "DisplayName": "RSSI value channel for telemetry data on transmitter", "Range": {"high": "16", "low": "0"}, "User": "Advanced"}, "BRD_RADIO_TXMAX": {"Description": "Set transmitter maximum transmit power (from 1 to 8)", "DisplayName": "Transmitter transmit power", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "BRD_RADIO_TXPOW": {"Description": "Set telemetry transmit power. This is the power level (from 1 to 8) for telemetry packets sent from the RX to the TX", "DisplayName": "Telemetry Transmit power", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "BRD_RADIO_TYPE": {"Description": "This enables support for direct attached radio receivers", "DisplayName": "Set type of direct attached radio", "Values": {"0": "None", "1": "CYRF6936", "2": "CC2500", "3": "BK2425"}}, "BRD_RTC_TYPES": {"Bitmask": {"0": "GPS", "1": "MAVLINK_SYSTEM_TIME", "2": "HW"}, "Description": "Specifies which sources of UTC time will be accepted", "DisplayName": "Allowed sources of RTC time", "User": "Advanced"}, "BRD_RTC_TZ_MIN": {"Description": "Adds offset in +- minutes from UTC to calculate local time", "DisplayName": "Timezone offset from UTC", "Range": {"high": "+840", "low": "-720"}, "User": "Advanced"}, "BRD_SAFETYOPTION": {"Bitmask": {"0": "ActiveForSafetyDisable", "1": "ActiveForSafetyEnable", "2": "ActiveWhenArmed", "3": "Force safety on when the aircraft disarms"}, "Description": "This controls the activation of the safety button. It allows you to control if the safety button can be used for safety enable and/or disable, and whether the button is only active when disarmed", "DisplayName": "Options for safety button behavior", "User": "Standard"}, "BRD_SAFETY_DEFLT": {"Description": "This controls the default state of the safety switch at startup. When set to 1 the safety switch will start in the safe state (flashing) at boot. When set to zero the safety switch will start in the unsafe state (solid) at startup. Note that if a safety switch is fitted the user can still control the safety state after startup using the switch. The safety state can also be controlled in software using a MAVLink message.", "DisplayName": "Sets default state of the safety switch", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "BRD_SAFETY_MASK": {"Bitmask": {"0": "Output1", "1": "Output2", "10": "Output11", "11": "Output12", "12": "Output13", "13": "Output14", "2": "Output3", "3": "Output4", "4": "Output5", "5": "Output6", "6": "Output7", "7": "Output8", "8": "Output9", "9": "Output10"}, "Description": "A bitmask which controls what outputs can move while the safety switch has not been pressed", "DisplayName": "Outputs which ignore the safety switch state", "RebootRequired": "True", "User": "Advanced"}, "BRD_SBUS_OUT": {"Description": "This sets the SBUS output frame rate in Hz", "DisplayName": " SBUS output rate", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "50Hz", "2": "75Hz", "3": "100Hz", "4": "150Hz", "5": "200Hz", "6": "250Hz", "7": "300Hz"}}, "BRD_SD_FENCE": {"Description": "This sets the amount of storage in kilobytes reserved on the microsd card in fence.stg for fence storage.", "DisplayName": " SDCard Fence size", "Range": {"high": "64", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "BRD_SD_MISSION": {"Description": "This sets the amount of storage in kilobytes reserved on the microsd card in mission.stg for waypoint storage. Each waypoint uses 15 bytes.", "DisplayName": " SDCard Mission size", "Range": {"high": "64", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "BRD_SD_SLOWDOWN": {"Description": "This is a scaling factor to slow down microSD operation. It can be used on flight board and microSD card combinations where full speed is not reliable. For normal full speed operation a value of 0 should be used.", "DisplayName": "microSD slowdown", "Increment": "1", "Range": {"high": "32", "low": "0"}, "User": "Advanced"}, "BRD_SER1_RTSCTS": {"Description": "Enable flow control on serial 1 (telemetry 1). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup. Note that the PX4v1 does not have hardware flow control pins on this port, so you should leave this disabled.", "DisplayName": "Serial 1 flow control", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Auto"}}, "BRD_SER2_RTSCTS": {"Description": "Enable flow control on serial 2 (telemetry 2). You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.", "DisplayName": "Serial 2 flow control", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Auto"}}, "BRD_SER3_RTSCTS": {"Description": "Enable flow control on serial 3. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.", "DisplayName": "Serial 3 flow control", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Auto"}}, "BRD_SER4_RTSCTS": {"Description": "Enable flow control on serial 4. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.", "DisplayName": "Serial 4 flow control", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Auto"}}, "BRD_SER5_RTSCTS": {"Description": "Enable flow control on serial 5. You must have the RTS and CTS pins connected to your radio. The standard DF13 6 pin connector for a 3DR radio does have those pins connected. If this is set to 2 then flow control will be auto-detected by checking for the output buffer filling on startup.", "DisplayName": "Serial 5 flow control", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Auto"}}, "BRD_SERIAL_NUM": {"Description": "User-defined serial number of this vehicle, it can be any arbitrary number you want and has no effect on the autopilot", "DisplayName": "User-defined serial number", "Range": {"high": "8388607", "low": "-8388608"}, "User": "Standard"}, "BRD_TYPE": {"Description": "This allows selection of a PX4 or VRBRAIN board type. If set to zero then the board type is auto-detected (PX4)", "DisplayName": "Board type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "AUTO", "1": "PX4V1", "100": "PX4 OLDDRIVERS", "13": "Intel Aero FC", "14": "Pixhawk Pro", "2": "Pixhawk", "20": "AUAV2.1", "21": "PCNC1", "22": "MINDPXV2", "23": "SP01", "24": "CUAVv5/FMUV5", "3": "Cube/Pixhawk2", "30": "VRX BRAIN51", "32": "VRX BRAIN52", "33": "VRX BRAIN52E", "34": "VRX UBRAIN51", "35": "VRX UBRAIN52", "36": "VRX CORE10", "38": "VRX BRAIN54", "39": "PX4 FMUV6", "4": "Pixracer", "5": "PixhawkMini", "6": "Pixhawk2Slim"}}, "BRD_VBUS_MIN": {"Description": "Minimum voltage on the autopilot power rail to allow the aircraft to arm. 0 to disable the check.", "DisplayName": "Autopilot board voltage requirement", "Increment": "0.1", "Range": {"high": "5.5", "low": "4.0"}, "Units": "V", "User": "Advanced"}, "BRD_VSERVO_MIN": {"Description": "Minimum voltage on the servo rail to allow the aircraft to arm. 0 to disable the check.", "DisplayName": "Servo voltage requirement", "Increment": "0.1", "Range": {"high": "12.0", "low": "3.3"}, "Units": "V", "User": "Advanced"}, "BTN_ENABLE": {"Description": "This enables the button checking module. When this is disabled the parameters for setting button inputs are not visible", "DisplayName": "Enable button reporting", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "BTN_FUNC1": {"Description": "Auxiliary RC Options function executed on pin change", "DisplayName": "Button Pin 1 RC Channel function", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "BTN_FUNC2": {"Description": "Auxiliary RC Options function executed on pin change", "DisplayName": "Button Pin 2 RC Channel function", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "BTN_FUNC3": {"Description": "Auxiliary RC Options function executed on pin change", "DisplayName": "Button Pin 3 RC Channel function", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "BTN_FUNC4": {"Description": "Auxiliary RC Options function executed on pin change", "DisplayName": "Button Pin 4 RC Channel function", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "BTN_OPTIONS1": {"Bitmask": {"0": "PWM Input", "1": "InvertInput"}, "Description": "Options for Pin 1. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.", "DisplayName": "Button Pin 1 Options", "User": "Standard"}, "BTN_OPTIONS2": {"Bitmask": {"0": "PWM Input", "1": "InvertInput"}, "Description": "Options for Pin 2. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.", "DisplayName": "Button Pin 2 Options", "User": "Standard"}, "BTN_OPTIONS3": {"Bitmask": {"0": "PWM Input", "1": "InvertInput"}, "Description": "Options for Pin 3. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.", "DisplayName": "Button Pin 3 Options"}, "BTN_OPTIONS4": {"Bitmask": {"0": "PWM Input", "1": "InvertInput"}, "Description": "Options for Pin 4. PWM input detects PWM above or below 1800/1200us instead of logic level. If PWM is not detected or is less than 800us or above 2200us the button will interpreted as low. Invert changes HIGH state to be logic low voltage on pin, or below 1200us, if PWM input.", "DisplayName": "Button Pin 4 Options", "User": "Standard"}, "BTN_PIN1": {"Description": "Digital pin number for first button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "First button Pin", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6"}}, "BTN_PIN2": {"Description": "Digital pin number for second button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Second button Pin", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6"}}, "BTN_PIN3": {"Description": "Digital pin number for third button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Third button Pin", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6"}}, "BTN_PIN4": {"Description": "Digital pin number for fourth button input. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Fourth button Pin", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6"}}, "BTN_REPORT_SEND": {"Description": "The duration in seconds that a BUTTON_CHANGE report is repeatedly sent to the GCS regarding a button changing state. Note that the BUTTON_CHANGE message is MAVLink2 only.", "DisplayName": "Report send time", "Range": {"high": "3600", "low": "0"}, "User": "Standard"}, "CAM1_DURATION": {"Description": "Duration in seconds that the camera shutter is held open", "DisplayName": "Camera shutter duration held open", "Range": {"high": "5", "low": "0"}, "Units": "s", "User": "Standard"}, "CAM1_FEEDBAK_PIN": {"Description": "pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.", "DisplayName": "Camera feedback pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "CAM1_FEEDBAK_POL": {"Description": "Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low", "DisplayName": "Camera feedback pin polarity", "User": "Standard", "Values": {"0": "TriggerLow", "1": "TriggerHigh"}}, "CAM1_HFOV": {"Description": "Camera horizontal field of view. 0 if unknown", "DisplayName": "Camera horizontal field of view", "Range": {"high": "360", "low": "0"}, "Units": "deg", "User": "Standard"}, "CAM1_INTRVAL_MIN": {"Description": "Postpone shooting if previous picture was taken less than this many seconds ago", "DisplayName": "Camera minimum time interval between photos", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Standard"}, "CAM1_MNT_INST": {"Description": "Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1", "DisplayName": "Camera Mount instance", "User": "Standard"}, "CAM1_OPTIONS": {"Bitmask": {"0": "Recording Starts at arming and stops at disarming"}, "Description": "Camera options bitmask", "DisplayName": "Camera options", "User": "Standard"}, "CAM1_RELAY_ON": {"Description": "This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera", "DisplayName": "Camera relay ON value", "User": "Standard", "Values": {"0": "Low", "1": "High"}}, "CAM1_SERVO_OFF": {"Description": "PWM value in microseconds to move servo to when shutter is deactivated", "DisplayName": "Camera servo OFF PWM value", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CAM1_SERVO_ON": {"Description": "PWM value in microseconds to move servo to when shutter is activated", "DisplayName": "Camera servo ON PWM value", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CAM1_TRIGG_DIST": {"Description": "Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.", "DisplayName": "Camera trigger distance", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "CAM1_TYPE": {"Description": "how to trigger the camera to take a picture", "DisplayName": "Camera shutter (trigger) type", "User": "Standard", "Values": {"0": "None", "1": "Servo", "2": "Relay", "3": "GoPro in Solo Gimbal", "4": "Mount (Siyi)", "5": "MAVLink", "6": "MAVLinkCamV2", "7": "Scripting"}}, "CAM1_VFOV": {"Description": "Camera vertical field of view. 0 if unknown", "DisplayName": "Camera vertical field of view", "Range": {"high": "180", "low": "0"}, "Units": "deg", "User": "Standard"}, "CAM2_DURATION": {"Description": "Duration in seconds that the camera shutter is held open", "DisplayName": "Camera shutter duration held open", "Range": {"high": "5", "low": "0"}, "Units": "s", "User": "Standard"}, "CAM2_FEEDBAK_PIN": {"Description": "pin number to use for save accurate camera feedback messages. If set to -1 then don't use a pin flag for this, otherwise this is a pin number which if held high after a picture trigger order, will save camera messages when camera really takes a picture. A universal camera hot shoe is needed. The pin should be held high for at least 2 milliseconds for reliable trigger detection. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot. See also the CAMx_FEEDBCK_POL option.", "DisplayName": "Camera feedback pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "CAM2_FEEDBAK_POL": {"Description": "Polarity for feedback pin. If this is 1 then the feedback pin should go high on trigger. If set to 0 then it should go low", "DisplayName": "Camera feedback pin polarity", "User": "Standard", "Values": {"0": "TriggerLow", "1": "TriggerHigh"}}, "CAM2_HFOV": {"Description": "Camera horizontal field of view. 0 if unknown", "DisplayName": "Camera horizontal field of view", "Range": {"high": "360", "low": "0"}, "Units": "deg", "User": "Standard"}, "CAM2_INTRVAL_MIN": {"Description": "Postpone shooting if previous picture was taken less than this many seconds ago", "DisplayName": "Camera minimum time interval between photos", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Standard"}, "CAM2_MNT_INST": {"Description": "Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1", "DisplayName": "Camera Mount instance", "User": "Standard"}, "CAM2_OPTIONS": {"Bitmask": {"0": "Recording Starts at arming and stops at disarming"}, "Description": "Camera options bitmask", "DisplayName": "Camera options", "User": "Standard"}, "CAM2_RELAY_ON": {"Description": "This sets whether the relay goes high or low when it triggers. Note that you should also set RELAY_DEFAULT appropriately for your camera", "DisplayName": "Camera relay ON value", "User": "Standard", "Values": {"0": "Low", "1": "High"}}, "CAM2_SERVO_OFF": {"Description": "PWM value in microseconds to move servo to when shutter is deactivated", "DisplayName": "Camera servo OFF PWM value", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CAM2_SERVO_ON": {"Description": "PWM value in microseconds to move servo to when shutter is activated", "DisplayName": "Camera servo ON PWM value", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CAM2_TRIGG_DIST": {"Description": "Distance in meters between camera triggers. If this value is non-zero then the camera will trigger whenever the position changes by this number of meters regardless of what mode the APM is in. Note that this parameter can also be set in an auto mission using the DO_SET_CAM_TRIGG_DIST command, allowing you to enable/disable the triggering of the camera during the flight.", "DisplayName": "Camera trigger distance", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "CAM2_TYPE": {"Description": "how to trigger the camera to take a picture", "DisplayName": "Camera shutter (trigger) type", "User": "Standard", "Values": {"0": "None", "1": "Servo", "2": "Relay", "3": "GoPro in Solo Gimbal", "4": "Mount (Siyi)", "5": "MAVLink", "6": "MAVLinkCamV2", "7": "Scripting"}}, "CAM2_VFOV": {"Description": "Camera vertical field of view. 0 if unknown", "DisplayName": "Camera vertical field of view", "Range": {"high": "180", "low": "0"}, "Units": "deg", "User": "Standard"}, "CAM_AUTO_ONLY": {"Description": "When enabled, trigging by distance is done in AUTO mode only.", "DisplayName": "Distance-trigging in AUTO mode only", "User": "Standard", "Values": {"0": "Always", "1": "Only when in AUTO"}}, "CAM_MAX_ROLL": {"Description": "Postpone shooting if roll is greater than limit. (0=Disable, will shoot regardless of roll).", "DisplayName": "Maximum photo roll angle.", "Range": {"high": "180", "low": "0"}, "Units": "deg", "User": "Standard"}, "CAM_RC_BTN_DELAY": {"Description": "Time it takes for the a RunCam button press to be actived in ms. If this is too short then commands can get out of sync.", "DisplayName": "RunCam button delay before allowing further button presses", "User": "Advanced"}, "CAM_RC_BT_DELAY": {"Description": "Time it takes for the RunCam to become fully ready in ms. If this is too short then commands can get out of sync.", "DisplayName": "RunCam boot delay before allowing updates", "User": "Advanced"}, "CAM_RC_CONTROL": {"Bitmask": {"0": "Stick yaw right", "1": "Stick roll right", "2": "3-position switch", "3": "2-position switch", "4": "Autorecording enabled"}, "Description": "Specifies the allowed actions required to enter the OSD menu and other option like autorecording", "DisplayName": "RunCam control option", "User": "Advanced"}, "CAM_RC_FEATURES": {"Bitmask": {"0": "Power Button", "1": "WiFi Button", "2": "Change Mode", "3": "5-Key OSD", "4": "Settings Access", "5": "DisplayPort", "6": "Start Recording", "7": "Stop Recording"}, "Description": "The available features of the attached RunCam device. If 0 then the RunCam device will be queried for the features it supports, otherwise this setting is used.", "DisplayName": "RunCam features available", "User": "Advanced"}, "CAM_RC_MDE_DELAY": {"Description": "Time it takes for the a RunCam mode button press to be actived in ms. If a mode change first requires a video recording change then double this value is used. If this is too short then commands can get out of sync.", "DisplayName": "RunCam mode delay before allowing further button presses", "User": "Advanced"}, "CAM_RC_TYPE": {"Description": "RunCam device type used to determine OSD menu structure and shutter options.", "DisplayName": "RunCam device type", "Values": {"0": "Disabled", "1": "RunCam Split Micro/RunCam with UART", "2": "RunCam Split", "3": "RunCam Split4 4k", "4": "RunCam Hybrid/RunCam Thumb Pro", "5": "Runcam 2 4k"}}, "CAN_D1_PC_ECU_ID": {"Description": "Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.", "DisplayName": "ECU Node ID", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "CAN_D1_PC_ECU_RT": {"Description": "Output rate of ECU command messages", "DisplayName": "ECU command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D1_PC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN", "DisplayName": "ESC channels", "User": "Advanced"}, "CAN_D1_PC_ESC_RT": {"Description": "Output rate of ESC command messages", "DisplayName": "ESC output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D1_PC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "2": "Servo 3", "3": "Servo 4", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask defining which servo channels are to be transmitted over Piccolo CAN", "DisplayName": "Servo channels", "User": "Advanced"}, "CAN_D1_PC_SRV_RT": {"Description": "Output rate of servo command messages", "DisplayName": "Servo command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D1_PROTOCOL": {"Description": "Enabling this option starts selected protocol that will use this virtual driver", "DisplayName": "Enable use of specific protocol over virtual driver", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "DroneCAN", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "4": "PiccoloCAN", "6": "EFI_NWPMU", "7": "USD1", "8": "KDECAN"}}, "CAN_D1_PROTOCOL2": {"Description": "Secondary protocol with 11 bit CAN addressing", "DisplayName": "Secondary protocol with 11 bit CAN addressing", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "7": "USD1"}}, "CAN_D1_UC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN", "DisplayName": "Output channels to be transmitted as ESC over DroneCAN", "User": "Advanced"}, "CAN_D1_UC_ESC_OF": {"Description": "Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth", "DisplayName": "ESC Output channels offset", "Range": {"high": "18", "low": "0"}, "User": "Advanced"}, "CAN_D1_UC_ESC_RV": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.", "DisplayName": "Bitmask for output channels for reversible ESCs over DroneCAN.", "User": "Advanced"}, "CAN_D1_UC_NODE": {"Description": "DroneCAN node should be set implicitly", "DisplayName": "DroneCAN node that is used for this network", "Range": {"high": "250", "low": "1"}, "User": "Advanced"}, "CAN_D1_UC_NTF_RT": {"Description": "Maximum transmit rate for Notify State Message", "DisplayName": "Notify State rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D1_UC_OPTION": {"Bitmask": {"0": "ClearDNADatabase", "1": "IgnoreDNANodeConflicts", "2": "EnableCanfd", "3": "IgnoreDNANodeUnhealthy", "4": "SendServoAsPWM", "5": "SendGNSS", "6": "UseHimarkServo", "7": "HobbyWingESC", "8": "EnableStats"}, "Description": "Option flags", "DisplayName": "DroneCAN options", "User": "Advanced"}, "CAN_D1_UC_POOL": {"Description": "Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads", "DisplayName": "CAN pool size", "Range": {"high": "16384", "low": "1024"}, "User": "Advanced"}, "CAN_D1_UC_RLY_RT": {"Description": "Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state", "DisplayName": "DroneCAN relay output rate", "Range": {"high": "200", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "CAN_D1_UC_S1_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D1_UC_S1_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "DroneCAN Serial1 index", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D1_UC_S1_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D1_UC_S1_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D1_UC_S2_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D1_UC_S2_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D1_UC_S2_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D1_UC_S2_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D1_UC_S3_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "Serial baud rate on remote CAN node", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D1_UC_S3_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D1_UC_S3_NOD": {"Description": "CAN node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D1_UC_S3_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D1_UC_SER_EN": {"Description": "Enable DroneCAN virtual serial ports", "DisplayName": "DroneCAN Serial enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "CAN_D1_UC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "16": "Servo 17", "17": "Servo 18", "18": "Servo 19", "19": "Servo 20", "2": "Servo 3", "20": "Servo 21", "21": "Servo 22", "22": "Servo 23", "23": "Servo 24", "24": "Servo 25", "25": "Servo 26", "26": "Servo 27", "27": "Servo 28", "28": "Servo 29", "29": "Servo 30", "3": "Servo 4", "30": "Servo 31", "31": "Servo 32", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask with one set for channel to be transmitted as a servo command over DroneCAN", "DisplayName": "Output channels to be transmitted as servo over DroneCAN"}, "CAN_D1_UC_SRV_RT": {"Description": "Maximum transmit rate for servo outputs", "DisplayName": "Servo output rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_PC_ECU_ID": {"Description": "Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.", "DisplayName": "ECU Node ID", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "CAN_D2_PC_ECU_RT": {"Description": "Output rate of ECU command messages", "DisplayName": "ECU command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_PC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN", "DisplayName": "ESC channels", "User": "Advanced"}, "CAN_D2_PC_ESC_RT": {"Description": "Output rate of ESC command messages", "DisplayName": "ESC output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_PC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "2": "Servo 3", "3": "Servo 4", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask defining which servo channels are to be transmitted over Piccolo CAN", "DisplayName": "Servo channels", "User": "Advanced"}, "CAN_D2_PC_SRV_RT": {"Description": "Output rate of servo command messages", "DisplayName": "Servo command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_PROTOCOL": {"Description": "Enabling this option starts selected protocol that will use this virtual driver", "DisplayName": "Enable use of specific protocol over virtual driver", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "DroneCAN", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "4": "PiccoloCAN", "6": "EFI_NWPMU", "7": "USD1", "8": "KDECAN"}}, "CAN_D2_PROTOCOL2": {"Description": "Secondary protocol with 11 bit CAN addressing", "DisplayName": "Secondary protocol with 11 bit CAN addressing", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "7": "USD1"}}, "CAN_D2_UC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN", "DisplayName": "Output channels to be transmitted as ESC over DroneCAN", "User": "Advanced"}, "CAN_D2_UC_ESC_OF": {"Description": "Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth", "DisplayName": "ESC Output channels offset", "Range": {"high": "18", "low": "0"}, "User": "Advanced"}, "CAN_D2_UC_ESC_RV": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.", "DisplayName": "Bitmask for output channels for reversible ESCs over DroneCAN.", "User": "Advanced"}, "CAN_D2_UC_NODE": {"Description": "DroneCAN node should be set implicitly", "DisplayName": "DroneCAN node that is used for this network", "Range": {"high": "250", "low": "1"}, "User": "Advanced"}, "CAN_D2_UC_NTF_RT": {"Description": "Maximum transmit rate for Notify State Message", "DisplayName": "Notify State rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_UC_OPTION": {"Bitmask": {"0": "ClearDNADatabase", "1": "IgnoreDNANodeConflicts", "2": "EnableCanfd", "3": "IgnoreDNANodeUnhealthy", "4": "SendServoAsPWM", "5": "SendGNSS", "6": "UseHimarkServo", "7": "HobbyWingESC", "8": "EnableStats"}, "Description": "Option flags", "DisplayName": "DroneCAN options", "User": "Advanced"}, "CAN_D2_UC_POOL": {"Description": "Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads", "DisplayName": "CAN pool size", "Range": {"high": "16384", "low": "1024"}, "User": "Advanced"}, "CAN_D2_UC_RLY_RT": {"Description": "Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state", "DisplayName": "DroneCAN relay output rate", "Range": {"high": "200", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "CAN_D2_UC_S1_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D2_UC_S1_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "DroneCAN Serial1 index", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D2_UC_S1_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D2_UC_S1_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D2_UC_S2_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D2_UC_S2_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D2_UC_S2_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D2_UC_S2_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D2_UC_S3_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "Serial baud rate on remote CAN node", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D2_UC_S3_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D2_UC_S3_NOD": {"Description": "CAN node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D2_UC_S3_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D2_UC_SER_EN": {"Description": "Enable DroneCAN virtual serial ports", "DisplayName": "DroneCAN Serial enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "CAN_D2_UC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "16": "Servo 17", "17": "Servo 18", "18": "Servo 19", "19": "Servo 20", "2": "Servo 3", "20": "Servo 21", "21": "Servo 22", "22": "Servo 23", "23": "Servo 24", "24": "Servo 25", "25": "Servo 26", "26": "Servo 27", "27": "Servo 28", "28": "Servo 29", "29": "Servo 30", "3": "Servo 4", "30": "Servo 31", "31": "Servo 32", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask with one set for channel to be transmitted as a servo command over DroneCAN", "DisplayName": "Output channels to be transmitted as servo over DroneCAN"}, "CAN_D2_UC_SRV_RT": {"Description": "Maximum transmit rate for servo outputs", "DisplayName": "Servo output rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_PC_ECU_ID": {"Description": "Node ID to send ECU throttle messages to. Set to zero to disable ECU throttle messages. Set to 255 to broadcast to all ECUs.", "DisplayName": "ECU Node ID", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "CAN_D3_PC_ECU_RT": {"Description": "Output rate of ECU command messages", "DisplayName": "ECU command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_PC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask defining which ESC (motor) channels are to be transmitted over Piccolo CAN", "DisplayName": "ESC channels", "User": "Advanced"}, "CAN_D3_PC_ESC_RT": {"Description": "Output rate of ESC command messages", "DisplayName": "ESC output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_PC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "2": "Servo 3", "3": "Servo 4", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask defining which servo channels are to be transmitted over Piccolo CAN", "DisplayName": "Servo channels", "User": "Advanced"}, "CAN_D3_PC_SRV_RT": {"Description": "Output rate of servo command messages", "DisplayName": "Servo command output rate", "Range": {"high": "500", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_PROTOCOL": {"Description": "Enabling this option starts selected protocol that will use this virtual driver", "DisplayName": "Enable use of specific protocol over virtual driver", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "DroneCAN", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "4": "PiccoloCAN", "6": "EFI_NWPMU", "7": "USD1", "8": "KDECAN"}}, "CAN_D3_PROTOCOL2": {"Description": "Secondary protocol with 11 bit CAN addressing", "DisplayName": "Secondary protocol with 11 bit CAN addressing", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "10": "Scripting", "11": "Benewake", "12": "Scripting2", "13": "TOFSenseP", "14": "NanoRadar", "7": "USD1"}}, "CAN_D3_UC_ESC_BM": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for channel to be transmitted as a ESC command over DroneCAN", "DisplayName": "Output channels to be transmitted as ESC over DroneCAN", "User": "Advanced"}, "CAN_D3_UC_ESC_OF": {"Description": "Offset for ESC numbering in DroneCAN ESC RawCommand messages. This allows for more efficient packing of ESC command messages. If your ESCs are on servo functions 5 to 8 and you set this parameter to 4 then the ESC RawCommand will be sent with the first 4 slots filled. This can be used for more efficient usage of CAN bandwidth", "DisplayName": "ESC Output channels offset", "Range": {"high": "18", "low": "0"}, "User": "Advanced"}, "CAN_D3_UC_ESC_RV": {"Bitmask": {"0": "ESC 1", "1": "ESC 2", "10": "ESC 11", "11": "ESC 12", "12": "ESC 13", "13": "ESC 14", "14": "ESC 15", "15": "ESC 16", "16": "ESC 17", "17": "ESC 18", "18": "ESC 19", "19": "ESC 20", "2": "ESC 3", "20": "ESC 21", "21": "ESC 22", "22": "ESC 23", "23": "ESC 24", "24": "ESC 25", "25": "ESC 26", "26": "ESC 27", "27": "ESC 28", "28": "ESC 29", "29": "ESC 30", "3": "ESC 4", "30": "ESC 31", "31": "ESC 32", "4": "ESC 5", "5": "ESC 6", "6": "ESC 7", "7": "ESC 8", "8": "ESC 9", "9": "ESC 10"}, "Description": "Bitmask with one set for each output channel that uses a reversible ESC over DroneCAN. Reversible ESCs use both positive and negative values in RawCommands, with positive commanding the forward direction and negative commanding the reverse direction.", "DisplayName": "Bitmask for output channels for reversible ESCs over DroneCAN.", "User": "Advanced"}, "CAN_D3_UC_NODE": {"Description": "DroneCAN node should be set implicitly", "DisplayName": "DroneCAN node that is used for this network", "Range": {"high": "250", "low": "1"}, "User": "Advanced"}, "CAN_D3_UC_NTF_RT": {"Description": "Maximum transmit rate for Notify State Message", "DisplayName": "Notify State rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_UC_OPTION": {"Bitmask": {"0": "ClearDNADatabase", "1": "IgnoreDNANodeConflicts", "2": "EnableCanfd", "3": "IgnoreDNANodeUnhealthy", "4": "SendServoAsPWM", "5": "SendGNSS", "6": "UseHimarkServo", "7": "HobbyWingESC", "8": "EnableStats"}, "Description": "Option flags", "DisplayName": "DroneCAN options", "User": "Advanced"}, "CAN_D3_UC_POOL": {"Description": "Amount of memory in bytes to allocate for the DroneCAN memory pool. More memory is needed for higher CAN bus loads", "DisplayName": "CAN pool size", "Range": {"high": "16384", "low": "1024"}, "User": "Advanced"}, "CAN_D3_UC_RLY_RT": {"Description": "Maximum transmit rate for relay outputs, note that this rate is per message each message does 1 relay, so if with more relays will take longer to update at the same rate, a extra message will be sent when a relay changes state", "DisplayName": "DroneCAN relay output rate", "Range": {"high": "200", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "CAN_D3_UC_S1_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D3_UC_S1_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "DroneCAN Serial1 index", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D3_UC_S1_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D3_UC_S1_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D3_UC_S2_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "DroneCAN Serial default baud rate", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D3_UC_S2_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D3_UC_S2_NOD": {"Description": "CAN remote node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D3_UC_S2_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D3_UC_S3_BD": {"Description": "Serial baud rate on remote CAN node", "DisplayName": "Serial baud rate on remote CAN node", "RebootRequired": "True", "User": "Advanced", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "CAN_D3_UC_S3_IDX": {"Description": "Serial port number on remote CAN node", "DisplayName": "Serial port number on remote CAN node", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_D3_UC_S3_NOD": {"Description": "CAN node number for serial port", "DisplayName": "Serial CAN remote node number", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "CAN_D3_UC_S3_PRO": {"Description": "Serial protocol of DroneCAN serial port", "DisplayName": "Serial protocol of DroneCAN serial port", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "CAN_D3_UC_SER_EN": {"Description": "Enable DroneCAN virtual serial ports", "DisplayName": "DroneCAN Serial enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "CAN_D3_UC_SRV_BM": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "16": "Servo 17", "17": "Servo 18", "18": "Servo 19", "19": "Servo 20", "2": "Servo 3", "20": "Servo 21", "21": "Servo 22", "22": "Servo 23", "23": "Servo 24", "24": "Servo 25", "25": "Servo 26", "26": "Servo 27", "27": "Servo 28", "28": "Servo 29", "29": "Servo 30", "3": "Servo 4", "30": "Servo 31", "31": "Servo 32", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask with one set for channel to be transmitted as a servo command over DroneCAN", "DisplayName": "Output channels to be transmitted as servo over DroneCAN"}, "CAN_D3_UC_SRV_RT": {"Description": "Maximum transmit rate for servo outputs", "DisplayName": "Servo output rate", "Range": {"high": "200", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "CAN_LOGLEVEL": {"Description": "Loglevel for recording initialisation and debug information from CAN Interface", "DisplayName": "Loglevel", "Range": {"high": "4", "low": "0"}, "User": "Advanced", "Values": {"0": "Log None", "1": "Log Error", "2": "Log Warning and below", "3": "Log Info and below", "4": "Log Everything"}}, "CAN_P1_BITRATE": {"Description": "Bit rate can be set up to from 10000 to 1000000", "DisplayName": "Bitrate of CAN interface", "Range": {"high": "1000000", "low": "10000"}, "User": "Advanced"}, "CAN_P1_DRIVER": {"Description": "Enabling this option enables use of CAN buses.", "DisplayName": "Index of virtual driver to be used with physical CAN interface", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "First driver", "2": "Second driver", "3": "Third driver"}}, "CAN_P1_FDBITRATE": {"Description": "Bit rate can be set up to from 1000000 to 8000000", "DisplayName": "Bitrate of CANFD interface", "User": "Advanced", "Values": {"1": "1M", "2": "2M", "4": "4M", "5": "5M", "8": "8M"}}, "CAN_P2_BITRATE": {"Description": "Bit rate can be set up to from 10000 to 1000000", "DisplayName": "Bitrate of CAN interface", "Range": {"high": "1000000", "low": "10000"}, "User": "Advanced"}, "CAN_P2_DRIVER": {"Description": "Enabling this option enables use of CAN buses.", "DisplayName": "Index of virtual driver to be used with physical CAN interface", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "First driver", "2": "Second driver", "3": "Third driver"}}, "CAN_P2_FDBITRATE": {"Description": "Bit rate can be set up to from 1000000 to 8000000", "DisplayName": "Bitrate of CANFD interface", "User": "Advanced", "Values": {"1": "1M", "2": "2M", "4": "4M", "5": "5M", "8": "8M"}}, "CAN_P3_BITRATE": {"Description": "Bit rate can be set up to from 10000 to 1000000", "DisplayName": "Bitrate of CAN interface", "Range": {"high": "1000000", "low": "10000"}, "User": "Advanced"}, "CAN_P3_DRIVER": {"Description": "Enabling this option enables use of CAN buses.", "DisplayName": "Index of virtual driver to be used with physical CAN interface", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "First driver", "2": "Second driver", "3": "Third driver"}}, "CAN_P3_FDBITRATE": {"Description": "Bit rate can be set up to from 1000000 to 8000000", "DisplayName": "Bitrate of CANFD interface", "User": "Advanced", "Values": {"1": "1M", "2": "2M", "4": "4M", "5": "5M", "8": "8M"}}, "CAN_SLCAN_CPORT": {"Description": "CAN Interface ID to be routed to SLCAN, 0 means no routing", "DisplayName": "SLCAN Route", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "First interface", "2": "Second interface"}}, "CAN_SLCAN_SDELAY": {"Description": "Duration after which slcan starts after setting SERNUM in seconds.", "DisplayName": "SLCAN Start Delay", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "CAN_SLCAN_SERNUM": {"Description": "Serial Port ID to be used for temporary SLCAN iface, -1 means no temporary serial. This parameter is automatically reset on reboot or on timeout. See CAN_SLCAN_TIMOUT for timeout details", "DisplayName": "SLCAN Serial Port", "User": "Standard", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "CAN_SLCAN_TIMOUT": {"Description": "Duration of inactivity after which SLCAN is switched back to original driver in seconds.", "DisplayName": "SLCAN Timeout", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "CHUTE_ALT_MIN": {"Description": "Parachute min altitude above home. Parachute will not be released below this altitude. 0 to disable alt check.", "DisplayName": "Parachute min altitude in meters above home", "Increment": "1", "Range": {"high": "32000", "low": "0"}, "Units": "m", "User": "Standard"}, "CHUTE_CRT_SINK": {"Description": "Release parachute when critical sink rate is reached", "DisplayName": "Critical sink speed rate in m/s to trigger emergency parachute", "Increment": "1", "Range": {"high": "15", "low": "0"}, "Units": "m/s", "User": "Standard"}, "CHUTE_DELAY_MS": {"Description": "Delay in millseconds between motor stop and chute release", "DisplayName": "Parachute release delay", "Increment": "1", "Range": {"high": "5000", "low": "0"}, "Units": "ms", "User": "Standard"}, "CHUTE_ENABLED": {"Description": "Parachute release enabled or disabled", "DisplayName": "Parachute release enabled or disabled", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "CHUTE_OPTIONS": {"Bitmask": {"0": "hold open forever after release", "1": "skip disarm before parachute release"}, "Description": "Optional behaviour for parachute", "DisplayName": "Parachute options", "User": "Standard"}, "CHUTE_SERVO_OFF": {"Description": "Parachute Servo PWM value in microseconds when parachute is not released", "DisplayName": "Servo OFF PWM value", "Increment": "1", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CHUTE_SERVO_ON": {"Description": "Parachute Servo PWM value in microseconds when parachute is released", "DisplayName": "Parachute Servo ON PWM value", "Increment": "1", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Standard"}, "CHUTE_TYPE": {"Description": "Parachute release mechanism type (relay number in versions prior to 4.5, or servo). Values 0-3 all are relay. Relay number used for release is set by RELAYx_FUNCTION in 4.5 or later. ", "DisplayName": "Parachute release mechanism type (relay or servo)", "Values": {"0": "Relay", "10": "Servo"}}, "COMPASS_AUTODEC": {"Description": "Enable or disable the automatic calculation of the declination based on gps location", "DisplayName": "Auto Declination", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "COMPASS_AUTO_ROT": {"Description": "When enabled this will automatically check the orientation of compasses on successful completion of compass calibration. If set to 2 then external compasses will have their orientation automatically corrected.", "DisplayName": "Automatically check orientation", "Values": {"0": "Disabled", "1": "CheckOnly", "2": "CheckAndFix", "3": "use same tolerance to auto rotate 45 deg rotations"}}, "COMPASS_CAL_FIT": {"Description": "This controls the fitness level required for a successful compass calibration. A lower value makes for a stricter fit (less likely to pass). This is the value used for the primary magnetometer. Other magnetometers get double the value.", "DisplayName": "Compass calibration fitness", "Increment": "0.1", "Range": {"high": "32", "low": "4"}, "User": "Advanced", "Values": {"16": "Default", "32": "Relaxed", "4": "Very Strict", "8": "Strict"}}, "COMPASS_CUS_PIT": {"Description": "Compass mounting position pitch offset. Positive values = pitch up, negative values = pitch down. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.", "DisplayName": "Custom orientation pitch offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "RebootRequired": "True", "Units": "deg", "User": "Advanced"}, "COMPASS_CUS_ROLL": {"Description": "Compass mounting position roll offset. Positive values = roll right, negative values = roll left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.", "DisplayName": "Custom orientation roll offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "RebootRequired": "True", "Units": "deg", "User": "Advanced"}, "COMPASS_CUS_YAW": {"Description": "Compass mounting position yaw offset. Positive values = yaw right, negative values = yaw left. This parameter is only used when COMPASS_ORIENT/2/3 is set to CUSTOM.", "DisplayName": "Custom orientation yaw offset", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "RebootRequired": "True", "Units": "deg", "User": "Advanced"}, "COMPASS_DEC": {"Description": "An angle to compensate between the true north and magnetic north", "DisplayName": "Compass declination", "Increment": "0.01", "Range": {"high": "3.142", "low": "-3.142"}, "Units": "rad", "User": "Standard"}, "COMPASS_DEV_ID": {"Description": "Compass device id. Automatically detected, do not set manually", "DisplayName": "Compass device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID2": {"Description": "Second compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass2 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID3": {"Description": "Third compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass3 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID4": {"Description": "Extra 4th compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass4 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID5": {"Description": "Extra 5th compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass5 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID6": {"Description": "Extra 6th compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass6 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID7": {"Description": "Extra 7th compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass7 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DEV_ID8": {"Description": "Extra 8th compass's device id. Automatically detected, do not set manually", "DisplayName": "Compass8 device id", "ReadOnly": "True", "User": "Advanced"}, "COMPASS_DIA2_X": {"Calibration": "1", "Description": "DIA_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron diagonal X component", "User": "Advanced"}, "COMPASS_DIA2_Y": {"Calibration": "1", "Description": "DIA_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron diagonal Y component", "User": "Advanced"}, "COMPASS_DIA2_Z": {"Description": "DIA_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron diagonal Z component", "User": "Advanced"}, "COMPASS_DIA3_X": {"Calibration": "1", "Description": "DIA_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron diagonal X component", "User": "Advanced"}, "COMPASS_DIA3_Y": {"Calibration": "1", "Description": "DIA_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron diagonal Y component", "User": "Advanced"}, "COMPASS_DIA3_Z": {"Description": "DIA_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron diagonal Z component", "User": "Advanced"}, "COMPASS_DIA_X": {"Calibration": "1", "Description": "DIA_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron diagonal X component", "User": "Advanced"}, "COMPASS_DIA_Y": {"Calibration": "1", "Description": "DIA_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron diagonal Y component", "User": "Advanced"}, "COMPASS_DIA_Z": {"Description": "DIA_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron diagonal Z component", "User": "Advanced"}, "COMPASS_DISBLMSK": {"Bitmask": {"0": "HMC5883", "1": "LSM303D", "11": "DroneCAN", "12": "QMC5883", "14": "MAG3110", "15": "IST8308", "16": "RM3100", "17": "MSP", "18": "ExternalAHRS", "2": "AK8963", "3": "BMM150", "4": "LSM9DS1", "5": "LIS3MDL", "6": "AK09916", "7": "IST8310", "8": "ICM20948", "9": "MMC3416"}, "Description": "This is a bitmask of driver types to disable. If a driver type is set in this mask then that driver will not try to find a sensor at startup", "DisplayName": "Compass disable driver type mask", "User": "Advanced"}, "COMPASS_ENABLE": {"Description": "Setting this to Enabled(1) will enable the compass. Setting this to Disabled(0) will disable the compass. Note that this is separate from COMPASS_USE. This will enable the low level senor, and will enable logging of magnetometer data. To use the compass for navigation you must also set COMPASS_USE to 1.", "DisplayName": "Enable Compass", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "COMPASS_EXTERN2": {"Description": "Configure second compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.", "DisplayName": "Compass2 is attached via an external cable", "User": "Advanced", "Values": {"0": "Internal", "1": "External", "2": "ForcedExternal"}}, "COMPASS_EXTERN3": {"Description": "Configure third compass so it is attached externally. This is auto-detected on most boards. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.", "DisplayName": "Compass3 is attached via an external cable", "User": "Advanced", "Values": {"0": "Internal", "1": "External", "2": "ForcedExternal"}}, "COMPASS_EXTERNAL": {"Description": "Configure compass so it is attached externally. This is auto-detected on most boards. Set to 1 if the compass is externally connected. When externally connected the COMPASS_ORIENT option operates independently of the AHRS_ORIENTATION board orientation option. If set to 0 or 1 then auto-detection by bus connection can override the value. If set to 2 then auto-detection will be disabled.", "DisplayName": "Compass is attached via an external cable", "User": "Advanced", "Values": {"0": "Internal", "1": "External", "2": "ForcedExternal"}}, "COMPASS_FLTR_RNG": {"Description": "This sets the range around the average value that new samples must be within to be accepted. This can help reduce the impact of noise on sensors that are on long I2C cables. The value is a percentage from the average value. A value of zero disables this filter.", "DisplayName": "Range in which sample is accepted", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%"}, "COMPASS_LEARN": {"Description": "Enable or disable the automatic learning of compass offsets. You can enable learning either using a compass-only method that is suitable only for fixed wing aircraft or using the offsets learnt by the active EKF state estimator. If this option is enabled then the learnt offsets are saved when you disarm the vehicle. If InFlight learning is enabled then the compass with automatically start learning once a flight starts (must be armed). While InFlight learning is running you cannot use position control modes.", "DisplayName": "Learn compass offsets automatically", "User": "Advanced", "Values": {"0": "Disabled", "1": "Internal-Learning", "2": "EKF-Learning", "3": "InFlight-Learning"}}, "COMPASS_MOT2_X": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to compass2's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass2 for body frame X axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT2_Y": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to compass2's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass2 for body frame Y axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT2_Z": {"Description": "Multiplied by the current throttle and added to compass2's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass2 for body frame Z axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT3_X": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to compass3's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass3 for body frame X axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT3_Y": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to compass3's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass3 for body frame Y axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT3_Z": {"Description": "Multiplied by the current throttle and added to compass3's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation to compass3 for body frame Z axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOTCT": {"Calibration": "1", "Description": "Set motor interference compensation type to disabled, throttle or current. Do not change manually.", "DisplayName": "Motor interference compensation type", "User": "Advanced", "Values": {"0": "Disabled", "1": "Use Throttle", "2": "Use Current"}}, "COMPASS_MOT_X": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to the compass's x-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation for body frame X axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT_Y": {"Calibration": "1", "Description": "Multiplied by the current throttle and added to the compass's y-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation for body frame Y axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_MOT_Z": {"Description": "Multiplied by the current throttle and added to the compass's z-axis values to compensate for motor interference (Offset per Amp or at Full Throttle)", "DisplayName": "Motor interference compensation for body frame Z axis", "Increment": "1", "Range": {"high": "1000", "low": "-1000"}, "Units": "mGauss/A", "User": "Advanced"}, "COMPASS_ODI2_X": {"Calibration": "1", "Description": "ODI_X in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron off-diagonal X component", "User": "Advanced"}, "COMPASS_ODI2_Y": {"Calibration": "1", "Description": "ODI_Y in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron off-diagonal Y component", "User": "Advanced"}, "COMPASS_ODI2_Z": {"Description": "ODI_Z in the compass2 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass2 soft-iron off-diagonal Z component", "User": "Advanced"}, "COMPASS_ODI3_X": {"Calibration": "1", "Description": "ODI_X in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron off-diagonal X component", "User": "Advanced"}, "COMPASS_ODI3_Y": {"Calibration": "1", "Description": "ODI_Y in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron off-diagonal Y component", "User": "Advanced"}, "COMPASS_ODI3_Z": {"Description": "ODI_Z in the compass3 soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass3 soft-iron off-diagonal Z component", "User": "Advanced"}, "COMPASS_ODI_X": {"Calibration": "1", "Description": "ODI_X in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron off-diagonal X component", "User": "Advanced"}, "COMPASS_ODI_Y": {"Calibration": "1", "Description": "ODI_Y in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron off-diagonal Y component", "User": "Advanced"}, "COMPASS_ODI_Z": {"Description": "ODI_Z in the compass soft-iron calibration matrix: [[DIA_X, ODI_X, ODI_Y], [ODI_X, DIA_Y, ODI_Z], [ODI_Y, ODI_Z, DIA_Z]]", "DisplayName": "Compass soft-iron off-diagonal Z component", "User": "Advanced"}, "COMPASS_OFFS_MAX": {"Description": "This sets the maximum allowed compass offset in calibration and arming checks", "DisplayName": "Compass maximum offset", "Increment": "1", "Range": {"high": "3000", "low": "500"}, "User": "Advanced"}, "COMPASS_OFS2_X": {"Calibration": "1", "Description": "Offset to be added to compass2's x-axis values to compensate for metal in the frame", "DisplayName": "Compass2 offsets in milligauss on the X axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS2_Y": {"Calibration": "1", "Description": "Offset to be added to compass2's y-axis values to compensate for metal in the frame", "DisplayName": "Compass2 offsets in milligauss on the Y axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS2_Z": {"Description": "Offset to be added to compass2's z-axis values to compensate for metal in the frame", "DisplayName": "Compass2 offsets in milligauss on the Z axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS3_X": {"Calibration": "1", "Description": "Offset to be added to compass3's x-axis values to compensate for metal in the frame", "DisplayName": "Compass3 offsets in milligauss on the X axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS3_Y": {"Calibration": "1", "Description": "Offset to be added to compass3's y-axis values to compensate for metal in the frame", "DisplayName": "Compass3 offsets in milligauss on the Y axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS3_Z": {"Description": "Offset to be added to compass3's z-axis values to compensate for metal in the frame", "DisplayName": "Compass3 offsets in milligauss on the Z axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS_X": {"Calibration": "1", "Description": "Offset to be added to the compass x-axis values to compensate for metal in the frame", "DisplayName": "Compass offsets in milligauss on the X axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS_Y": {"Calibration": "1", "Description": "Offset to be added to the compass y-axis values to compensate for metal in the frame", "DisplayName": "Compass offsets in milligauss on the Y axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OFS_Z": {"Description": "Offset to be added to the compass z-axis values to compensate for metal in the frame", "DisplayName": "Compass offsets in milligauss on the Z axis", "Increment": "1", "Range": {"high": "400", "low": "-400"}, "Units": "mGauss", "User": "Advanced"}, "COMPASS_OPTIONS": {"Bitmask": {"0": "CalRequireGPS", "1": "Allow missing DroneCAN compasses to be automaticaly replaced (calibration still required)"}, "Description": "This sets options to change the behaviour of the compass", "DisplayName": "Compass options", "User": "Advanced"}, "COMPASS_ORIENT": {"Description": "The orientation of the first external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.", "DisplayName": "Compass orientation", "User": "Advanced", "Values": {"0": "None", "1": "Yaw45", "10": "Yaw90Roll180", "100": "Custom 4.1 and older", "101": "Custom 1", "102": "Custom 2", "11": "Yaw135Roll180", "12": "Pitch180", "13": "Yaw225Roll180", "14": "Yaw270Roll180", "15": "Yaw315Roll180", "16": "Roll90", "17": "Yaw45Roll90", "18": "Yaw90Roll90", "19": "Yaw135Roll90", "2": "Yaw90", "20": "Roll270", "21": "Yaw45Roll270", "22": "Yaw90Roll270", "23": "Yaw135Roll270", "24": "Pitch90", "25": "Pitch270", "26": "Yaw90Pitch180", "27": "Yaw270Pitch180", "28": "Pitch90Roll90", "29": "Pitch90Roll180", "3": "Yaw135", "30": "Pitch90Roll270", "31": "Pitch180Roll90", "32": "Pitch180Roll270", "33": "Pitch270Roll90", "34": "Pitch270Roll180", "35": "Pitch270Roll270", "36": "Yaw90Pitch180Roll90", "37": "Yaw270Roll90", "38": "Yaw293Pitch68Roll180", "39": "Pitch315", "4": "Yaw180", "40": "Pitch315Roll90", "42": "Roll45", "43": "Roll315", "5": "Yaw225", "6": "Yaw270", "7": "Yaw315", "8": "Roll180", "9": "Yaw45Roll180"}}, "COMPASS_ORIENT2": {"Description": "The orientation of a second external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.", "DisplayName": "Compass2 orientation", "User": "Advanced", "Values": {"0": "None", "1": "Yaw45", "10": "Yaw90Roll180", "100": "Custom 4.1 and older", "101": "Custom 1", "102": "Custom 2", "11": "Yaw135Roll180", "12": "Pitch180", "13": "Yaw225Roll180", "14": "Yaw270Roll180", "15": "Yaw315Roll180", "16": "Roll90", "17": "Yaw45Roll90", "18": "Yaw90Roll90", "19": "Yaw135Roll90", "2": "Yaw90", "20": "Roll270", "21": "Yaw45Roll270", "22": "Yaw90Roll270", "23": "Yaw135Roll270", "24": "Pitch90", "25": "Pitch270", "26": "Yaw90Pitch180", "27": "Yaw270Pitch180", "28": "Pitch90Roll90", "29": "Pitch90Roll180", "3": "Yaw135", "30": "Pitch90Roll270", "31": "Pitch180Roll90", "32": "Pitch180Roll270", "33": "Pitch270Roll90", "34": "Pitch270Roll180", "35": "Pitch270Roll270", "36": "Yaw90Pitch180Roll90", "37": "Yaw270Roll90", "38": "Yaw293Pitch68Roll180", "39": "Pitch315", "4": "Yaw180", "40": "Pitch315Roll90", "42": "Roll45", "43": "Roll315", "5": "Yaw225", "6": "Yaw270", "7": "Yaw315", "8": "Roll180", "9": "Yaw45Roll180"}}, "COMPASS_ORIENT3": {"Description": "The orientation of a third external compass relative to the vehicle frame. This value will be ignored unless this compass is set as an external compass. When set correctly in the northern hemisphere, pointing the nose and right side down should increase the MagX and MagY values respectively. Rolling the vehicle upside down should decrease the MagZ value. For southern hemisphere, switch increase and decrease. NOTE: For internal compasses, AHRS_ORIENT is used. The label for each option is specified in the order of rotations for that orientation. Firmware versions 4.2 and prior can use a CUSTOM (100) rotation to set the COMPASS_CUS_ROLL/PIT/YAW angles for Compass orientation. Later versions provide two general custom rotations which can be used, Custom 1 and Custom 2, with CUST_1_ROLL/PIT/YAW or CUST_2_ROLL/PIT/YAW angles.", "DisplayName": "Compass3 orientation", "User": "Advanced", "Values": {"0": "None", "1": "Yaw45", "10": "Yaw90Roll180", "100": "Custom 4.1 and older", "101": "Custom 1", "102": "Custom 2", "11": "Yaw135Roll180", "12": "Pitch180", "13": "Yaw225Roll180", "14": "Yaw270Roll180", "15": "Yaw315Roll180", "16": "Roll90", "17": "Yaw45Roll90", "18": "Yaw90Roll90", "19": "Yaw135Roll90", "2": "Yaw90", "20": "Roll270", "21": "Yaw45Roll270", "22": "Yaw90Roll270", "23": "Yaw135Roll270", "24": "Pitch90", "25": "Pitch270", "26": "Yaw90Pitch180", "27": "Yaw270Pitch180", "28": "Pitch90Roll90", "29": "Pitch90Roll180", "3": "Yaw135", "30": "Pitch90Roll270", "31": "Pitch180Roll90", "32": "Pitch180Roll270", "33": "Pitch270Roll90", "34": "Pitch270Roll180", "35": "Pitch270Roll270", "36": "Yaw90Pitch180Roll90", "37": "Yaw270Roll90", "38": "Yaw293Pitch68Roll180", "39": "Pitch315", "4": "Yaw180", "40": "Pitch315Roll90", "42": "Roll45", "43": "Roll315", "5": "Yaw225", "6": "Yaw270", "7": "Yaw315", "8": "Roll180", "9": "Yaw45Roll180"}}, "COMPASS_PMOT1_X": {"Description": "Compensation for X axis of motor1", "DisplayName": "Compass per-motor1 X", "User": "Advanced"}, "COMPASS_PMOT1_Y": {"Description": "Compensation for Y axis of motor1", "DisplayName": "Compass per-motor1 Y", "User": "Advanced"}, "COMPASS_PMOT1_Z": {"Description": "Compensation for Z axis of motor1", "DisplayName": "Compass per-motor1 Z", "User": "Advanced"}, "COMPASS_PMOT2_X": {"Description": "Compensation for X axis of motor2", "DisplayName": "Compass per-motor2 X", "User": "Advanced"}, "COMPASS_PMOT2_Y": {"Description": "Compensation for Y axis of motor2", "DisplayName": "Compass per-motor2 Y", "User": "Advanced"}, "COMPASS_PMOT2_Z": {"Description": "Compensation for Z axis of motor2", "DisplayName": "Compass per-motor2 Z", "User": "Advanced"}, "COMPASS_PMOT3_X": {"Description": "Compensation for X axis of motor3", "DisplayName": "Compass per-motor3 X", "User": "Advanced"}, "COMPASS_PMOT3_Y": {"Description": "Compensation for Y axis of motor3", "DisplayName": "Compass per-motor3 Y", "User": "Advanced"}, "COMPASS_PMOT3_Z": {"Description": "Compensation for Z axis of motor3", "DisplayName": "Compass per-motor3 Z", "User": "Advanced"}, "COMPASS_PMOT4_X": {"Description": "Compensation for X axis of motor4", "DisplayName": "Compass per-motor4 X", "User": "Advanced"}, "COMPASS_PMOT4_Y": {"Description": "Compensation for Y axis of motor4", "DisplayName": "Compass per-motor4 Y", "User": "Advanced"}, "COMPASS_PMOT4_Z": {"Description": "Compensation for Z axis of motor4", "DisplayName": "Compass per-motor4 Z", "User": "Advanced"}, "COMPASS_PMOT_EN": {"Description": "This enables per-motor compass corrections", "DisplayName": "per-motor compass correction enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "COMPASS_PMOT_EXP": {"Description": "This is the exponential correction for the power output of the motor for per-motor compass correction", "DisplayName": "per-motor exponential correction", "Increment": "0.01", "Range": {"high": "2", "low": "0"}, "User": "Advanced"}, "COMPASS_PRIO1_ID": {"Description": "Compass device id with 1st order priority, set automatically if 0. Reboot required after change.", "DisplayName": "Compass device id with 1st order priority", "RebootRequired": "True", "User": "Advanced"}, "COMPASS_PRIO2_ID": {"Description": "Compass device id with 2nd order priority, set automatically if 0. Reboot required after change.", "DisplayName": "Compass device id with 2nd order priority", "RebootRequired": "True", "User": "Advanced"}, "COMPASS_PRIO3_ID": {"Description": "Compass device id with 3rd order priority, set automatically if 0. Reboot required after change.", "DisplayName": "Compass device id with 3rd order priority", "RebootRequired": "True", "User": "Advanced"}, "COMPASS_SCALE": {"Description": "Scaling factor for first compass to compensate for sensor scaling errors. If this is 0 then no scaling is done", "DisplayName": "Compass1 scale factor", "Range": {"high": "1.3", "low": "0"}, "User": "Standard"}, "COMPASS_SCALE2": {"Description": "Scaling factor for 2nd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done", "DisplayName": "Compass2 scale factor", "Range": {"high": "1.3", "low": "0"}, "User": "Standard"}, "COMPASS_SCALE3": {"Description": "Scaling factor for 3rd compass to compensate for sensor scaling errors. If this is 0 then no scaling is done", "DisplayName": "Compass3 scale factor", "Range": {"high": "1.3", "low": "0"}, "User": "Standard"}, "COMPASS_USE": {"Description": "Enable or disable the use of the compass (instead of the GPS) for determining heading", "DisplayName": "Use compass for yaw", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "COMPASS_USE2": {"Description": "Enable or disable the secondary compass for determining heading.", "DisplayName": "Compass2 used for yaw", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "COMPASS_USE3": {"Description": "Enable or disable the tertiary compass for determining heading.", "DisplayName": "Compass3 used for yaw", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "CRASH_ACC_THRESH": {"Description": "X-Axis deceleration threshold to notify the crash detector that there was a possible impact which helps disarm the motor quickly after a crash. This value should be much higher than normal negative x-axis forces during normal flight, check flight log files to determine the average IMU.x values for your aircraft and motor type. Higher value means less sensative (triggers on higher impact). For electric planes that don't vibrate much during fight a value of 25 is good (that's about 2.5G). For petrol/nitro planes you'll want a higher value. Set to 0 to disable the collision detector.", "DisplayName": "Crash Deceleration Threshold", "Increment": "1", "Range": {"high": "127", "low": "10"}, "Units": "m/s/s", "User": "Advanced"}, "CRASH_DETECT": {"Bitmask": {"0": "Disarm"}, "Description": "Automatically detect a crash during AUTO flight and perform the bitmask selected action(s). Disarm will turn off motor for safety and to help against burning out ESC and motor. Set to 0 to disable crash detection.", "DisplayName": "Crash Detection", "User": "Advanced", "Values": {"0": "Disabled"}}, "CRUISE_ALT_FLOOR": {"Description": "This is the minimum altitude in meters (above home) that FBWB and CRUISE modes will allow. If you attempt to descend below this altitude then the plane will level off. It will also force a climb to this altitude if below in these modes. A value of zero means no limit.", "DisplayName": "Minimum altitude for FBWB and CRUISE mode", "Units": "m", "User": "Standard"}, "CUST_ROT1_PITCH": {"Description": "Custom euler pitch, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom pitch", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT1_ROLL": {"Description": "Custom euler roll, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom roll", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT1_YAW": {"Description": "Custom euler yaw, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom yaw", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT2_PITCH": {"Description": "Custom euler pitch, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom pitch", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT2_ROLL": {"Description": "Custom euler roll, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom roll", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT2_YAW": {"Description": "Custom euler yaw, euler 321 (yaw, pitch, roll) ordering", "DisplayName": "Custom yaw", "RebootRequired": "True", "Units": "deg"}, "CUST_ROT_ENABLE": {"Description": "This enables custom rotations", "DisplayName": "Enable Custom rotations", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Enable"}}, "DDS_ENABLE": {"Description": "Enable DDS subsystem", "DisplayName": "DDS enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "DDS_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "DDS_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "DDS_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "DDS_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "DDS_UDP_PORT": {"Description": "UDP port number for DDS", "DisplayName": "DDS UDP port", "Range": {"high": "65535", "low": "1"}, "RebootRequired": "True", "User": "Standard"}, "DID_BARO_ACC": {"Description": "Barometer Vertical Accuracy when installed in the vehicle. Note this is dependent upon installation conditions and thus disabled by default", "DisplayName": "Barometer vertical accuraacy", "Units": "m", "User": "Advanced"}, "DID_CANDRIVER": {"Description": "DroneCAN driver index, 0 to disable DroneCAN", "DisplayName": "DroneCAN driver number", "Values": {"0": "Disabled", "1": "Driver1", "2": "Driver2"}}, "DID_ENABLE": {"Description": "Enable ODID subsystem", "DisplayName": "Enable ODID subsystem", "Values": {"0": "Disabled", "1": "Enabled"}}, "DID_MAVPORT": {"Description": "Serial port number to send OpenDroneID MAVLink messages to. Can be -1 if using DroneCAN.", "DisplayName": "MAVLink serial port", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "DID_OPTIONS": {"Bitmask": {"0": "EnforceArming", "1": "AllowNonGPSPosition", "2": "LockUASIDOnFirstBasicIDRx"}, "Description": "Options for OpenDroneID subsystem", "DisplayName": "OpenDroneID options"}, "DIST_CUTOFF": {"Description": "The distance from target beyond which the target is ignored", "DisplayName": "Precland distance cutoff", "Range": {"high": "100", "low": "0"}, "Units": "m", "User": "Standard"}, "DJIR_DEBUG": {"Description": "Enable DJIRS2 debug", "DisplayName": "DJIRS2 debug", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Enabled with attitude reporting"}}, "DJIR_UPSIDEDOWN": {"Description": "DJIRS2 upside down", "DisplayName": "DJIRS2 upside down", "User": "Standard", "Values": {"0": "Right side up", "1": "Upside down"}}, "DR_ENABLE": {"Description": "Deadreckoning Enable", "DisplayName": "Deadreckoning Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "DR_ENABLE_DIST": {"Description": "Distance from home (in meters) beyond which the dead reckoning will be enabled", "DisplayName": "Deadreckoning Enable Distance", "Units": "m", "User": "Standard"}, "DR_FLY_ALT_MIN": {"Description": "Copter will fly at at least this altitude (in meters) above home during deadreckoning", "DisplayName": "Deadreckoning Altitude Min", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "DR_FLY_ANGLE": {"Description": "lean angle (in degrees) during deadreckoning", "DisplayName": "Deadreckoning Lean Angle", "Range": {"high": "45", "low": "0"}, "Units": "deg", "User": "Standard"}, "DR_FLY_TIMEOUT": {"Description": "Copter will attempt to switch to NEXT_MODE after this many seconds of deadreckoning. If it cannot switch modes it will continue in Guided_NoGPS. Set to 0 to disable timeout", "DisplayName": "Deadreckoning flight timeout", "Units": "s", "User": "Standard"}, "DR_GPS_SACC_MAX": {"Description": "GPS speed accuracy maximum, above which deadreckoning home will begin (default is 0.8). Lower values trigger with good GPS quality, higher values will allow poorer GPS before triggering. Set to 0 to disable use of GPS speed accuracy", "DisplayName": "Deadreckoning GPS speed accuracy maximum threshold", "Range": {"high": "10", "low": "0"}, "User": "Standard"}, "DR_GPS_SAT_MIN": {"Description": "GPS satellite count threshold below which deadreckoning home will begin (default is 6). Higher values trigger with good GPS quality, Lower values trigger with worse GPS quality. Set to 0 to disable use of GPS satellite count", "DisplayName": "Deadreckoning GPS satellite count min threshold", "Range": {"high": "30", "low": "0"}, "User": "Standard"}, "DR_GPS_TRIGG_SEC": {"Description": "GPS checks must fail for this many seconds before dead reckoning will be triggered", "DisplayName": "Deadreckoning GPS check trigger seconds", "Units": "s", "User": "Standard"}, "DR_NEXT_MODE": {"Description": "Copter switch to this mode after GPS recovers or DR_FLY_TIMEOUT has elapsed. Default is 6/RTL. Set to -1 to return to mode used before deadreckoning was triggered", "DisplayName": "Deadreckoning Next Mode", "User": "Standard", "Values": {"16": "PosHold", "17": "Brake", "2": "AltHold", "20": "Guided_NoGPS", "21": "Smart_RTL", "27": "Auto RTL", "3": "Auto", "4": "Guided", "5": "Loiter", "6": "RTL", "7": "Circle", "9": "Land"}}, "DSPOILER_AILMTCH": {"Description": "This scales down the inner flaps so less than full downwards range can be used for differential spoiler and full span ailerons, 100 is use full range, upwards travel is unaffected", "DisplayName": "Differential spoiler aileron matching", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "DSPOILER_CROW_W1": {"Description": "This is amount of deflection applied to the two outer surfaces for differential spoilers for flaps to give crow flaps. It is a number from 0 to 100. At zero no crow flaps are applied. A recommended starting value is 25.", "DisplayName": "Differential spoiler crow flaps outer weight", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "DSPOILER_CROW_W2": {"Description": "This is amount of deflection applied to the two inner surfaces for differential spoilers for flaps to give crow flaps. It is a number from 0 to 100. At zero no crow flaps are applied. A recommended starting value is 45.", "DisplayName": "Differential spoiler crow flaps inner weight", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "DSPOILER_OPTS": {"Bitmask": {"0": "pitch control", "1": "full span", "2": "Progressive crow"}, "Description": "Differential spoiler and crow flaps options", "DisplayName": "Differential spoiler and crow flaps options", "User": "Advanced", "Values": {"0": "none", "1": "D spoilers have pitch input", "2": "use both control surfaces on each wing for roll", "4": "Progressive crow flaps only first (0-50% flap in) then crow flaps (50 - 100% flap in)"}}, "DSPOILR_RUD_RATE": {"Description": "Sets the amount of deflection that the rudder output will apply to the differential spoilers, as a percentage. The default value of 100 results in full rudder applying full deflection. A value of 0 will result in the differential spoilers exactly following the elevons (no rudder effect).", "DisplayName": "Differential spoilers rudder rate", "Range": {"high": "100", "low": "-100"}, "Units": "%", "User": "Standard"}, "EAHRS_LOG_RATE": {"Description": "Logging rate for EARHS devices", "DisplayName": "AHRS logging rate", "Units": "Hz", "User": "Standard"}, "EAHRS_OPTIONS": {"Bitmask": {"0": "Vector Nav use uncompensated values for accel gyro and mag."}, "Description": "External AHRS options bitmask", "DisplayName": "External AHRS options", "User": "Standard"}, "EAHRS_RATE": {"Description": "Requested rate for AHRS device", "DisplayName": "AHRS data rate", "Units": "Hz", "User": "Standard"}, "EAHRS_SENSORS": {"Bitmask": {"0": "GPS", "1": "IMU", "2": "Baro", "3": "Compass"}, "Description": "External AHRS sensors bitmask", "DisplayName": "External AHRS sensors", "User": "Advanced"}, "EAHRS_TYPE": {"Description": "Type of AHRS device", "DisplayName": "AHRS type", "User": "Standard", "Values": {"0": "None", "1": "VectorNav", "2": "MicroStrain5", "5": "InertialLabs", "7": "MicroStrain7"}}, "EFI_COEF1": {"Description": "Used to calibrate fuel flow for MS protocol (Slope). This should be calculated from a log at constant fuel usage rate. Plot (ECYL[0].InjT*EFI.Rpm)/600.0 to get the duty_cycle. Measure actual fuel usage in cm^3/min, and set EFI_COEF1 = fuel_usage_cm3permin / duty_cycle", "DisplayName": "EFI Calibration Coefficient 1", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "EFI_COEF2": {"Description": "Used to calibrate fuel flow for MS protocol (Offset). This can be used to correct for a non-zero offset in the fuel consumption calculation of EFI_COEF1", "DisplayName": "EFI Calibration Coefficient 2", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "EFI_DLA_ENABLE": {"Description": "Enable EFI DLA driver", "DisplayName": "EFI DLA enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_DLA_LPS": {"Description": "EFI DLA litres of fuel per second of injection time", "DisplayName": "EFI DLA fuel scale", "Range": {"high": "1", "low": "0.00001"}, "Units": "litres", "User": "Standard"}, "EFI_FUEL_DENS": {"Description": "Used to calculate fuel consumption", "DisplayName": "ECU Fuel Density", "Range": {"high": "10000", "low": "0"}, "Units": "kg/m/m/m", "User": "Advanced"}, "EFI_H6K_CANDRV": {"Description": "Halo6000 CAN driver. Use 1 for first CAN scripting driver, 2 for 2nd driver", "DisplayName": "Halo6000 CAN driver", "User": "Standard", "Values": {"0": "Disabled", "1": "FirstCAN", "2": "SecondCAN"}}, "EFI_H6K_ENABLE": {"Description": "Enable Halo6000 EFI driver", "DisplayName": "Enable Halo6000 EFI driver", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_H6K_FUELTOT": {"Description": "The capacity of the tank in litres", "DisplayName": "Halo6000 total fuel capacity", "Units": "litres", "User": "Standard"}, "EFI_H6K_START_FN": {"Description": "The RC auxilliary function number for start/stop of the generator. Zero to disable start function", "DisplayName": "Halo6000 start auxilliary function", "User": "Standard", "Values": {"0": "Disabled", "300": "300", "301": "301", "302": "302", "303": "303", "304": "304", "305": "305", "306": "306", "307": "307"}}, "EFI_H6K_TELEM_RT": {"Description": "The rate that additional generator telemetry is sent", "DisplayName": "Halo6000 telemetry rate", "Units": "Hz", "User": "Standard"}, "EFI_INF_ENABLE": {"Description": "Enable EFI INF-Inject driver", "DisplayName": "EFI INF-Inject enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_INF_OPTIONS": {"Bitmask": {"0": "EnableLogging"}, "Description": "EFI INF driver options", "DisplayName": "EFI INF-Inject options", "User": "Standard"}, "EFI_SP_CANDRV": {"Description": "Set SkyPower EFI CAN driver", "DisplayName": "Set SkyPower EFI CAN driver", "User": "Standard", "Values": {"0": "None", "1": "1stCANDriver", "2": "2ndCanDriver"}}, "EFI_SP_ENABLE": {"Description": "Enable SkyPower EFI support", "DisplayName": "Enable SkyPower EFI support", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_SP_GEN_CTRL": {"Description": "SkyPower EFI enable generator control", "DisplayName": "SkyPower EFI enable generator control", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_SP_GEN_FN": {"Description": "SkyPower EFI generator control function. This is the RCn_OPTION value to use to find the R/C channel used for controlling generator start/stop", "DisplayName": "SkyPower EFI generator control function", "User": "Standard", "Values": {"0": "Disabled", "300": "300", "301": "301", "302": "302", "303": "303", "304": "304", "305": "305", "306": "306", "307": "307"}}, "EFI_SP_LOG_RT": {"Description": "SkyPower EFI log rate. This is the rate at which extra logging of the SkyPower EFI is performed", "DisplayName": "SkyPower EFI log rate", "Range": {"high": "50", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "EFI_SP_MIN_RPM": {"Description": "SkyPower EFI minimum RPM. This is the RPM below which the engine is considered to be stopped", "DisplayName": "SkyPower EFI minimum RPM", "Range": {"high": "1000", "low": "1"}, "User": "Advanced"}, "EFI_SP_MODEL": {"Description": "SkyPower EFI ECU model", "DisplayName": "SkyPower EFI ECU model", "User": "Standard", "Values": {"0": "Default", "1": "SP_275"}}, "EFI_SP_RST_TIME": {"Description": "SkyPower EFI restart time. If engine should be running and it has stopped for this amount of time then auto-restart. To disable this feature set this value to zero.", "DisplayName": "SkyPower EFI restart time", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Standard"}, "EFI_SP_START_FN": {"Description": "SkyPower EFI start function. This is the RCn_OPTION value to use to find the R/C channel used for controlling engine start", "DisplayName": "SkyPower EFI start function", "User": "Standard", "Values": {"0": "Disabled", "300": "300", "301": "301", "302": "302", "303": "303", "304": "304", "305": "305", "306": "306", "307": "307"}}, "EFI_SP_ST_DISARM": {"Description": "SkyPower EFI allow start disarmed. This controls if starting the engine while disarmed is allowed", "DisplayName": "SkyPower EFI allow start disarmed", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_SP_THR_FN": {"Description": "SkyPower EFI throttle function. This sets which SERVOn_FUNCTION to use for the target throttle. This should be 70 for fixed wing aircraft and 31 for helicopter rotor speed control", "DisplayName": "SkyPower EFI throttle function", "User": "Standard", "Values": {"0": "Disabled", "31": "HeliRSC", "70": "FixedWing"}}, "EFI_SP_THR_RATE": {"Description": "SkyPower EFI throttle rate. This sets rate at which throttle updates are sent to the engine", "DisplayName": "SkyPower EFI throttle rate", "Range": {"high": "100", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "EFI_SP_TLM_RT": {"Description": "SkyPower EFI telemetry rate. This is the rate at which extra telemetry values are sent to the GCS", "DisplayName": "SkyPower EFI telemetry rate", "Range": {"high": "10", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "EFI_SP_UPDATE_HZ": {"Description": "SkyPower EFI update rate", "DisplayName": "SkyPower EFI update rate", "Range": {"high": "200", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "EFI_SVF_ARMCHECK": {"Description": "Check for Generator ARM state before arming", "DisplayName": "Generator SVFFI arming check", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_SVF_ENABLE": {"Description": "Enable SVFFI generator support", "DisplayName": "Generator SVFFI enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_THRLIN_COEF1": {"Description": "First Order Polynomial Coefficient. (=1, if throttle is first order polynomial trendline)", "DisplayName": "Throttle linearisation - First Order", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "User": "Advanced"}, "EFI_THRLIN_COEF2": {"Description": "Second Order Polynomial Coefficient (=0, if throttle is second order polynomial trendline)", "DisplayName": "Throttle linearisation - Second Order", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "User": "Advanced"}, "EFI_THRLIN_COEF3": {"Description": "Third Order Polynomial Coefficient. (=0, if throttle is third order polynomial trendline)", "DisplayName": "Throttle linearisation - Third Order", "Range": {"high": "1", "low": "-1"}, "RebootRequired": "True", "User": "Advanced"}, "EFI_THRLIN_EN": {"Description": "Enable EFI throttle linearisation", "DisplayName": "Enable throttle linearisation", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "EFI_THRLIN_OFS": {"Description": "Offset for throttle linearization ", "DisplayName": "throttle linearization offset", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "EFI_TYPE": {"Description": "What method of communication is used for EFI #1", "DisplayName": "EFI communication type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "Serial-MS", "2": "NWPMU", "3": "Serial-Lutan", "5": "DroneCAN", "6": "Currawong-ECU", "7": "Scripting", "8": "Hirth", "9": "MAV"}}, "EK2_ABIAS_P_NSE": {"Description": "This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.", "DisplayName": "Accelerometer bias stability (m/s^3)", "Range": {"high": "0.005", "low": "0.00001"}, "Units": "m/s/s/s", "User": "Advanced"}, "EK2_ACC_P_NSE": {"Description": "This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.", "DisplayName": "Accelerometer noise (m/s^2)", "Increment": "0.01", "Range": {"high": "1.0", "low": "0.01"}, "Units": "m/s/s", "User": "Advanced"}, "EK2_ALT_M_NSE": {"Description": "This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors.", "DisplayName": "Altitude measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK2_ALT_SOURCE": {"Description": "Primary height sensor used by the EKF. If a sensor other than Baro is selected and becomes unavailable, then the Baro sensor will be used as a fallback. NOTE: The EK2_RNG_USE_HGT parameter can be used to switch to range-finder when close to the ground in conjunction with EK2_ALT_SOURCE = 0 or 2 (Baro or GPS).", "DisplayName": "Primary altitude sensor source", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Use Baro", "1": "Use Range Finder", "2": "Use GPS", "3": "Use Range Beacon"}}, "EK2_BCN_DELAY": {"Description": "This is the number of msec that the range beacon measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.", "DisplayName": "Range beacon measurement delay (msec)", "Increment": "10", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK2_BCN_I_GTE": {"Description": "This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Range beacon measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_BCN_M_NSE": {"Description": "This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.", "DisplayName": "Range beacon measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK2_CHECK_SCALE": {"Description": "This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.", "DisplayName": "GPS accuracy check scaler (%)", "Range": {"high": "200", "low": "50"}, "Units": "%", "User": "Advanced"}, "EK2_EAS_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Airspeed measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_EAS_M_NSE": {"Description": "This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.", "DisplayName": "Equivalent airspeed measurement noise (m/s)", "Increment": "0.1", "Range": {"high": "5.0", "low": "0.5"}, "Units": "m/s", "User": "Advanced"}, "EK2_ENABLE": {"Description": "This enables EKF2. Enabling EKF2 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=2. A reboot or restart will need to be performed after changing the value of EK2_ENABLE for it to take effect.", "DisplayName": "Enable EKF2", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "EK2_FLOW_DELAY": {"Description": "This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.", "DisplayName": "Optical Flow measurement delay (msec)", "Increment": "10", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK2_FLOW_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Optical Flow measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_FLOW_M_NSE": {"Description": "This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.", "DisplayName": "Optical flow measurement noise (rad/s)", "Increment": "0.05", "Range": {"high": "1.0", "low": "0.05"}, "Units": "rad/s", "User": "Advanced"}, "EK2_FLOW_USE": {"Description": "Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.", "DisplayName": "Optical flow use bitmask", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "Navigation", "2": "Terrain"}}, "EK2_GBIAS_P_NSE": {"Description": "This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.", "DisplayName": "Rate gyro bias stability (rad/s/s)", "Range": {"high": "0.001", "low": "0.00001"}, "Units": "rad/s/s", "User": "Advanced"}, "EK2_GLITCH_RAD": {"Description": "This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position.", "DisplayName": "GPS glitch radius gate size (m)", "Increment": "5", "Range": {"high": "100", "low": "10"}, "Units": "m", "User": "Advanced"}, "EK2_GPS_CHECK": {"Bitmask": {"0": "NSats", "1": "HDoP", "2": "speed error", "3": "position error", "4": "yaw error", "5": "pos drift", "6": "vert speed", "7": "horiz speed"}, "Description": "This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.", "DisplayName": "GPS preflight check", "User": "Advanced"}, "EK2_GPS_TYPE": {"Description": "This controls use of GPS measurements : 0 = use 3D velocity & 2D position, 1 = use 2D velocity and 2D position, 2 = use 2D position, 3 = Inhibit GPS use - this can be useful when flying with an optical flow sensor in an environment where GPS quality is poor and subject to large multipath errors.", "DisplayName": "GPS mode control", "User": "Advanced", "Values": {"0": "GPS 3D Vel and 2D Pos", "1": "GPS 2D vel and 2D pos", "2": "GPS 2D pos", "3": "No GPS"}}, "EK2_GSCL_P_NSE": {"Description": "This noise controls the rate of gyro scale factor learning. Increasing it makes rate gyro scale factor estimation faster and noisier.", "DisplayName": "Rate gyro scale factor stability (1/s)", "Range": {"high": "0.001", "low": "0.000001"}, "Units": "Hz", "User": "Advanced"}, "EK2_GSF_RST_MAX": {"Description": "Sets the maximum number of times the EKF2 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK2_GSF_USE_MASK parameter.", "DisplayName": "Maximum number of resets to the EKF-GSF yaw estimate allowed", "Increment": "1", "Range": {"high": "10", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "EK2_GSF_RUN_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "A bitmask of which EKF2 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF2 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK2_GSF_USE_MASK and EK2_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK2_GSF_USE_MASK to 0. ", "DisplayName": "Bitmask of which EKF-GSF yaw estimators run", "RebootRequired": "True", "User": "Advanced"}, "EK2_GSF_USE_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "1 byte bitmap of which EKF2 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK2_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF2 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF2 instance.", "DisplayName": "Bitmask of which EKF-GSF yaw estimators are used", "RebootRequired": "True", "User": "Advanced"}, "EK2_GYRO_P_NSE": {"Description": "This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.", "DisplayName": "Rate gyro noise (rad/s)", "Increment": "0.0001", "Range": {"high": "0.1", "low": "0.0001"}, "Units": "rad/s", "User": "Advanced"}, "EK2_HGT_DELAY": {"Description": "This is the number of msec that the Height measurements lag behind the inertial measurements.", "DisplayName": "Height measurement delay (msec)", "Increment": "10", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK2_HGT_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Height measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_HRT_FILT": {"Description": "Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.", "DisplayName": "Height rate filter crossover frequency", "Range": {"high": "30.0", "low": "0.1"}, "Units": "Hz"}, "EK2_IMU_MASK": {"Bitmask": {"0": "FirstIMU", "1": "SecondIMU", "2": "ThirdIMU", "3": "FourthIMU", "4": "FifthIMU", "5": "SixthIMU"}, "Description": "1 byte bitmap of IMUs to use in EKF2. A separate instance of EKF2 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF2 will fail to start.", "DisplayName": "Bitmask of active IMUs", "RebootRequired": "True", "User": "Advanced"}, "EK2_MAGB_P_NSE": {"Description": "This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.", "DisplayName": "Body magnetic field process noise (gauss/s)", "Range": {"high": "0.01", "low": "0.00001"}, "Units": "Gauss/s", "User": "Advanced"}, "EK2_MAGE_P_NSE": {"Description": "This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.", "DisplayName": "Earth magnetic field process noise (gauss/s)", "Range": {"high": "0.01", "low": "0.00001"}, "Units": "Gauss/s", "User": "Advanced"}, "EK2_MAG_CAL": {"Description": "This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states, when it will use a simpler magnetic heading fusion model that does not use magnetic field states and when it will use an alternative method of yaw determination to the magnetometer. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK2_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK2_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK2_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK2_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK2_MAG_CAL = 4 uses 3-axis fusion at all times. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK2_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 with COMPASS_ENABLE set to 1. If this is done, the EK2_GSF_RUN and EK2_GSF_USE masks must be set to the same as EK2_IMU_MASK.", "DisplayName": "Magnetometer default fusion mode", "User": "Advanced", "Values": {"0": "When flying", "1": "When manoeuvring", "2": "Never", "3": "After first climb yaw reset", "4": "Always"}}, "EK2_MAG_EF_LIM": {"Description": "This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.", "DisplayName": "EarthField error limit", "Range": {"high": "500", "low": "0"}, "Units": "mGauss", "User": "Advanced"}, "EK2_MAG_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Magnetometer measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_MAG_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.", "DisplayName": "Bitmask of active EKF cores that will always use heading fusion", "RebootRequired": "True", "User": "Advanced"}, "EK2_MAG_M_NSE": {"Description": "This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.", "DisplayName": "Magnetometer measurement noise (Gauss)", "Increment": "0.01", "Range": {"high": "0.5", "low": "0.01"}, "Units": "Gauss", "User": "Advanced"}, "EK2_MAX_FLOW": {"Description": "This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter", "DisplayName": "Maximum valid optical flow rate", "Increment": "0.1", "Range": {"high": "4.0", "low": "1.0"}, "Units": "rad/s", "User": "Advanced"}, "EK2_NOAID_M_NSE": {"Description": "This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.", "DisplayName": "Non-GPS operation position uncertainty (m)", "Range": {"high": "50.0", "low": "0.5"}, "Units": "m", "User": "Advanced"}, "EK2_OGN_HGT_MASK": {"Bitmask": {"0": "Correct when using Baro height", "1": "Correct when using range finder height", "2": "Apply corrections to local position"}, "Description": "When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).", "DisplayName": "Bitmask control of EKF reference height correction", "RebootRequired": "True", "User": "Advanced"}, "EK2_POSNE_M_NSE": {"Description": "This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.", "DisplayName": "GPS horizontal position measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK2_POS_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "GPS position measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_RNG_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Range finder measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_RNG_M_NSE": {"Description": "This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.", "DisplayName": "Range finder measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK2_RNG_USE_HGT": {"Description": "Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFND_MAX_CM). This will not work unless Baro or GPS height is selected as the primary height source vis EK2_ALT_SOURCE = 0 or 2 respectively. This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.", "DisplayName": "Range finder switch height percentage", "Increment": "1", "Range": {"high": "70", "low": "-1"}, "Units": "%", "User": "Advanced"}, "EK2_RNG_USE_SPD": {"Description": "The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.", "DisplayName": "Range finder max ground speed", "Increment": "0.5", "Range": {"high": "6.0", "low": "2.0"}, "Units": "m/s", "User": "Advanced"}, "EK2_TAU_OUTPUT": {"Description": "Sets the time constant of the output complementary filter/predictor in centi-seconds.", "DisplayName": "Output complementary filter time constant (centi-sec)", "Increment": "5", "Range": {"high": "50", "low": "10"}, "Units": "cs", "User": "Advanced"}, "EK2_TERR_GRAD": {"Description": "Specifies the maximum gradient of the terrain below the vehicle assumed when it is fusing range finder or optical flow to estimate terrain height.", "DisplayName": "Maximum terrain gradient", "Increment": "0.01", "Range": {"high": "0.2", "low": "0"}, "User": "Advanced"}, "EK2_VELD_M_NSE": {"Description": "This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.", "DisplayName": "GPS vertical velocity measurement noise (m/s)", "Increment": "0.05", "Range": {"high": "5.0", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "EK2_VELNE_M_NSE": {"Description": "This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.", "DisplayName": "GPS horizontal velocity measurement noise (m/s)", "Increment": "0.05", "Range": {"high": "5.0", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "EK2_VEL_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "GPS velocity innovation gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_WIND_PSCALE": {"Description": "This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.", "DisplayName": "Height rate to wind process noise scaler", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.0"}, "User": "Advanced"}, "EK2_WIND_P_NSE": {"Description": "This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.", "DisplayName": "Wind velocity process noise (m/s^2)", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.01"}, "Units": "m/s/s", "User": "Advanced"}, "EK2_YAW_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Yaw measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK2_YAW_M_NSE": {"Description": "This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.", "DisplayName": "Yaw measurement noise (rad)", "Increment": "0.05", "Range": {"high": "1.0", "low": "0.05"}, "Units": "rad", "User": "Advanced"}, "EK3_ABIAS_P_NSE": {"Description": "This noise controls the growth of the vertical accelerometer delta velocity bias state error estimate. Increasing it makes accelerometer bias estimation faster and noisier.", "DisplayName": "Accelerometer bias stability (m/s^3)", "Range": {"high": "0.02", "low": "0.00001"}, "Units": "m/s/s/s", "User": "Advanced"}, "EK3_ACC_BIAS_LIM": {"Description": "The accelerometer bias state will be limited to +- this value", "DisplayName": "Accelerometer bias limit", "Increment": "0.1", "Range": {"high": "2.5", "low": "0.5"}, "Units": "m/s/s", "User": "Advanced"}, "EK3_ACC_P_NSE": {"Description": "This control disturbance noise controls the growth of estimated error due to accelerometer measurement errors excluding bias. Increasing it makes the flter trust the accelerometer measurements less and other measurements more.", "DisplayName": "Accelerometer noise (m/s^2)", "Increment": "0.01", "Range": {"high": "1.0", "low": "0.01"}, "Units": "m/s/s", "User": "Advanced"}, "EK3_AFFINITY": {"Bitmask": {"0": "EnableGPSAffinity", "1": "EnableBaroAffinity", "2": "EnableCompassAffinity", "3": "EnableAirspeedAffinity"}, "Description": "These options control the affinity between sensor instances and EKF cores", "DisplayName": "EKF3 Sensor Affinity Options", "RebootRequired": "True", "User": "Advanced"}, "EK3_ALT_M_NSE": {"Description": "This is the RMS value of noise in the altitude measurement. Increasing it reduces the weighting of the baro measurement and will make the filter respond more slowly to baro measurement errors, but will make it more sensitive to GPS and accelerometer errors. A larger value for EK3_ALT_M_NSE may be required when operating with EK3_SRCx_POSZ = 0. This parameter also sets the noise for the 'synthetic' zero height measurement that is used when EK3_SRCx_POSZ = 0.", "DisplayName": "Altitude measurement noise (m)", "Increment": "0.1", "Range": {"high": "100.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK3_BCN_DELAY": {"Description": "This is the number of msec that the range beacon measurements lag behind the inertial measurements.", "DisplayName": "Range beacon measurement delay (msec)", "Increment": "10", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK3_BCN_I_GTE": {"Description": "This sets the percentage number of standard deviations applied to the range beacon measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Range beacon measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_BCN_M_NSE": {"Description": "This is the RMS value of noise in the range beacon measurement. Increasing it reduces the weighting on this measurement.", "DisplayName": "Range beacon measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK3_BETA_MASK": {"Bitmask": {"0": "Always", "1": "WhenNoYawSensor"}, "Description": "1 byte bitmap controlling use of sideslip angle fusion for estimation of non wind states during operation of 'fly forward' vehicle types such as fixed wing planes. By assuming that the angle of sideslip is small, the wind velocity state estimates are corrected whenever the EKF is not dead reckoning (e.g. has an independent velocity or position sensor such as GPS). This behaviour is on by default and cannot be disabled. When the EKF is dead reckoning, the wind states are used as a reference, enabling use of the small angle of sideslip assumption to correct non wind velocity states (eg attitude, velocity, position, etc) and improve navigation accuracy. This behaviour is on by default and cannot be disabled. The behaviour controlled by this parameter is the use of the small angle of sideslip assumption to correct non wind velocity states when the EKF is NOT dead reckoning. This is primarily of benefit to reduce the buildup of yaw angle errors during straight and level flight without a yaw sensor (e.g. magnetometer or dual antenna GPS yaw) provided aerobatic flight maneuvers with large sideslip angles are not performed. The 'always' option might be used where the yaw sensor is intentionally not fitted or disabled. The 'WhenNoYawSensor' option might be used if a yaw sensor is fitted, but protection against in-flight failure and continual rejection by the EKF is desired. For vehicles operated within visual range of the operator performing frequent turning maneuvers, setting this parameter is unnecessary.", "DisplayName": "Bitmask controlling sidelip angle fusion", "RebootRequired": "True", "User": "Advanced"}, "EK3_CHECK_SCALE": {"Description": "This scales the thresholds that are used to check GPS accuracy before it is used by the EKF. A value of 100 is the default. Values greater than 100 increase and values less than 100 reduce the maximum GPS error the EKF will accept. A value of 200 will double the allowable GPS error.", "DisplayName": "GPS accuracy check scaler (%)", "Range": {"high": "200", "low": "50"}, "Units": "%", "User": "Advanced"}, "EK3_DRAG_BCOEF_X": {"Description": "Ratio of mass to drag coefficient measured along the X body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the frontal area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.", "DisplayName": "Ballistic coefficient for X axis drag", "Range": {"high": "1000.0", "low": "0.0"}, "Units": "kg/m/m", "User": "Advanced"}, "EK3_DRAG_BCOEF_Y": {"Description": "Ratio of mass to drag coefficient measured along the Y body axis. This parameter enables estimation of wind drift for vehicles with bluff bodies and without propulsion forces in the X and Y direction (eg multicopters). The drag produced by this effect scales with speed squared. Set to a postive value > 1.0 to enable. A starting value is the mass in Kg divided by the side area. The predicted drag from the rotors is specified separately by the EK3_DRAG_MCOEF parameter.", "DisplayName": "Ballistic coefficient for Y axis drag", "Range": {"high": "1000.0", "low": "50.0"}, "Units": "kg/m/m", "User": "Advanced"}, "EK3_DRAG_MCOEF": {"Description": "This parameter is used to predict the drag produced by the rotors when flying a multi-copter, enabling estimation of wind drift. The drag produced by this effect scales with speed not speed squared and is produced because some of the air velocity normal to the rotors axis of rotation is lost when passing through the rotor disc which changes the momentum of the airflow causing drag. For unducted rotors the effect is roughly proportional to the area of the propeller blades when viewed side on and changes with different propellers. It is higher for ducted rotors. For example if flying at 15 m/s at sea level conditions produces a rotor induced drag acceleration of 1.5 m/s/s, then EK3_DRAG_MCOEF would be set to 0.1 = (1.5/15.0). Set EK3_MCOEF to a postive value to enable wind estimation using this drag effect. To account for the drag produced by the body which scales with speed squared, see documentation for the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters.", "DisplayName": "Momentum coefficient for propeller drag", "Increment": "0.01", "Range": {"high": "1.0", "low": "0.0"}, "Units": "1/s", "User": "Advanced"}, "EK3_DRAG_M_NSE": {"Description": "This sets the amount of noise used when fusing X and Y acceleration as an observation that enables esitmation of wind velocity for multi-rotor vehicles. This feature is enabled by the EK3_DRAG_BCOEF_X and EK3_DRAG_BCOEF_Y parameters", "DisplayName": "Observation noise for drag acceleration", "Increment": "0.1", "Range": {"high": "2.0", "low": "0.1"}, "Units": "m/s/s", "User": "Advanced"}, "EK3_EAS_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the airspeed measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Airspeed measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_EAS_M_NSE": {"Description": "This is the RMS value of noise in equivalent airspeed measurements used by planes. Increasing it reduces the weighting of airspeed measurements and will make wind speed estimates less noisy and slower to converge. Increasing also increases navigation errors when dead-reckoning without GPS measurements.", "DisplayName": "Equivalent airspeed measurement noise (m/s)", "Increment": "0.1", "Range": {"high": "5.0", "low": "0.5"}, "Units": "m/s", "User": "Advanced"}, "EK3_ENABLE": {"Description": "This enables EKF3. Enabling EKF3 only makes the maths run, it does not mean it will be used for flight control. To use it for flight control set AHRS_EKF_TYPE=3. A reboot or restart will need to be performed after changing the value of EK3_ENABLE for it to take effect.", "DisplayName": "Enable EKF3", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "EK3_ERR_THRESH": {"Description": "lanes have to be consistently better than the primary by at least this threshold to reduce their overall relativeCoreError, lowering this makes lane switching more sensitive to smaller error differences", "DisplayName": "EKF3 Lane Relative Error Sensitivity Threshold", "Increment": "0.05", "Range": {"high": "1", "low": "0.05"}, "User": "Advanced"}, "EK3_FLOW_DELAY": {"Description": "This is the number of msec that the optical flow measurements lag behind the inertial measurements. It is the time from the end of the optical flow averaging period and does not include the time delay due to the 100msec of averaging within the flow sensor.", "DisplayName": "Optical Flow measurement delay (msec)", "Increment": "10", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK3_FLOW_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the optical flow innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Optical Flow measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_FLOW_M_NSE": {"Description": "This is the RMS value of noise and errors in optical flow measurements. Increasing it reduces the weighting on these measurements.", "DisplayName": "Optical flow measurement noise (rad/s)", "Increment": "0.05", "Range": {"high": "1.0", "low": "0.05"}, "Units": "rad/s", "User": "Advanced"}, "EK3_FLOW_USE": {"Description": "Controls if the optical flow data is fused into the 24-state navigation estimator OR the 1-state terrain height estimator.", "DisplayName": "Optical flow use bitmask", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "Navigation", "2": "Terrain"}}, "EK3_GBIAS_P_NSE": {"Description": "This state process noise controls growth of the gyro delta angle bias state error estimate. Increasing it makes rate gyro bias estimation faster and noisier.", "DisplayName": "Rate gyro bias stability (rad/s/s)", "Range": {"high": "0.001", "low": "0.00001"}, "Units": "rad/s/s", "User": "Advanced"}, "EK3_GLITCH_RAD": {"Description": "This controls the maximum radial uncertainty in position between the value predicted by the filter and the value measured by the GPS before the filter position and velocity states are reset to the GPS. Making this value larger allows the filter to ignore larger GPS glitches but also means that non-GPS errors such as IMU and compass can create a larger error in position before the filter is forced back to the GPS position. If EK3_GLITCH_RAD set to 0 the GPS innovations will be clipped instead of rejected if they exceed the gate size set by EK3_VEL_I_GATE and EK3_POS_I_GATE which can be useful if poor quality sensor data is causing GPS rejection and loss of navigation but does make the EKF more susceptible to GPS glitches. If setting EK3_GLITCH_RAD to 0 it is recommended to reduce EK3_VEL_I_GATE and EK3_POS_I_GATE to 300.", "DisplayName": "GPS glitch radius gate size (m)", "Increment": "5", "Range": {"high": "100", "low": "10"}, "Units": "m", "User": "Advanced"}, "EK3_GND_EFF_DZ": {"Description": "This parameter sets the size of the dead zone that is applied to negative baro height spikes that can occur when taking off or landing when a vehicle with lift rotors is operating in ground effect ground effect. Set to about 0.5m less than the amount of negative offset in baro height that occurs just prior to takeoff when lift motors are spooling up. Set to 0 if no ground effect is present.", "DisplayName": "Baro height ground effect dead zone", "Increment": "0.5", "Range": {"high": "10.0", "low": "0.0"}, "User": "Advanced"}, "EK3_GPS_CHECK": {"Bitmask": {"0": "NSats", "1": "HDoP", "2": "speed error", "3": "position error", "4": "yaw error", "5": "pos drift", "6": "vert speed", "7": "horiz speed"}, "Description": "This is a 1 byte bitmap controlling which GPS preflight checks are performed. Set to 0 to bypass all checks. Set to 255 perform all checks. Set to 3 to check just the number of satellites and HDoP. Set to 31 for the most rigorous checks that will still allow checks to pass when the copter is moving, eg launch from a boat.", "DisplayName": "GPS preflight check", "User": "Advanced"}, "EK3_GPS_VACC_MAX": {"Description": "Vertical accuracy threshold for GPS as the altitude source. The GPS will not be used as an altitude source if the reported vertical accuracy of the GPS is larger than this threshold, falling back to baro instead. Set to zero to deactivate the threshold check.", "DisplayName": "GPS vertical accuracy threshold", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.0"}, "Units": "m", "User": "Advanced"}, "EK3_GSF_RST_MAX": {"Description": "Sets the maximum number of times the EKF3 will be allowed to reset its yaw to the estimate from the EKF-GSF yaw estimator. No resets will be allowed unless the use of the EKF-GSF yaw estimate is enabled via the EK3_GSF_USE_MASK parameter.", "DisplayName": "Maximum number of resets to the EKF-GSF yaw estimate allowed", "Increment": "1", "Range": {"high": "10", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "EK3_GSF_RUN_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "1 byte bitmap of which EKF3 instances run an independant EKF-GSF yaw estimator to provide a backup yaw estimate that doesn't rely on magnetometer data. This estimator uses IMU, GPS and, if available, airspeed data. EKF-GSF yaw estimator data for the primary EKF3 instance will be logged as GSF0 and GSF1 messages. Use of the yaw estimate generated by this algorithm is controlled by the EK3_GSF_USE_MASK and EK3_GSF_RST_MAX parameters. To run the EKF-GSF yaw estimator in ride-along and logging only, set EK3_GSF_USE to 0. ", "DisplayName": "Bitmask of which EKF-GSF yaw estimators run", "RebootRequired": "True", "User": "Advanced"}, "EK3_GSF_USE_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "A bitmask of which EKF3 instances will use the output from the EKF-GSF yaw estimator that has been turned on by the EK3_GSF_RUN_MASK parameter. If the inertial navigation calculation stops following the GPS, then the vehicle code can request EKF3 to attempt to resolve the issue, either by performing a yaw reset if enabled by this parameter by switching to another EKF3 instance.", "DisplayName": "Bitmask of which EKF-GSF yaw estimators are used", "RebootRequired": "True", "User": "Advanced"}, "EK3_GYRO_P_NSE": {"Description": "This control disturbance noise controls the growth of estimated error due to gyro measurement errors excluding bias. Increasing it makes the flter trust the gyro measurements less and other measurements more.", "DisplayName": "Rate gyro noise (rad/s)", "Increment": "0.0001", "Range": {"high": "0.1", "low": "0.0001"}, "Units": "rad/s", "User": "Advanced"}, "EK3_HGT_DELAY": {"Description": "This is the number of msec that the Height measurements lag behind the inertial measurements.", "DisplayName": "Height measurement delay (msec)", "Increment": "10", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "EK3_HGT_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the height measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the vertical position innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_HGT_I_GATE not exceeding 300 is recommended to limit the effect of height sensor transient errors.", "DisplayName": "Height measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_HRT_FILT": {"Description": "Specifies the crossover frequency of the complementary filter used to calculate the output predictor height rate derivative.", "DisplayName": "Height rate filter crossover frequency", "Range": {"high": "30.0", "low": "0.1"}, "Units": "Hz"}, "EK3_IMU_MASK": {"Bitmask": {"0": "FirstIMU", "1": "SecondIMU", "2": "ThirdIMU", "3": "FourthIMU", "4": "FifthIMU", "5": "SixthIMU"}, "Description": "1 byte bitmap of IMUs to use in EKF3. A separate instance of EKF3 will be started for each IMU selected. Set to 1 to use the first IMU only (default), set to 2 to use the second IMU only, set to 3 to use the first and second IMU. Additional IMU's can be used up to a maximum of 6 if memory and processing resources permit. There may be insufficient memory and processing resources to run multiple instances. If this occurs EKF3 will fail to start.", "DisplayName": "Bitmask of active IMUs", "RebootRequired": "True", "User": "Advanced"}, "EK3_LOG_LEVEL": {"Description": "Determines how verbose the EKF3 streaming logging is. A value of 0 provides full logging(default), a value of 1 only XKF4 scaled innovations are logged, a value of 2 both XKF4 and GSF are logged, and a value of 3 disables all streaming logging of EKF3.", "DisplayName": "Logging Level", "Increment": "1", "Range": {"high": "3", "low": "0"}, "User": "Advanced"}, "EK3_MAGB_P_NSE": {"Description": "This state process noise controls the growth of body magnetic field state error estimates. Increasing it makes magnetometer bias error estimation faster and noisier.", "DisplayName": "Body magnetic field process noise (gauss/s)", "Range": {"high": "0.01", "low": "0.00001"}, "Units": "Gauss/s", "User": "Advanced"}, "EK3_MAGE_P_NSE": {"Description": "This state process noise controls the growth of earth magnetic field state error estimates. Increasing it makes earth magnetic field estimation faster and noisier.", "DisplayName": "Earth magnetic field process noise (gauss/s)", "Range": {"high": "0.01", "low": "0.00001"}, "Units": "Gauss/s", "User": "Advanced"}, "EK3_MAG_CAL": {"Description": "This determines when the filter will use the 3-axis magnetometer fusion model that estimates both earth and body fixed magnetic field states and when it will use a simpler magnetic heading fusion model that does not use magnetic field states. The 3-axis magnetometer fusion is only suitable for use when the external magnetic field environment is stable. EK3_MAG_CAL = 0 uses heading fusion on ground, 3-axis fusion in-flight, and is the default setting for Plane users. EK3_MAG_CAL = 1 uses 3-axis fusion only when manoeuvring. EK3_MAG_CAL = 2 uses heading fusion at all times, is recommended if the external magnetic field is varying and is the default for rovers. EK3_MAG_CAL = 3 uses heading fusion on the ground and 3-axis fusion after the first in-air field and yaw reset has completed, and is the default for copters. EK3_MAG_CAL = 4 uses 3-axis fusion at all times. EK3_MAG_CAL = 5 uses an external yaw sensor with simple heading fusion. NOTE : Use of simple heading magnetometer fusion makes vehicle compass calibration and alignment errors harder for the EKF to detect which reduces the sensitivity of the Copter EKF failsafe algorithm. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. EK3_MAG_CAL = 6 uses an external yaw sensor with fallback to compass when the external sensor is not available if we are flying. NOTE: The fusion mode can be forced to 2 for specific EKF cores using the EK3_MAG_MASK parameter. NOTE: limited operation without a magnetometer or any other yaw sensor is possible by setting all COMPASS_USE, COMPASS_USE2, COMPASS_USE3, etc parameters to 0 and setting COMPASS_ENABLE to 0. If this is done, the EK3_GSF_RUN and EK3_GSF_USE masks must be set to the same as EK3_IMU_MASK. A yaw angle derived from IMU and GPS velocity data using a Gaussian Sum Filter (GSF) will then be used to align the yaw when flight commences and there is sufficient movement.", "DisplayName": "Magnetometer default fusion mode", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "When flying", "1": "When manoeuvring", "2": "Never", "3": "After first climb yaw reset", "4": "Always", "5": "Use external yaw sensor (Deprecated in 4.1+ see EK3_SRCn_YAW)", "6": "External yaw sensor with compass fallback (Deprecated in 4.1+ see EK3_SRCn_YAW)"}}, "EK3_MAG_EF_LIM": {"Description": "This limits the difference between the learned earth magnetic field and the earth field from the world magnetic model tables. A value of zero means to disable the use of the WMM tables.", "DisplayName": "EarthField error limit", "Range": {"high": "500", "low": "0"}, "Units": "mGauss", "User": "Advanced"}, "EK3_MAG_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the magnetometer measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Magnetometer measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_MAG_MASK": {"Bitmask": {"0": "FirstEKF", "1": "SecondEKF", "2": "ThirdEKF", "3": "FourthEKF", "4": "FifthEKF", "5": "SixthEKF"}, "Description": "1 byte bitmap of EKF cores that will disable magnetic field states and use simple magnetic heading fusion at all times. This parameter enables specified cores to be used as a backup for flight into an environment with high levels of external magnetic interference which may degrade the EKF attitude estimate when using 3-axis magnetometer fusion. NOTE : Use of a different magnetometer fusion algorithm on different cores makes unwanted EKF core switches due to magnetometer errors more likely.", "DisplayName": "Bitmask of active EKF cores that will always use heading fusion", "RebootRequired": "True", "User": "Advanced"}, "EK3_MAG_M_NSE": {"Description": "This is the RMS value of noise in magnetometer measurements. Increasing it reduces the weighting on these measurements.", "DisplayName": "Magnetometer measurement noise (Gauss)", "Increment": "0.01", "Range": {"high": "0.5", "low": "0.01"}, "Units": "Gauss", "User": "Advanced"}, "EK3_MAX_FLOW": {"Description": "This sets the magnitude maximum optical flow rate in rad/sec that will be accepted by the filter", "DisplayName": "Maximum valid optical flow rate", "Increment": "0.1", "Range": {"high": "4.0", "low": "1.0"}, "Units": "rad/s", "User": "Advanced"}, "EK3_NOAID_M_NSE": {"Description": "This sets the amount of position variation that the EKF allows for when operating without external measurements (eg GPS or optical flow). Increasing this parameter makes the EKF attitude estimate less sensitive to vehicle manoeuvres but more sensitive to IMU errors.", "DisplayName": "Non-GPS operation position uncertainty (m)", "Range": {"high": "50.0", "low": "0.5"}, "Units": "m", "User": "Advanced"}, "EK3_OGNM_TEST_SF": {"Description": "This parameter is adjust the sensitivity of the on ground not moving test which is used to assist with learning the yaw gyro bias and stopping yaw drift before flight when operating without a yaw sensor. Bigger values allow the detection of a not moving condition with noiser IMU data. Check the XKFM data logged when the vehicle is on ground not moving and adjust the value of OGNM_TEST_SF to be slightly higher than the maximum value of the XKFM.ADR, XKFM.ALR, XKFM.GDR and XKFM.GLR test levels.", "DisplayName": "On ground not moving test scale factor", "Increment": "0.5", "Range": {"high": "10.0", "low": "1.0"}, "User": "Advanced"}, "EK3_OGN_HGT_MASK": {"Bitmask": {"0": "Correct when using Baro height", "1": "Correct when using range finder height", "2": "Apply corrections to local position"}, "Description": "When a height sensor other than GPS is used as the primary height source by the EKF, the position of the zero height datum is defined by that sensor and its frame of reference. If a GPS height measurement is also available, then the height of the WGS-84 height datum used by the EKF can be corrected so that the height returned by the getLLH() function is compensated for primary height sensor drift and change in datum over time. The first two bit positions control when the height datum will be corrected. Correction is performed using a Bayes filter and only operates when GPS quality permits. The third bit position controls where the corrections to the GPS reference datum are applied. Corrections can be applied to the local vertical position or to the reported EKF origin height (default).", "DisplayName": "Bitmask control of EKF reference height correction", "RebootRequired": "True", "User": "Advanced"}, "EK3_POSNE_M_NSE": {"Description": "This sets the GPS horizontal position observation noise. Increasing it reduces the weighting of GPS horizontal position measurements.", "DisplayName": "GPS horizontal position measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK3_POS_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the GPS position measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD has been set to 0 the horizontal position innovations will be clipped instead of rejected if they exceed the gate size so a smaller value of EK3_POS_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.", "DisplayName": "GPS position measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_PRIMARY": {"Description": "The core number (index in IMU mask) that will be used as the primary EKF core on startup. While disarmed the EKF will force the use of this core. A value of 0 corresponds to the first IMU in EK3_IMU_MASK.", "DisplayName": "Primary core number", "Increment": "1", "Range": {"high": "2", "low": "0"}, "User": "Advanced"}, "EK3_RNG_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the range finder innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Range finder measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_RNG_M_NSE": {"Description": "This is the RMS value of noise in the range finder measurement. Increasing it reduces the weighting on this measurement.", "DisplayName": "Range finder measurement noise (m)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "EK3_RNG_USE_HGT": {"Description": "Range finder can be used as the primary height source when below this percentage of its maximum range (see RNGFNDx_MAX_CM) and the primary height source is Baro or GPS (see EK3_SRCx_POSZ). This feature should not be used for terrain following as it is designed for vertical takeoff and landing with climb above the range finder use height before commencing the mission, and with horizontal position changes below that height being limited to a flat region around the takeoff and landing point.", "DisplayName": "Range finder switch height percentage", "Increment": "1", "Range": {"high": "70", "low": "-1"}, "Units": "%", "User": "Advanced"}, "EK3_RNG_USE_SPD": {"Description": "The range finder will not be used as the primary height source when the horizontal ground speed is greater than this value.", "DisplayName": "Range finder max ground speed", "Increment": "0.5", "Range": {"high": "6.0", "low": "2.0"}, "Units": "m/s", "User": "Advanced"}, "EK3_SRC1_POSXY": {"Description": "Position Horizontal Source (Primary)", "DisplayName": "Position Horizontal Source (Primary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC1_POSZ": {"Description": "Position Vertical Source", "DisplayName": "Position Vertical Source", "User": "Advanced", "Values": {"0": "None", "1": "Baro", "2": "RangeFinder", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC1_VELXY": {"Description": "Velocity Horizontal Source", "DisplayName": "Velocity Horizontal Source", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "5": "OpticalFlow", "6": "ExternalNav", "7": "WheelEncoder"}}, "EK3_SRC1_VELZ": {"Description": "Velocity Vertical Source", "DisplayName": "Velocity Vertical Source", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC1_YAW": {"Description": "Yaw Source", "DisplayName": "Yaw Source", "User": "Advanced", "Values": {"0": "None", "1": "Compass", "2": "GPS", "3": "GPS with Compass Fallback", "6": "ExternalNav", "8": "GSF"}}, "EK3_SRC2_POSXY": {"Description": "Position Horizontal Source (Secondary)", "DisplayName": "Position Horizontal Source (Secondary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC2_POSZ": {"Description": "Position Vertical Source (Secondary)", "DisplayName": "Position Vertical Source (Secondary)", "User": "Advanced", "Values": {"0": "None", "1": "Baro", "2": "RangeFinder", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC2_VELXY": {"Description": "Velocity Horizontal Source (Secondary)", "DisplayName": "Velocity Horizontal Source (Secondary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "5": "OpticalFlow", "6": "ExternalNav", "7": "WheelEncoder"}}, "EK3_SRC2_VELZ": {"Description": "Velocity Vertical Source (Secondary)", "DisplayName": "Velocity Vertical Source (Secondary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC2_YAW": {"Description": "Yaw Source (Secondary)", "DisplayName": "Yaw Source (Secondary)", "User": "Advanced", "Values": {"0": "None", "1": "Compass", "2": "GPS", "3": "GPS with Compass Fallback", "6": "ExternalNav", "8": "GSF"}}, "EK3_SRC3_POSXY": {"Description": "Position Horizontal Source (Tertiary)", "DisplayName": "Position Horizontal Source (Tertiary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC3_POSZ": {"Description": "Position Vertical Source (Tertiary)", "DisplayName": "Position Vertical Source (Tertiary)", "User": "Advanced", "Values": {"0": "None", "1": "Baro", "2": "RangeFinder", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC3_VELXY": {"Description": "Velocity Horizontal Source (Tertiary)", "DisplayName": "Velocity Horizontal Source (Tertiary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "5": "OpticalFlow", "6": "ExternalNav", "7": "WheelEncoder"}}, "EK3_SRC3_VELZ": {"Description": "Velocity Vertical Source (Tertiary)", "DisplayName": "Velocity Vertical Source (Tertiary)", "User": "Advanced", "Values": {"0": "None", "3": "GPS", "4": "Beacon", "6": "ExternalNav"}}, "EK3_SRC3_YAW": {"Description": "Yaw Source (Tertiary)", "DisplayName": "Yaw Source (Tertiary)", "User": "Advanced", "Values": {"0": "None", "1": "Compass", "2": "GPS", "3": "GPS with Compass Fallback", "6": "ExternalNav", "8": "GSF"}}, "EK3_SRC_OPTIONS": {"Bitmask": {"0": "FuseAllVelocities"}, "Description": "EKF Source Options", "DisplayName": "EKF Source Options", "User": "Advanced"}, "EK3_TAU_OUTPUT": {"Description": "Sets the time constant of the output complementary filter/predictor in centi-seconds.", "DisplayName": "Output complementary filter time constant (centi-sec)", "Increment": "5", "Range": {"high": "50", "low": "10"}, "Units": "cs", "User": "Advanced"}, "EK3_TERR_GRAD": {"Description": "Specifies the maximum gradient of the terrain below the vehicle when it is using range finder as a height reference", "DisplayName": "Maximum terrain gradient", "Increment": "0.01", "Range": {"high": "0.2", "low": "0"}, "User": "Advanced"}, "EK3_VELD_M_NSE": {"Description": "This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set vertical velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS vertical velocity measurements.", "DisplayName": "GPS vertical velocity measurement noise (m/s)", "Increment": "0.05", "Range": {"high": "5.0", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "EK3_VELNE_M_NSE": {"Description": "This sets a lower limit on the speed accuracy reported by the GPS receiver that is used to set horizontal velocity observation noise. If the model of receiver used does not provide a speed accurcy estimate, then the parameter value will be used. Increasing it reduces the weighting of the GPS horizontal velocity measurements.", "DisplayName": "GPS horizontal velocity measurement noise (m/s)", "Increment": "0.05", "Range": {"high": "5.0", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "EK3_VEL_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the GPS velocity measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted. If EK3_GLITCH_RAD set to 0 the velocity innovations will be clipped instead of rejected if they exceed the gate size and a smaller value of EK3_VEL_I_GATE not exceeding 300 is recommended to limit the effect of GPS transient errors.", "DisplayName": "GPS velocity innovation gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_VIS_VERR_MAX": {"Description": "This is the 1-STD odometry velocity observation error that will be assumed when minimum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.", "DisplayName": "Visual odometry maximum velocity error", "Increment": "0.1", "Range": {"high": "5.0", "low": "0.5"}, "Units": "m/s", "User": "Advanced"}, "EK3_VIS_VERR_MIN": {"Description": "This is the 1-STD odometry velocity observation error that will be assumed when maximum quality is reported by the sensor. When quality is between max and min, the error will be calculated using linear interpolation between VIS_VERR_MIN and VIS_VERR_MAX.", "DisplayName": "Visual odometry minimum velocity error", "Increment": "0.05", "Range": {"high": "0.5", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "EK3_WENC_VERR": {"Description": "This is the 1-STD odometry velocity observation error that will be assumed when wheel encoder data is being fused.", "DisplayName": "Wheel odometry velocity error", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.01"}, "Units": "m/s", "User": "Advanced"}, "EK3_WIND_PSCALE": {"Description": "This controls how much the process noise on the wind states is increased when gaining or losing altitude to take into account changes in wind speed and direction with altitude. Increasing this parameter increases how rapidly the wind states adapt when changing altitude, but does make wind velocity estimation noiser.", "DisplayName": "Height rate to wind process noise scaler", "Increment": "0.1", "Range": {"high": "2.0", "low": "0.0"}, "User": "Advanced"}, "EK3_WIND_P_NSE": {"Description": "This state process noise controls the growth of wind state error estimates. Increasing it makes wind estimation faster and noisier.", "DisplayName": "Wind velocity process noise (m/s^2)", "Increment": "0.1", "Range": {"high": "2.0", "low": "0.01"}, "Units": "m/s/s", "User": "Advanced"}, "EK3_YAW_I_GATE": {"Description": "This sets the percentage number of standard deviations applied to the magnetometer yaw measurement innovation consistency check. Decreasing it makes it more likely that good measurements will be rejected. Increasing it makes it more likely that bad measurements will be accepted.", "DisplayName": "Yaw measurement gate size", "Increment": "25", "Range": {"high": "1000", "low": "100"}, "User": "Advanced"}, "EK3_YAW_M_NSE": {"Description": "This is the RMS value of noise in yaw measurements from the magnetometer. Increasing it reduces the weighting on these measurements.", "DisplayName": "Yaw measurement noise (rad)", "Increment": "0.05", "Range": {"high": "1.0", "low": "0.05"}, "Units": "rad", "User": "Advanced"}, "ESC_HW_ENABLE": {"Description": "Enable Hobbywing ESC telemetry", "DisplayName": "Hobbywing ESC Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "ESC_HW_OFS": {"Description": "Motor number offset of first ESC", "DisplayName": "Hobbywing ESC motor offset", "Range": {"high": "31", "low": "0"}, "User": "Standard"}, "ESC_HW_POLES": {"Description": "Number of motor poles for eRPM scaling", "DisplayName": "Hobbywing ESC motor poles", "Range": {"high": "50", "low": "1"}, "User": "Standard"}, "ESC_TLM_MAV_OFS": {"Description": "Offset to apply to ESC numbers when reporting as ESC_TELEMETRY packets over MAVLink. This allows high numbered motors to be displayed as low numbered ESCs for convenience on GCS displays. A value of 4 would send ESC on output 5 as ESC number 1 in ESC_TELEMETRY packets", "DisplayName": "ESC Telemetry mavlink offset", "Increment": "1", "Range": {"high": "31", "low": "0"}, "User": "Standard"}, "ESRC_EXTN_QUAL": {"Description": "ExternalNav may be used if quality is above this threshold", "DisplayName": "EKF Source ExternalNav Quality Threshold", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "ESRC_EXTN_THRESH": {"Description": "ExternalNav may be used if innovations are below this threshold", "DisplayName": "EKF Source ExternalNav Innovation Threshold", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "ESRC_FLOW_QUAL": {"Description": "OpticalFlow may be used if quality is above this threshold", "DisplayName": "EKF Source OpticalFlow Quality Threshold", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "ESRC_FLOW_THRESH": {"Description": "OpticalFlow may be used if innovations are below this threshold", "DisplayName": "EKF Source OpticalFlow Innovation Threshold", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "ESRC_RNGFND_MAX": {"Description": "OpticalFlow may be used if rangefinder distance is below this threshold", "DisplayName": "EKF Source Rangefinder Max", "Range": {"high": "50", "low": "0"}, "Units": "m", "User": "Standard"}, "FBWB_CLIMB_RATE": {"Description": "This sets the rate in m/s at which FBWB and CRUISE modes will change its target altitude for full elevator deflection. Note that the actual climb rate of the aircraft can be lower than this, depending on your airspeed and throttle control settings. If you have this parameter set to the default value of 2.0, then holding the elevator at maximum deflection for 10 seconds would change the target altitude by 20 meters.", "DisplayName": "Fly By Wire B altitude change rate", "Increment": "0.1", "Range": {"high": "10", "low": "1"}, "Units": "m/s", "User": "Standard"}, "FBWB_ELEV_REV": {"Description": "Reverse sense of elevator in FBWB and CRUISE modes. When set to 0 up elevator (pulling back on the stick) means to lower altitude. When set to 1, up elevator means to raise altitude.", "DisplayName": "Fly By Wire elevator reverse", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "FENCE_ACTION": {"Description": "What action should be taken when fence is breached", "DisplayName": "Fence Action", "User": "Standard", "Values": {"0": "Report Only", "1": "RTL", "6": "Guided", "7": "GuidedThrottlePass"}}, "FENCE_ALT_MAX": {"Description": "Maximum altitude allowed before geofence triggers", "DisplayName": "Fence Maximum Altitude", "Increment": "1", "Range": {"high": "1000", "low": "10"}, "Units": "m", "User": "Standard"}, "FENCE_ALT_MIN": {"Description": "Minimum altitude allowed before geofence triggers", "DisplayName": "Fence Minimum Altitude", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "m", "User": "Standard"}, "FENCE_AUTOENABLE": {"Description": "Auto-enable of fences. AutoEnableOnTakeoff enables all configured fences after autotakeoffs reach altitude. During autolandings the fences will be disabled. AutoEnableDisableFloorOnLanding enables all configured fences after autotakeoffs reach altitude. During autolandings only the Minimum Altitude fence will be disabled. AutoEnableOnlyWhenArmed enables all configured fences, but no fences are disabled during autolandings. However, fence breaches are ignored while executing prior breach recovery actions which may include autolandings.", "DisplayName": "Fence Auto-Enable", "Increment": "1", "Range": {"high": "3", "low": "0"}, "User": "Standard", "Values": {"0": "AutoEnableOff", "1": "AutoEnableOnTakeoff", "2": "AutoEnableDisableFloorOnLanding", "3": "AutoEnableOnlyWhenArmed"}}, "FENCE_ENABLE": {"Description": "Allows you to enable (1) or disable (0) the fence functionality", "DisplayName": "Fence enable/disable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "FENCE_MARGIN": {"Description": "Distance that autopilot's should maintain from the fence to avoid a breach", "DisplayName": "Fence Margin", "Range": {"high": "10", "low": "1"}, "Units": "m", "User": "Standard"}, "FENCE_OPTIONS": {"Bitmask": {"0": "Disable mode change following fence action until fence breach is cleared", "1": "Allow union of inclusion areas"}, "Description": "0:Disable mode change following fence action until fence breach is cleared. When bit 1 is set the allowable flight areas is the union of all polygon and circle fence areas instead of the intersection, which means a fence breach occurs only if you are outside all of the fence areas.", "DisplayName": "Fence options", "User": "Standard"}, "FENCE_RADIUS": {"Description": "Circle fence radius which when breached will cause an RTL", "DisplayName": "Circular Fence Radius", "Range": {"high": "10000", "low": "30"}, "Units": "m", "User": "Standard"}, "FENCE_RET_ALT": {"Description": "Altitude the vehicle will transit to when a fence breach occurs", "DisplayName": "Fence Return Altitude", "Increment": "1", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "FENCE_RET_RALLY": {"Description": "Should the vehicle return to fence return point or rally point", "DisplayName": "Fence Return to Rally", "Increment": "1", "Range": {"high": "1", "low": "0"}, "User": "Standard", "Values": {"0": "Fence Return Point", "1": "Nearest Rally Point"}}, "FENCE_TOTAL": {"Description": "Number of polygon points saved in eeprom (do not update manually)", "DisplayName": "Fence polygon point total", "Range": {"high": "20", "low": "1"}, "User": "Standard"}, "FENCE_TYPE": {"Bitmask": {"0": "Max altitude", "1": "Circle Centered on Home", "2": "Inclusion/Exclusion Circles+Polygons", "3": "Min altitude"}, "Description": "Enabled fence types held as bitmask", "DisplayName": "Fence Type", "User": "Standard"}, "FFT_ATT_REF": {"Description": "FFT attenuation level in dB for bandwidth calculation and peak detection. The bandwidth is calculated by comparing peak power output with the attenuated version. The default of 15 has shown to be a good compromise in both simulations and real flight.", "DisplayName": "FFT attenuation for bandwidth calculation", "Range": {"high": "100", "low": "0"}, "User": "Advanced"}, "FFT_BW_HOVER": {"Description": "FFT learned bandwidth at hover for the attenuation frequencies.", "DisplayName": "FFT learned bandwidth at hover", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "FFT_ENABLE": {"Description": "Enable Gyro FFT analyser", "DisplayName": "Enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "FFT_FREQ_HOVER": {"Description": "The learned hover noise frequency", "DisplayName": "FFT learned hover frequency", "Range": {"high": "250", "low": "0"}, "User": "Advanced"}, "FFT_HMNC_FIT": {"Description": "FFT harmonic fit frequency threshold percentage at which a signal of the appropriate frequency is determined to be the harmonic of another. Signals that have a harmonic relationship that varies at most by this percentage are considered harmonics of each other for the purpose of selecting the harmonic notch frequency. If a match is found then the lower frequency harmonic is always used as the basis for the dynamic harmonic notch. A value of zero completely disables harmonic matching.", "DisplayName": "FFT harmonic fit frequency threshold", "Range": {"high": "100", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "FFT_HMNC_PEAK": {"Description": "The FFT harmonic peak target that should be returned by FTN1.PkAvg. The resulting value will be used by the harmonic notch if configured to track the FFT frequency. By default the appropriate peak is auto-detected based on the harmonic fit between peaks and the energy-weighted average frequency on roll on pitch is used. Setting this to 1 will always target the highest energy peak. Setting this to 2 will target the highest energy peak that is lower in frequency than the highest energy peak. Setting this to 3 will target the highest energy peak that is higher in frequency than the highest energy peak. Setting this to 4 will target the highest energy peak on the roll axis only and only the roll frequency will be used (some vehicles have a much more pronounced peak on roll). Setting this to 5 will target the highest energy peak on the pitch axis only and only the pitch frequency will be used (some vehicles have a much more pronounced peak on roll).", "DisplayName": "FFT harmonic peak target", "User": "Advanced", "Values": {"0": "Auto", "1": "Center Frequency", "2": "Lower-Shoulder Frequency", "3": "Upper-Shoulder Frequency", "4": "Roll-Axis", "5": "Pitch-Axis"}}, "FFT_MAXHZ": {"Description": "Upper bound of FFT frequency detection in Hz. On smaller vehicles the maximum motor frequency is likely to be significantly higher than for larger vehicles.", "DisplayName": "Maximum Frequency", "Range": {"high": "495", "low": "20"}, "Units": "Hz", "User": "Advanced"}, "FFT_MINHZ": {"Description": "Lower bound of FFT frequency detection in Hz. On larger vehicles the minimum motor frequency is likely to be significantly lower than for smaller vehicles.", "DisplayName": "Minimum Frequency", "Range": {"high": "400", "low": "20"}, "Units": "Hz", "User": "Advanced"}, "FFT_NUM_FRAMES": {"Description": "Number of output frequency frames to retain and average in order to calculate final frequencies. Averaging output frames can drastically reduce noise and jitter at the cost of latency as long as the input is stable. The default is to perform no averaging. For rapidly changing frequencies (e.g. smaller aircraft) fewer frames should be averaged.", "DisplayName": "FFT output frames to retain and average", "Range": {"high": "8", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "FFT_OPTIONS": {"Bitmask": {"0": "Enable post-filter FFT", "1": "Check motor noise"}, "Description": "FFT configuration options. Values: 1:Apply the FFT *after* the filter bank,2:Check noise at the motor frequencies using ESC data as a reference", "DisplayName": "FFT options", "RebootRequired": "True", "User": "Advanced"}, "FFT_SAMPLE_MODE": {"Description": "Sampling mode (and therefore rate). 0: Gyro rate sampling, 1: Fast loop rate sampling, 2: Fast loop rate / 2 sampling, 3: Fast loop rate / 3 sampling. Takes effect on reboot.", "DisplayName": "Sample Mode", "Range": {"high": "4", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "FFT_SNR_REF": {"Description": "FFT SNR reference threshold in dB at which a signal is determined to be present.", "DisplayName": "FFT SNR reference threshold", "Range": {"high": "100.0", "low": "0.0"}, "User": "Advanced"}, "FFT_THR_REF": {"Description": "FFT learned thrust reference for the hover frequency and FFT minimum frequency.", "DisplayName": "FFT learned thrust reference", "Range": {"high": "0.9", "low": "0.01"}, "User": "Advanced"}, "FFT_WINDOW_OLAP": {"Description": "Percentage of window to be overlapped before another frame is process. Takes effect on reboot. A good default is 50% overlap. Higher overlap results in more processed frames but not necessarily more temporal resolution. Lower overlap results in lost information at the frame edges.", "DisplayName": "FFT window overlap", "Range": {"high": "0.9", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "FFT_WINDOW_SIZE": {"Description": "Size of window to be used in FFT calculations. Takes effect on reboot. Must be a power of 2 and between 32 and 512. Larger windows give greater frequency resolution but poorer time resolution, consume more CPU time and may not be appropriate for all vehicles. Time and frequency resolution are given by the sample-rate / window-size. Windows of 256 are only really recommended for F7 class boards, windows of 512 or more H7 class.", "DisplayName": "FFT window size", "Range": {"high": "1024", "low": "32"}, "RebootRequired": "True", "User": "Advanced"}, "FILT1_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT1_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT1_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT1_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT2_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT2_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT2_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT2_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT3_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT3_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT3_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT3_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT4_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT4_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT4_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT4_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT5_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT5_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT5_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT5_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT6_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT6_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT6_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT6_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT7_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT7_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT7_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT7_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FILT8_NOTCH_ATT": {"Description": "Notch Filter attenuation in dB.", "DisplayName": "Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "FILT8_NOTCH_FREQ": {"Description": "Notch Filter center frequency in Hz.", "DisplayName": "Notch Filter center frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "FILT8_NOTCH_Q": {"Description": "Notch Filter quality factor given by the notch centre frequency divided by its bandwidth.", "DisplayName": "Notch Filter quality factor", "Range": {"high": "10", "low": "1"}, "User": "Advanced"}, "FILT8_TYPE": {"Description": "Filter Type", "DisplayName": "Filter Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Notch Filter"}}, "FLAP_1_PERCNT": {"Description": "The percentage change in flap position when FLAP_1_SPEED is reached. Use zero to disable flaps", "DisplayName": "Flap 1 percentage", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "FLAP_1_SPEED": {"Description": "The speed in meters per second at which to engage FLAP_1_PERCENT of flaps. Note that FLAP_1_SPEED should be greater than or equal to FLAP_2_SPEED", "DisplayName": "Flap 1 speed", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "FLAP_2_PERCNT": {"Description": "The percentage change in flap position when FLAP_2_SPEED is reached. Use zero to disable flaps", "DisplayName": "Flap 2 percentage", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "FLAP_2_SPEED": {"Description": "The speed in meters per second at which to engage FLAP_2_PERCENT of flaps. Note that FLAP_1_SPEED should be greater than or equal to FLAP_2_SPEED", "DisplayName": "Flap 2 speed", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "FLAP_SLEWRATE": {"Description": "maximum percentage change in flap output per second. A setting of 25 means to not change the flap by more than 25% of the full flap range in one second. A value of 0 means no rate limiting.", "DisplayName": "Flap slew rate", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%/s", "User": "Advanced"}, "FLIGHT_OPTIONS": {"Bitmask": {"0": "Rudder mixing in direct flight modes only (Manual/Stabilize/Acro)", "1": "Use centered throttle in Cruise or FBWB to indicate trim airspeed", "10": "Adjust mid-throttle to be TRIM_THROTTLE in non-auto throttle modes except MANUAL", "11": "Disable suppression of fixed wing rate gains in ground mode", "12": "Enable FBWB style loiter altitude control", "13": "Indicate takeoff waiting for neutral rudder with flight control surfaces", "2": "Disable attitude check for takeoff arming", "3": "Force target airspeed to trim airspeed in Cruise or FBWB", "4": "Climb to RTL_ALTITUDE before turning for RTL", "5": "Enable yaw damper in acro mode", "6": "Supress speed scaling during auto takeoffs to be 1 or less to prevent oscillations without airspeed sensor.", "7": "EnableDefaultAirspeed for takeoff", "8": "Remove the PTCH_TRIM_DEG on the GCS horizon", "9": "Remove the PTCH_TRIM_DEG on the OSD horizon"}, "Description": "Flight mode specific options", "DisplayName": "Flight mode options", "User": "Advanced"}, "FLOW_ADDR": {"Description": "This is used to select between multiple possible I2C addresses for some sensor types. For PX4Flow you can choose 0 to 7 for the 8 possible addresses on the I2C bus.", "DisplayName": "Address on the bus", "Range": {"high": "127", "low": "0"}, "User": "Advanced"}, "FLOW_FXSCALER": {"Description": "This sets the parts per thousand scale factor correction applied to the flow sensor X axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the X axis optical flow reading by 0.1%. Negative values reduce the scale factor.", "DisplayName": "X axis optical flow scale factor correction", "Increment": "1", "Range": {"high": "+800", "low": "-800"}, "User": "Standard"}, "FLOW_FYSCALER": {"Description": "This sets the parts per thousand scale factor correction applied to the flow sensor Y axis optical rate. It can be used to correct for variations in effective focal length. Each positive increment of 1 increases the scale factor applied to the Y axis optical flow reading by 0.1%. Negative values reduce the scale factor.", "DisplayName": "Y axis optical flow scale factor correction", "Increment": "1", "Range": {"high": "+800", "low": "-800"}, "User": "Standard"}, "FLOW_HGT_OVR": {"Description": "This is used in rover vehicles, where the sensor is a fixed height above the ground", "DisplayName": "Height override of sensor above ground", "Increment": "0.01", "Range": {"high": "2", "low": "0"}, "Units": "m", "User": "Advanced"}, "FLOW_ORIENT_YAW": {"Description": "Specifies the number of centi-degrees that the flow sensor is yawed relative to the vehicle. A sensor with its X-axis pointing to the right of the vehicle X axis has a positive yaw angle.", "DisplayName": "Flow sensor yaw alignment", "Increment": "10", "Range": {"high": "+18000", "low": "-17999"}, "Units": "cdeg", "User": "Standard"}, "FLOW_POS_X": {"Description": "X position of the optical flow sensor focal point in body frame. Positive X is forward of the origin.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "FLOW_POS_Y": {"Description": "Y position of the optical flow sensor focal point in body frame. Positive Y is to the right of the origin.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "FLOW_POS_Z": {"Description": "Z position of the optical flow sensor focal point in body frame. Positive Z is down from the origin.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "FLOW_TYPE": {"Description": "Optical flow sensor type", "DisplayName": "Optical flow sensor type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "PX4Flow", "2": "Pixart", "3": "Bebop", "4": "CXOF", "5": "MAVLink", "6": "DroneCAN", "7": "MSP", "8": "UPFLOW"}}, "FLTMODE1": {"Description": "Flight mode for switch position 1 (910 to 1230 and above 2049)", "DisplayName": "FlightMode1", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE2": {"Description": "Flight mode for switch position 2 (1231 to 1360)", "DisplayName": "FlightMode2", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE3": {"Description": "Flight mode for switch position 3 (1361 to 1490)", "DisplayName": "FlightMode3", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE4": {"Description": "Flight mode for switch position 4 (1491 to 1620)", "DisplayName": "FlightMode4", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE5": {"Description": "Flight mode for switch position 5 (1621 to 1749)", "DisplayName": "FlightMode5", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE6": {"Description": "Flight mode for switch position 6 (1750 to 2049)", "DisplayName": "FlightMode6", "User": "Standard", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "FLTMODE_CH": {"Description": "RC Channel to use for flight mode control", "DisplayName": "Flightmode channel", "User": "Advanced", "Values": {"0": "Disabled", "1": "Channel 1", "10": "Channel 10", "11": "Channel 11", "12": "Channel 12", "13": "Channel 13", "14": "Channel 14", "15": "Channel 15", "16": "Channel 16", "2": "Channel 2", "3": "Channel 3", "4": "Channel 4", "5": "Channel 5", "6": "Channel 6", "7": "Channel 7", "8": "Channel 8", "9": "Channel 9"}}, "FOLL_ALT_TYPE": {"Description": "Follow altitude type", "DisplayName": "Follow altitude type", "User": "Standard", "Values": {"0": "absolute", "1": "relative"}}, "FOLL_DIST_MAX": {"Description": "Follow distance maximum. targets further than this will be ignored", "DisplayName": "Follow distance maximum", "Range": {"high": "1000", "low": "1"}, "Units": "m", "User": "Standard"}, "FOLL_ENABLE": {"Description": "Enabled/disable following a target", "DisplayName": "Follow enable/disable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "FOLL_OFS_TYPE": {"Description": "Follow offset type", "DisplayName": "Follow offset type", "User": "Standard", "Values": {"0": "North-East-Down", "1": "Relative to lead vehicle heading"}}, "FOLL_OFS_X": {"Description": "Follow offsets in meters north/forward. If positive, this vehicle fly ahead or north of lead vehicle. Depends on FOLL_OFS_TYPE", "DisplayName": "Follow offsets in meters north/forward", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "m", "User": "Standard"}, "FOLL_OFS_Y": {"Description": "Follow offsets in meters east/right. If positive, this vehicle will fly to the right or east of lead vehicle. Depends on FOLL_OFS_TYPE", "DisplayName": "Follow offsets in meters east/right", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "m", "User": "Standard"}, "FOLL_OFS_Z": {"Description": "Follow offsets in meters down. If positive, this vehicle will fly below the lead vehicle", "DisplayName": "Follow offsets in meters down", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "m", "User": "Standard"}, "FOLL_OPTIONS": {"Description": "Follow options bitmask", "DisplayName": "Follow options", "User": "Standard", "Values": {"0": "None", "1": "Mount Follows lead vehicle on mode enter"}}, "FOLL_POS_P": {"Description": "Follow position error P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller", "DisplayName": "Follow position error P gain", "Increment": "0.01", "Range": {"high": "1.00", "low": "0.01"}, "User": "Standard"}, "FOLL_SYSID": {"Description": "Follow target's mavlink system id", "DisplayName": "Follow target's mavlink system id", "Range": {"high": "255", "low": "0"}, "User": "Standard"}, "FOLL_YAW_BEHAVE": {"Description": "Follow yaw behaviour", "DisplayName": "Follow yaw behaviour", "User": "Standard", "Values": {"0": "None", "1": "Face Lead Vehicle", "2": "Same as Lead vehicle", "3": "Direction of Flight"}}, "FORMAT_VERSION": {"Description": "This value is incremented when changes are made to the eeprom format", "DisplayName": "Eeprom format version number", "User": "Advanced"}, "FRSKY_DNLINK1_ID": {"Description": "Change the first extra downlink sensor id (SPort only)", "DisplayName": "First downlink sensor id", "User": "Advanced", "Values": {"-1": "Disable", "10": "10", "11": "11", "12": "12", "13": "13", "14": "14", "15": "15", "16": "16", "17": "17", "18": "18", "19": "19", "20": "20", "21": "21", "22": "22", "23": "23", "24": "24", "25": "25", "26": "26", "7": "7", "8": "8", "9": "9"}}, "FRSKY_DNLINK2_ID": {"Description": "Change the second extra downlink sensor id (SPort only)", "DisplayName": "Second downlink sensor id", "User": "Advanced", "Values": {"-1": "Disable", "10": "10", "11": "11", "12": "12", "13": "13", "14": "14", "15": "15", "16": "16", "17": "17", "18": "18", "19": "19", "20": "20", "21": "21", "22": "22", "23": "23", "24": "24", "25": "25", "26": "26", "7": "7", "8": "8", "9": "9"}}, "FRSKY_DNLINK_ID": {"Description": "Change the default downlink sensor id (SPort only)", "DisplayName": "Default downlink sensor id", "User": "Advanced", "Values": {"-1": "Disable", "10": "10", "11": "11", "12": "12", "13": "13", "14": "14", "15": "15", "16": "16", "17": "17", "18": "18", "19": "19", "20": "20", "21": "21", "22": "22", "23": "23", "24": "24", "25": "25", "26": "26", "27": "27", "7": "7", "8": "8", "9": "9"}}, "FRSKY_OPTIONS": {"Bitmask": {"0": "EnableAirspeedAndGroundspeed"}, "Description": "A bitmask to set some FRSky Telemetry specific options", "DisplayName": "FRSky Telemetry Options", "User": "Standard"}, "FRSKY_UPLINK_ID": {"Description": "Change the uplink sensor id (SPort only)", "DisplayName": "Uplink sensor id", "User": "Advanced", "Values": {"-1": "Disable", "10": "10", "11": "11", "12": "12", "13": "13", "14": "14", "15": "15", "16": "16", "17": "17", "18": "18", "19": "19", "20": "20", "21": "21", "22": "22", "23": "23", "24": "24", "25": "25", "26": "26", "7": "7", "8": "8", "9": "9"}}, "FS_EKF_THRESH": {"Description": "Allows setting the maximum acceptable compass and velocity variance used to check navigation health in VTOL modes", "DisplayName": "EKF failsafe variance threshold", "User": "Advanced", "Values": {"0.6": "Strict", "0.8": "Default", "1.0": "Relaxed"}}, "FS_GCS_ENABL": {"Description": "Enable ground control station telemetry failsafe. Failsafe will trigger after FS_LONG_TIMEOUT seconds of no MAVLink heartbeat messages. There are three possible enabled settings. Setting FS_GCS_ENABL to 1 means that GCS failsafe will be triggered when the aircraft has not received a MAVLink HEARTBEAT message. Setting FS_GCS_ENABL to 2 means that GCS failsafe will be triggered on either a loss of HEARTBEAT messages, or a RADIO_STATUS message from a MAVLink enabled 3DR radio indicating that the ground station is not receiving status updates from the aircraft, which is indicated by the RADIO_STATUS.remrssi field being zero (this may happen if you have a one way link due to asymmetric noise on the ground station and aircraft radios).Setting FS_GCS_ENABL to 3 means that GCS failsafe will be triggered by Heartbeat(like option one), but only in AUTO mode. WARNING: Enabling this option opens up the possibility of your plane going into failsafe mode and running the motor on the ground it it loses contact with your ground station. If this option is enabled on an electric plane then you should enable ARMING_REQUIRED.", "DisplayName": "GCS failsafe enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Heartbeat", "2": "HeartbeatAndREMRSSI", "3": "HeartbeatAndAUTO"}}, "FS_LONG_ACTN": {"Description": "The action to take on a long (FS_LONG_TIMEOUT seconds) failsafe event. If the aircraft was in a stabilization or manual mode when failsafe started and a long failsafe occurs then it will change to RTL mode if FS_LONG_ACTN is 0 or 1, and will change to FBWA if FS_LONG_ACTN is set to 2. If the aircraft was in an auto mode (such as AUTO or GUIDED) when the failsafe started then it will continue in the auto mode if FS_LONG_ACTN is set to 0, will change to RTL mode if FS_LONG_ACTN is set to 1 and will change to FBWA mode if FS_LONG_ACTN is set to 2. If FS_LONG_ACTN is set to 3, the parachute will be deployed (make sure the chute is configured and enabled). If FS_LONG_ACTN is set to 4 the aircraft will switch to mode AUTO with the current waypoint if it is not already in mode AUTO, unless it is in the middle of a landing sequence. This parameter only applies to failsafes during fixed wing modes. Quadplane modes will switch to QLAND unless Q_OPTIONS bit 5 (QRTL) or 20(RTL) are set.", "DisplayName": "Long failsafe action", "User": "Standard", "Values": {"0": "Continue", "1": "ReturnToLaunch", "2": "Glide", "3": "Deploy Parachute", "4": "Auto"}}, "FS_LONG_TIMEOUT": {"Description": "The time in seconds that a failsafe condition has to persist before a long failsafe event will occur. This defaults to 5 seconds.", "DisplayName": "Long failsafe timeout", "Increment": "0.5", "Range": {"high": "300", "low": "1"}, "Units": "s", "User": "Standard"}, "FS_SHORT_ACTN": {"Description": "The action to take on a short (FS_SHORT_TIMEOUT) failsafe event. A short failsafe event can be triggered either by loss of RC control (see THR_FS_VALUE) or by loss of GCS control (see FS_GCS_ENABL). If in CIRCLE or RTL mode this parameter is ignored. A short failsafe event in stabilization and manual modes will cause a change to CIRCLE mode if FS_SHORT_ACTN is 0 or 1, a change to FBWA mode with zero throttle if FS_SHORT_ACTN is 2, and a change to FBWB mode if FS_SHORT_ACTN is 4. In all other modes (AUTO, GUIDED and LOITER) a short failsafe event will cause no mode change if FS_SHORT_ACTN is set to 0, will cause a change to CIRCLE mode if set to 1, will change to FBWA mode with zero throttle if set to 2, or will change to FBWB if set to 4. Please see the documentation for FS_LONG_ACTN for the behaviour after FS_LONG_TIMEOUT seconds of failsafe. This parameter only applies to failsafes during fixed wing modes. Quadplane modes will switch to QLAND unless Q_OPTIONS bit 5(QRTL) or 20(RTL) are set.", "DisplayName": "Short failsafe action", "User": "Standard", "Values": {"0": "CIRCLE/no change(if already in AUTO|GUIDED|LOITER)", "1": "CIRCLE", "2": "FBWA at zero throttle", "3": "Disable", "4": "FBWB"}}, "FS_SHORT_TIMEOUT": {"Description": "The time in seconds that a failsafe condition has to persist before a short failsafe event will occur. This defaults to 1.5 seconds", "DisplayName": "Short failsafe timeout", "Increment": "0.5", "Range": {"high": "100", "low": "1"}, "Units": "s", "User": "Standard"}, "FWD_BAT_IDX": {"Description": "Which battery monitor should be used for doing compensation for the forward throttle", "DisplayName": "Forward throttle battery compensation index", "User": "Advanced", "Values": {"0": "First battery", "1": "Second battery"}}, "FWD_BAT_VOLT_MAX": {"Description": "Forward throttle battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled. Recommend THR_MAX is set to no more than 100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX, THR_MIN is set to no less than -100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX and climb descent rate limits are set accordingly.", "DisplayName": "Forward throttle battery voltage compensation maximum voltage", "Increment": "0.1", "Range": {"high": "35", "low": "6"}, "Units": "V", "User": "Advanced"}, "FWD_BAT_VOLT_MIN": {"Description": "Forward throttle battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.5 * cell count, 0 = Disabled. Recommend THR_MAX is set to no more than 100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX, THR_MIN is set to no less than -100 x FWD_BAT_VOLT_MIN / FWD_BAT_VOLT_MAX and climb descent rate limits are set accordingly.", "DisplayName": "Forward throttle battery voltage compensation minimum voltage", "Increment": "0.1", "Range": {"high": "35", "low": "6"}, "Units": "V", "User": "Advanced"}, "GCS_PID_MASK": {"Bitmask": {"0": "Roll", "1": "Pitch", "2": "Yaw", "3": "Steering", "4": "Landing"}, "Description": "bitmask of PIDs to send MAVLink PID_TUNING messages for", "DisplayName": "GCS PID tuning mask", "User": "Advanced"}, "GEN_OPTIONS": {"Bitmask": {"0": "Suppress Maintenance-Required Warnings"}, "Description": "Bitmask of options for generators", "DisplayName": "Generator Options", "User": "Standard"}, "GEN_TYPE": {"Description": "Generator type", "DisplayName": "Generator type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "IE 650w 800w Fuel Cell", "2": "IE 2.4kW Fuel Cell", "3": "Richenpower"}}, "GLIDE_SLOPE_MIN": {"Description": "This controls the minimum altitude change for a waypoint before a glide slope will be used instead of an immediate altitude change. The default value is 15 meters, which helps to smooth out waypoint missions where small altitude changes happen near waypoints. If you don't want glide slopes to be used in missions then you can set this to zero, which will disable glide slope calculations. Otherwise you can set it to a minimum number of meters of altitude error to the destination waypoint before a glide slope will be used to change altitude.", "DisplayName": "Glide slope minimum", "Increment": "1", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Advanced"}, "GLIDE_SLOPE_THR": {"Description": "This controls the height above the glide slope the plane may be before rebuilding a glide slope. This is useful for smoothing out an autotakeoff", "DisplayName": "Glide slope threshold", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "m", "User": "Advanced"}, "GPS1_CAN_NODEID": {"Description": "GPS Node id for GPS. Detected node unless CAN_OVRIDE is set", "DisplayName": "Detected CAN Node ID for GPS", "ReadOnly": "True", "User": "Advanced"}, "GPS1_CAN_OVRIDE": {"Description": "GPS Node id for GPS. If 0 the gps will be automatically selected on a first-come-first-GPS basis.", "DisplayName": "DroneCAN GPS NODE ID", "User": "Advanced"}, "GPS1_COM_PORT": {"Description": "The physical COM port on the connected device, currently only applies to SBF and GSOF GPS", "DisplayName": "GPS physical COM port", "Increment": "1", "Range": {"high": "10", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"0": "COM1(RS232) on GSOF", "1": "COM2(TTL) on GSOF"}}, "GPS1_DELAY_MS": {"Description": "Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.", "DisplayName": "GPS delay in milliseconds", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "GPS1_GNSS_MODE": {"Bitmask": {"0": "GPS", "1": "SBAS", "2": "Galileo", "3": "Beidou", "4": "IMES", "5": "QZSS", "6": "GLONASS"}, "Description": "Bitmask for what GNSS system to use on the first GPS (all unchecked or zero to leave GPS as configured)", "DisplayName": "GNSS system configuration", "User": "Advanced"}, "GPS1_MB_OFS_X": {"Description": "X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_MB_OFS_Y": {"Description": "Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Y position offset ", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_MB_OFS_Z": {"Description": "Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_MB_TYPE": {"Description": "Controls the type of moving base used if using moving base.", "DisplayName": "Moving base type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Relative to alternate GPS instance", "1": "RelativeToCustomBase"}}, "GPS1_POS_X": {"Description": "X position of the first GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_POS_Y": {"Description": "Y position of the first GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_POS_Z": {"Description": "Z position of the first GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS1_RATE_MS": {"Description": "Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.", "DisplayName": "GPS update rate in milliseconds", "Range": {"high": "200", "low": "50"}, "Units": "ms", "User": "Advanced", "Values": {"100": "10Hz", "125": "8Hz", "200": "5Hz"}}, "GPS1_TYPE": {"Description": "GPS type", "DisplayName": "GPS type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "AUTO", "10": "SBF", "11": "GSOF", "13": "ERB", "14": "MAV", "15": "NOVA", "16": "HemisphereNMEA", "17": "uBlox-MovingBaseline-Base", "18": "uBlox-MovingBaseline-Rover", "19": "MSP", "2": "uBlox", "20": "AllyStar", "21": "ExternalAHRS", "22": "DroneCAN-MovingBaseline-Base", "23": "DroneCAN-MovingBaseline-Rover", "24": "UnicoreNMEA", "25": "UnicoreMovingBaselineNMEA", "26": "SBF-DualAntenna", "5": "NMEA", "6": "SiRF", "7": "HIL", "8": "SwiftNav", "9": "DroneCAN"}}, "GPS2_CAN_NODEID": {"Description": "GPS Node id for GPS. Detected node unless CAN_OVRIDE is set", "DisplayName": "Detected CAN Node ID for GPS", "ReadOnly": "True", "User": "Advanced"}, "GPS2_CAN_OVRIDE": {"Description": "GPS Node id for GPS. If 0 the gps will be automatically selected on a first-come-first-GPS basis.", "DisplayName": "DroneCAN GPS NODE ID", "User": "Advanced"}, "GPS2_COM_PORT": {"Description": "The physical COM port on the connected device, currently only applies to SBF and GSOF GPS", "DisplayName": "GPS physical COM port", "Increment": "1", "Range": {"high": "10", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"0": "COM1(RS232) on GSOF", "1": "COM2(TTL) on GSOF"}}, "GPS2_DELAY_MS": {"Description": "Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.", "DisplayName": "GPS delay in milliseconds", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "GPS2_GNSS_MODE": {"Bitmask": {"0": "GPS", "1": "SBAS", "2": "Galileo", "3": "Beidou", "4": "IMES", "5": "QZSS", "6": "GLONASS"}, "Description": "Bitmask for what GNSS system to use on the first GPS (all unchecked or zero to leave GPS as configured)", "DisplayName": "GNSS system configuration", "User": "Advanced"}, "GPS2_MB_OFS_X": {"Description": "X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_MB_OFS_Y": {"Description": "Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Y position offset ", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_MB_OFS_Z": {"Description": "Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_MB_TYPE": {"Description": "Controls the type of moving base used if using moving base.", "DisplayName": "Moving base type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Relative to alternate GPS instance", "1": "RelativeToCustomBase"}}, "GPS2_POS_X": {"Description": "X position of the first GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_POS_Y": {"Description": "Y position of the first GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_POS_Z": {"Description": "Z position of the first GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS2_RATE_MS": {"Description": "Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.", "DisplayName": "GPS update rate in milliseconds", "Range": {"high": "200", "low": "50"}, "Units": "ms", "User": "Advanced", "Values": {"100": "10Hz", "125": "8Hz", "200": "5Hz"}}, "GPS2_TYPE": {"Description": "GPS type", "DisplayName": "GPS type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "AUTO", "10": "SBF", "11": "GSOF", "13": "ERB", "14": "MAV", "15": "NOVA", "16": "HemisphereNMEA", "17": "uBlox-MovingBaseline-Base", "18": "uBlox-MovingBaseline-Rover", "19": "MSP", "2": "uBlox", "20": "AllyStar", "21": "ExternalAHRS", "22": "DroneCAN-MovingBaseline-Base", "23": "DroneCAN-MovingBaseline-Rover", "24": "UnicoreNMEA", "25": "UnicoreMovingBaselineNMEA", "26": "SBF-DualAntenna", "5": "NMEA", "6": "SiRF", "7": "HIL", "8": "SwiftNav", "9": "DroneCAN"}}, "GPS_AUTO_CONFIG": {"Description": "Controls if the autopilot should automatically configure the GPS based on the parameters and default settings", "DisplayName": "Automatic GPS configuration", "User": "Advanced", "Values": {"0": "Disables automatic configuration", "1": "Enable automatic configuration for Serial GPSes only", "2": "Enable automatic configuration for DroneCAN as well"}}, "GPS_AUTO_SWITCH": {"Description": "Automatic switchover to GPS reporting best lock, 1:UseBest selects the GPS with highest status, if both are equal the GPS with highest satellite count is used 4:Use primary if 3D fix or better, will revert to 'UseBest' behaviour if 3D fix is lost on primary", "DisplayName": "Automatic Switchover Setting", "User": "Advanced", "Values": {"0": "Use primary", "1": "UseBest", "2": "Blend", "4": "Use primary if 3D fix or better"}}, "GPS_BLEND_MASK": {"Bitmask": {"0": "Horiz Pos", "1": "Vert Pos", "2": "Speed"}, "Description": "Determines which of the accuracy measures Horizontal position, Vertical Position and Speed are used to calculate the weighting on each GPS receiver when soft switching has been selected by setting GPS_AUTO_SWITCH to 2(Blend)", "DisplayName": "Multi GPS Blending Mask", "User": "Advanced"}, "GPS_CAN_NODEID1": {"Description": "GPS Node id for first-discovered GPS.", "DisplayName": "GPS Node ID 1", "ReadOnly": "True", "User": "Advanced"}, "GPS_CAN_NODEID2": {"Description": "GPS Node id for second-discovered GPS.", "DisplayName": "GPS Node ID 2", "ReadOnly": "True", "User": "Advanced"}, "GPS_COM_PORT": {"Description": "The physical COM port on the connected device, currently only applies to SBF and GSOF GPS", "DisplayName": "GPS physical COM port", "Increment": "1", "Range": {"high": "10", "low": "0"}, "RebootRequired": "True", "User": "Advanced", "Values": {"0": "COM1(RS232) on GSOF", "1": "COM2(TTL) on GSOF"}}, "GPS_COM_PORT2": {"Description": "The physical COM port on the connected device, currently only applies to SBF and GSOF GPS", "DisplayName": "GPS physical COM port", "Increment": "1", "Range": {"high": "10", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "GPS_DELAY_MS": {"Description": "Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.", "DisplayName": "GPS delay in milliseconds", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "GPS_DELAY_MS2": {"Description": "Controls the amount of GPS measurement delay that the autopilot compensates for. Set to zero to use the default delay for the detected GPS type.", "DisplayName": "GPS 2 delay in milliseconds", "Range": {"high": "250", "low": "0"}, "RebootRequired": "True", "Units": "ms", "User": "Advanced"}, "GPS_DRV_OPTIONS": {"Bitmask": {"0": "Use UART2 for moving baseline on ublox", "1": "Use base station for GPS yaw on SBF", "2": "Use baudrate 115200", "3": "Use dedicated CAN port b/w GPSes for moving baseline", "4": "Use ellipsoid height instead of AMSL", "5": "Override GPS satellite health of L5 band from L1 health", "6": "Enable RTCM full parse even for a single channel", "7": "Disable automatic full RTCM parsing when RTCM seen on more than one channel"}, "Description": "Additional backend specific options", "DisplayName": "driver options", "User": "Advanced"}, "GPS_GNSS_MODE": {"Bitmask": {"0": "GPS", "1": "SBAS", "2": "Galileo", "3": "Beidou", "4": "IMES", "5": "QZSS", "6": "GLONASS"}, "Description": "Bitmask for what GNSS system to use on the first GPS (all unchecked or zero to leave GPS as configured)", "DisplayName": "GNSS system configuration", "User": "Advanced"}, "GPS_GNSS_MODE2": {"Bitmask": {"0": "GPS", "1": "SBAS", "2": "Galileo", "3": "Beidou", "4": "IMES", "5": "QZSS", "6": "GLONASS"}, "Description": "Bitmask for what GNSS system to use on the second GPS (all unchecked or zero to leave GPS as configured)", "DisplayName": "GNSS system configuration", "User": "Advanced"}, "GPS_INJECT_TO": {"Description": "The GGS can send raw serial packets to inject data to multiple GPSes.", "DisplayName": "Destination for GPS_INJECT_DATA MAVLink packets", "User": "Advanced", "Values": {"0": "send to first GPS", "1": "send to 2nd GPS", "127": "send to all"}}, "GPS_MB1_OFS_X": {"Description": "X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB1_OFS_Y": {"Description": "Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Y position offset ", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB1_OFS_Z": {"Description": "Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB1_TYPE": {"Description": "Controls the type of moving base used if using moving base.", "DisplayName": "Moving base type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Relative to alternate GPS instance", "1": "RelativeToCustomBase"}}, "GPS_MB2_OFS_X": {"Description": "X position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive X is forward of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB2_OFS_Y": {"Description": "Y position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Y is to the right of the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Y position offset ", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB2_OFS_Z": {"Description": "Z position of the base (primary) GPS antenna in body frame from the position of the 2nd antenna. Positive Z is down from the 2nd antenna. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Base antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_MB2_TYPE": {"Description": "Controls the type of moving base used if using moving base.", "DisplayName": "Moving base type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Relative to alternate GPS instance", "1": "RelativeToCustomBase"}}, "GPS_MIN_ELEV": {"Description": "This sets the minimum elevation of satellites above the horizon for them to be used for navigation. Setting this to -100 leaves the minimum elevation set to the GPS modules default.", "DisplayName": "Minimum elevation", "Range": {"high": "90", "low": "-100"}, "Units": "deg", "User": "Advanced"}, "GPS_NAVFILTER": {"Description": "Navigation filter engine setting", "DisplayName": "Navigation filter setting", "User": "Advanced", "Values": {"0": "Portable", "2": "Stationary", "3": "Pedestrian", "4": "Automotive", "5": "Sea", "6": "Airborne1G", "7": "Airborne2G", "8": "Airborne4G"}}, "GPS_POS1_X": {"Description": "X position of the first GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_POS1_Y": {"Description": "Y position of the first GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_POS1_Z": {"Description": "Z position of the first GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_POS2_X": {"Description": "X position of the second GPS antenna in body frame. Positive X is forward of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_POS2_Y": {"Description": "Y position of the second GPS antenna in body frame. Positive Y is to the right of the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_POS2_Z": {"Description": "Z position of the second GPS antenna in body frame. Positive Z is down from the origin. Use antenna phase centroid location if provided by the manufacturer.", "DisplayName": "Antenna Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "GPS_PRIMARY": {"Description": "This GPS will be used when GPS_AUTO_SWITCH is 0 and used preferentially with GPS_AUTO_SWITCH = 4.", "DisplayName": "Primary GPS", "Increment": "1", "User": "Advanced", "Values": {"0": "FirstGPS", "1": "SecondGPS"}}, "GPS_RATE_MS": {"Description": "Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.", "DisplayName": "GPS update rate in milliseconds", "Range": {"high": "200", "low": "50"}, "Units": "ms", "User": "Advanced", "Values": {"100": "10Hz", "125": "8Hz", "200": "5Hz"}}, "GPS_RATE_MS2": {"Description": "Controls how often the GPS should provide a position update. Lowering below 5Hz(default) is not allowed. Raising the rate above 5Hz usually provides little benefit and for some GPS (eg Ublox M9N) can severely impact performance.", "DisplayName": "GPS 2 update rate in milliseconds", "Range": {"high": "200", "low": "50"}, "Units": "ms", "User": "Advanced", "Values": {"100": "10Hz", "125": "8Hz", "200": "5Hz"}}, "GPS_RAW_DATA": {"Description": "Handles logging raw data; on uBlox chips that support raw data this will log RXM messages into logger; on Septentrio this will log on the equipment's SD card and when set to 2, the autopilot will try to stop logging after disarming and restart after arming", "DisplayName": "Raw data logging", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Ignore", "1": "Always log", "2": "Stop logging when disarmed (SBF only)", "5": "Only log every five samples (uBlox only)"}}, "GPS_SAVE_CFG": {"Description": "Determines whether the configuration for this GPS should be written to non-volatile memory on the GPS. Currently working for UBlox 6 series and above.", "DisplayName": "Save GPS configuration", "User": "Advanced", "Values": {"0": "Do not save config", "1": "Save config", "2": "Save only when needed"}}, "GPS_SBAS_MODE": {"Description": "This sets the SBAS (satellite based augmentation system) mode if available on this GPS. If set to 2 then the SBAS mode is not changed in the GPS. Otherwise the GPS will be reconfigured to enable/disable SBAS. Disabling SBAS may be worthwhile in some parts of the world where an SBAS signal is available but the baseline is too long to be useful.", "DisplayName": "SBAS Mode", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "NoChange"}}, "GPS_SBP_LOGMASK": {"Description": "Masked with the SBP msg_type field to determine whether SBR1/SBR2 data is logged", "DisplayName": "Swift Binary Protocol Logging Mask", "User": "Advanced", "Values": {"-1": "All (0xFFFF)", "-256": "External only (0xFF00)", "0": "None (0x0000)"}}, "GPS_TYPE": {"Description": "GPS type of 1st GPS", "DisplayName": "1st GPS type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "AUTO", "10": "SBF", "11": "GSOF", "13": "ERB", "14": "MAV", "15": "NOVA", "16": "HemisphereNMEA", "17": "uBlox-MovingBaseline-Base", "18": "uBlox-MovingBaseline-Rover", "19": "MSP", "2": "uBlox", "20": "AllyStar", "21": "ExternalAHRS", "22": "DroneCAN-MovingBaseline-Base", "23": "DroneCAN-MovingBaseline-Rover", "24": "UnicoreNMEA", "25": "UnicoreMovingBaselineNMEA", "26": "SBF-DualAntenna", "5": "NMEA", "6": "SiRF", "7": "HIL", "8": "SwiftNav", "9": "DroneCAN"}}, "GPS_TYPE2": {"Description": "GPS type of 2nd GPS", "DisplayName": "2nd GPS type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "AUTO", "10": "SBF", "11": "GSOF", "13": "ERB", "14": "MAV", "15": "NOVA", "16": "HemisphereNMEA", "17": "uBlox-MovingBaseline-Base", "18": "uBlox-MovingBaseline-Rover", "19": "MSP", "2": "uBlox", "20": "AllyStar", "21": "ExternalAHRS", "22": "DroneCAN-MovingBaseline-Base", "23": "DroneCAN-MovingBaseline-Rover", "24": "UnicoreNMEA", "25": "UnicoreMovingBaselineNMEA", "26": "SBF-DualAntenna", "5": "NMEA", "6": "SiRF", "7": "HIL", "8": "SwiftNav", "9": "DroneCAN"}}, "GRIP_AUTOCLOSE": {"Description": "Time in seconds that gripper close the gripper after opening; 0 to disable", "DisplayName": "Gripper Autoclose time", "Range": {"high": "255", "low": "0.25"}, "Units": "s", "User": "Advanced"}, "GRIP_CAN_ID": {"Description": "Refer to https://docs.zubax.com/opengrab_epm_v3#UAVCAN_interface", "DisplayName": "EPM UAVCAN Hardpoint ID", "Range": {"high": "255", "low": "0"}, "User": "Standard"}, "GRIP_ENABLE": {"Description": "Gripper enable/disable", "DisplayName": "Gripper Enable/Disable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "GRIP_GRAB": {"Description": "PWM value in microseconds sent to Gripper to initiate grabbing the cargo", "DisplayName": "Gripper Grab PWM", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Advanced"}, "GRIP_NEUTRAL": {"Description": "PWM value in microseconds sent to grabber when not grabbing or releasing", "DisplayName": "Neutral PWM", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Advanced"}, "GRIP_REGRAB": {"Description": "Time in seconds that EPM gripper will regrab the cargo to ensure grip has not weakened; 0 to disable", "DisplayName": "EPM Gripper Regrab interval", "Range": {"high": "255", "low": "0"}, "Units": "s", "User": "Advanced"}, "GRIP_RELEASE": {"Description": "PWM value in microseconds sent to Gripper to release the cargo", "DisplayName": "Gripper Release PWM", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Advanced"}, "GRIP_TYPE": {"Description": "Gripper enable/disable", "DisplayName": "Gripper Type", "User": "Standard", "Values": {"0": "None", "1": "Servo", "2": "EPM"}}, "GROUND_STEER_ALT": {"Description": "Altitude at which to use the ground steering controller on the rudder. If non-zero then the STEER2SRV controller will be used to control the rudder for altitudes within this limit of the home altitude.", "DisplayName": "Ground steer altitude", "Increment": "0.1", "Range": {"high": "100", "low": "-100"}, "Units": "m", "User": "Standard"}, "GROUND_STEER_DPS": {"Description": "Ground steering rate in degrees per second for full rudder stick deflection", "DisplayName": "Ground steer rate", "Increment": "1", "Range": {"high": "360", "low": "10"}, "Units": "deg/s", "User": "Advanced"}, "GUIDED_D": {"Description": "D Gain which produces an output that is proportional to the rate of change of the error", "DisplayName": "PID Derivative Gain"}, "GUIDED_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "PID Derivative FeedForward Gain", "Increment": "0.0001", "Range": {"high": "0.02", "low": "0"}, "User": "Advanced"}, "GUIDED_FF": {"Description": "FF Gain which produces an output value that is proportional to the demanded input", "DisplayName": "FF FeedForward Gain"}, "GUIDED_FLTD": {"Description": "Derivative filter frequency in Hz", "DisplayName": "PID Derivative term filter frequency in Hz", "Units": "Hz"}, "GUIDED_FLTE": {"Description": "Error filter frequency in Hz", "DisplayName": "PID Error filter frequency in Hz", "Units": "Hz"}, "GUIDED_FLTT": {"Description": "Target filter frequency in Hz", "DisplayName": "PID Target filter frequency in Hz", "Units": "Hz"}, "GUIDED_I": {"Description": "I Gain which produces an output that is proportional to both the magnitude and the duration of the error", "DisplayName": "PID Integral Gain"}, "GUIDED_IMAX": {"Description": "The maximum/minimum value that the I term can output", "DisplayName": "PID Integral Maximum"}, "GUIDED_NEF": {"Description": "PID Error notch filter index", "DisplayName": "PID Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "GUIDED_NTF": {"Description": "PID Target notch filter index", "DisplayName": "PID Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "GUIDED_P": {"Description": "P Gain which produces an output value that is proportional to the current error value", "DisplayName": "PID Proportional Gain"}, "GUIDED_PDMX": {"Description": "The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "PD sum maximum", "User": "Advanced"}, "GUIDED_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "HOME_RESET_ALT": {"Description": "When the aircraft is within this altitude of the home waypoint, while disarmed it will automatically update the home position. Set to 0 to continously reset it.", "DisplayName": "Home reset altitude threshold", "Range": {"high": "127", "low": "-1"}, "Units": "m", "User": "Advanced", "Values": {"-1": "Never reset", "0": "Always reset"}}, "ICE_ENABLE": {"Description": "This enables internal combustion engine control", "DisplayName": "Enable ICEngine control", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "ICE_IDLE_DB": {"Description": "This configures the deadband that is tolerated before adjusting the idle setpoint", "DisplayName": "Deadband for Idle Governor"}, "ICE_IDLE_PCT": {"Description": "This is the minimum percentage throttle output while running, this includes being disarmed, but not safe", "DisplayName": "Throttle percentage for engine idle", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "ICE_IDLE_RPM": {"Description": "This configures the RPM that will be commanded by the idle governor. Set to -1 to disable", "DisplayName": "RPM Setpoint for Idle Governor", "User": "Advanced"}, "ICE_IDLE_SLEW": {"Description": "This configures the slewrate used to adjust the idle setpoint in percentage points per second", "DisplayName": "Slew Rate for idle control"}, "ICE_OPTIONS": {"Bitmask": {"0": "Disable ignition in RC failsafe", "1": "Disable redline governor", "2": "Throttle while disarmed", "3": "Disable while disarmed"}, "Description": "Options for ICE control. The Disable ignition in RC failsafe option will cause the ignition to be set off on any R/C failsafe. If Throttle while disarmed is set then throttle control will be allowed while disarmed for planes when in MANUAL mode. If disable while disarmed is set the engine will not start while the vehicle is disarmed unless overriden by the MAVLink DO_ENGINE_CONTROL command.", "DisplayName": "ICE options"}, "ICE_PWM_IGN_OFF": {"Description": "This is the value sent to the ignition channel when off", "DisplayName": "PWM value for ignition off", "Range": {"high": "2000", "low": "1000"}, "User": "Standard"}, "ICE_PWM_IGN_ON": {"Description": "This is the value sent to the ignition channel when on", "DisplayName": "PWM value for ignition on", "Range": {"high": "2000", "low": "1000"}, "User": "Standard"}, "ICE_PWM_STRT_OFF": {"Description": "This is the value sent to the starter channel when off", "DisplayName": "PWM value for starter off", "Range": {"high": "2000", "low": "1000"}, "User": "Standard"}, "ICE_PWM_STRT_ON": {"Description": "This is the value sent to the starter channel when on", "DisplayName": "PWM value for starter on", "Range": {"high": "2000", "low": "1000"}, "User": "Standard"}, "ICE_REDLINE_RPM": {"Description": "Maximum RPM for the engine provided by the manufacturer. A value of 0 disables this feature. See ICE_OPTIONS to enable or disable the governor.", "DisplayName": "RPM of the redline limit for the engine", "Range": {"high": "2000000", "low": "0"}, "Units": "RPM", "User": "Advanced"}, "ICE_RPM_CHAN": {"Description": "This is which of the RPM instances to use for detecting the RPM of the engine", "DisplayName": "RPM instance channel to use", "User": "Standard", "Values": {"0": "None", "1": "RPM1", "2": "RPM2"}}, "ICE_RPM_THRESH": {"Description": "This is the measured RPM above which the engine is considered to be running", "DisplayName": "RPM threshold", "Range": {"high": "100000", "low": "100"}, "User": "Standard"}, "ICE_STARTCHN_MIN": {"Description": "This is a minimum PWM value for engine start channel for an engine stop to be commanded. Setting this value will avoid RC input glitches with low PWM values from causing an unwanted engine stop. A value of zero means any PWM below 1300 triggers an engine stop.", "DisplayName": "Input channel for engine start minimum PWM", "Range": {"high": "1300", "low": "0"}, "User": "Standard"}, "ICE_STARTER_TIME": {"Description": "This is the number of seconds to run the starter when trying to start the engine", "DisplayName": "Time to run starter", "Range": {"high": "5", "low": "0.1"}, "Units": "s", "User": "Standard"}, "ICE_START_CHAN": {"Description": "This is an RC input channel for requesting engine start. Engine will try to start when channel is at or above 1700. Engine will stop when channel is at or below 1300. Between 1301 and 1699 the engine will not change state unless a MAVLink command or mission item commands a state change, or the vehicle is disarmed. See ICE_STARTCHN_MIN parameter to change engine stop PWM value and/or to enable debouncing of the START_CH to avoid accidental engine kills due to noise on channel.", "DisplayName": "Input channel for engine start", "User": "Standard", "Values": {"0": "None", "1": "Chan1", "10": "Chan10", "11": "Chan11", "12": "Chan12", "13": "Chan13", "14": "Chan14", "15": "Chan15", "16": "Chan16", "2": "Chan2", "3": "Chan3", "4": "Chan4", "5": "Chan5", "6": "Chan6", "7": "Chan7", "8": "Chan8", "9": "Chan9"}}, "ICE_START_DELAY": {"Description": "Delay between start attempts", "DisplayName": "Time to wait between starts", "Range": {"high": "10", "low": "1"}, "Units": "s", "User": "Standard"}, "ICE_START_PCT": {"Description": "This is the percentage throttle output for engine start", "DisplayName": "Throttle percentage for engine start", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "INITIAL_MODE": {"Description": "This selects the mode to start in on boot. This is useful for when you want to start in AUTO mode on boot without a receiver.", "DisplayName": "Initial flight mode", "User": "Advanced", "Values": {"0": "Manual", "1": "CIRCLE", "10": "Auto", "11": "RTL", "12": "Loiter", "13": "TAKEOFF", "14": "AVOID_ADSB", "15": "Guided", "17": "QSTABILIZE", "18": "QHOVER", "19": "QLOITER", "2": "STABILIZE", "20": "QLAND", "21": "QRTL", "22": "QAUTOTUNE", "23": "QACRO", "24": "THERMAL", "25": "Loiter to QLand", "3": "TRAINING", "4": "ACRO", "5": "FBWA", "6": "FBWB", "7": "CRUISE", "8": "AUTOTUNE"}}, "INS4_ACCOFFS_X": {"Calibration": "1", "Description": "Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of X axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS4_ACCOFFS_Y": {"Calibration": "1", "Description": "Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Y axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS4_ACCOFFS_Z": {"Calibration": "1", "Description": "Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Z axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS4_ACCSCAL_X": {"Calibration": "1", "Description": "Accelerometer scaling of X axis. Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of X axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS4_ACCSCAL_Y": {"Calibration": "1", "Description": "Accelerometer scaling of Y axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Y axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS4_ACCSCAL_Z": {"Calibration": "1", "Description": "Accelerometer scaling of Z axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Z axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS4_ACC_CALTEMP": {"Calibration": "1", "Description": "Temperature that the accelerometer was calibrated at", "DisplayName": "Calibration temperature for accelerometer", "Units": "degC", "User": "Advanced"}, "INS4_ACC_ID": {"Description": "Accelerometer sensor ID, taking into account its type, bus and instance", "DisplayName": "Accelerometer ID", "ReadOnly": "True", "User": "Advanced"}, "INS4_GYROFFS_X": {"Calibration": "1", "Description": "Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of X axis", "Units": "rad/s", "User": "Advanced"}, "INS4_GYROFFS_Y": {"Calibration": "1", "Description": "Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Y axis", "Units": "rad/s", "User": "Advanced"}, "INS4_GYROFFS_Z": {"Calibration": "1", "Description": "Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Z axis", "Units": "rad/s", "User": "Advanced"}, "INS4_GYR_CALTEMP": {"Calibration": "1", "Description": "Temperature that the gyroscope was calibrated at", "DisplayName": "Calibration temperature for gyroscope", "Units": "degC", "User": "Advanced"}, "INS4_GYR_ID": {"Description": "Gyro sensor ID, taking into account its type, bus and instance", "DisplayName": "Gyro ID", "ReadOnly": "True", "User": "Advanced"}, "INS4_POS_X": {"Description": "X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer X position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS4_POS_Y": {"Description": "Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Y position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS4_POS_Z": {"Description": "Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Z position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS4_TCAL_ACC1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_ACC1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_ACC1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_ACC2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_ACC2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_ACC2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_ACC3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_ACC3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_ACC3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_ENABLE": {"Description": "Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot", "DisplayName": "Enable temperature calibration", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "LearnCalibration"}}, "INS4_TCAL_GYR1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_GYR1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_GYR1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_GYR2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_GYR2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_GYR2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_GYR3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS4_TCAL_GYR3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS4_TCAL_GYR3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS4_TCAL_TMAX": {"Calibration": "1", "Description": "The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration", "DisplayName": "Temperature calibration max", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS4_TCAL_TMIN": {"Calibration": "1", "Description": "The minimum temperature that the calibration is valid for", "DisplayName": "Temperature calibration min", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS4_USE": {"Description": "Use first IMU for attitude, velocity and position estimates", "DisplayName": "Use first IMU for attitude, velocity and position estimates", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS5_ACCOFFS_X": {"Calibration": "1", "Description": "Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of X axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS5_ACCOFFS_Y": {"Calibration": "1", "Description": "Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Y axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS5_ACCOFFS_Z": {"Calibration": "1", "Description": "Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Z axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS5_ACCSCAL_X": {"Calibration": "1", "Description": "Accelerometer scaling of X axis. Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of X axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS5_ACCSCAL_Y": {"Calibration": "1", "Description": "Accelerometer scaling of Y axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Y axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS5_ACCSCAL_Z": {"Calibration": "1", "Description": "Accelerometer scaling of Z axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Z axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS5_ACC_CALTEMP": {"Calibration": "1", "Description": "Temperature that the accelerometer was calibrated at", "DisplayName": "Calibration temperature for accelerometer", "Units": "degC", "User": "Advanced"}, "INS5_ACC_ID": {"Description": "Accelerometer sensor ID, taking into account its type, bus and instance", "DisplayName": "Accelerometer ID", "ReadOnly": "True", "User": "Advanced"}, "INS5_GYROFFS_X": {"Calibration": "1", "Description": "Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of X axis", "Units": "rad/s", "User": "Advanced"}, "INS5_GYROFFS_Y": {"Calibration": "1", "Description": "Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Y axis", "Units": "rad/s", "User": "Advanced"}, "INS5_GYROFFS_Z": {"Calibration": "1", "Description": "Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Z axis", "Units": "rad/s", "User": "Advanced"}, "INS5_GYR_CALTEMP": {"Calibration": "1", "Description": "Temperature that the gyroscope was calibrated at", "DisplayName": "Calibration temperature for gyroscope", "Units": "degC", "User": "Advanced"}, "INS5_GYR_ID": {"Description": "Gyro sensor ID, taking into account its type, bus and instance", "DisplayName": "Gyro ID", "ReadOnly": "True", "User": "Advanced"}, "INS5_POS_X": {"Description": "X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer X position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS5_POS_Y": {"Description": "Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Y position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS5_POS_Z": {"Description": "Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Z position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS5_TCAL_ACC1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_ACC1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_ACC1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_ACC2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_ACC2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_ACC2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_ACC3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_ACC3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_ACC3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_ENABLE": {"Description": "Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot", "DisplayName": "Enable temperature calibration", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "LearnCalibration"}}, "INS5_TCAL_GYR1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_GYR1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_GYR1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_GYR2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_GYR2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_GYR2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_GYR3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS5_TCAL_GYR3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS5_TCAL_GYR3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS5_TCAL_TMAX": {"Calibration": "1", "Description": "The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration", "DisplayName": "Temperature calibration max", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS5_TCAL_TMIN": {"Calibration": "1", "Description": "The minimum temperature that the calibration is valid for", "DisplayName": "Temperature calibration min", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS5_USE": {"Description": "Use first IMU for attitude, velocity and position estimates", "DisplayName": "Use first IMU for attitude, velocity and position estimates", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS_ACC1_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 1st accelerometer was calibrated at", "DisplayName": "Calibration temperature for 1st accelerometer", "Units": "degC", "User": "Advanced"}, "INS_ACC2OFFS_X": {"Calibration": "1", "Description": "Accelerometer2 offsets of X axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer2 offsets of X axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC2OFFS_Y": {"Calibration": "1", "Description": "Accelerometer2 offsets of Y axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer2 offsets of Y axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC2OFFS_Z": {"Calibration": "1", "Description": "Accelerometer2 offsets of Z axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer2 offsets of Z axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC2SCAL_X": {"Calibration": "1", "Description": "Accelerometer2 scaling of X axis. Calculated during acceleration calibration routine", "DisplayName": "Accelerometer2 scaling of X axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC2SCAL_Y": {"Calibration": "1", "Description": "Accelerometer2 scaling of Y axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer2 scaling of Y axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC2SCAL_Z": {"Calibration": "1", "Description": "Accelerometer2 scaling of Z axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer2 scaling of Z axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC2_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 2nd accelerometer was calibrated at", "DisplayName": "Calibration temperature for 2nd accelerometer", "Units": "degC", "User": "Advanced"}, "INS_ACC2_ID": {"Description": "Accelerometer2 sensor ID, taking into account its type, bus and instance", "DisplayName": "Accelerometer2 ID", "ReadOnly": "True", "User": "Advanced"}, "INS_ACC3OFFS_X": {"Calibration": "1", "Description": "Accelerometer3 offsets of X axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer3 offsets of X axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC3OFFS_Y": {"Calibration": "1", "Description": "Accelerometer3 offsets of Y axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer3 offsets of Y axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC3OFFS_Z": {"Calibration": "1", "Description": "Accelerometer3 offsets of Z axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer3 offsets of Z axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACC3SCAL_X": {"Calibration": "1", "Description": "Accelerometer3 scaling of X axis. Calculated during acceleration calibration routine", "DisplayName": "Accelerometer3 scaling of X axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC3SCAL_Y": {"Calibration": "1", "Description": "Accelerometer3 scaling of Y axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer3 scaling of Y axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC3SCAL_Z": {"Calibration": "1", "Description": "Accelerometer3 scaling of Z axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer3 scaling of Z axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC3_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 3rd accelerometer was calibrated at", "DisplayName": "Calibration temperature for 3rd accelerometer", "Units": "degC", "User": "Advanced"}, "INS_ACC3_ID": {"Description": "Accelerometer3 sensor ID, taking into account its type, bus and instance", "DisplayName": "Accelerometer3 ID", "ReadOnly": "True", "User": "Advanced"}, "INS_ACCEL_FILTER": {"Description": "Filter cutoff frequency for accelerometers. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)", "DisplayName": "Accel filter cutoff frequency", "Range": {"high": "256", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "INS_ACCOFFS_X": {"Calibration": "1", "Description": "Accelerometer offsets of X axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of X axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACCOFFS_Y": {"Calibration": "1", "Description": "Accelerometer offsets of Y axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Y axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACCOFFS_Z": {"Calibration": "1", "Description": "Accelerometer offsets of Z axis. This is setup using the acceleration calibration or level operations", "DisplayName": "Accelerometer offsets of Z axis", "Range": {"high": "3.5", "low": "-3.5"}, "Units": "m/s/s", "User": "Advanced"}, "INS_ACCSCAL_X": {"Calibration": "1", "Description": "Accelerometer scaling of X axis. Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of X axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACCSCAL_Y": {"Calibration": "1", "Description": "Accelerometer scaling of Y axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Y axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACCSCAL_Z": {"Calibration": "1", "Description": "Accelerometer scaling of Z axis Calculated during acceleration calibration routine", "DisplayName": "Accelerometer scaling of Z axis", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "INS_ACC_BODYFIX": {"Description": "The body-fixed accelerometer to be used for trim calculation", "DisplayName": "Body-fixed accelerometer", "User": "Advanced", "Values": {"1": "IMU 1", "2": "IMU 2", "3": "IMU 3"}}, "INS_ACC_ID": {"Description": "Accelerometer sensor ID, taking into account its type, bus and instance", "DisplayName": "Accelerometer ID", "ReadOnly": "True", "User": "Advanced"}, "INS_ENABLE_MASK": {"Bitmask": {"0": "FirstIMU", "1": "SecondIMU", "2": "ThirdIMU", "3": "FourthIMU", "4": "FifthIMU", "5": "SixthIMU", "6": "SeventhIMU"}, "Description": "Bitmask of IMUs to enable. It can be used to prevent startup of specific detected IMUs", "DisplayName": "IMU enable mask", "User": "Advanced"}, "INS_FAST_SAMPLE": {"Bitmask": {"0": "FirstIMU", "1": "SecondIMU", "2": "ThirdIMU"}, "Description": "Mask of IMUs to enable fast sampling on, if available", "DisplayName": "Fast sampling mask", "User": "Advanced"}, "INS_GYR1_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 1st gyroscope was calibrated at", "DisplayName": "Calibration temperature for 1st gyroscope", "Units": "degC", "User": "Advanced"}, "INS_GYR2OFFS_X": {"Calibration": "1", "Description": "Gyro2 sensor offsets of X axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro2 offsets of X axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR2OFFS_Y": {"Calibration": "1", "Description": "Gyro2 sensor offsets of Y axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro2 offsets of Y axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR2OFFS_Z": {"Calibration": "1", "Description": "Gyro2 sensor offsets of Z axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro2 offsets of Z axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR2_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 2nd gyroscope was calibrated at", "DisplayName": "Calibration temperature for 2nd gyroscope", "Units": "degC", "User": "Advanced"}, "INS_GYR2_ID": {"Description": "Gyro2 sensor ID, taking into account its type, bus and instance", "DisplayName": "Gyro2 ID", "ReadOnly": "True", "User": "Advanced"}, "INS_GYR3OFFS_X": {"Calibration": "1", "Description": "Gyro3 sensor offsets of X axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro3 offsets of X axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR3OFFS_Y": {"Calibration": "1", "Description": "Gyro3 sensor offsets of Y axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro3 offsets of Y axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR3OFFS_Z": {"Calibration": "1", "Description": "Gyro3 sensor offsets of Z axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro3 offsets of Z axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYR3_CALTEMP": {"Calibration": "1", "Description": "Temperature that the 3rd gyroscope was calibrated at", "DisplayName": "Calibration temperature for 3rd gyroscope", "Units": "degC", "User": "Advanced"}, "INS_GYR3_ID": {"Description": "Gyro3 sensor ID, taking into account its type, bus and instance", "DisplayName": "Gyro3 ID", "ReadOnly": "True", "User": "Advanced"}, "INS_GYROFFS_X": {"Calibration": "1", "Description": "Gyro sensor offsets of X axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of X axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYROFFS_Y": {"Calibration": "1", "Description": "Gyro sensor offsets of Y axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Y axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYROFFS_Z": {"Calibration": "1", "Description": "Gyro sensor offsets of Z axis. This is setup on each boot during gyro calibrations", "DisplayName": "Gyro offsets of Z axis", "Units": "rad/s", "User": "Advanced"}, "INS_GYRO_FILTER": {"Description": "Filter cutoff frequency for gyroscopes. This can be set to a lower value to try to cope with very high vibration levels in aircraft. A value of zero means no filtering (not recommended!)", "DisplayName": "Gyro filter cutoff frequency", "Range": {"high": "256", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "INS_GYRO_RATE": {"Description": "Gyro rate for IMUs with fast sampling enabled. The gyro rate is the sample rate at which the IMU filters operate and needs to be at least double the maximum filter frequency. If the sensor does not support the selected rate the next highest supported rate will be used. For IMUs which do not support fast sampling this setting is ignored and the default gyro rate of 1Khz is used.", "DisplayName": "Gyro rate for IMUs with Fast Sampling enabled", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "1kHz", "1": "2kHz", "2": "4kHz", "3": "8kHz"}}, "INS_GYR_CAL": {"Description": "Conrols when automatic gyro calibration is performed", "DisplayName": "Gyro Calibration scheme", "User": "Advanced", "Values": {"0": "Never", "1": "Start-up only"}}, "INS_GYR_ID": {"Description": "Gyro sensor ID, taking into account its type, bus and instance", "DisplayName": "Gyro ID", "ReadOnly": "True", "User": "Advanced"}, "INS_HNTC2_ATT": {"Description": "Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.", "DisplayName": "Harmonic Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "INS_HNTC2_BW": {"Description": "Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.", "DisplayName": "Harmonic Notch Filter bandwidth", "Range": {"high": "250", "low": "5"}, "Units": "Hz", "User": "Advanced"}, "INS_HNTC2_ENABLE": {"Description": "Harmonic Notch Filter enable", "DisplayName": "Harmonic Notch Filter enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS_HNTC2_FM_RAT": {"Description": "The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.", "DisplayName": "Throttle notch min freqency ratio", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "INS_HNTC2_FREQ": {"Description": "Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). ", "DisplayName": "Harmonic Notch Filter base frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "INS_HNTC2_HMNCS": {"Bitmask": {"0": "1st harmonic", "1": "2nd harmonic", "10": "11th harmonic", "11": "12th harmonic", "12": "13th harmonic", "13": "14th harmonic", "14": "15th harmonic", "15": "16th harmonic", "2": "3rd harmonic", "3": "4th harmonic", "4": "5th harmonic", "5": "6th harmonic", "6": "7th harmonic", "7": "8th harmonic", "8": "9th harmonic", "9": "10th harmonic"}, "Description": "Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.", "DisplayName": "Harmonic Notch Filter harmonics", "RebootRequired": "True", "User": "Advanced"}, "INS_HNTC2_MODE": {"Description": "Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based harmonic notch cannot be used on fixed wing only planes. It can for Copters, QuaadPlane(while in VTOL modes), and Rovers.", "DisplayName": "Harmonic Notch Filter dynamic frequency tracking mode", "Range": {"high": "5", "low": "0"}, "User": "Advanced", "Values": {"0": "Fixed", "1": "Throttle", "2": "RPM Sensor", "3": "ESC Telemetry", "4": "Dynamic FFT", "5": "Second RPM Sensor"}}, "INS_HNTC2_OPTS": {"Bitmask": {"0": "Double notch", "1": "Multi-Source", "2": "Update at loop rate", "3": "EnableOnAllIMUs", "4": "Triple notch", "5": "Use min freq on RPM failure"}, "Description": "Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.", "DisplayName": "Harmonic Notch Filter options", "RebootRequired": "True", "User": "Advanced"}, "INS_HNTC2_REF": {"Description": "A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.", "DisplayName": "Harmonic Notch Filter reference value", "Range": {"high": "1.0", "low": "0.0"}, "RebootRequired": "True", "User": "Advanced"}, "INS_HNTCH_ATT": {"Description": "Harmonic Notch Filter attenuation in dB. Values greater than 40dB will typically produce a hard notch rather than a modest attenuation of motor noise.", "DisplayName": "Harmonic Notch Filter attenuation", "Range": {"high": "50", "low": "5"}, "Units": "dB", "User": "Advanced"}, "INS_HNTCH_BW": {"Description": "Harmonic Notch Filter bandwidth in Hz. This is typically set to half the base frequency. The ratio of base frequency to bandwidth determines the notch quality factor and is fixed across harmonics.", "DisplayName": "Harmonic Notch Filter bandwidth", "Range": {"high": "250", "low": "5"}, "Units": "Hz", "User": "Advanced"}, "INS_HNTCH_ENABLE": {"Description": "Harmonic Notch Filter enable", "DisplayName": "Harmonic Notch Filter enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS_HNTCH_FM_RAT": {"Description": "The minimum ratio below the configured frequency to take throttle based notch filters when flying at a throttle level below the reference throttle. Note that lower frequency notch filters will have more phase lag. If you want throttle based notch filtering to be effective at a throttle up to 30% below the configured notch frequency then set this parameter to 0.7. The default of 1.0 means the notch will not go below the frequency in the FREQ parameter.", "DisplayName": "Throttle notch min freqency ratio", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "INS_HNTCH_FREQ": {"Description": "Harmonic Notch Filter base center frequency in Hz. This is the center frequency for static notches, the center frequency for Throttle based notches at the reference thrust value, and the minimum limit of center frequency variation for all other notch types. This should always be set lower than half the backend gyro rate (which is typically 1Khz). ", "DisplayName": "Harmonic Notch Filter base frequency", "Range": {"high": "495", "low": "10"}, "Units": "Hz", "User": "Advanced"}, "INS_HNTCH_HMNCS": {"Bitmask": {"0": "1st harmonic", "1": "2nd harmonic", "10": "11th harmonic", "11": "12th harmonic", "12": "13th harmonic", "13": "14th harmonic", "14": "15th harmonic", "15": "16th harmonic", "2": "3rd harmonic", "3": "4th harmonic", "4": "5th harmonic", "5": "6th harmonic", "6": "7th harmonic", "7": "8th harmonic", "8": "9th harmonic", "9": "10th harmonic"}, "Description": "Bitmask of harmonic frequencies to apply Harmonic Notch Filter to. This option takes effect on the next reboot. A value of 0 disables this filter. The first harmonic refers to the base frequency.", "DisplayName": "Harmonic Notch Filter harmonics", "RebootRequired": "True", "User": "Advanced"}, "INS_HNTCH_MODE": {"Description": "Harmonic Notch Filter dynamic frequency tracking mode. Dynamic updates can be throttle, RPM sensor, ESC telemetry or dynamic FFT based. Throttle-based harmonic notch cannot be used on fixed wing only planes. It can for Copters, QuaadPlane(while in VTOL modes), and Rovers.", "DisplayName": "Harmonic Notch Filter dynamic frequency tracking mode", "Range": {"high": "5", "low": "0"}, "User": "Advanced", "Values": {"0": "Fixed", "1": "Throttle", "2": "RPM Sensor", "3": "ESC Telemetry", "4": "Dynamic FFT", "5": "Second RPM Sensor"}}, "INS_HNTCH_OPTS": {"Bitmask": {"0": "Double notch", "1": "Multi-Source", "2": "Update at loop rate", "3": "EnableOnAllIMUs", "4": "Triple notch", "5": "Use min freq on RPM failure"}, "Description": "Harmonic Notch Filter options. Triple and double-notches can provide deeper attenuation across a wider bandwidth with reduced latency than single notches and are suitable for larger aircraft. Multi-Source attaches a harmonic notch to each detected noise frequency instead of simply being multiples of the base frequency, in the case of FFT it will attach notches to each of three detected noise peaks, in the case of ESC it will attach notches to each of four motor RPM values. Loop rate update changes the notch center frequency at the scheduler loop rate rather than at the default of 200Hz. If both double and triple notches are specified only double notches will take effect.", "DisplayName": "Harmonic Notch Filter options", "RebootRequired": "True", "User": "Advanced"}, "INS_HNTCH_REF": {"Description": "A reference value of zero disables dynamic updates on the Harmonic Notch Filter and a positive value enables dynamic updates on the Harmonic Notch Filter. For throttle-based scaling, this parameter is the reference value associated with the specified frequency to facilitate frequency scaling of the Harmonic Notch Filter. For RPM and ESC telemetry based tracking, this parameter is set to 1 to enable the Harmonic Notch Filter using the RPM sensor or ESC telemetry set to measure rotor speed. The sensor data is converted to Hz automatically for use in the Harmonic Notch Filter. This reference value may also be used to scale the sensor data, if required. For example, rpm sensor data is required to measure heli motor RPM. Therefore the reference value can be used to scale the RPM sensor to the rotor RPM.", "DisplayName": "Harmonic Notch Filter reference value", "Range": {"high": "1.0", "low": "0.0"}, "RebootRequired": "True", "User": "Advanced"}, "INS_LOG_BAT_CNT": {"Description": "Number of samples to take when logging streams of IMU sensor readings. Will be rounded down to a multiple of 32. This option takes effect on the next reboot.", "DisplayName": "sample count per batch", "Increment": "32", "RebootRequired": "True", "User": "Advanced"}, "INS_LOG_BAT_LGCT": {"Description": "Number of samples to push to count every INS_LOG_BAT_LGIN", "DisplayName": "logging count", "Increment": "1"}, "INS_LOG_BAT_LGIN": {"Description": "Interval between pushing samples to the AP_Logger log", "DisplayName": "logging interval", "Increment": "10", "Units": "ms"}, "INS_LOG_BAT_MASK": {"Bitmask": {"0": "IMU1", "1": "IMU2", "2": "IMU3"}, "Description": "Bitmap of which IMUs to log batch data for. This option takes effect on the next reboot.", "DisplayName": "Sensor Bitmask", "RebootRequired": "True", "User": "Advanced"}, "INS_LOG_BAT_OPT": {"Bitmask": {"0": "Sensor-Rate Logging (sample at full sensor rate seen by AP)", "1": "Sample post-filtering", "2": "Sample pre- and post-filter"}, "Description": "Options for the BatchSampler.", "DisplayName": "Batch Logging Options Mask", "User": "Advanced"}, "INS_POS1_X": {"Description": "X position of the first IMU Accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer X position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS1_Y": {"Description": "Y position of the first IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Y position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS1_Z": {"Description": "Z position of the first IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Z position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS2_X": {"Description": "X position of the second IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer X position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS2_Y": {"Description": "Y position of the second IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Y position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS2_Z": {"Description": "Z position of the second IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Z position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS3_X": {"Description": "X position of the third IMU accelerometer in body frame. Positive X is forward of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer X position", "Range": {"high": "10", "low": "-10"}, "Units": "m", "User": "Advanced"}, "INS_POS3_Y": {"Description": "Y position of the third IMU accelerometer in body frame. Positive Y is to the right of the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Y position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_POS3_Z": {"Description": "Z position of the third IMU accelerometer in body frame. Positive Z is down from the origin. Attention: The IMU should be located as close to the vehicle c.g. as practical so that the value of this parameter is minimised. Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise. If the IMU cannot be moved and velocity noise is a problem, a location closer to the IMU can be used as the body frame origin.", "DisplayName": "IMU accelerometer Z position", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "INS_RAW_LOG_OPT": {"Bitmask": {"0": "Log primary gyro only", "1": "Log all gyros", "2": "Post filter", "3": "Pre and post filter"}, "Description": "Raw logging options bitmask", "DisplayName": "Raw logging options", "User": "Advanced"}, "INS_STILL_THRESH": {"Description": "Threshold to tolerate vibration to determine if vehicle is motionless. This depends on the frame type and if there is a constant vibration due to motors before launch or after landing. Total motionless is about 0.05. Suggested values: Planes/rover use 0.1, multirotors use 1, tradHeli uses 5", "DisplayName": "Stillness threshold for detecting if we are moving", "Range": {"high": "50", "low": "0.05"}, "User": "Advanced"}, "INS_TCAL1_ACC1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_ACC1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_ACC1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_ACC2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_ACC2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_ACC2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_ACC3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_ACC3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_ACC3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_ENABLE": {"Description": "Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot", "DisplayName": "Enable temperature calibration", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "LearnCalibration"}}, "INS_TCAL1_GYR1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_GYR1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_GYR1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_GYR2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_GYR2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_GYR2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_GYR3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL1_GYR3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL1_GYR3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL1_TMAX": {"Calibration": "1", "Description": "The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration", "DisplayName": "Temperature calibration max", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL1_TMIN": {"Calibration": "1", "Description": "The minimum temperature that the calibration is valid for", "DisplayName": "Temperature calibration min", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL2_ACC1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_ACC1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_ACC1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_ACC2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_ACC2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_ACC2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_ACC3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_ACC3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_ACC3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_ENABLE": {"Description": "Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot", "DisplayName": "Enable temperature calibration", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "LearnCalibration"}}, "INS_TCAL2_GYR1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_GYR1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_GYR1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_GYR2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_GYR2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_GYR2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_GYR3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL2_GYR3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL2_GYR3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL2_TMAX": {"Calibration": "1", "Description": "The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration", "DisplayName": "Temperature calibration max", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL2_TMIN": {"Calibration": "1", "Description": "The minimum temperature that the calibration is valid for", "DisplayName": "Temperature calibration min", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL3_ACC1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_ACC1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_ACC1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_ACC2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_ACC2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_ACC2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_ACC3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_ACC3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_ACC3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Accelerometer 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_ENABLE": {"Description": "Enable the use of temperature calibration parameters for this IMU. For automatic learning set to 2 and also set the INS_TCALn_TMAX to the target temperature, then reboot", "DisplayName": "Enable temperature calibration", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "LearnCalibration"}}, "INS_TCAL3_GYR1_X": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_GYR1_Y": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_GYR1_Z": {"Calibration": "1", "Description": "This is the 1st order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 1st order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_GYR2_X": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_GYR2_Y": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_GYR2_Z": {"Calibration": "1", "Description": "This is the 2nd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 2nd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_GYR3_X": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient X axis", "User": "Advanced"}, "INS_TCAL3_GYR3_Y": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Y axis", "User": "Advanced"}, "INS_TCAL3_GYR3_Z": {"Calibration": "1", "Description": "This is the 3rd order temperature coefficient from a temperature calibration", "DisplayName": "Gyroscope 3rd order temperature coefficient Z axis", "User": "Advanced"}, "INS_TCAL3_TMAX": {"Calibration": "1", "Description": "The maximum temperature that the calibration is valid for. This must be at least 10 degrees above TMIN for calibration", "DisplayName": "Temperature calibration max", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL3_TMIN": {"Calibration": "1", "Description": "The minimum temperature that the calibration is valid for", "DisplayName": "Temperature calibration min", "Range": {"high": "80", "low": "-70"}, "Units": "degC", "User": "Advanced"}, "INS_TCAL_OPTIONS": {"Bitmask": {"0": "PersistTemps", "1": "PersistAccels"}, "Description": "This enables optional temperature calibration features. Setting of the Persist bits will save the temperature and/or accelerometer calibration parameters in the bootloader sector on the next update of the bootloader.", "DisplayName": "Options for temperature calibration", "User": "Advanced"}, "INS_TRIM_OPTION": {"Description": "Specifies how the accel cal routine determines the trims", "DisplayName": "Accel cal trim option", "User": "Advanced", "Values": {"0": "Don't adjust the trims", "1": "Assume first orientation was level", "2": "Assume ACC_BODYFIX is perfectly aligned to the vehicle"}}, "INS_USE": {"Description": "Use first IMU for attitude, velocity and position estimates", "DisplayName": "Use first IMU for attitude, velocity and position estimates", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS_USE2": {"Description": "Use second IMU for attitude, velocity and position estimates", "DisplayName": "Use second IMU for attitude, velocity and position estimates", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "INS_USE3": {"Description": "Use third IMU for attitude, velocity and position estimates", "DisplayName": "Use third IMU for attitude, velocity and position estimates", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "KDE_NPOLE": {"Description": "Sets the number of motor poles to calculate the correct RPM value", "DisplayName": "Number of motor poles"}, "KFF_RDDRMIX": {"Description": "Amount of rudder to add during aileron movement. Increase if nose initially yaws away from roll. Reduces adverse yaw.", "DisplayName": "Rudder Mix", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "KFF_THR2PTCH": {"Description": "Pitch up to add in proportion to throttle. 100% throttle will add this number of degrees to the pitch target.", "DisplayName": "Throttle to Pitch Mix", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "User": "Advanced"}, "LAND_ABORT_DEG": {"Description": "This parameter is used when using a rangefinder during landing for altitude correction from baro drift (RNGFND_LANDING=1) and the altitude correction indicates your actual altitude is higher than the intended slope path. Normally it would pitch down steeply but that can result in a crash with high airspeed so this allows remembering the baro offset and self-abort the landing and come around for another landing with the correct baro offset applied for a perfect slope. An auto-abort go-around will only happen once, next attempt will not auto-abort again. This operation happens entirely automatically in AUTO mode. This value is the delta degrees threshold to trigger the go-around compared to the original slope. Example: if set to 5 deg and the mission planned slope is 15 deg then if the new slope is 21 then it will go-around. Set to 0 to disable. Requires LAND_SLOPE_RCALC > 0.", "DisplayName": "Landing auto-abort slope threshold", "Increment": "0.1", "Range": {"high": "90", "low": "0"}, "Units": "deg", "User": "Advanced"}, "LAND_ABORT_THR": {"Description": "Allow a landing abort to trigger with an input throttle >= 90%. This works with or without stick-mixing enabled.", "DisplayName": "Landing abort using throttle", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "LAND_DISARMDELAY": {"Description": "After a landing has completed using a LAND waypoint, automatically disarm after this many seconds have passed. Use 0 to not disarm.", "DisplayName": "Landing disarm delay", "Increment": "1", "Range": {"high": "127", "low": "0"}, "Units": "s", "User": "Advanced"}, "LAND_DS_ABORTALT": {"Description": "The minimum altitude which the aircraft must be above to abort a deepstall landing", "DisplayName": "Deepstall minimum abort altitude", "Range": {"high": "50", "low": "0"}, "Units": "m", "User": "Advanced"}, "LAND_DS_AIL_SCL": {"Description": "A scalar to reduce or increase the aileron control", "DisplayName": "Aileron landing gain scalaing", "Range": {"high": "2.0", "low": "0"}, "User": "Advanced"}, "LAND_DS_APP_EXT": {"Description": "The horizontal distance from which the aircraft will approach before the stall", "DisplayName": "Deepstall approach extension", "Range": {"high": "200", "low": "10"}, "Units": "m", "User": "Advanced"}, "LAND_DS_ARSP_MAX": {"Description": "The maximum aispeed where the deepstall steering controller is allowed to have control", "DisplayName": "Deepstall enabled airspeed", "Range": {"high": "20", "low": "5"}, "Units": "m/s", "User": "Advanced"}, "LAND_DS_ARSP_MIN": {"Description": "Deepstall lowest airspeed where the deepstall controller isn't allowed full control", "DisplayName": "Deepstall minimum derating airspeed", "Range": {"high": "20", "low": "5"}, "Units": "m/s", "User": "Advanced"}, "LAND_DS_D": {"Description": "D gain", "DisplayName": "D gain", "User": "Standard"}, "LAND_DS_ELEV_PWM": {"Description": "The PWM value in microseconds for the elevator at full deflection in deepstall", "DisplayName": "Deepstall elevator PWM", "Range": {"high": "2100", "low": "900"}, "Units": "PWM", "User": "Advanced"}, "LAND_DS_I": {"Description": "I gain", "DisplayName": "I gain", "User": "Standard"}, "LAND_DS_IMAX": {"Description": "Maximum integrator value", "DisplayName": "IMax", "User": "Standard"}, "LAND_DS_L1": {"Description": "Deepstall L1 navigational controller period", "DisplayName": "Deepstall L1 period", "Range": {"high": "50", "low": "5"}, "Units": "s", "User": "Advanced"}, "LAND_DS_L1_I": {"Description": "Deepstall L1 integratior gain", "DisplayName": "Deepstall L1 I gain", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "LAND_DS_L1_TCON": {"Description": "Time constant for deepstall L1 control", "DisplayName": "Deepstall L1 time constant", "Range": {"high": "1", "low": "0"}, "Units": "s", "User": "Advanced"}, "LAND_DS_P": {"Description": "P gain", "DisplayName": "P gain", "User": "Standard"}, "LAND_DS_SLEW_SPD": {"Description": "The speed at which the elevator slews to deepstall", "DisplayName": "Deepstall slew speed", "Range": {"high": "2", "low": "0"}, "Units": "s", "User": "Advanced"}, "LAND_DS_SLOPE_A": {"Description": "The a component of distance = a*wind + b", "DisplayName": "Deepstall slope a", "User": "Advanced"}, "LAND_DS_SLOPE_B": {"Description": "The a component of distance = a*wind + b", "DisplayName": "Deepstall slope b", "User": "Advanced"}, "LAND_DS_V_DWN": {"Description": "The downward velocity of the aircraft while stalled", "DisplayName": "Deepstall velocity down", "Range": {"high": "20", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "LAND_DS_V_FWD": {"Description": "The forward velocity of the aircraft while stalled", "DisplayName": "Deepstall forward velocity", "Range": {"high": "20", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "LAND_DS_YAW_LIM": {"Description": "The yaw rate limit while navigating in deepstall", "DisplayName": "Deepstall yaw rate limit", "Range": {"high": "90", "low": "0"}, "Units": "deg/s", "User": "Advanced"}, "LAND_FLAP_PERCNT": {"Description": "The amount of flaps (as a percentage) to apply in the landing approach and flare of an automatic landing", "DisplayName": "Landing flap percentage", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "LAND_FLARE_AIM": {"Description": "This parameter controls how much the aim point is moved to allow for the time spent in the flare manoeuvre. When set to 100% the aim point is adjusted on the assumption that the flare sink rate controller instantly achieves the sink rate set by TECS_LAND_SINK. when set to 0%, no aim point adjustment is made. If the plane consistently touches down short of the aim point reduce the parameter and vice verse.", "DisplayName": "Flare aim point adjustment percentage.", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "LAND_FLARE_ALT": {"Description": "Altitude in autoland at which to lock heading and flare to the LAND_PITCH_DEG pitch. Note that this option is secondary to LAND_FLARE_SEC. For a good landing it preferable that the flare is triggered by LAND_FLARE_SEC.", "DisplayName": "Landing flare altitude", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m", "User": "Advanced"}, "LAND_FLARE_SEC": {"Description": "Vertical time before landing point at which to lock heading and flare with the motor stopped. This is vertical time, and is calculated based solely on the current height above the ground and the current descent rate. Set to 0 if you only wish to flare based on altitude (see LAND_FLARE_ALT).", "DisplayName": "Landing flare time", "Increment": "0.1", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Advanced"}, "LAND_OPTIONS": {"Bitmask": {"0": "honor min throttle during landing flare", "1": "Increase Target landing airspeed constraint From Trim Airspeed to AIRSPEED_MAX"}, "Description": "Bitmask of options to use with landing.", "DisplayName": "Landing options bitmask", "User": "Advanced"}, "LAND_PF_ALT": {"Description": "Altitude to trigger pre-flare flight stage where LAND_PF_ARSPD controls airspeed. The pre-flare flight stage trigger works just like LAND_FLARE_ALT but higher. Disabled when LAND_PF_ARSPD is 0.", "DisplayName": "Landing pre-flare altitude", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m", "User": "Advanced"}, "LAND_PF_ARSPD": {"Description": "Desired airspeed during pre-flare flight stage. This is useful to reduce airspeed just before the flare. Use 0 to disable.", "DisplayName": "Landing pre-flare airspeed", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "LAND_PF_SEC": {"Description": "Vertical time to ground to trigger pre-flare flight stage where LAND_PF_ARSPD controls airspeed. This pre-flare flight stage trigger works just like LAND_FLARE_SEC but earlier. Disabled when LAND_PF_ARSPD is 0.", "DisplayName": "Landing pre-flare time", "Increment": "0.1", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Advanced"}, "LAND_PITCH_DEG": {"Description": "Used in autoland to give the minimum pitch in the final stage of landing (after the flare). This parameter can be used to ensure that the final landing attitude is appropriate for the type of undercarriage on the aircraft. Note that it is a minimum pitch only - the landing code will control pitch above this value to try to achieve the configured landing sink rate.", "DisplayName": "Landing Pitch", "Increment": "10", "Range": {"high": "20", "low": "-20"}, "Units": "deg", "User": "Advanced"}, "LAND_SLOPE_RCALC": {"Description": "This parameter is used when using a rangefinder during landing for altitude correction from baro drift (RNGFND_LANDING=1) and the altitude correction indicates your altitude is lower than the intended slope path. This value is the threshold of the correction to re-calculate the landing approach slope. Set to zero to keep the original slope all the way down and any detected baro drift will be corrected by pitching/throttling up to snap back to resume the original slope path. Otherwise, when a rangefinder altitude correction exceeds this threshold it will trigger a slope re-calculate to give a shallower slope. This also smoothes out the approach when flying over objects such as trees. Recommend a value of 2m.", "DisplayName": "Landing slope re-calc threshold", "Increment": "0.5", "Range": {"high": "5", "low": "0"}, "Units": "m", "User": "Advanced"}, "LAND_THEN_NEUTRL": {"Description": "When enabled, after an autoland and auto-disarm via LAND_DISARMDELAY happens then set all servos to neutral. This is helpful when an aircraft has a rough landing upside down or a crazy angle causing the servos to strain.", "DisplayName": "Set servos to neutral after landing", "User": "Advanced", "Values": {"0": "Disabled", "1": "Servos to Neutral", "2": "Servos to Zero PWM"}}, "LAND_THR_SLEW": {"Description": "This parameter sets the slew rate for the throttle during auto landing. When this is zero the THR_SLEWRATE parameter is used during landing. The value is a percentage throttle change per second, so a value of 20 means to advance the throttle over 5 seconds on landing. Values below 50 are not recommended as it may cause a stall when airspeed is low and you can not throttle up fast enough.", "DisplayName": "Landing throttle slew rate", "Increment": "1", "Range": {"high": "127", "low": "0"}, "Units": "%", "User": "Standard"}, "LAND_TYPE": {"Description": "Specifies the auto-landing type to use", "DisplayName": "Auto-landing type", "User": "Standard", "Values": {"0": "Standard Glide Slope", "1": "Deepstall"}}, "LAND_WIND_COMP": {"Description": "This param controls how much headwind compensation is used when landing. Headwind speed component multiplied by this parameter is added to TECS_LAND_ARSPD command. Set to Zero to disable. Note: The target landing airspeed command is still limited to AIRSPEED_MAX.", "DisplayName": "Headwind Compensation when Landing", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "LEVEL_ROLL_LIMIT": {"Description": "This controls the maximum bank angle in degrees during flight modes where level flight is desired, such as in the final stages of landing, and during auto takeoff. This should be a small angle (such as 5 degrees) to prevent a wing hitting the runway during takeoff or landing. Setting this to zero will completely disable heading hold on auto takeoff while below 5 meters and during the flare portion of a final landing approach.", "DisplayName": "Level flight roll limit", "Increment": "1", "Range": {"high": "45", "low": "0"}, "Units": "deg", "User": "Standard"}, "LGR_DEPLOY_ALT": {"Description": "Altitude where the landing gear will be deployed. This should be lower than the RETRACT_ALT. If zero then altitude is not used for deploying landing gear. Only applies when vehicle is armed.", "DisplayName": "Landing gear deployment altitude", "Increment": "1", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "LGR_DEPLOY_PIN": {"Description": "Pin number to use for detection of gear deployment. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Chassis deployment feedback pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "LGR_DEPLOY_POL": {"Description": "Polarity for feedback pin. If this is 1 then the pin should be high when gear are deployed. If set to 0 then then deployed gear level is low.", "DisplayName": "Chassis deployment feedback pin polarity", "User": "Standard", "Values": {"0": "Low", "1": "High"}}, "LGR_ENABLE": {"Description": "Enable landing gear control", "DisplayName": "Enable landing gear", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "LGR_OPTIONS": {"Bitmask": {"0": "Retract after Takeoff", "1": "Deploy during Land"}, "Description": "Options to retract or deploy landing gear in Auto or Guided mode", "DisplayName": "Landing gear auto retract/deploy options", "User": "Standard"}, "LGR_RETRACT_ALT": {"Description": "Altitude where the landing gear will be retracted. This should be higher than the DEPLOY_ALT. If zero then altitude is not used for retracting landing gear. Only applies when vehicle is armed.", "DisplayName": "Landing gear retract altitude", "Increment": "1", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "LGR_STARTUP": {"Description": "Landing Gear Startup behaviour control", "DisplayName": "Landing Gear Startup position", "User": "Standard", "Values": {"0": "WaitForPilotInput", "1": "Retract", "2": "Deploy"}}, "LGR_WOW_PIN": {"Description": "Pin number to use for feedback of weight on wheels condition. If set to -1 feedback is disabled. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Weight on wheels feedback pin", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "LGR_WOW_POL": {"Description": "Polarity for feedback pin. If this is 1 then the pin should be high when there is weight on wheels. If set to 0 then then weight on wheels level is low.", "DisplayName": "Weight on wheels feedback pin polarity", "User": "Standard", "Values": {"0": "Low", "1": "High"}}, "LOG_BACKEND_TYPE": {"Bitmask": {"0": "File", "1": "MAVLink", "2": "Block"}, "Description": "Bitmap of what Logger backend types to enable. Block-based logging is available on SITL and boards with dataflash chips. Multiple backends can be selected.", "DisplayName": "AP_Logger Backend Storage type", "User": "Standard"}, "LOG_BITMASK": {"Bitmask": {"0": "Fast Attitude", "1": "Medium Attitude", "10": "Compass", "11": "TECS", "12": "Camera", "13": "RC Input-Output", "14": "Rangefinder", "19": "Raw IMU", "2": "GPS", "20": "Fullrate Attitude", "21": "Video Stabilization", "22": "Fullrate Notch", "3": "Performance", "4": "Control Tuning", "5": "Navigation Tuning", "7": "IMU", "8": "Mission Commands", "9": "Battery Monitor"}, "Description": "Bitmap of what on-board log types to enable. This value is made up of the sum of each of the log types you want to be saved. It is usually best just to enable all basic log types by setting this to 65535.", "DisplayName": "Log bitmask", "User": "Advanced"}, "LOG_BLK_RATEMAX": {"Description": "This sets the maximum rate that streaming log messages will be logged to the block backend. A value of zero means that rate limiting is disabled.", "DisplayName": "Maximum logging rate for block backend", "Increment": "0.1", "Range": {"high": "1000", "low": "0"}, "Units": "Hz", "User": "Standard"}, "LOG_DARM_RATEMAX": {"Description": "This sets the maximum rate that streaming log messages will be logged to any backend when disarmed. A value of zero means that the normal backend rate limit is applied.", "DisplayName": "Maximum logging rate when disarmed", "Increment": "0.1", "Range": {"high": "1000", "low": "0"}, "Units": "Hz", "User": "Standard"}, "LOG_DISARMED": {"Description": "If LOG_DISARMED is set to 1 then logging will be enabled at all times including when disarmed. Logging before arming can make for very large logfiles but can help a lot when tracking down startup issues and is necessary if logging of EKF replay data is selected via the LOG_REPLAY parameter. If LOG_DISARMED is set to 2, then logging will be enabled when disarmed, but not if a USB connection is detected. This can be used to prevent unwanted data logs being generated when the vehicle is connected via USB for log downloading or parameter changes. If LOG_DISARMED is set to 3 then logging will happen while disarmed, but if the vehicle never arms then the logs using the filesystem backend will be discarded on the next boot.", "DisplayName": "Enable logging while disarmed", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled", "2": "Disabled on USB connection", "3": "Discard log on reboot if never armed"}}, "LOG_FILE_BUFSIZE": {"Description": "The File and Block backends use a buffer to store data before writing to the block device. Raising this value may reduce \"gaps\" in your SD card logging. This buffer size may be reduced depending on available memory. PixHawk requires at least 4 kilobytes. Maximum value available here is 64 kilobytes.", "DisplayName": "Maximum AP_Logger File and Block Backend buffer size (in kilobytes)", "User": "Standard"}, "LOG_FILE_DSRMROT": {"Description": "When set, the current log file is closed when the vehicle is disarmed. If LOG_DISARMED is set then a fresh log will be opened. Applies to the File and Block logging backends.", "DisplayName": "Stop logging to current file on disarm", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "LOG_FILE_MB_FREE": {"Description": "Set this such that the free space is larger than your largest typical flight log", "DisplayName": "Old logs on the SD card will be deleted to maintain this amount of free space", "Range": {"high": "1000", "low": "10"}, "Units": "MB", "User": "Standard"}, "LOG_FILE_RATEMAX": {"Description": "This sets the maximum rate that streaming log messages will be logged to the file backend. A value of zero means that rate limiting is disabled.", "DisplayName": "Maximum logging rate for file backend", "Increment": "0.1", "Range": {"high": "1000", "low": "0"}, "Units": "Hz", "User": "Standard"}, "LOG_FILE_TIMEOUT": {"Description": "This controls the amount of time before failing writes to a log file cause the file to be closed and logging stopped.", "DisplayName": "Timeout before giving up on file writes", "Units": "s", "User": "Standard"}, "LOG_MAV_BUFSIZE": {"Description": "Maximum amount of memory to allocate to AP_Logger-over-mavlink", "DisplayName": "Maximum AP_Logger MAVLink Backend buffer size", "Units": "kB", "User": "Advanced"}, "LOG_MAV_RATEMAX": {"Description": "This sets the maximum rate that streaming log messages will be logged to the mavlink backend. A value of zero means that rate limiting is disabled.", "DisplayName": "Maximum logging rate for mavlink backend", "Increment": "0.1", "Range": {"high": "1000", "low": "0"}, "Units": "Hz", "User": "Standard"}, "LOG_MAX_FILES": {"Description": "This sets the maximum number of log file that will be written on dataflash or sd card before starting to rotate log number. Limit is capped at 500 logs.", "DisplayName": "Maximum number of log files", "Increment": "1", "Range": {"high": "500", "low": "2"}, "RebootRequired": "True", "User": "Advanced"}, "LOG_REPLAY": {"Description": "If LOG_REPLAY is set to 1 then the EKF2 and EKF3 state estimators will log detailed information needed for diagnosing problems with the Kalman filter. LOG_DISARMED must be set to 1 or 2 or else the log will not contain the pre-flight data required for replay testing of the EKF's. It is suggested that you also raise LOG_FILE_BUFSIZE to give more buffer space for logging and use a high quality microSD card to ensure no sensor data is lost.", "DisplayName": "Enable logging of information needed for Replay", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "MANUAL_RCMASK": {"Bitmask": {"0": "Chan1", "1": "Chan2", "10": "Chan11", "11": "Chan12", "12": "Chan13", "13": "Chan14", "14": "Chan15", "15": "Chan16", "2": "Chan3", "3": "Chan4", "4": "Chan5", "5": "Chan6", "6": "Chan7", "7": "Chan8", "8": "Chan9", "9": "Chan10"}, "Description": "Mask of R/C channels to pass directly to corresponding output channel when in MANUAL mode. When in any mode except MANUAL the channels selected with this option behave normally. This parameter is designed to allow for complex mixing strategies to be used for MANUAL flight using transmitter based mixing. Note that when this option is used you need to be very careful with pre-flight checks to ensure that the output is correct both in MANUAL and non-MANUAL modes.", "DisplayName": "Manual R/C pass-through mask", "User": "Advanced"}, "MAN_EXPO_PITCH": {"Description": "Percentage exponential for pitch input in MANUAL, ACRO and TRAINING modes", "DisplayName": "Manual input expo for pitch", "Increment": "1", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "MAN_EXPO_ROLL": {"Description": "Percentage exponential for roll input in MANUAL, ACRO and TRAINING modes", "DisplayName": "Manual control expo for roll", "Increment": "1", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "MAN_EXPO_RUDDER": {"Description": "Percentage exponential for rudder input in MANUAL, ACRO and TRAINING modes", "DisplayName": "Manual input expo for rudder", "Increment": "1", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "MIN_GROUNDSPEED": {"Description": "Minimum ground speed in cm/s when under airspeed control", "DisplayName": "Minimum ground speed", "Units": "m/s", "User": "Advanced"}, "MIS_OPTIONS": {"Bitmask": {"0": "Clear Mission on reboot", "1": "Use distance to land calc on battery failsafe", "2": "ContinueAfterLand"}, "Description": "Bitmask of what options to use in missions.", "DisplayName": "Mission options bitmask", "User": "Advanced"}, "MIS_RESTART": {"Description": "Controls mission starting point when entering Auto mode (either restart from beginning of mission or resume from last command run)", "DisplayName": "Mission Restart when entering Auto mode", "User": "Advanced", "Values": {"0": "Resume Mission", "1": "Restart Mission"}}, "MIS_TOTAL": {"Description": "The number of mission mission items that has been loaded by the ground station. Do not change this manually.", "DisplayName": "Total mission commands", "Increment": "1", "Range": {"high": "32766", "low": "0"}, "ReadOnly": "True", "User": "Advanced"}, "MIXING_GAIN": {"Description": "The gain for the Vtail and elevon output mixers. The default is 0.5, which ensures that the mixer doesn't saturate, allowing both input channels to go to extremes while retaining control over the output. Hardware mixers often have a 1.0 gain, which gives more servo throw, but can saturate. If you don't have enough throw on your servos with VTAIL_OUTPUT or ELEVON_OUTPUT enabled then you can raise the gain using MIXING_GAIN. The mixer allows outputs in the range 900 to 2100 microseconds.", "DisplayName": "Mixing Gain", "Range": {"high": "1.2", "low": "0.5"}, "User": "Standard"}, "MIXING_OFFSET": {"Description": "The offset for the Vtail and elevon output mixers, as a percentage. This can be used in combination with MIXING_GAIN to configure how the control surfaces respond to input. The response to aileron or elevator input can be increased by setting this parameter to a positive or negative value. A common usage is to enter a positive value to increase the aileron response of the elevons of a flying wing. The default value of zero will leave the aileron-input response equal to the elevator-input response.", "DisplayName": "Mixing Offset", "Range": {"high": "1000", "low": "-1000"}, "Units": "d%", "User": "Standard"}, "MNT1_DEFLT_MODE": {"Description": "Mount default operating mode on startup and after control is returned from autopilot", "DisplayName": "Mount default operating mode", "User": "Standard", "Values": {"0": "Retracted", "1": "Neutral", "2": "MavLink Targeting", "3": "RC Targeting", "4": "GPS Point", "5": "SysID Target", "6": "Home Location"}}, "MNT1_DEVID": {"Description": "Mount device ID, taking into account its type, bus and instance", "DisplayName": "Mount Device ID", "User": "Advanced"}, "MNT1_LEAD_PTCH": {"Description": "Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot", "DisplayName": "Mount Pitch stabilization lead time", "Increment": ".005", "Range": {"high": "0.2", "low": "0.0"}, "Units": "s", "User": "Standard"}, "MNT1_LEAD_RLL": {"Description": "Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot", "DisplayName": "Mount Roll stabilization lead time", "Increment": ".005", "Range": {"high": "0.2", "low": "0.0"}, "Units": "s", "User": "Standard"}, "MNT1_NEUTRAL_X": {"Description": "Mount roll angle when in neutral position", "DisplayName": "Mount roll angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_NEUTRAL_Y": {"Description": "Mount pitch angle when in neutral position", "DisplayName": "Mount pitch angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_NEUTRAL_Z": {"Description": "Mount yaw angle when in neutral position", "DisplayName": "Mount yaw angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_OPTIONS": {"Bitmask": {"0": "RC lock state from previous mode"}, "Description": "Mount options bitmask", "DisplayName": "Mount options", "User": "Standard"}, "MNT1_PITCH_MAX": {"Description": "Mount Pitch angle maximum", "DisplayName": "Mount Pitch angle maximum", "Increment": "1", "Range": {"high": "90", "low": "-90"}, "Units": "deg", "User": "Standard"}, "MNT1_PITCH_MIN": {"Description": "Mount Pitch angle minimum", "DisplayName": "Mount Pitch angle minimum", "Increment": "1", "Range": {"high": "90", "low": "-90"}, "Units": "deg", "User": "Standard"}, "MNT1_RC_RATE": {"Description": "Pilot rate control's maximum rate. Set to zero to use angle control", "DisplayName": "Mount RC Rate", "Increment": "1", "Range": {"high": "90", "low": "0"}, "Units": "deg/s", "User": "Standard"}, "MNT1_RETRACT_X": {"Description": "Mount roll angle when in retracted position", "DisplayName": "Mount roll angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_RETRACT_Y": {"Description": "Mount pitch angle when in retracted position", "DisplayName": "Mount pitch angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_RETRACT_Z": {"Description": "Mount yaw angle when in retracted position", "DisplayName": "Mount yaw angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT1_ROLL_MAX": {"Description": "Mount Roll angle maximum", "DisplayName": "Mount Roll angle maximum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT1_ROLL_MIN": {"Description": "Mount Roll angle minimum", "DisplayName": "Mount Roll angle minimum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT1_SYSID_DFLT": {"Description": "Default Target sysID for the mount to point to", "DisplayName": "Mount Target sysID", "RebootRequired": "True", "User": "Standard"}, "MNT1_TYPE": {"Description": "Mount Type", "DisplayName": "Mount Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "Servo", "10": "Xacti", "11": "Viewpro", "2": "3DR Solo", "3": "Alexmos Serial", "4": "SToRM32 MAVLink", "5": "SToRM32 Serial", "6": "Gremsy", "7": "BrushlessPWM", "8": "Siyi", "9": "Scripting"}}, "MNT1_YAW_MAX": {"Description": "Mount Yaw angle maximum", "DisplayName": "Mount Yaw angle maximum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT1_YAW_MIN": {"Description": "Mount Yaw angle minimum", "DisplayName": "Mount Yaw angle minimum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT2_DEFLT_MODE": {"Description": "Mount default operating mode on startup and after control is returned from autopilot", "DisplayName": "Mount default operating mode", "User": "Standard", "Values": {"0": "Retracted", "1": "Neutral", "2": "MavLink Targeting", "3": "RC Targeting", "4": "GPS Point", "5": "SysID Target", "6": "Home Location"}}, "MNT2_DEVID": {"Description": "Mount device ID, taking into account its type, bus and instance", "DisplayName": "Mount Device ID", "User": "Advanced"}, "MNT2_LEAD_PTCH": {"Description": "Servo mount pitch angle output leads the vehicle angle by this amount of time based on current pitch rate. Increase until the servo is responsive but does not overshoot", "DisplayName": "Mount Pitch stabilization lead time", "Increment": ".005", "Range": {"high": "0.2", "low": "0.0"}, "Units": "s", "User": "Standard"}, "MNT2_LEAD_RLL": {"Description": "Servo mount roll angle output leads the vehicle angle by this amount of time based on current roll rate. Increase until the servo is responsive but does not overshoot", "DisplayName": "Mount Roll stabilization lead time", "Increment": ".005", "Range": {"high": "0.2", "low": "0.0"}, "Units": "s", "User": "Standard"}, "MNT2_NEUTRAL_X": {"Description": "Mount roll angle when in neutral position", "DisplayName": "Mount roll angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_NEUTRAL_Y": {"Description": "Mount pitch angle when in neutral position", "DisplayName": "Mount pitch angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_NEUTRAL_Z": {"Description": "Mount yaw angle when in neutral position", "DisplayName": "Mount yaw angle when in neutral position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_OPTIONS": {"Bitmask": {"0": "RC lock state from previous mode"}, "Description": "Mount options bitmask", "DisplayName": "Mount options", "User": "Standard"}, "MNT2_PITCH_MAX": {"Description": "Mount Pitch angle maximum", "DisplayName": "Mount Pitch angle maximum", "Increment": "1", "Range": {"high": "90", "low": "-90"}, "Units": "deg", "User": "Standard"}, "MNT2_PITCH_MIN": {"Description": "Mount Pitch angle minimum", "DisplayName": "Mount Pitch angle minimum", "Increment": "1", "Range": {"high": "90", "low": "-90"}, "Units": "deg", "User": "Standard"}, "MNT2_RC_RATE": {"Description": "Pilot rate control's maximum rate. Set to zero to use angle control", "DisplayName": "Mount RC Rate", "Increment": "1", "Range": {"high": "90", "low": "0"}, "Units": "deg/s", "User": "Standard"}, "MNT2_RETRACT_X": {"Description": "Mount roll angle when in retracted position", "DisplayName": "Mount roll angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_RETRACT_Y": {"Description": "Mount pitch angle when in retracted position", "DisplayName": "Mount pitch angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_RETRACT_Z": {"Description": "Mount yaw angle when in retracted position", "DisplayName": "Mount yaw angle when in retracted position", "Increment": "1", "Range": {"high": "180.0", "low": "-180.0"}, "Units": "deg", "User": "Standard"}, "MNT2_ROLL_MAX": {"Description": "Mount Roll angle maximum", "DisplayName": "Mount Roll angle maximum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT2_ROLL_MIN": {"Description": "Mount Roll angle minimum", "DisplayName": "Mount Roll angle minimum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT2_SYSID_DFLT": {"Description": "Default Target sysID for the mount to point to", "DisplayName": "Mount Target sysID", "RebootRequired": "True", "User": "Standard"}, "MNT2_TYPE": {"Description": "Mount Type", "DisplayName": "Mount Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "Servo", "10": "Xacti", "11": "Viewpro", "2": "3DR Solo", "3": "Alexmos Serial", "4": "SToRM32 MAVLink", "5": "SToRM32 Serial", "6": "Gremsy", "7": "BrushlessPWM", "8": "Siyi", "9": "Scripting"}}, "MNT2_YAW_MAX": {"Description": "Mount Yaw angle maximum", "DisplayName": "Mount Yaw angle maximum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MNT2_YAW_MIN": {"Description": "Mount Yaw angle minimum", "DisplayName": "Mount Yaw angle minimum", "Increment": "1", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "MSP_OPTIONS": {"Bitmask": {"0": "EnableTelemetryMode", "1": "unused", "2": "EnableBTFLFonts"}, "Description": "A bitmask to set some MSP specific options: EnableTelemetryMode-allows \"push\" mode telemetry when only rx line of OSD ic connected to autopilot, EnableBTFLFonts-uses indexes corresponding to Betaflight fonts if OSD uses those instead of ArduPilot fonts.", "DisplayName": "MSP OSD Options", "User": "Standard"}, "MSP_OSD_NCELLS": {"Description": "Used for average cell voltage calculation", "DisplayName": "Cell count override", "User": "Standard", "Values": {"0": "Auto", "1": "1", "10": "10", "11": "11", "12": "12", "13": "13", "14": "14", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8", "9": "9"}}, "NAVL1_DAMPING": {"Description": "Damping ratio for L1 control. Increase this in increments of 0.05 if you are getting overshoot in path tracking. You should not need a value below 0.7 or above 0.85.", "DisplayName": "L1 control damping ratio", "Increment": "0.05", "Range": {"high": "1.0", "low": "0.6"}, "User": "Advanced"}, "NAVL1_LIM_BANK": {"Description": "The sealevel bank angle limit for a continous loiter. (Used to calculate airframe loading limits at higher altitudes). Setting to 0, will instead just scale the loiter radius directly", "DisplayName": "Loiter Radius Bank Angle Limit", "Range": {"high": "89", "low": "0"}, "Units": "deg", "User": "Advanced"}, "NAVL1_PERIOD": {"Description": "Period in seconds of L1 tracking loop. This parameter is the primary control for agressiveness of turns in auto mode. This needs to be larger for less responsive airframes. The default of 20 is quite conservative, but for most RC aircraft will lead to reasonable flight. For smaller more agile aircraft a value closer to 15 is appropriate, or even as low as 10 for some very agile aircraft. When tuning, change this value in small increments, as a value that is much too small (say 5 or 10 below the right value) can lead to very radical turns, and a risk of stalling.", "DisplayName": "L1 control period", "Increment": "1", "Range": {"high": "60", "low": "1"}, "Units": "s", "User": "Standard"}, "NAVL1_XTRACK_I": {"Description": "Crosstrack error integrator gain. This gain is applied to the crosstrack error to ensure it converges to zero. Set to zero to disable. Smaller values converge slower, higher values will cause crosstrack error oscillation.", "DisplayName": "L1 control crosstrack integrator gain", "Increment": "0.01", "Range": {"high": "0.1", "low": "0"}, "User": "Advanced"}, "NET_DHCP": {"Description": "Enable/Disable DHCP client", "DisplayName": "DHCP client", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "NET_ENABLE": {"Description": "Networking Enable", "DisplayName": "Networking Enable", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "NET_GWADDR0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_GWADDR1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_GWADDR2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_GWADDR3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_IPADDR0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_IPADDR1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_IPADDR2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_IPADDR3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_MACADDR0": {"Description": "MAC address 1st byte", "DisplayName": "MAC Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_MACADDR1": {"Description": "MAC address 2nd byte", "DisplayName": "MAC Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_MACADDR2": {"Description": "MAC address 3rd byte", "DisplayName": "MAC Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_MACADDR3": {"Description": "MAC address 4th byte", "DisplayName": "MAC Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_MACADDR4": {"Description": "MAC address 5th byte", "DisplayName": "MAC Address 5th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_MACADDR5": {"Description": "MAC address 6th byte", "DisplayName": "MAC Address 6th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_NETMASK": {"Description": "Allows setting static subnet mask. The value is a count of consecutive bits. Examples: 24 = 255.255.255.0, 16 = 255.255.0.0", "DisplayName": "IP Subnet mask", "Range": {"high": "32", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_OPTIONS": {"Bitmask": {"0": "EnablePPP Ethernet gateway"}, "Description": "Networking options", "DisplayName": "Networking options", "RebootRequired": "True", "User": "Advanced"}, "NET_P1_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P1_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P1_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P1_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P1_PORT": {"Description": "Port number", "DisplayName": "Port number", "Range": {"high": "65535", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_P1_PROTOCOL": {"Description": "Networked serial port protocol", "DisplayName": "Protocol", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "NET_P1_TYPE": {"Description": "Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.", "DisplayName": "Port type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "UDP client", "2": "UDP server", "3": "TCP client", "4": "TCP server"}}, "NET_P2_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P2_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P2_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P2_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P2_PORT": {"Description": "Port number", "DisplayName": "Port number", "Range": {"high": "65535", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_P2_PROTOCOL": {"Description": "Networked serial port protocol", "DisplayName": "Protocol", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "NET_P2_TYPE": {"Description": "Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.", "DisplayName": "Port type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "UDP client", "2": "UDP server", "3": "TCP client", "4": "TCP server"}}, "NET_P3_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P3_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P3_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P3_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P3_PORT": {"Description": "Port number", "DisplayName": "Port number", "Range": {"high": "65535", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_P3_PROTOCOL": {"Description": "Networked serial port protocol", "DisplayName": "Protocol", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "NET_P3_TYPE": {"Description": "Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.", "DisplayName": "Port type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "UDP client", "2": "UDP server", "3": "TCP client", "4": "TCP server"}}, "NET_P4_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P4_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P4_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P4_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_P4_PORT": {"Description": "Port number", "DisplayName": "Port number", "Range": {"high": "65535", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "NET_P4_PROTOCOL": {"Description": "Networked serial port protocol", "DisplayName": "Protocol", "RebootRequired": "True", "User": "Advanced", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "NET_P4_TYPE": {"Description": "Port type for network serial port. For the two client types a valid destination IP address must be set. For the two server types either 0.0.0.0 or a local address can be used. The UDP client type will use broadcast if the IP is set to 255.255.255.255 and will use UDP multicast if the IP is in the multicast address range.", "DisplayName": "Port type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Disabled", "1": "UDP client", "2": "UDP server", "3": "TCP client", "4": "TCP server"}}, "NET_REMPPP_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_REMPPP_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_REMPPP_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_REMPPP_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_TESTS": {"Bitmask": {"0": "UDP echo test", "1": "TCP echo test", "2": "TCP discard test"}, "Description": "Enable/Disable networking tests", "DisplayName": "Test enable flags", "RebootRequired": "True", "User": "Advanced"}, "NET_TEST_IP0": {"Description": "IPv4 address. Example: 192.xxx.xxx.xxx", "DisplayName": "IPv4 Address 1st byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_TEST_IP1": {"Description": "IPv4 address. Example: xxx.168.xxx.xxx", "DisplayName": "IPv4 Address 2nd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_TEST_IP2": {"Description": "IPv4 address. Example: xxx.xxx.13.xxx", "DisplayName": "IPv4 Address 3rd byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NET_TEST_IP3": {"Description": "IPv4 address. Example: xxx.xxx.xxx.14", "DisplayName": "IPv4 Address 4th byte", "Range": {"high": "255", "low": "0"}, "RebootRequired": "True"}, "NMEA_MSG_EN": {"Bitmask": {"0": "GPGGA", "1": "GPRMC", "2": "PASHR"}, "Description": "This is a bitmask of enabled NMEA messages. All messages will be sent consecutively at the same rate interval", "DisplayName": "Messages Enable bitmask", "User": "Standard"}, "NMEA_RATE_MS": {"Description": "NMEA Output rate. This controls the interval at which all the enabled NMEA messages are sent. Most NMEA systems expect 100ms (10Hz) or slower.", "DisplayName": "NMEA Output rate", "Increment": "1", "Range": {"high": "2000", "low": "20"}, "Units": "ms", "User": "Standard"}, "NTF_BUZZ_ON_LVL": {"Description": "Specifies pin level that indicates buzzer should play", "DisplayName": "Buzzer-on pin logic level", "User": "Advanced", "Values": {"0": "LowIsOn", "1": "HighIsOn"}}, "NTF_BUZZ_PIN": {"Description": "Enables to connect active buzzer to arbitrary pin. Requires 3-pin buzzer or additional MOSFET! Some the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Buzzer pin", "User": "Advanced", "Values": {"-1": "Disabled"}}, "NTF_BUZZ_TYPES": {"Bitmask": {"0": "Built-in buzzer", "1": "DShot", "2": "DroneCAN"}, "Description": "Controls what types of Buzzer will be enabled", "DisplayName": "Buzzer Driver Types", "User": "Advanced"}, "NTF_BUZZ_VOLUME": {"Description": "Control the volume of the buzzer", "DisplayName": "Buzzer volume", "Range": {"high": "100", "low": "0"}, "Units": "%"}, "NTF_DISPLAY_TYPE": {"Description": "This sets up the type of on-board I2C display. Disabled by default.", "DisplayName": "Type of on-board I2C display", "User": "Advanced", "Values": {"0": "Disable", "1": "ssd1306", "10": "SITL", "2": "sh1106"}}, "NTF_LED_BRIGHT": {"Description": "Select the RGB LED brightness level. When USB is connected brightness will never be higher than low regardless of the setting.", "DisplayName": "LED Brightness", "User": "Advanced", "Values": {"0": "Off", "1": "Low", "2": "Medium", "3": "High"}}, "NTF_LED_LEN": {"Description": "The number of Serial LED's to use for notifications (NeoPixel's and ProfiLED)", "DisplayName": "Serial LED String Length", "Range": {"high": "32", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "NTF_LED_OVERRIDE": {"Description": "Specifies the source for the colours and brightness for the LED. OutbackChallenge conforms to the MedicalExpress (https://uavchallenge.org/medical-express/) rules, essentially \"Green\" is disarmed (safe-to-approach), \"Red\" is armed (not safe-to-approach). Traffic light is a simplified color set, red when armed, yellow when the safety switch is not surpressing outputs (but disarmed), and green when outputs are surpressed and disarmed, the LED will blink faster if disarmed and failing arming checks.", "DisplayName": "Specifies colour source for the RGBLed", "User": "Advanced", "Values": {"0": "Standard", "1": "MAVLink/Scripting/AP_Periph", "2": "OutbackChallenge", "3": "TrafficLight"}}, "NTF_LED_TYPES": {"Bitmask": {"0": "Built-in LED", "1": "Internal ToshibaLED", "10": "Scripting", "11": "DShot", "12": "ProfiLED_SPI", "13": "LP5562 External", "14": "LP5562 Internal", "15": "IS31FL3195 External", "16": "IS31FL3195 Internal", "17": "DiscreteRGB", "18": "NeoPixelRGB", "2": "External ToshibaLED", "3": "External PCA9685", "4": "Oreo LED", "5": "DroneCAN", "6": "NCP5623 External", "7": "NCP5623 Internal", "8": "NeoPixel", "9": "ProfiLED"}, "Description": "Controls what types of LEDs will be enabled", "DisplayName": "LED Driver Types", "User": "Advanced"}, "NTF_OREO_THEME": {"Description": "Enable/Disable Solo Oreo LED driver, 0 to disable, 1 for Aircraft theme, 2 for Rover theme", "DisplayName": "OreoLED Theme", "User": "Advanced", "Values": {"0": "Disabled", "1": "Aircraft", "2": "Rover"}}, "ONESHOT_MASK": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "2": "Servo 3", "3": "Servo 4", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Mask of output channels to use oneshot on", "DisplayName": "Oneshot output mask", "User": "Advanced"}, "OSD1_ACRVOLT_EN": {"Description": "Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "ACRVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ACRVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "ACRVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ACRVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "ACRVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ALTITUDE_EN": {"Description": "Enables display of altitude AGL", "DisplayName": "ALTITUDE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ALTITUDE_X": {"Description": "Horizontal position on screen", "DisplayName": "ALTITUDE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ALTITUDE_Y": {"Description": "Vertical position on screen", "DisplayName": "ALTITUDE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ARMING_EN": {"Description": "Displays arming status (MSP OSD only)", "DisplayName": "ARMING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ARMING_X": {"Description": "Horizontal position on screen", "DisplayName": "ARMING_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ARMING_Y": {"Description": "Vertical position on screen", "DisplayName": "ARMING_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ASPD1_EN": {"Description": "Displays airspeed reported directly from primary airspeed sensor", "DisplayName": "ASPD1_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ASPD1_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD1_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ASPD1_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD1_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ASPD2_EN": {"Description": "Displays airspeed reported directly from secondary airspeed sensor", "DisplayName": "ASPD2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ASPD2_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD2_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ASPD2_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD2_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ASPEED_EN": {"Description": "Displays airspeed value being used by TECS (fused value)", "DisplayName": "ASPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ASPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ASPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ATEMP_EN": {"Description": "Displays temperature reported by primary airspeed sensor", "DisplayName": "ATEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ATEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ATEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ATEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ATEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_AVGCELLV_EN": {"Description": "Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "AVGCELLV_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_AVGCELLV_X": {"Description": "Horizontal position on screen", "DisplayName": "AVGCELLV_X", "Range": {"high": "59", "low": "0"}}, "OSD1_AVGCELLV_Y": {"Description": "Vertical position on screen", "DisplayName": "AVGCELLV_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BAT2USED_EN": {"Description": "Displays secondary battery mAh consumed", "DisplayName": "BAT2USED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BAT2USED_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2USED_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BAT2USED_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2USED_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BAT2_VLT_EN": {"Description": "Displays battery2 voltage", "DisplayName": "BAT2VLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BAT2_VLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2VLT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BAT2_VLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2VLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BATTBAR_EN": {"Description": "Displays battery usage bar (MSP OSD only)", "DisplayName": "BATT_BAR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BATTBAR_X": {"Description": "Horizontal position on screen", "DisplayName": "BATT_BAR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BATTBAR_Y": {"Description": "Vertical position on screen", "DisplayName": "BATT_BAR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BATUSED_EN": {"Description": "Displays primary battery mAh consumed", "DisplayName": "BATUSED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BATUSED_X": {"Description": "Horizontal position on screen", "DisplayName": "BATUSED_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BATUSED_Y": {"Description": "Vertical position on screen", "DisplayName": "BATUSED_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BAT_VOLT_EN": {"Description": "Displays main battery voltage", "DisplayName": "BATVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BAT_VOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BATVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BAT_VOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BATVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_BTEMP_EN": {"Description": "Displays temperature reported by secondary barometer", "DisplayName": "BTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_BTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "BTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD1_BTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "BTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CALLSIGN_EN": {"Description": "Displays callsign from callsign.txt on microSD card", "DisplayName": "CALLSIGN_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CALLSIGN_X": {"Description": "Horizontal position on screen", "DisplayName": "CALLSIGN_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CALLSIGN_Y": {"Description": "Vertical position on screen", "DisplayName": "CALLSIGN_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CELLVOLT_EN": {"Description": "Displays average cell voltage (MSP OSD only)", "DisplayName": "CELL_VOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CELLVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "CELL_VOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CELLVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "CELL_VOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD1_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD1_CLIMBEFF_EN": {"Description": "Displays climb efficiency (climb rate/current)", "DisplayName": "CLIMBEFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CLIMBEFF_X": {"Description": "Horizontal position on screen", "DisplayName": "CLIMBEFF_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CLIMBEFF_Y": {"Description": "Vertical position on screen", "DisplayName": "CLIMBEFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CLK_EN": {"Description": "Displays a clock panel based on AP_RTC local time", "DisplayName": "CLK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CLK_X": {"Description": "Horizontal position on screen", "DisplayName": "CLK_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CLK_Y": {"Description": "Vertical position on screen", "DisplayName": "CLK_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_COMPASS_EN": {"Description": "Enables display of compass rose", "DisplayName": "COMPASS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_COMPASS_X": {"Description": "Horizontal position on screen", "DisplayName": "COMPASS_X", "Range": {"high": "59", "low": "0"}}, "OSD1_COMPASS_Y": {"Description": "Vertical position on screen", "DisplayName": "COMPASS_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CRSSHAIR_EN": {"Description": "Displays artificial horizon crosshair (MSP OSD only)", "DisplayName": "CRSSHAIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CRSSHAIR_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CRSSHAIR_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CURRENT2_EN": {"Description": "Displays 2nd battery current", "DisplayName": "CURRENT2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CURRENT2_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT2_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CURRENT2_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT2_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_CURRENT_EN": {"Description": "Displays main battery current", "DisplayName": "CURRENT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_CURRENT_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_CURRENT_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_DIST_EN": {"Description": "Displays total distance flown", "DisplayName": "DIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_DIST_X": {"Description": "Horizontal position on screen", "DisplayName": "DIST_X", "Range": {"high": "59", "low": "0"}}, "OSD1_DIST_Y": {"Description": "Vertical position on screen", "DisplayName": "DIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_EFF_EN": {"Description": "Displays flight efficiency (mAh/km or /mi)", "DisplayName": "EFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_EFF_X": {"Description": "Horizontal position on screen", "DisplayName": "EFF_X", "Range": {"high": "59", "low": "0"}}, "OSD1_EFF_Y": {"Description": "Vertical position on screen", "DisplayName": "EFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ESCAMPS_EN": {"Description": "Displays first esc's current", "DisplayName": "ESCAMPS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ESCAMPS_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCAMPS_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ESCAMPS_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCAMPS_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ESCRPM_EN": {"Description": "Displays first esc's rpm", "DisplayName": "ESCRPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ESCRPM_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCRPM_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ESCRPM_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCRPM_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ESCTEMP_EN": {"Description": "Displays first esc's temp", "DisplayName": "ESCTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ESCTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ESCTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_FENCE_EN": {"Description": "Displays indication of fence enable and breach", "DisplayName": "FENCE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_FENCE_X": {"Description": "Horizontal position on screen", "DisplayName": "FENCE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_FENCE_Y": {"Description": "Vertical position on screen", "DisplayName": "FENCE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_FLTIME_EN": {"Description": "Displays total flight time", "DisplayName": "FLTIME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_FLTIME_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTIME_X", "Range": {"high": "59", "low": "0"}}, "OSD1_FLTIME_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTIME_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_FLTMODE_EN": {"Description": "Displays flight mode", "DisplayName": "FLTMODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_FLTMODE_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTMODE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_FLTMODE_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTMODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_FONT": {"Description": "Sets the font index for this screen (MSP DisplayPort only)", "DisplayName": "Sets the font index for this screen (MSP DisplayPort only)", "Range": {"high": "21", "low": "0"}, "User": "Standard"}, "OSD1_GPSLAT_EN": {"Description": "Displays GPS latitude", "DisplayName": "GPSLAT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_GPSLAT_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLAT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_GPSLAT_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLAT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_GPSLONG_EN": {"Description": "Displays GPS longitude", "DisplayName": "GPSLONG_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_GPSLONG_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLONG_X", "Range": {"high": "59", "low": "0"}}, "OSD1_GPSLONG_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLONG_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_GSPEED_EN": {"Description": "Displays GPS ground speed", "DisplayName": "GSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_GSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "GSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD1_GSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "GSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HDOP_EN": {"Description": "Displays Horizontal Dilution Of Position", "DisplayName": "HDOP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HDOP_X": {"Description": "Horizontal position on screen", "DisplayName": "HDOP_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HDOP_Y": {"Description": "Vertical position on screen", "DisplayName": "HDOP_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HEADING_EN": {"Description": "Displays heading", "DisplayName": "HEADING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HEADING_X": {"Description": "Horizontal position on screen", "DisplayName": "HEADING_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HEADING_Y": {"Description": "Vertical position on screen", "DisplayName": "HEADING_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HOMEDIR_EN": {"Description": "Displays relative direction to HOME (MSP OSD only)", "DisplayName": "HOMEDIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HOMEDIR_X": {"Description": "Horizontal position on screen", "DisplayName": "HOMEDIR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HOMEDIR_Y": {"Description": "Vertical position on screen", "DisplayName": "HOMEDIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HOMEDIST_EN": {"Description": "Displays distance from HOME (MSP OSD only)", "DisplayName": "HOMEDIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HOMEDIST_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HOMEDIST_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HOME_EN": {"Description": "Displays distance and relative direction to HOME", "DisplayName": "HOME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HOME_X": {"Description": "Horizontal position on screen", "DisplayName": "HOME_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HOME_Y": {"Description": "Vertical position on screen", "DisplayName": "HOME_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_HORIZON_EN": {"Description": "Displays artificial horizon", "DisplayName": "HORIZON_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_HORIZON_X": {"Description": "Horizontal position on screen", "DisplayName": "HORIZON_X", "Range": {"high": "59", "low": "0"}}, "OSD1_HORIZON_Y": {"Description": "Vertical position on screen", "DisplayName": "HORIZON_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_LINK_Q_EN": {"Description": "Displays Receiver link quality", "DisplayName": "LINK_Q_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_LINK_Q_X": {"Description": "Horizontal position on screen", "DisplayName": "LINK_Q_X", "Range": {"high": "59", "low": "0"}}, "OSD1_LINK_Q_Y": {"Description": "Vertical position on screen", "DisplayName": "LINK_Q_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_MESSAGE_EN": {"Description": "Displays Mavlink messages", "DisplayName": "MESSAGE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_MESSAGE_X": {"Description": "Horizontal position on screen", "DisplayName": "MESSAGE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_MESSAGE_Y": {"Description": "Vertical position on screen", "DisplayName": "MESSAGE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_PITCH_EN": {"Description": "Displays degrees of pitch from level", "DisplayName": "PITCH_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_PITCH_X": {"Description": "Horizontal position on screen", "DisplayName": "PITCH_X", "Range": {"high": "59", "low": "0"}}, "OSD1_PITCH_Y": {"Description": "Vertical position on screen", "DisplayName": "PITCH_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_PLUSCODE_EN": {"Description": "Displays pluscode (OLC) element", "DisplayName": "PLUSCODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_PLUSCODE_X": {"Description": "Horizontal position on screen", "DisplayName": "PLUSCODE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_PLUSCODE_Y": {"Description": "Vertical position on screen", "DisplayName": "PLUSCODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_POWER_EN": {"Description": "Displays power (MSP OSD only)", "DisplayName": "POWER_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_POWER_X": {"Description": "Horizontal position on screen", "DisplayName": "POWER_X", "Range": {"high": "59", "low": "0"}}, "OSD1_POWER_Y": {"Description": "Vertical position on screen", "DisplayName": "POWER_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RC_ANT_EN": {"Description": "Displays the current RC link active antenna", "DisplayName": "RC_ANT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RC_ANT_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_ANT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RC_ANT_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_ANT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RC_LQ_EN": {"Description": "Displays the RC link quality (uplink, 0 to 100%) and also RF mode if bit 7 of OSD_OPTIONS is set", "DisplayName": "RC_LQ_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RC_LQ_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_LQ_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RC_LQ_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_LQ_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RC_PWR_EN": {"Description": "Displays the RC link transmit (TX) power in mW or W, depending on level", "DisplayName": "RC_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RC_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RC_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RC_SNR_EN": {"Description": "Displays RC link signal to noise ratio in dB", "DisplayName": "RC_SNR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RC_SNR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_SNR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RC_SNR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_SNR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RESTVOLT_EN": {"Description": "Displays main battery resting voltage", "DisplayName": "RESTVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RESTVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "RESTVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RESTVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "RESTVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RNGF_EN": {"Description": "Displays a rangefinder's distance in cm", "DisplayName": "RNGF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RNGF_X": {"Description": "Horizontal position on screen", "DisplayName": "RNGF_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RNGF_Y": {"Description": "Vertical position on screen", "DisplayName": "RNGF_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_ROLL_EN": {"Description": "Displays degrees of roll from level", "DisplayName": "ROLL_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_ROLL_X": {"Description": "Horizontal position on screen", "DisplayName": "ROLL_X", "Range": {"high": "59", "low": "0"}}, "OSD1_ROLL_Y": {"Description": "Vertical position on screen", "DisplayName": "ROLL_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RPM_EN": {"Description": "Displays main rotor revs/min", "DisplayName": "RPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RPM_X": {"Description": "Horizontal position on screen", "DisplayName": "RPM_X", "Range": {"high": "29", "low": "0"}}, "OSD1_RPM_Y": {"Description": "Vertical position on screen", "DisplayName": "RPM_Y", "Range": {"high": "15", "low": "0"}}, "OSD1_RSSIDBM_EN": {"Description": "Displays RC link signal strength in dBm", "DisplayName": "RSSIDBM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RSSIDBM_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSIDBM_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RSSIDBM_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSIDBM_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_RSSI_EN": {"Description": "Displays RC signal strength", "DisplayName": "RSSI_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_RSSI_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSI_X", "Range": {"high": "59", "low": "0"}}, "OSD1_RSSI_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSI_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_SATS_EN": {"Description": "Displays number of acquired satellites", "DisplayName": "SATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_SATS_X": {"Description": "Horizontal position on screen", "DisplayName": "SATS_X", "Range": {"high": "59", "low": "0"}}, "OSD1_SATS_Y": {"Description": "Vertical position on screen", "DisplayName": "SATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_SIDEBARS_EN": {"Description": "Displays artificial horizon side bars", "DisplayName": "SIDEBARS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_SIDEBARS_X": {"Description": "Horizontal position on screen", "DisplayName": "SIDEBARS_X", "Range": {"high": "59", "low": "0"}}, "OSD1_SIDEBARS_Y": {"Description": "Vertical position on screen", "DisplayName": "SIDEBARS_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_STATS_EN": {"Description": "Displays flight stats", "DisplayName": "STATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_STATS_X": {"Description": "Horizontal position on screen", "DisplayName": "STATS_X", "Range": {"high": "59", "low": "0"}}, "OSD1_STATS_Y": {"Description": "Vertical position on screen", "DisplayName": "STATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_TEMP_EN": {"Description": "Displays temperature reported by primary barometer", "DisplayName": "TEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_TEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "TEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD1_TEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "TEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_TER_HGT_EN": {"Description": "Displays Height above terrain", "DisplayName": "TER_HGT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_TER_HGT_X": {"Description": "Horizontal position on screen", "DisplayName": "TER_HGT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_TER_HGT_Y": {"Description": "Vertical position on screen", "DisplayName": "TER_HGT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_THROTTLE_EN": {"Description": "Displays actual throttle percentage being sent to motor(s)", "DisplayName": "THROTTLE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_THROTTLE_X": {"Description": "Horizontal position on screen", "DisplayName": "THROTTLE_X", "Range": {"high": "59", "low": "0"}}, "OSD1_THROTTLE_Y": {"Description": "Vertical position on screen", "DisplayName": "THROTTLE_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_TXT_RES": {"Description": "Sets the overlay text resolution for this screen to either SD 30x16 or HD 50x18/60x22 (MSP DisplayPort only)", "DisplayName": "Sets the overlay text resolution (MSP DisplayPort only)", "User": "Standard", "Values": {"0": "30x16", "1": "50x18", "2": "60x22"}}, "OSD1_VSPEED_EN": {"Description": "Displays climb rate", "DisplayName": "VSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_VSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "VSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD1_VSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "VSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_VTX_PWR_EN": {"Description": "Displays VTX Power", "DisplayName": "VTX_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_VTX_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "VTX_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD1_VTX_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "VTX_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_WAYPOINT_EN": {"Description": "Displays bearing and distance to next waypoint", "DisplayName": "WAYPOINT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_WAYPOINT_X": {"Description": "Horizontal position on screen", "DisplayName": "WAYPOINT_X", "Range": {"high": "59", "low": "0"}}, "OSD1_WAYPOINT_Y": {"Description": "Vertical position on screen", "DisplayName": "WAYPOINT_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_WIND_EN": {"Description": "Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted", "DisplayName": "WIND_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_WIND_X": {"Description": "Horizontal position on screen", "DisplayName": "WIND_X", "Range": {"high": "59", "low": "0"}}, "OSD1_WIND_Y": {"Description": "Vertical position on screen", "DisplayName": "WIND_Y", "Range": {"high": "21", "low": "0"}}, "OSD1_XTRACK_EN": {"Description": "Displays crosstrack error", "DisplayName": "XTRACK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD1_XTRACK_X": {"Description": "Horizontal position on screen", "DisplayName": "XTRACK_X", "Range": {"high": "59", "low": "0"}}, "OSD1_XTRACK_Y": {"Description": "Vertical position on screen", "DisplayName": "XTRACK_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ACRVOLT_EN": {"Description": "Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "ACRVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ACRVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "ACRVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ACRVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "ACRVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ALTITUDE_EN": {"Description": "Enables display of altitude AGL", "DisplayName": "ALTITUDE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ALTITUDE_X": {"Description": "Horizontal position on screen", "DisplayName": "ALTITUDE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ALTITUDE_Y": {"Description": "Vertical position on screen", "DisplayName": "ALTITUDE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ARMING_EN": {"Description": "Displays arming status (MSP OSD only)", "DisplayName": "ARMING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ARMING_X": {"Description": "Horizontal position on screen", "DisplayName": "ARMING_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ARMING_Y": {"Description": "Vertical position on screen", "DisplayName": "ARMING_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ASPD1_EN": {"Description": "Displays airspeed reported directly from primary airspeed sensor", "DisplayName": "ASPD1_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ASPD1_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD1_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ASPD1_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD1_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ASPD2_EN": {"Description": "Displays airspeed reported directly from secondary airspeed sensor", "DisplayName": "ASPD2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ASPD2_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD2_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ASPD2_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD2_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ASPEED_EN": {"Description": "Displays airspeed value being used by TECS (fused value)", "DisplayName": "ASPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ASPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ASPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ATEMP_EN": {"Description": "Displays temperature reported by primary airspeed sensor", "DisplayName": "ATEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ATEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ATEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ATEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ATEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_AVGCELLV_EN": {"Description": "Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "AVGCELLV_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_AVGCELLV_X": {"Description": "Horizontal position on screen", "DisplayName": "AVGCELLV_X", "Range": {"high": "59", "low": "0"}}, "OSD2_AVGCELLV_Y": {"Description": "Vertical position on screen", "DisplayName": "AVGCELLV_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BAT2USED_EN": {"Description": "Displays secondary battery mAh consumed", "DisplayName": "BAT2USED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BAT2USED_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2USED_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BAT2USED_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2USED_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BAT2_VLT_EN": {"Description": "Displays battery2 voltage", "DisplayName": "BAT2VLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BAT2_VLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2VLT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BAT2_VLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2VLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BATTBAR_EN": {"Description": "Displays battery usage bar (MSP OSD only)", "DisplayName": "BATT_BAR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BATTBAR_X": {"Description": "Horizontal position on screen", "DisplayName": "BATT_BAR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BATTBAR_Y": {"Description": "Vertical position on screen", "DisplayName": "BATT_BAR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BATUSED_EN": {"Description": "Displays primary battery mAh consumed", "DisplayName": "BATUSED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BATUSED_X": {"Description": "Horizontal position on screen", "DisplayName": "BATUSED_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BATUSED_Y": {"Description": "Vertical position on screen", "DisplayName": "BATUSED_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BAT_VOLT_EN": {"Description": "Displays main battery voltage", "DisplayName": "BATVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BAT_VOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BATVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BAT_VOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BATVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_BTEMP_EN": {"Description": "Displays temperature reported by secondary barometer", "DisplayName": "BTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_BTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "BTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD2_BTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "BTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CALLSIGN_EN": {"Description": "Displays callsign from callsign.txt on microSD card", "DisplayName": "CALLSIGN_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CALLSIGN_X": {"Description": "Horizontal position on screen", "DisplayName": "CALLSIGN_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CALLSIGN_Y": {"Description": "Vertical position on screen", "DisplayName": "CALLSIGN_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CELLVOLT_EN": {"Description": "Displays average cell voltage (MSP OSD only)", "DisplayName": "CELL_VOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CELLVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "CELL_VOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CELLVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "CELL_VOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD2_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD2_CLIMBEFF_EN": {"Description": "Displays climb efficiency (climb rate/current)", "DisplayName": "CLIMBEFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CLIMBEFF_X": {"Description": "Horizontal position on screen", "DisplayName": "CLIMBEFF_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CLIMBEFF_Y": {"Description": "Vertical position on screen", "DisplayName": "CLIMBEFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CLK_EN": {"Description": "Displays a clock panel based on AP_RTC local time", "DisplayName": "CLK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CLK_X": {"Description": "Horizontal position on screen", "DisplayName": "CLK_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CLK_Y": {"Description": "Vertical position on screen", "DisplayName": "CLK_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_COMPASS_EN": {"Description": "Enables display of compass rose", "DisplayName": "COMPASS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_COMPASS_X": {"Description": "Horizontal position on screen", "DisplayName": "COMPASS_X", "Range": {"high": "59", "low": "0"}}, "OSD2_COMPASS_Y": {"Description": "Vertical position on screen", "DisplayName": "COMPASS_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CRSSHAIR_EN": {"Description": "Displays artificial horizon crosshair (MSP OSD only)", "DisplayName": "CRSSHAIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CRSSHAIR_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CRSSHAIR_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CURRENT2_EN": {"Description": "Displays 2nd battery current", "DisplayName": "CURRENT2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CURRENT2_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT2_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CURRENT2_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT2_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_CURRENT_EN": {"Description": "Displays main battery current", "DisplayName": "CURRENT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_CURRENT_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_CURRENT_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_DIST_EN": {"Description": "Displays total distance flown", "DisplayName": "DIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_DIST_X": {"Description": "Horizontal position on screen", "DisplayName": "DIST_X", "Range": {"high": "59", "low": "0"}}, "OSD2_DIST_Y": {"Description": "Vertical position on screen", "DisplayName": "DIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_EFF_EN": {"Description": "Displays flight efficiency (mAh/km or /mi)", "DisplayName": "EFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_EFF_X": {"Description": "Horizontal position on screen", "DisplayName": "EFF_X", "Range": {"high": "59", "low": "0"}}, "OSD2_EFF_Y": {"Description": "Vertical position on screen", "DisplayName": "EFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ESCAMPS_EN": {"Description": "Displays first esc's current", "DisplayName": "ESCAMPS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ESCAMPS_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCAMPS_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ESCAMPS_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCAMPS_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ESCRPM_EN": {"Description": "Displays first esc's rpm", "DisplayName": "ESCRPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ESCRPM_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCRPM_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ESCRPM_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCRPM_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ESCTEMP_EN": {"Description": "Displays first esc's temp", "DisplayName": "ESCTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ESCTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ESCTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_FENCE_EN": {"Description": "Displays indication of fence enable and breach", "DisplayName": "FENCE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_FENCE_X": {"Description": "Horizontal position on screen", "DisplayName": "FENCE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_FENCE_Y": {"Description": "Vertical position on screen", "DisplayName": "FENCE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_FLTIME_EN": {"Description": "Displays total flight time", "DisplayName": "FLTIME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_FLTIME_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTIME_X", "Range": {"high": "59", "low": "0"}}, "OSD2_FLTIME_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTIME_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_FLTMODE_EN": {"Description": "Displays flight mode", "DisplayName": "FLTMODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_FLTMODE_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTMODE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_FLTMODE_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTMODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_FONT": {"Description": "Sets the font index for this screen (MSP DisplayPort only)", "DisplayName": "Sets the font index for this screen (MSP DisplayPort only)", "Range": {"high": "21", "low": "0"}, "User": "Standard"}, "OSD2_GPSLAT_EN": {"Description": "Displays GPS latitude", "DisplayName": "GPSLAT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_GPSLAT_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLAT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_GPSLAT_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLAT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_GPSLONG_EN": {"Description": "Displays GPS longitude", "DisplayName": "GPSLONG_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_GPSLONG_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLONG_X", "Range": {"high": "59", "low": "0"}}, "OSD2_GPSLONG_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLONG_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_GSPEED_EN": {"Description": "Displays GPS ground speed", "DisplayName": "GSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_GSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "GSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD2_GSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "GSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HDOP_EN": {"Description": "Displays Horizontal Dilution Of Position", "DisplayName": "HDOP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HDOP_X": {"Description": "Horizontal position on screen", "DisplayName": "HDOP_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HDOP_Y": {"Description": "Vertical position on screen", "DisplayName": "HDOP_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HEADING_EN": {"Description": "Displays heading", "DisplayName": "HEADING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HEADING_X": {"Description": "Horizontal position on screen", "DisplayName": "HEADING_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HEADING_Y": {"Description": "Vertical position on screen", "DisplayName": "HEADING_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HOMEDIR_EN": {"Description": "Displays relative direction to HOME (MSP OSD only)", "DisplayName": "HOMEDIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HOMEDIR_X": {"Description": "Horizontal position on screen", "DisplayName": "HOMEDIR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HOMEDIR_Y": {"Description": "Vertical position on screen", "DisplayName": "HOMEDIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HOMEDIST_EN": {"Description": "Displays distance from HOME (MSP OSD only)", "DisplayName": "HOMEDIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HOMEDIST_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HOMEDIST_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HOME_EN": {"Description": "Displays distance and relative direction to HOME", "DisplayName": "HOME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HOME_X": {"Description": "Horizontal position on screen", "DisplayName": "HOME_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HOME_Y": {"Description": "Vertical position on screen", "DisplayName": "HOME_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_HORIZON_EN": {"Description": "Displays artificial horizon", "DisplayName": "HORIZON_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_HORIZON_X": {"Description": "Horizontal position on screen", "DisplayName": "HORIZON_X", "Range": {"high": "59", "low": "0"}}, "OSD2_HORIZON_Y": {"Description": "Vertical position on screen", "DisplayName": "HORIZON_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_LINK_Q_EN": {"Description": "Displays Receiver link quality", "DisplayName": "LINK_Q_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_LINK_Q_X": {"Description": "Horizontal position on screen", "DisplayName": "LINK_Q_X", "Range": {"high": "59", "low": "0"}}, "OSD2_LINK_Q_Y": {"Description": "Vertical position on screen", "DisplayName": "LINK_Q_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_MESSAGE_EN": {"Description": "Displays Mavlink messages", "DisplayName": "MESSAGE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_MESSAGE_X": {"Description": "Horizontal position on screen", "DisplayName": "MESSAGE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_MESSAGE_Y": {"Description": "Vertical position on screen", "DisplayName": "MESSAGE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_PITCH_EN": {"Description": "Displays degrees of pitch from level", "DisplayName": "PITCH_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_PITCH_X": {"Description": "Horizontal position on screen", "DisplayName": "PITCH_X", "Range": {"high": "59", "low": "0"}}, "OSD2_PITCH_Y": {"Description": "Vertical position on screen", "DisplayName": "PITCH_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_PLUSCODE_EN": {"Description": "Displays pluscode (OLC) element", "DisplayName": "PLUSCODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_PLUSCODE_X": {"Description": "Horizontal position on screen", "DisplayName": "PLUSCODE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_PLUSCODE_Y": {"Description": "Vertical position on screen", "DisplayName": "PLUSCODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_POWER_EN": {"Description": "Displays power (MSP OSD only)", "DisplayName": "POWER_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_POWER_X": {"Description": "Horizontal position on screen", "DisplayName": "POWER_X", "Range": {"high": "59", "low": "0"}}, "OSD2_POWER_Y": {"Description": "Vertical position on screen", "DisplayName": "POWER_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RC_ANT_EN": {"Description": "Displays the current RC link active antenna", "DisplayName": "RC_ANT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RC_ANT_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_ANT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RC_ANT_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_ANT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RC_LQ_EN": {"Description": "Displays the RC link quality (uplink, 0 to 100%) and also RF mode if bit 7 of OSD_OPTIONS is set", "DisplayName": "RC_LQ_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RC_LQ_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_LQ_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RC_LQ_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_LQ_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RC_PWR_EN": {"Description": "Displays the RC link transmit (TX) power in mW or W, depending on level", "DisplayName": "RC_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RC_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RC_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RC_SNR_EN": {"Description": "Displays RC link signal to noise ratio in dB", "DisplayName": "RC_SNR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RC_SNR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_SNR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RC_SNR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_SNR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RESTVOLT_EN": {"Description": "Displays main battery resting voltage", "DisplayName": "RESTVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RESTVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "RESTVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RESTVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "RESTVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RNGF_EN": {"Description": "Displays a rangefinder's distance in cm", "DisplayName": "RNGF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RNGF_X": {"Description": "Horizontal position on screen", "DisplayName": "RNGF_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RNGF_Y": {"Description": "Vertical position on screen", "DisplayName": "RNGF_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_ROLL_EN": {"Description": "Displays degrees of roll from level", "DisplayName": "ROLL_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_ROLL_X": {"Description": "Horizontal position on screen", "DisplayName": "ROLL_X", "Range": {"high": "59", "low": "0"}}, "OSD2_ROLL_Y": {"Description": "Vertical position on screen", "DisplayName": "ROLL_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RPM_EN": {"Description": "Displays main rotor revs/min", "DisplayName": "RPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RPM_X": {"Description": "Horizontal position on screen", "DisplayName": "RPM_X", "Range": {"high": "29", "low": "0"}}, "OSD2_RPM_Y": {"Description": "Vertical position on screen", "DisplayName": "RPM_Y", "Range": {"high": "15", "low": "0"}}, "OSD2_RSSIDBM_EN": {"Description": "Displays RC link signal strength in dBm", "DisplayName": "RSSIDBM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RSSIDBM_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSIDBM_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RSSIDBM_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSIDBM_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_RSSI_EN": {"Description": "Displays RC signal strength", "DisplayName": "RSSI_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_RSSI_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSI_X", "Range": {"high": "59", "low": "0"}}, "OSD2_RSSI_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSI_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_SATS_EN": {"Description": "Displays number of acquired satellites", "DisplayName": "SATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_SATS_X": {"Description": "Horizontal position on screen", "DisplayName": "SATS_X", "Range": {"high": "59", "low": "0"}}, "OSD2_SATS_Y": {"Description": "Vertical position on screen", "DisplayName": "SATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_SIDEBARS_EN": {"Description": "Displays artificial horizon side bars", "DisplayName": "SIDEBARS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_SIDEBARS_X": {"Description": "Horizontal position on screen", "DisplayName": "SIDEBARS_X", "Range": {"high": "59", "low": "0"}}, "OSD2_SIDEBARS_Y": {"Description": "Vertical position on screen", "DisplayName": "SIDEBARS_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_STATS_EN": {"Description": "Displays flight stats", "DisplayName": "STATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_STATS_X": {"Description": "Horizontal position on screen", "DisplayName": "STATS_X", "Range": {"high": "59", "low": "0"}}, "OSD2_STATS_Y": {"Description": "Vertical position on screen", "DisplayName": "STATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_TEMP_EN": {"Description": "Displays temperature reported by primary barometer", "DisplayName": "TEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_TEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "TEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD2_TEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "TEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_TER_HGT_EN": {"Description": "Displays Height above terrain", "DisplayName": "TER_HGT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_TER_HGT_X": {"Description": "Horizontal position on screen", "DisplayName": "TER_HGT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_TER_HGT_Y": {"Description": "Vertical position on screen", "DisplayName": "TER_HGT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_THROTTLE_EN": {"Description": "Displays actual throttle percentage being sent to motor(s)", "DisplayName": "THROTTLE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_THROTTLE_X": {"Description": "Horizontal position on screen", "DisplayName": "THROTTLE_X", "Range": {"high": "59", "low": "0"}}, "OSD2_THROTTLE_Y": {"Description": "Vertical position on screen", "DisplayName": "THROTTLE_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_TXT_RES": {"Description": "Sets the overlay text resolution for this screen to either SD 30x16 or HD 50x18/60x22 (MSP DisplayPort only)", "DisplayName": "Sets the overlay text resolution (MSP DisplayPort only)", "User": "Standard", "Values": {"0": "30x16", "1": "50x18", "2": "60x22"}}, "OSD2_VSPEED_EN": {"Description": "Displays climb rate", "DisplayName": "VSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_VSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "VSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD2_VSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "VSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_VTX_PWR_EN": {"Description": "Displays VTX Power", "DisplayName": "VTX_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_VTX_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "VTX_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD2_VTX_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "VTX_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_WAYPOINT_EN": {"Description": "Displays bearing and distance to next waypoint", "DisplayName": "WAYPOINT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_WAYPOINT_X": {"Description": "Horizontal position on screen", "DisplayName": "WAYPOINT_X", "Range": {"high": "59", "low": "0"}}, "OSD2_WAYPOINT_Y": {"Description": "Vertical position on screen", "DisplayName": "WAYPOINT_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_WIND_EN": {"Description": "Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted", "DisplayName": "WIND_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_WIND_X": {"Description": "Horizontal position on screen", "DisplayName": "WIND_X", "Range": {"high": "59", "low": "0"}}, "OSD2_WIND_Y": {"Description": "Vertical position on screen", "DisplayName": "WIND_Y", "Range": {"high": "21", "low": "0"}}, "OSD2_XTRACK_EN": {"Description": "Displays crosstrack error", "DisplayName": "XTRACK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD2_XTRACK_X": {"Description": "Horizontal position on screen", "DisplayName": "XTRACK_X", "Range": {"high": "59", "low": "0"}}, "OSD2_XTRACK_Y": {"Description": "Vertical position on screen", "DisplayName": "XTRACK_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ACRVOLT_EN": {"Description": "Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "ACRVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ACRVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "ACRVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ACRVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "ACRVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ALTITUDE_EN": {"Description": "Enables display of altitude AGL", "DisplayName": "ALTITUDE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ALTITUDE_X": {"Description": "Horizontal position on screen", "DisplayName": "ALTITUDE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ALTITUDE_Y": {"Description": "Vertical position on screen", "DisplayName": "ALTITUDE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ARMING_EN": {"Description": "Displays arming status (MSP OSD only)", "DisplayName": "ARMING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ARMING_X": {"Description": "Horizontal position on screen", "DisplayName": "ARMING_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ARMING_Y": {"Description": "Vertical position on screen", "DisplayName": "ARMING_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ASPD1_EN": {"Description": "Displays airspeed reported directly from primary airspeed sensor", "DisplayName": "ASPD1_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ASPD1_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD1_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ASPD1_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD1_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ASPD2_EN": {"Description": "Displays airspeed reported directly from secondary airspeed sensor", "DisplayName": "ASPD2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ASPD2_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD2_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ASPD2_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD2_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ASPEED_EN": {"Description": "Displays airspeed value being used by TECS (fused value)", "DisplayName": "ASPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ASPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ASPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ATEMP_EN": {"Description": "Displays temperature reported by primary airspeed sensor", "DisplayName": "ATEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ATEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ATEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ATEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ATEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_AVGCELLV_EN": {"Description": "Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "AVGCELLV_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_AVGCELLV_X": {"Description": "Horizontal position on screen", "DisplayName": "AVGCELLV_X", "Range": {"high": "59", "low": "0"}}, "OSD3_AVGCELLV_Y": {"Description": "Vertical position on screen", "DisplayName": "AVGCELLV_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BAT2USED_EN": {"Description": "Displays secondary battery mAh consumed", "DisplayName": "BAT2USED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BAT2USED_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2USED_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BAT2USED_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2USED_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BAT2_VLT_EN": {"Description": "Displays battery2 voltage", "DisplayName": "BAT2VLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BAT2_VLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2VLT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BAT2_VLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2VLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BATTBAR_EN": {"Description": "Displays battery usage bar (MSP OSD only)", "DisplayName": "BATT_BAR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BATTBAR_X": {"Description": "Horizontal position on screen", "DisplayName": "BATT_BAR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BATTBAR_Y": {"Description": "Vertical position on screen", "DisplayName": "BATT_BAR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BATUSED_EN": {"Description": "Displays primary battery mAh consumed", "DisplayName": "BATUSED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BATUSED_X": {"Description": "Horizontal position on screen", "DisplayName": "BATUSED_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BATUSED_Y": {"Description": "Vertical position on screen", "DisplayName": "BATUSED_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BAT_VOLT_EN": {"Description": "Displays main battery voltage", "DisplayName": "BATVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BAT_VOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BATVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BAT_VOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BATVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_BTEMP_EN": {"Description": "Displays temperature reported by secondary barometer", "DisplayName": "BTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_BTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "BTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD3_BTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "BTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CALLSIGN_EN": {"Description": "Displays callsign from callsign.txt on microSD card", "DisplayName": "CALLSIGN_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CALLSIGN_X": {"Description": "Horizontal position on screen", "DisplayName": "CALLSIGN_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CALLSIGN_Y": {"Description": "Vertical position on screen", "DisplayName": "CALLSIGN_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CELLVOLT_EN": {"Description": "Displays average cell voltage (MSP OSD only)", "DisplayName": "CELL_VOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CELLVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "CELL_VOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CELLVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "CELL_VOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD3_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD3_CLIMBEFF_EN": {"Description": "Displays climb efficiency (climb rate/current)", "DisplayName": "CLIMBEFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CLIMBEFF_X": {"Description": "Horizontal position on screen", "DisplayName": "CLIMBEFF_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CLIMBEFF_Y": {"Description": "Vertical position on screen", "DisplayName": "CLIMBEFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CLK_EN": {"Description": "Displays a clock panel based on AP_RTC local time", "DisplayName": "CLK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CLK_X": {"Description": "Horizontal position on screen", "DisplayName": "CLK_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CLK_Y": {"Description": "Vertical position on screen", "DisplayName": "CLK_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_COMPASS_EN": {"Description": "Enables display of compass rose", "DisplayName": "COMPASS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_COMPASS_X": {"Description": "Horizontal position on screen", "DisplayName": "COMPASS_X", "Range": {"high": "59", "low": "0"}}, "OSD3_COMPASS_Y": {"Description": "Vertical position on screen", "DisplayName": "COMPASS_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CRSSHAIR_EN": {"Description": "Displays artificial horizon crosshair (MSP OSD only)", "DisplayName": "CRSSHAIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CRSSHAIR_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CRSSHAIR_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CURRENT2_EN": {"Description": "Displays 2nd battery current", "DisplayName": "CURRENT2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CURRENT2_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT2_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CURRENT2_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT2_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_CURRENT_EN": {"Description": "Displays main battery current", "DisplayName": "CURRENT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_CURRENT_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_CURRENT_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_DIST_EN": {"Description": "Displays total distance flown", "DisplayName": "DIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_DIST_X": {"Description": "Horizontal position on screen", "DisplayName": "DIST_X", "Range": {"high": "59", "low": "0"}}, "OSD3_DIST_Y": {"Description": "Vertical position on screen", "DisplayName": "DIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_EFF_EN": {"Description": "Displays flight efficiency (mAh/km or /mi)", "DisplayName": "EFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_EFF_X": {"Description": "Horizontal position on screen", "DisplayName": "EFF_X", "Range": {"high": "59", "low": "0"}}, "OSD3_EFF_Y": {"Description": "Vertical position on screen", "DisplayName": "EFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ESCAMPS_EN": {"Description": "Displays first esc's current", "DisplayName": "ESCAMPS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ESCAMPS_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCAMPS_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ESCAMPS_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCAMPS_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ESCRPM_EN": {"Description": "Displays first esc's rpm", "DisplayName": "ESCRPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ESCRPM_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCRPM_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ESCRPM_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCRPM_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ESCTEMP_EN": {"Description": "Displays first esc's temp", "DisplayName": "ESCTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ESCTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ESCTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_FENCE_EN": {"Description": "Displays indication of fence enable and breach", "DisplayName": "FENCE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_FENCE_X": {"Description": "Horizontal position on screen", "DisplayName": "FENCE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_FENCE_Y": {"Description": "Vertical position on screen", "DisplayName": "FENCE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_FLTIME_EN": {"Description": "Displays total flight time", "DisplayName": "FLTIME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_FLTIME_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTIME_X", "Range": {"high": "59", "low": "0"}}, "OSD3_FLTIME_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTIME_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_FLTMODE_EN": {"Description": "Displays flight mode", "DisplayName": "FLTMODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_FLTMODE_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTMODE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_FLTMODE_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTMODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_FONT": {"Description": "Sets the font index for this screen (MSP DisplayPort only)", "DisplayName": "Sets the font index for this screen (MSP DisplayPort only)", "Range": {"high": "21", "low": "0"}, "User": "Standard"}, "OSD3_GPSLAT_EN": {"Description": "Displays GPS latitude", "DisplayName": "GPSLAT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_GPSLAT_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLAT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_GPSLAT_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLAT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_GPSLONG_EN": {"Description": "Displays GPS longitude", "DisplayName": "GPSLONG_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_GPSLONG_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLONG_X", "Range": {"high": "59", "low": "0"}}, "OSD3_GPSLONG_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLONG_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_GSPEED_EN": {"Description": "Displays GPS ground speed", "DisplayName": "GSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_GSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "GSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD3_GSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "GSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HDOP_EN": {"Description": "Displays Horizontal Dilution Of Position", "DisplayName": "HDOP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HDOP_X": {"Description": "Horizontal position on screen", "DisplayName": "HDOP_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HDOP_Y": {"Description": "Vertical position on screen", "DisplayName": "HDOP_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HEADING_EN": {"Description": "Displays heading", "DisplayName": "HEADING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HEADING_X": {"Description": "Horizontal position on screen", "DisplayName": "HEADING_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HEADING_Y": {"Description": "Vertical position on screen", "DisplayName": "HEADING_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HOMEDIR_EN": {"Description": "Displays relative direction to HOME (MSP OSD only)", "DisplayName": "HOMEDIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HOMEDIR_X": {"Description": "Horizontal position on screen", "DisplayName": "HOMEDIR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HOMEDIR_Y": {"Description": "Vertical position on screen", "DisplayName": "HOMEDIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HOMEDIST_EN": {"Description": "Displays distance from HOME (MSP OSD only)", "DisplayName": "HOMEDIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HOMEDIST_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HOMEDIST_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HOME_EN": {"Description": "Displays distance and relative direction to HOME", "DisplayName": "HOME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HOME_X": {"Description": "Horizontal position on screen", "DisplayName": "HOME_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HOME_Y": {"Description": "Vertical position on screen", "DisplayName": "HOME_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_HORIZON_EN": {"Description": "Displays artificial horizon", "DisplayName": "HORIZON_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_HORIZON_X": {"Description": "Horizontal position on screen", "DisplayName": "HORIZON_X", "Range": {"high": "59", "low": "0"}}, "OSD3_HORIZON_Y": {"Description": "Vertical position on screen", "DisplayName": "HORIZON_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_LINK_Q_EN": {"Description": "Displays Receiver link quality", "DisplayName": "LINK_Q_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_LINK_Q_X": {"Description": "Horizontal position on screen", "DisplayName": "LINK_Q_X", "Range": {"high": "59", "low": "0"}}, "OSD3_LINK_Q_Y": {"Description": "Vertical position on screen", "DisplayName": "LINK_Q_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_MESSAGE_EN": {"Description": "Displays Mavlink messages", "DisplayName": "MESSAGE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_MESSAGE_X": {"Description": "Horizontal position on screen", "DisplayName": "MESSAGE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_MESSAGE_Y": {"Description": "Vertical position on screen", "DisplayName": "MESSAGE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_PITCH_EN": {"Description": "Displays degrees of pitch from level", "DisplayName": "PITCH_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_PITCH_X": {"Description": "Horizontal position on screen", "DisplayName": "PITCH_X", "Range": {"high": "59", "low": "0"}}, "OSD3_PITCH_Y": {"Description": "Vertical position on screen", "DisplayName": "PITCH_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_PLUSCODE_EN": {"Description": "Displays pluscode (OLC) element", "DisplayName": "PLUSCODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_PLUSCODE_X": {"Description": "Horizontal position on screen", "DisplayName": "PLUSCODE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_PLUSCODE_Y": {"Description": "Vertical position on screen", "DisplayName": "PLUSCODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_POWER_EN": {"Description": "Displays power (MSP OSD only)", "DisplayName": "POWER_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_POWER_X": {"Description": "Horizontal position on screen", "DisplayName": "POWER_X", "Range": {"high": "59", "low": "0"}}, "OSD3_POWER_Y": {"Description": "Vertical position on screen", "DisplayName": "POWER_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RC_ANT_EN": {"Description": "Displays the current RC link active antenna", "DisplayName": "RC_ANT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RC_ANT_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_ANT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RC_ANT_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_ANT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RC_LQ_EN": {"Description": "Displays the RC link quality (uplink, 0 to 100%) and also RF mode if bit 7 of OSD_OPTIONS is set", "DisplayName": "RC_LQ_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RC_LQ_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_LQ_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RC_LQ_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_LQ_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RC_PWR_EN": {"Description": "Displays the RC link transmit (TX) power in mW or W, depending on level", "DisplayName": "RC_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RC_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RC_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RC_SNR_EN": {"Description": "Displays RC link signal to noise ratio in dB", "DisplayName": "RC_SNR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RC_SNR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_SNR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RC_SNR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_SNR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RESTVOLT_EN": {"Description": "Displays main battery resting voltage", "DisplayName": "RESTVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RESTVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "RESTVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RESTVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "RESTVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RNGF_EN": {"Description": "Displays a rangefinder's distance in cm", "DisplayName": "RNGF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RNGF_X": {"Description": "Horizontal position on screen", "DisplayName": "RNGF_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RNGF_Y": {"Description": "Vertical position on screen", "DisplayName": "RNGF_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_ROLL_EN": {"Description": "Displays degrees of roll from level", "DisplayName": "ROLL_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_ROLL_X": {"Description": "Horizontal position on screen", "DisplayName": "ROLL_X", "Range": {"high": "59", "low": "0"}}, "OSD3_ROLL_Y": {"Description": "Vertical position on screen", "DisplayName": "ROLL_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RPM_EN": {"Description": "Displays main rotor revs/min", "DisplayName": "RPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RPM_X": {"Description": "Horizontal position on screen", "DisplayName": "RPM_X", "Range": {"high": "29", "low": "0"}}, "OSD3_RPM_Y": {"Description": "Vertical position on screen", "DisplayName": "RPM_Y", "Range": {"high": "15", "low": "0"}}, "OSD3_RSSIDBM_EN": {"Description": "Displays RC link signal strength in dBm", "DisplayName": "RSSIDBM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RSSIDBM_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSIDBM_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RSSIDBM_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSIDBM_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_RSSI_EN": {"Description": "Displays RC signal strength", "DisplayName": "RSSI_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_RSSI_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSI_X", "Range": {"high": "59", "low": "0"}}, "OSD3_RSSI_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSI_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_SATS_EN": {"Description": "Displays number of acquired satellites", "DisplayName": "SATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_SATS_X": {"Description": "Horizontal position on screen", "DisplayName": "SATS_X", "Range": {"high": "59", "low": "0"}}, "OSD3_SATS_Y": {"Description": "Vertical position on screen", "DisplayName": "SATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_SIDEBARS_EN": {"Description": "Displays artificial horizon side bars", "DisplayName": "SIDEBARS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_SIDEBARS_X": {"Description": "Horizontal position on screen", "DisplayName": "SIDEBARS_X", "Range": {"high": "59", "low": "0"}}, "OSD3_SIDEBARS_Y": {"Description": "Vertical position on screen", "DisplayName": "SIDEBARS_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_STATS_EN": {"Description": "Displays flight stats", "DisplayName": "STATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_STATS_X": {"Description": "Horizontal position on screen", "DisplayName": "STATS_X", "Range": {"high": "59", "low": "0"}}, "OSD3_STATS_Y": {"Description": "Vertical position on screen", "DisplayName": "STATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_TEMP_EN": {"Description": "Displays temperature reported by primary barometer", "DisplayName": "TEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_TEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "TEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD3_TEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "TEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_TER_HGT_EN": {"Description": "Displays Height above terrain", "DisplayName": "TER_HGT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_TER_HGT_X": {"Description": "Horizontal position on screen", "DisplayName": "TER_HGT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_TER_HGT_Y": {"Description": "Vertical position on screen", "DisplayName": "TER_HGT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_THROTTLE_EN": {"Description": "Displays actual throttle percentage being sent to motor(s)", "DisplayName": "THROTTLE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_THROTTLE_X": {"Description": "Horizontal position on screen", "DisplayName": "THROTTLE_X", "Range": {"high": "59", "low": "0"}}, "OSD3_THROTTLE_Y": {"Description": "Vertical position on screen", "DisplayName": "THROTTLE_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_TXT_RES": {"Description": "Sets the overlay text resolution for this screen to either SD 30x16 or HD 50x18/60x22 (MSP DisplayPort only)", "DisplayName": "Sets the overlay text resolution (MSP DisplayPort only)", "User": "Standard", "Values": {"0": "30x16", "1": "50x18", "2": "60x22"}}, "OSD3_VSPEED_EN": {"Description": "Displays climb rate", "DisplayName": "VSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_VSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "VSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD3_VSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "VSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_VTX_PWR_EN": {"Description": "Displays VTX Power", "DisplayName": "VTX_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_VTX_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "VTX_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD3_VTX_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "VTX_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_WAYPOINT_EN": {"Description": "Displays bearing and distance to next waypoint", "DisplayName": "WAYPOINT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_WAYPOINT_X": {"Description": "Horizontal position on screen", "DisplayName": "WAYPOINT_X", "Range": {"high": "59", "low": "0"}}, "OSD3_WAYPOINT_Y": {"Description": "Vertical position on screen", "DisplayName": "WAYPOINT_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_WIND_EN": {"Description": "Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted", "DisplayName": "WIND_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_WIND_X": {"Description": "Horizontal position on screen", "DisplayName": "WIND_X", "Range": {"high": "59", "low": "0"}}, "OSD3_WIND_Y": {"Description": "Vertical position on screen", "DisplayName": "WIND_Y", "Range": {"high": "21", "low": "0"}}, "OSD3_XTRACK_EN": {"Description": "Displays crosstrack error", "DisplayName": "XTRACK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD3_XTRACK_X": {"Description": "Horizontal position on screen", "DisplayName": "XTRACK_X", "Range": {"high": "59", "low": "0"}}, "OSD3_XTRACK_Y": {"Description": "Vertical position on screen", "DisplayName": "XTRACK_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ACRVOLT_EN": {"Description": "Displays resting voltage for the average cell. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "ACRVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ACRVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "ACRVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ACRVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "ACRVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ALTITUDE_EN": {"Description": "Enables display of altitude AGL", "DisplayName": "ALTITUDE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ALTITUDE_X": {"Description": "Horizontal position on screen", "DisplayName": "ALTITUDE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ALTITUDE_Y": {"Description": "Vertical position on screen", "DisplayName": "ALTITUDE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ARMING_EN": {"Description": "Displays arming status (MSP OSD only)", "DisplayName": "ARMING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ARMING_X": {"Description": "Horizontal position on screen", "DisplayName": "ARMING_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ARMING_Y": {"Description": "Vertical position on screen", "DisplayName": "ARMING_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ASPD1_EN": {"Description": "Displays airspeed reported directly from primary airspeed sensor", "DisplayName": "ASPD1_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ASPD1_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD1_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ASPD1_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD1_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ASPD2_EN": {"Description": "Displays airspeed reported directly from secondary airspeed sensor", "DisplayName": "ASPD2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ASPD2_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPD2_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ASPD2_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPD2_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ASPEED_EN": {"Description": "Displays airspeed value being used by TECS (fused value)", "DisplayName": "ASPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ASPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "ASPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ASPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "ASPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ATEMP_EN": {"Description": "Displays temperature reported by primary airspeed sensor", "DisplayName": "ATEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ATEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ATEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ATEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ATEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_AVGCELLV_EN": {"Description": "Displays average cell voltage. WARNING: this can be inaccurate if the cell count is not detected or set properly. If the the battery is far from fully charged the detected cell count might not be accurate if auto cell count detection is used (OSD_CELL_COUNT=0).", "DisplayName": "AVGCELLV_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_AVGCELLV_X": {"Description": "Horizontal position on screen", "DisplayName": "AVGCELLV_X", "Range": {"high": "59", "low": "0"}}, "OSD4_AVGCELLV_Y": {"Description": "Vertical position on screen", "DisplayName": "AVGCELLV_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BAT2USED_EN": {"Description": "Displays secondary battery mAh consumed", "DisplayName": "BAT2USED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BAT2USED_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2USED_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BAT2USED_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2USED_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BAT2_VLT_EN": {"Description": "Displays battery2 voltage", "DisplayName": "BAT2VLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BAT2_VLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BAT2VLT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BAT2_VLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BAT2VLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BATTBAR_EN": {"Description": "Displays battery usage bar (MSP OSD only)", "DisplayName": "BATT_BAR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BATTBAR_X": {"Description": "Horizontal position on screen", "DisplayName": "BATT_BAR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BATTBAR_Y": {"Description": "Vertical position on screen", "DisplayName": "BATT_BAR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BATUSED_EN": {"Description": "Displays primary battery mAh consumed", "DisplayName": "BATUSED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BATUSED_X": {"Description": "Horizontal position on screen", "DisplayName": "BATUSED_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BATUSED_Y": {"Description": "Vertical position on screen", "DisplayName": "BATUSED_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BAT_VOLT_EN": {"Description": "Displays main battery voltage", "DisplayName": "BATVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BAT_VOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "BATVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BAT_VOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "BATVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_BTEMP_EN": {"Description": "Displays temperature reported by secondary barometer", "DisplayName": "BTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_BTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "BTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD4_BTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "BTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CALLSIGN_EN": {"Description": "Displays callsign from callsign.txt on microSD card", "DisplayName": "CALLSIGN_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CALLSIGN_X": {"Description": "Horizontal position on screen", "DisplayName": "CALLSIGN_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CALLSIGN_Y": {"Description": "Vertical position on screen", "DisplayName": "CALLSIGN_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CELLVOLT_EN": {"Description": "Displays average cell voltage (MSP OSD only)", "DisplayName": "CELL_VOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CELLVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "CELL_VOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CELLVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "CELL_VOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD4_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD4_CLIMBEFF_EN": {"Description": "Displays climb efficiency (climb rate/current)", "DisplayName": "CLIMBEFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CLIMBEFF_X": {"Description": "Horizontal position on screen", "DisplayName": "CLIMBEFF_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CLIMBEFF_Y": {"Description": "Vertical position on screen", "DisplayName": "CLIMBEFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CLK_EN": {"Description": "Displays a clock panel based on AP_RTC local time", "DisplayName": "CLK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CLK_X": {"Description": "Horizontal position on screen", "DisplayName": "CLK_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CLK_Y": {"Description": "Vertical position on screen", "DisplayName": "CLK_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_COMPASS_EN": {"Description": "Enables display of compass rose", "DisplayName": "COMPASS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_COMPASS_X": {"Description": "Horizontal position on screen", "DisplayName": "COMPASS_X", "Range": {"high": "59", "low": "0"}}, "OSD4_COMPASS_Y": {"Description": "Vertical position on screen", "DisplayName": "COMPASS_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CRSSHAIR_EN": {"Description": "Displays artificial horizon crosshair (MSP OSD only)", "DisplayName": "CRSSHAIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CRSSHAIR_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CRSSHAIR_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "CRSSHAIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CURRENT2_EN": {"Description": "Displays 2nd battery current", "DisplayName": "CURRENT2_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CURRENT2_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT2_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CURRENT2_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT2_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_CURRENT_EN": {"Description": "Displays main battery current", "DisplayName": "CURRENT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_CURRENT_X": {"Description": "Horizontal position on screen", "DisplayName": "CURRENT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_CURRENT_Y": {"Description": "Vertical position on screen", "DisplayName": "CURRENT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_DIST_EN": {"Description": "Displays total distance flown", "DisplayName": "DIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_DIST_X": {"Description": "Horizontal position on screen", "DisplayName": "DIST_X", "Range": {"high": "59", "low": "0"}}, "OSD4_DIST_Y": {"Description": "Vertical position on screen", "DisplayName": "DIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_EFF_EN": {"Description": "Displays flight efficiency (mAh/km or /mi)", "DisplayName": "EFF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_EFF_X": {"Description": "Horizontal position on screen", "DisplayName": "EFF_X", "Range": {"high": "59", "low": "0"}}, "OSD4_EFF_Y": {"Description": "Vertical position on screen", "DisplayName": "EFF_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ESCAMPS_EN": {"Description": "Displays first esc's current", "DisplayName": "ESCAMPS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ESCAMPS_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCAMPS_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ESCAMPS_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCAMPS_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ESCRPM_EN": {"Description": "Displays first esc's rpm", "DisplayName": "ESCRPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ESCRPM_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCRPM_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ESCRPM_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCRPM_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ESCTEMP_EN": {"Description": "Displays first esc's temp", "DisplayName": "ESCTEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ESCTEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "ESCTEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ESCTEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "ESCTEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_FENCE_EN": {"Description": "Displays indication of fence enable and breach", "DisplayName": "FENCE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_FENCE_X": {"Description": "Horizontal position on screen", "DisplayName": "FENCE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_FENCE_Y": {"Description": "Vertical position on screen", "DisplayName": "FENCE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_FLTIME_EN": {"Description": "Displays total flight time", "DisplayName": "FLTIME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_FLTIME_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTIME_X", "Range": {"high": "59", "low": "0"}}, "OSD4_FLTIME_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTIME_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_FLTMODE_EN": {"Description": "Displays flight mode", "DisplayName": "FLTMODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_FLTMODE_X": {"Description": "Horizontal position on screen", "DisplayName": "FLTMODE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_FLTMODE_Y": {"Description": "Vertical position on screen", "DisplayName": "FLTMODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_FONT": {"Description": "Sets the font index for this screen (MSP DisplayPort only)", "DisplayName": "Sets the font index for this screen (MSP DisplayPort only)", "Range": {"high": "21", "low": "0"}, "User": "Standard"}, "OSD4_GPSLAT_EN": {"Description": "Displays GPS latitude", "DisplayName": "GPSLAT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_GPSLAT_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLAT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_GPSLAT_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLAT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_GPSLONG_EN": {"Description": "Displays GPS longitude", "DisplayName": "GPSLONG_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_GPSLONG_X": {"Description": "Horizontal position on screen", "DisplayName": "GPSLONG_X", "Range": {"high": "59", "low": "0"}}, "OSD4_GPSLONG_Y": {"Description": "Vertical position on screen", "DisplayName": "GPSLONG_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_GSPEED_EN": {"Description": "Displays GPS ground speed", "DisplayName": "GSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_GSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "GSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD4_GSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "GSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HDOP_EN": {"Description": "Displays Horizontal Dilution Of Position", "DisplayName": "HDOP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HDOP_X": {"Description": "Horizontal position on screen", "DisplayName": "HDOP_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HDOP_Y": {"Description": "Vertical position on screen", "DisplayName": "HDOP_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HEADING_EN": {"Description": "Displays heading", "DisplayName": "HEADING_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HEADING_X": {"Description": "Horizontal position on screen", "DisplayName": "HEADING_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HEADING_Y": {"Description": "Vertical position on screen", "DisplayName": "HEADING_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HOMEDIR_EN": {"Description": "Displays relative direction to HOME (MSP OSD only)", "DisplayName": "HOMEDIR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HOMEDIR_X": {"Description": "Horizontal position on screen", "DisplayName": "HOMEDIR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HOMEDIR_Y": {"Description": "Vertical position on screen", "DisplayName": "HOMEDIR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HOMEDIST_EN": {"Description": "Displays distance from HOME (MSP OSD only)", "DisplayName": "HOMEDIST_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HOMEDIST_X": {"Description": "Horizontal position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HOMEDIST_Y": {"Description": "Vertical position on screen (MSP OSD only)", "DisplayName": "HOMEDIST_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HOME_EN": {"Description": "Displays distance and relative direction to HOME", "DisplayName": "HOME_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HOME_X": {"Description": "Horizontal position on screen", "DisplayName": "HOME_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HOME_Y": {"Description": "Vertical position on screen", "DisplayName": "HOME_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_HORIZON_EN": {"Description": "Displays artificial horizon", "DisplayName": "HORIZON_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_HORIZON_X": {"Description": "Horizontal position on screen", "DisplayName": "HORIZON_X", "Range": {"high": "59", "low": "0"}}, "OSD4_HORIZON_Y": {"Description": "Vertical position on screen", "DisplayName": "HORIZON_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_LINK_Q_EN": {"Description": "Displays Receiver link quality", "DisplayName": "LINK_Q_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_LINK_Q_X": {"Description": "Horizontal position on screen", "DisplayName": "LINK_Q_X", "Range": {"high": "59", "low": "0"}}, "OSD4_LINK_Q_Y": {"Description": "Vertical position on screen", "DisplayName": "LINK_Q_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_MESSAGE_EN": {"Description": "Displays Mavlink messages", "DisplayName": "MESSAGE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_MESSAGE_X": {"Description": "Horizontal position on screen", "DisplayName": "MESSAGE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_MESSAGE_Y": {"Description": "Vertical position on screen", "DisplayName": "MESSAGE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_PITCH_EN": {"Description": "Displays degrees of pitch from level", "DisplayName": "PITCH_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_PITCH_X": {"Description": "Horizontal position on screen", "DisplayName": "PITCH_X", "Range": {"high": "59", "low": "0"}}, "OSD4_PITCH_Y": {"Description": "Vertical position on screen", "DisplayName": "PITCH_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_PLUSCODE_EN": {"Description": "Displays pluscode (OLC) element", "DisplayName": "PLUSCODE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_PLUSCODE_X": {"Description": "Horizontal position on screen", "DisplayName": "PLUSCODE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_PLUSCODE_Y": {"Description": "Vertical position on screen", "DisplayName": "PLUSCODE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_POWER_EN": {"Description": "Displays power (MSP OSD only)", "DisplayName": "POWER_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_POWER_X": {"Description": "Horizontal position on screen", "DisplayName": "POWER_X", "Range": {"high": "59", "low": "0"}}, "OSD4_POWER_Y": {"Description": "Vertical position on screen", "DisplayName": "POWER_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RC_ANT_EN": {"Description": "Displays the current RC link active antenna", "DisplayName": "RC_ANT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RC_ANT_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_ANT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RC_ANT_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_ANT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RC_LQ_EN": {"Description": "Displays the RC link quality (uplink, 0 to 100%) and also RF mode if bit 7 of OSD_OPTIONS is set", "DisplayName": "RC_LQ_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RC_LQ_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_LQ_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RC_LQ_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_LQ_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RC_PWR_EN": {"Description": "Displays the RC link transmit (TX) power in mW or W, depending on level", "DisplayName": "RC_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RC_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RC_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RC_SNR_EN": {"Description": "Displays RC link signal to noise ratio in dB", "DisplayName": "RC_SNR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RC_SNR_X": {"Description": "Horizontal position on screen", "DisplayName": "RC_SNR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RC_SNR_Y": {"Description": "Vertical position on screen", "DisplayName": "RC_SNR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RESTVOLT_EN": {"Description": "Displays main battery resting voltage", "DisplayName": "RESTVOLT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RESTVOLT_X": {"Description": "Horizontal position on screen", "DisplayName": "RESTVOLT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RESTVOLT_Y": {"Description": "Vertical position on screen", "DisplayName": "RESTVOLT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RNGF_EN": {"Description": "Displays a rangefinder's distance in cm", "DisplayName": "RNGF_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RNGF_X": {"Description": "Horizontal position on screen", "DisplayName": "RNGF_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RNGF_Y": {"Description": "Vertical position on screen", "DisplayName": "RNGF_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_ROLL_EN": {"Description": "Displays degrees of roll from level", "DisplayName": "ROLL_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_ROLL_X": {"Description": "Horizontal position on screen", "DisplayName": "ROLL_X", "Range": {"high": "59", "low": "0"}}, "OSD4_ROLL_Y": {"Description": "Vertical position on screen", "DisplayName": "ROLL_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RPM_EN": {"Description": "Displays main rotor revs/min", "DisplayName": "RPM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RPM_X": {"Description": "Horizontal position on screen", "DisplayName": "RPM_X", "Range": {"high": "29", "low": "0"}}, "OSD4_RPM_Y": {"Description": "Vertical position on screen", "DisplayName": "RPM_Y", "Range": {"high": "15", "low": "0"}}, "OSD4_RSSIDBM_EN": {"Description": "Displays RC link signal strength in dBm", "DisplayName": "RSSIDBM_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RSSIDBM_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSIDBM_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RSSIDBM_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSIDBM_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_RSSI_EN": {"Description": "Displays RC signal strength", "DisplayName": "RSSI_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_RSSI_X": {"Description": "Horizontal position on screen", "DisplayName": "RSSI_X", "Range": {"high": "59", "low": "0"}}, "OSD4_RSSI_Y": {"Description": "Vertical position on screen", "DisplayName": "RSSI_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_SATS_EN": {"Description": "Displays number of acquired satellites", "DisplayName": "SATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_SATS_X": {"Description": "Horizontal position on screen", "DisplayName": "SATS_X", "Range": {"high": "59", "low": "0"}}, "OSD4_SATS_Y": {"Description": "Vertical position on screen", "DisplayName": "SATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_SIDEBARS_EN": {"Description": "Displays artificial horizon side bars", "DisplayName": "SIDEBARS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_SIDEBARS_X": {"Description": "Horizontal position on screen", "DisplayName": "SIDEBARS_X", "Range": {"high": "59", "low": "0"}}, "OSD4_SIDEBARS_Y": {"Description": "Vertical position on screen", "DisplayName": "SIDEBARS_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_STATS_EN": {"Description": "Displays flight stats", "DisplayName": "STATS_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_STATS_X": {"Description": "Horizontal position on screen", "DisplayName": "STATS_X", "Range": {"high": "59", "low": "0"}}, "OSD4_STATS_Y": {"Description": "Vertical position on screen", "DisplayName": "STATS_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_TEMP_EN": {"Description": "Displays temperature reported by primary barometer", "DisplayName": "TEMP_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_TEMP_X": {"Description": "Horizontal position on screen", "DisplayName": "TEMP_X", "Range": {"high": "59", "low": "0"}}, "OSD4_TEMP_Y": {"Description": "Vertical position on screen", "DisplayName": "TEMP_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_TER_HGT_EN": {"Description": "Displays Height above terrain", "DisplayName": "TER_HGT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_TER_HGT_X": {"Description": "Horizontal position on screen", "DisplayName": "TER_HGT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_TER_HGT_Y": {"Description": "Vertical position on screen", "DisplayName": "TER_HGT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_THROTTLE_EN": {"Description": "Displays actual throttle percentage being sent to motor(s)", "DisplayName": "THROTTLE_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_THROTTLE_X": {"Description": "Horizontal position on screen", "DisplayName": "THROTTLE_X", "Range": {"high": "59", "low": "0"}}, "OSD4_THROTTLE_Y": {"Description": "Vertical position on screen", "DisplayName": "THROTTLE_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_TXT_RES": {"Description": "Sets the overlay text resolution for this screen to either SD 30x16 or HD 50x18/60x22 (MSP DisplayPort only)", "DisplayName": "Sets the overlay text resolution (MSP DisplayPort only)", "User": "Standard", "Values": {"0": "30x16", "1": "50x18", "2": "60x22"}}, "OSD4_VSPEED_EN": {"Description": "Displays climb rate", "DisplayName": "VSPEED_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_VSPEED_X": {"Description": "Horizontal position on screen", "DisplayName": "VSPEED_X", "Range": {"high": "59", "low": "0"}}, "OSD4_VSPEED_Y": {"Description": "Vertical position on screen", "DisplayName": "VSPEED_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_VTX_PWR_EN": {"Description": "Displays VTX Power", "DisplayName": "VTX_PWR_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_VTX_PWR_X": {"Description": "Horizontal position on screen", "DisplayName": "VTX_PWR_X", "Range": {"high": "59", "low": "0"}}, "OSD4_VTX_PWR_Y": {"Description": "Vertical position on screen", "DisplayName": "VTX_PWR_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_WAYPOINT_EN": {"Description": "Displays bearing and distance to next waypoint", "DisplayName": "WAYPOINT_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_WAYPOINT_X": {"Description": "Horizontal position on screen", "DisplayName": "WAYPOINT_X", "Range": {"high": "59", "low": "0"}}, "OSD4_WAYPOINT_Y": {"Description": "Vertical position on screen", "DisplayName": "WAYPOINT_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_WIND_EN": {"Description": "Displays wind speed and relative direction, on Rover this is the apparent wind speed and direction from the windvane, if fitted", "DisplayName": "WIND_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_WIND_X": {"Description": "Horizontal position on screen", "DisplayName": "WIND_X", "Range": {"high": "59", "low": "0"}}, "OSD4_WIND_Y": {"Description": "Vertical position on screen", "DisplayName": "WIND_Y", "Range": {"high": "21", "low": "0"}}, "OSD4_XTRACK_EN": {"Description": "Displays crosstrack error", "DisplayName": "XTRACK_EN", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD4_XTRACK_X": {"Description": "Horizontal position on screen", "DisplayName": "XTRACK_X", "Range": {"high": "59", "low": "0"}}, "OSD4_XTRACK_Y": {"Description": "Vertical position on screen", "DisplayName": "XTRACK_Y", "Range": {"high": "21", "low": "0"}}, "OSD5_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD5_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD5_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM1_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM1_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM1_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM1_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM1_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM1_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM1_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM1_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM1_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM1_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM2_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM2_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM2_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM2_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM2_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM2_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM2_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM2_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM2_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM2_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM3_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM3_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM3_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM3_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM3_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM3_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM3_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM3_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM3_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM3_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM4_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM4_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM4_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM4_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM4_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM4_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM4_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM4_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM4_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM4_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM5_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM5_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM5_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM5_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM5_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM5_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM5_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM5_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM5_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM5_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM6_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM6_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM6_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM6_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM6_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM6_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM6_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM6_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM6_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM6_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM7_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM7_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM7_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM7_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM7_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM7_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM7_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM7_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM7_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM7_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM8_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM8_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM8_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM8_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM8_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM8_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM8_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM8_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM8_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM8_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_PARAM9_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD5_PARAM9_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD5_PARAM9_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD5_PARAM9_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD5_PARAM9_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD5_PARAM9_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD5_PARAM9_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD5_PARAM9_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD5_PARAM9_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD5_PARAM9_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD5_SAVE_X": {"Description": "Horizontal position of Save button on screen", "DisplayName": "SAVE_X", "Range": {"high": "25", "low": "0"}, "User": "Advanced"}, "OSD5_SAVE_Y": {"Description": "Vertical position of Save button on screen", "DisplayName": "SAVE_Y", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "OSD6_CHAN_MAX": {"Description": "This sets the PWM upper limit for this screen", "DisplayName": "Transmitter switch screen maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD6_CHAN_MIN": {"Description": "This sets the PWM lower limit for this screen", "DisplayName": "Transmitter switch screen minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "OSD6_ENABLE": {"Description": "Enable this screen", "DisplayName": "Enable screen", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM1_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM1_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM1_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM1_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM1_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM1_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM1_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM1_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM1_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM1_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM2_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM2_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM2_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM2_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM2_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM2_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM2_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM2_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM2_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM2_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM3_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM3_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM3_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM3_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM3_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM3_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM3_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM3_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM3_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM3_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM4_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM4_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM4_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM4_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM4_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM4_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM4_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM4_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM4_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM4_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM5_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM5_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM5_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM5_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM5_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM5_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM5_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM5_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM5_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM5_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM6_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM6_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM6_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM6_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM6_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM6_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM6_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM6_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM6_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM6_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM7_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM7_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM7_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM7_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM7_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM7_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM7_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM7_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM7_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM7_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM8_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM8_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM8_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM8_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM8_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM8_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM8_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM8_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM8_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM8_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_PARAM9_EN": {"Description": "Enable setting", "DisplayName": "Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "OSD6_PARAM9_GRP": {"Description": "Group of the parameter to be displayed and modified", "DisplayName": "Parameter group", "User": "Standard"}, "OSD6_PARAM9_IDX": {"Description": "Index of the parameter to be displayed and modified", "DisplayName": "Parameter index", "User": "Standard"}, "OSD6_PARAM9_INCR": {"Description": "Increment of the parameter to be displayed and modified", "DisplayName": "Parameter increment", "User": "Standard"}, "OSD6_PARAM9_KEY": {"Description": "Key of the parameter to be displayed and modified", "DisplayName": "Parameter key", "User": "Standard"}, "OSD6_PARAM9_MAX": {"Description": "Maximum of the parameter to be displayed and modified", "DisplayName": "Parameter maximum", "User": "Standard"}, "OSD6_PARAM9_MIN": {"Description": "Minimum value of the parameter to be displayed and modified", "DisplayName": "Parameter minimum", "User": "Standard"}, "OSD6_PARAM9_TYPE": {"Description": "Type of the parameter to be displayed and modified", "DisplayName": "Parameter type", "User": "Standard"}, "OSD6_PARAM9_X": {"Description": "Horizontal position on screen", "DisplayName": "X position", "Range": {"high": "29", "low": "0"}, "User": "Standard"}, "OSD6_PARAM9_Y": {"Description": "Vertical position on screen", "DisplayName": "Y position", "Range": {"high": "15", "low": "0"}, "User": "Standard"}, "OSD6_SAVE_X": {"Description": "Horizontal position of Save button on screen", "DisplayName": "SAVE_X", "Range": {"high": "25", "low": "0"}, "User": "Advanced"}, "OSD6_SAVE_Y": {"Description": "Vertical position of Save button on screen", "DisplayName": "SAVE_Y", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "OSD_ARM_SCR": {"Description": "Screen to be shown on Arm event. Zero to disable the feature.", "DisplayName": "Arm screen", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "OSD_BTN_DELAY": {"Description": "Debounce time in ms for stick commanded parameter navigation.", "DisplayName": "Button delay", "Range": {"high": "3000", "low": "0"}, "User": "Advanced"}, "OSD_CELL_COUNT": {"Description": "Used for average cell voltage display. -1 disables, 0 uses cell count autodetection for well charged LIPO/LIION batteries at connection, other values manually select cell count used.", "DisplayName": "Battery cell count", "Increment": "1", "User": "Advanced"}, "OSD_CHAN": {"Description": "This sets the channel used to switch different OSD screens.", "DisplayName": "Screen switch transmitter channel", "User": "Standard", "Values": {"0": "Disable", "10": "Chan10", "11": "Chan11", "12": "Chan12", "13": "Chan13", "14": "Chan14", "15": "Chan15", "16": "Chan16", "5": "Chan5", "6": "Chan6", "7": "Chan7", "8": "Chan8", "9": "Chan9"}}, "OSD_DSARM_SCR": {"Description": "Screen to be shown on disarm event. Zero to disable the feature.", "DisplayName": "Disarm screen", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "OSD_FONT": {"Description": "This sets which OSD font to use. It is an integer from 0 to the number of fonts available", "DisplayName": "OSD Font", "RebootRequired": "True", "User": "Standard"}, "OSD_FS_SCR": {"Description": "Screen to be shown on failsafe event. Zero to disable the feature.", "DisplayName": "Failsafe screen", "Range": {"high": "4", "low": "0"}, "User": "Standard"}, "OSD_H_OFFSET": {"Description": "Sets horizontal offset of the osd inside image", "DisplayName": "OSD horizontal offset", "Range": {"high": "63", "low": "0"}, "RebootRequired": "True", "User": "Standard"}, "OSD_MSG_TIME": {"Description": "Sets message duration seconds", "DisplayName": "Message display duration in seconds", "Range": {"high": "20", "low": "1"}, "User": "Standard"}, "OSD_OPTIONS": {"Bitmask": {"0": "UseDecimalPack", "1": "InvertedWindArrow", "2": "InvertedAHRoll", "3": "Convert feet to miles at 5280ft instead of 10000ft", "4": "DisableCrosshair", "5": "TranslateArrows", "6": "AviationStyleAH", "7": "Prefix LQ with RF Mode"}, "Description": "This sets options that change the display", "DisplayName": "OSD Options", "User": "Standard"}, "OSD_SW_METHOD": {"Description": "This sets the method used to switch different OSD screens.", "DisplayName": "Screen switch method", "User": "Standard", "Values": {"0": "switch to next screen if channel value was changed", "1": "select screen based on pwm ranges specified for each screen", "2": "switch to next screen after low to high transition and every 1s while channel value is high"}}, "OSD_TYPE": {"Description": "OSD type. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.", "DisplayName": "OSD type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "MAX7456", "2": "SITL", "3": "MSP", "4": "TXONLY", "5": "MSP_DISPLAYPORT"}}, "OSD_TYPE2": {"Description": "OSD type 2. TXONLY makes the OSD parameter selection available to other modules even if there is no native OSD support on the board, for instance CRSF.", "DisplayName": "OSD type 2", "RebootRequired": "True", "User": "Standard", "Values": {"0": "None", "1": "MAX7456", "2": "SITL", "3": "MSP", "4": "TXONLY", "5": "MSP_DISPLAYPORT"}}, "OSD_UNITS": {"Description": "Sets the units to use in displaying items", "DisplayName": "Display Units", "User": "Standard", "Values": {"0": "Metric", "1": "Imperial", "2": "SI", "3": "Aviation"}}, "OSD_V_OFFSET": {"Description": "Sets vertical offset of the osd inside image", "DisplayName": "OSD vertical offset", "Range": {"high": "31", "low": "0"}, "RebootRequired": "True", "User": "Standard"}, "OSD_W_ACRVOLT": {"Description": "Set level at which ACRVOLT item will flash", "DisplayName": "Avg Cell Resting Volt warn level", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "OSD_W_AVGCELLV": {"Description": "Set level at which AVGCELLV item will flash", "DisplayName": "AVGCELLV warn level", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "OSD_W_BATVOLT": {"Description": "Set level at which BAT_VOLT item will flash", "DisplayName": "BAT_VOLT warn level", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "OSD_W_LQ": {"Description": "Set level at which RC_LQ item will flash (%)", "DisplayName": "RC link quality warn level (in %)", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "OSD_W_NSAT": {"Description": "Set level at which NSAT item will flash", "DisplayName": "NSAT warn level", "Range": {"high": "30", "low": "1"}, "User": "Standard"}, "OSD_W_RESTVOLT": {"Description": "Set level at which RESTVOLT item will flash", "DisplayName": "RESTVOLT warn level", "Range": {"high": "100", "low": "0"}, "User": "Standard"}, "OSD_W_RSSI": {"Description": "Set level at which RSSI item will flash (in positive % or negative dBm values as applicable). 30% or -100dBm are defaults.", "DisplayName": "RSSI warn level (in %)", "Range": {"high": "100", "low": "-128"}, "User": "Standard"}, "OSD_W_SNR": {"Description": "Set level at which RC_SNR item will flash (in db)", "DisplayName": "RC link SNR warn level (in %)", "Range": {"high": "10", "low": "-20"}, "User": "Standard"}, "OSD_W_TERR": {"Description": "Set level below which TER_HGT item will flash. -1 disables.", "DisplayName": "Terrain warn level", "Range": {"high": "3000", "low": "-1"}, "Units": "m", "User": "Standard"}, "OVERRIDE_CHAN": {"Description": "If set to a non-zero value then this is an RC input channel number to use for giving IO manual control in case the main FMU microcontroller on a board with a IO co-processor fails. When this RC input channel goes above 1750 the FMU microcontroller will no longer be involved in controlling the servos and instead the IO microcontroller will directly control the servos. Note that IO manual control will be automatically activated if the FMU crashes for any reason. This parameter allows you to test for correct manual behaviour without actually crashing the FMU. This parameter is can be set to a non-zero value either for ground testing purposes or for giving the effect of an external override control board. Note that you may set OVERRIDE_CHAN to the same channel as FLTMODE_CH to get IO based override when in flight mode 6. Note that when override is triggered due to a FMU crash the 6 auxiliary output channels on the FMU will no longer be updated, so all the flight controls you need must be assigned to the first 8 channels on boards with an IOMCU.", "DisplayName": "IO override channel", "Increment": "1", "Range": {"high": "16", "low": "0"}, "User": "Advanced"}, "PLND_ACC_P_NSE": {"Description": "Kalman Filter Accelerometer Noise, higher values weight the input from the camera more, accels less", "DisplayName": "Kalman Filter Accelerometer Noise", "Range": {"high": "5", "low": "0.5"}, "User": "Advanced"}, "PLND_ALT_CUTOFF": {"Description": "The altitude (rangefinder distance) below which we stop using the precision landing sensor and continue landing", "DisplayName": "Precland altitude cutoff", "Range": {"high": "20", "low": "0"}, "Units": "m", "User": "Standard"}, "PLND_ALT_MAX": {"Description": "Vehicle will continue landing vertically until this height if target is not found. Below this height if landing target is not found, landing retry/failsafe might be attempted. This needs a rangefinder to work. Set to zero to disable this.", "DisplayName": "PrecLand maximum alt for retry", "Range": {"high": "50", "low": "0"}, "Units": "m"}, "PLND_ALT_MIN": {"Description": "Vehicle will continue landing vertically even if target is lost below this height. This needs a rangefinder to work. Set to zero to disable this.", "DisplayName": "PrecLand minimum alt for retry", "Range": {"high": "5", "low": "0"}, "Units": "m"}, "PLND_BUS": {"Description": "Precland sensor bus for I2C sensors.", "DisplayName": "Sensor Bus", "User": "Advanced", "Values": {"-1": "DefaultBus", "0": "InternalI2C", "1": "ExternalI2C"}}, "PLND_CAM_POS_X": {"Description": "X position of the camera in body frame. Positive X is forward of the origin.", "DisplayName": "Camera X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "PLND_CAM_POS_Y": {"Description": "Y position of the camera in body frame. Positive Y is to the right of the origin.", "DisplayName": "Camera Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "PLND_CAM_POS_Z": {"Description": "Z position of the camera in body frame. Positive Z is down from the origin.", "DisplayName": "Camera Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "PLND_ENABLED": {"Description": "Precision Land enabled/disabled", "DisplayName": "Precision Land enabled/disabled", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "PLND_EST_TYPE": {"Description": "Specifies the estimation method to be used", "DisplayName": "Precision Land Estimator Type", "User": "Advanced", "Values": {"0": "RawSensor", "1": "KalmanFilter"}}, "PLND_LAG": {"Description": "Precision Landing sensor lag, to cope with variable landing_target latency", "DisplayName": "Precision Landing sensor lag", "Increment": "1", "Range": {"high": "0.250", "low": "0.02"}, "RebootRequired": "True", "Units": "s", "User": "Advanced"}, "PLND_LAND_OFS_X": {"Description": "Desired landing position of the camera forward of the target in vehicle body frame", "DisplayName": "Land offset forward", "Increment": "1", "Range": {"high": "20", "low": "-20"}, "Units": "cm", "User": "Advanced"}, "PLND_LAND_OFS_Y": {"Description": "desired landing position of the camera right of the target in vehicle body frame", "DisplayName": "Land offset right", "Increment": "1", "Range": {"high": "20", "low": "-20"}, "Units": "cm", "User": "Advanced"}, "PLND_OPTIONS": {"Bitmask": {"0": "Moving Landing Target", "1": "Allow Precision Landing after manual reposition", "2": "Maintain high speed in final descent"}, "Description": "Precision Landing Extra Options", "DisplayName": "Precision Landing Extra Options", "User": "Advanced"}, "PLND_ORIENT": {"Description": "Orientation of camera/sensor on body", "DisplayName": "Camera Orientation", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Forward", "25": "Down", "4": "Back"}}, "PLND_RET_BEHAVE": {"Description": "Prec Land will do the action selected by this parameter if a retry to a landing is needed", "DisplayName": "PrecLand retry behaviour", "Values": {"0": "Go to the last location where landing target was detected", "1": "Go towards the approximate location of the detected landing target"}}, "PLND_RET_MAX": {"Description": "PrecLand Maximum number of retires for a failed landing. Set to zero to disable landing retry.", "DisplayName": "PrecLand Maximum number of retires for a failed landing", "Increment": "1", "Range": {"high": "10", "low": "0"}}, "PLND_STRICT": {"Description": "How strictly should the vehicle land on the target if target is lost", "DisplayName": "PrecLand strictness", "Values": {"0": "Land Vertically (Not strict)", "1": "Retry Landing(Normal Strictness)", "2": "Do not land (just Hover) (Very Strict)"}}, "PLND_TIMEOUT": {"Description": "Time for which vehicle continues descend even if target is lost. After this time period, vehicle will attempt a landing retry depending on PLND_STRICT parameter.", "DisplayName": "PrecLand retry timeout", "Range": {"high": "20", "low": "0"}, "Units": "s"}, "PLND_TYPE": {"Description": "Precision Land Type", "DisplayName": "Precision Land Type", "User": "Advanced", "Values": {"0": "None", "1": "CompanionComputer", "2": "IRLock", "3": "SITL_Gazebo", "4": "SITL"}}, "PLND_XY_DIST_MAX": {"Description": "The vehicle will not start descending if the landing target is detected and it is further than this many meters away. Set 0 to always descend.", "DisplayName": "Precision Landing maximum distance to target before descending", "Range": {"high": "10", "low": "0"}, "Units": "m", "User": "Advanced"}, "PLND_YAW_ALIGN": {"Description": "Yaw angle from body x-axis to sensor x-axis.", "DisplayName": "Sensor yaw alignment", "Increment": "10", "Range": {"high": "36000", "low": "0"}, "Units": "cdeg", "User": "Advanced"}, "POI_DIST_MAX": {"Description": "POI's max distance (in meters) from the vehicle", "DisplayName": "Mount POI distance max", "Range": {"high": "10000", "low": "0"}, "User": "Standard"}, "PREV_ENABLE": {"Description": "Enable parameter reversion system", "DisplayName": "parameter reversion enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "PREV_RC_FUNC": {"Description": "RCn_OPTION number to used to trigger parameter reversion", "DisplayName": "param reversion RC function", "User": "Standard"}, "PTCH2SRV_RLL": {"Description": "Gain added to pitch to keep aircraft from descending or ascending in turns. Increase in increments of 0.05 to reduce altitude loss. Decrease for altitude gain.", "DisplayName": "Roll compensation", "Increment": "0.05", "Range": {"high": "1.5", "low": "0.7"}, "User": "Standard"}, "PTCH2SRV_RMAX_DN": {"Description": "This sets the maximum nose down pitch rate that the attitude controller will demand (degrees/sec) in angle stabilized modes. Setting it to zero disables the limit.", "DisplayName": "Pitch down max rate", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "deg/s", "User": "Advanced"}, "PTCH2SRV_RMAX_UP": {"Description": "This sets the maximum nose up pitch rate that the attitude controller will demand (degrees/sec) in angle stabilized modes. Setting it to zero disables the limit.", "DisplayName": "Pitch up max rate", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "deg/s", "User": "Advanced"}, "PTCH2SRV_TCONST": {"Description": "Time constant in seconds from demanded to achieved pitch angle. Most models respond well to 0.5. May be reduced for faster responses, but setting lower than a model can achieve will not help.", "DisplayName": "Pitch Time Constant", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.4"}, "Units": "s", "User": "Advanced"}, "PTCH_LIM_MAX_DEG": {"Description": "Maximum pitch up angle commanded in modes with stabilized limits.", "DisplayName": "Maximum Pitch Angle", "Increment": "1", "Range": {"high": "90", "low": "0"}, "Units": "deg", "User": "Standard"}, "PTCH_LIM_MIN_DEG": {"Description": "Maximum pitch down angle commanded in modes with stabilized limits", "DisplayName": "Minimum Pitch Angle", "Increment": "1", "Range": {"high": "0", "low": "-90"}, "Units": "deg", "User": "Standard"}, "PTCH_RATE_D": {"Description": "Pitch axis rate controller D gain. Compensates for short-term change in desired roll rate vs actual roll rate", "DisplayName": "Pitch axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0.001"}, "User": "Standard"}, "PTCH_RATE_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Pitch Derivative FeedForward Gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0"}, "User": "Advanced"}, "PTCH_RATE_FF": {"Description": "Pitch axis rate controller feed forward", "DisplayName": "Pitch axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "3.0", "low": "0"}, "User": "Standard"}, "PTCH_RATE_FLTD": {"Description": "Pitch axis rate controller derivative frequency in Hz", "DisplayName": "Pitch axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "0"}, "Units": "Hz", "User": "Standard"}, "PTCH_RATE_FLTE": {"Description": "Pitch axis rate controller error frequency in Hz", "DisplayName": "Pitch axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "PTCH_RATE_FLTT": {"Description": "Pitch axis rate controller target frequency in Hz", "DisplayName": "Pitch axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "PTCH_RATE_I": {"Description": "Pitch axis rate controller I gain. Corrects long-term difference in desired roll rate vs actual roll rate", "DisplayName": "Pitch axis rate controller I gain", "Increment": "0.01", "Range": {"high": "0.6", "low": "0.01"}, "User": "Standard"}, "PTCH_RATE_IMAX": {"Description": "Pitch axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Pitch axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "PTCH_RATE_NEF": {"Description": "Pitch Error notch filter index", "DisplayName": "Pitch Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "PTCH_RATE_NTF": {"Description": "Pitch Target notch filter index", "DisplayName": "Pitch Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "PTCH_RATE_P": {"Description": "Pitch axis rate controller P gain. Corrects in proportion to the difference between the desired pitch rate vs actual pitch rate", "DisplayName": "Pitch axis rate controller P gain", "Increment": "0.005", "Range": {"high": "0.35", "low": "0.08"}, "User": "Standard"}, "PTCH_RATE_PDMX": {"Description": "Pitch axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Pitch axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "PTCH_RATE_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Pitch slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "PTCH_TRIM_DEG": {"Description": "Offset in degrees used for in-flight pitch trimming for level flight. Correct ground leveling is an alternative to changing this parameter.", "DisplayName": "Pitch angle offset", "Range": {"high": "45", "low": "-45"}, "Units": "deg", "User": "Standard"}, "QUIK_AUTO_FILTER": {"Description": "When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER", "DisplayName": "Quicktune auto filter enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "QUIK_AUTO_SAVE": {"Description": "Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune", "DisplayName": "Quicktune auto save", "Units": "s", "User": "Standard"}, "QUIK_AXES": {"Bitmask": {"0": "Roll", "1": "Pitch", "2": "Yaw"}, "Description": "axes to tune", "DisplayName": "Quicktune axes", "User": "Standard"}, "QUIK_DOUBLE_TIME": {"Description": "Time to double a tuning parameter. Raise this for a slower tune.", "DisplayName": "Quicktune doubling time", "Range": {"high": "20", "low": "5"}, "Units": "s", "User": "Standard"}, "QUIK_ENABLE": {"Description": "Enable quicktune system", "DisplayName": "Quicktune enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "QUIK_GAIN_MARGIN": {"Description": "Reduction in gain after oscillation detected. Raise this number to get a more conservative tune", "DisplayName": "Quicktune gain margin", "Range": {"high": "80", "low": "20"}, "Units": "%", "User": "Standard"}, "QUIK_MAX_REDUCE": {"Description": "This controls how much quicktune is allowed to lower gains from the original gains. If the vehicle already has a reasonable tune and is not oscillating then you can set this to zero to prevent gain reductions. The default of 20% is reasonable for most vehicles. Using a maximum gain reduction lowers the chance of an angle P oscillation happening if quicktune gets a false positive oscillation at a low gain, which can result in very low rate gains and a dangerous angle P oscillation.", "DisplayName": "Quicktune maximum gain reduction", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "QUIK_OPTIONS": {"Bitmask": {"0": "UseTwoPositionSwitch"}, "Description": "Additional options. When the Two Position Switch option is enabled then a high switch position will start the tune, low will disable the tune. you should also set a QUIK_AUTO_SAVE time so that you will be able to save the tune.", "DisplayName": "Quicktune options", "User": "Standard"}, "QUIK_OSC_SMAX": {"Description": "Threshold for oscillation detection. A lower value will lead to a more conservative tune.", "DisplayName": "Quicktune oscillation rate threshold", "Range": {"high": "10", "low": "1"}, "User": "Standard"}, "QUIK_RC_FUNC": {"Description": "RCn_OPTION number to use to control tuning stop/start/save", "DisplayName": "Quicktune RC function", "User": "Standard"}, "QUIK_RP_PI_RATIO": {"Description": "Ratio between P and I gains for roll and pitch. Raise this to get a lower I gain", "DisplayName": "Quicktune roll/pitch PI ratio", "Range": {"high": "1.0", "low": "0.5"}, "User": "Standard"}, "QUIK_YAW_D_MAX": {"Description": "Maximum value for yaw D gain", "DisplayName": "Quicktune Yaw D max", "Range": {"high": "1", "low": "0.001"}, "User": "Standard"}, "QUIK_YAW_P_MAX": {"Description": "Maximum value for yaw P gain", "DisplayName": "Quicktune Yaw P max", "Range": {"high": "3", "low": "0.1"}, "User": "Standard"}, "QUIK_Y_PI_RATIO": {"Description": "Ratio between P and I gains for yaw. Raise this to get a lower I gain", "DisplayName": "Quicktune Yaw PI ratio", "Range": {"high": "20", "low": "0.5"}, "User": "Standard"}, "Q_ACRO_PIT_RATE": {"Description": "The maximum pitch rate at full stick deflection in QACRO mode", "DisplayName": "QACRO mode pitch rate", "Increment": "1", "Range": {"high": "500", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "Q_ACRO_RLL_RATE": {"Description": "The maximum roll rate at full stick deflection in QACRO mode", "DisplayName": "QACRO mode roll rate", "Increment": "1", "Range": {"high": "500", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "Q_ACRO_YAW_RATE": {"Description": "The maximum yaw rate at full stick deflection in QACRO mode", "DisplayName": "QACRO mode yaw rate", "Increment": "1", "Range": {"high": "500", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "Q_ANGLE_MAX": {"Description": "Maximum lean angle in all VTOL flight modes", "DisplayName": "Angle Max", "Increment": "10", "Range": {"high": "8000", "low": "1000"}, "Units": "cdeg", "User": "Advanced"}, "Q_ASSIST_ALT": {"Description": "This is the altitude below which quadplane assistance will be triggered. This acts the same way as Q_ASSIST_ANGLE and Q_ASSIST_SPEED, but triggers if the aircraft drops below the given altitude while the VTOL motors are not running. A value of zero disables this feature. The altitude is calculated as being above ground level. The height above ground is given from a Lidar used if available and RNGFND_LANDING=1. Otherwise it comes from terrain data if TERRAIN_FOLLOW=1 and comes from height above home otherwise.", "DisplayName": "Quadplane assistance altitude", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "m", "User": "Standard"}, "Q_ASSIST_ANGLE": {"Description": "This is the angular error in attitude beyond which the quadplane VTOL motors will provide stability assistance. This will only be used if Q_ASSIST_SPEED is also non-zero. Assistance will be given if the attitude is outside the normal attitude limits by at least 5 degrees and the angular error in roll or pitch is greater than this angle for at least Q_ASSIST_DELAY seconds. Set to zero to disable angle assistance.", "DisplayName": "Quadplane assistance angle", "Increment": "1", "Range": {"high": "90", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_ASSIST_DELAY": {"Description": "This is delay between the assistance thresholds being met and the assistance starting.", "DisplayName": "Quadplane assistance delay", "Increment": "0.1", "Range": {"high": "2", "low": "0"}, "Units": "s", "User": "Standard"}, "Q_ASSIST_SPEED": {"Description": "This is the speed below which the quad motors will provide stability and lift assistance in fixed wing modes. Zero means no assistance except during transition. Note that if this is set to zero then other Q_ASSIST features are also disabled. A higher value will lead to more false positives which can waste battery. A lower value will result in less false positive, but will result in assistance taking longer to trigger. If unsure then set to 3 m/s below the minimum airspeed you will fly at. If you don't have an airspeed sensor then use 5 m/s below the minimum airspeed you fly at. If you want to disable the arming check Q_ASSIST_SPEED then set to -1.", "DisplayName": "Quadplane assistance speed", "Increment": "0.1", "Range": {"high": "100", "low": "0"}, "Units": "m/s", "User": "Standard"}, "Q_AUTOTUNE_AGGR": {"Description": "Autotune aggressiveness. Defines the bounce back used to detect size of the D term.", "DisplayName": "Autotune aggressiveness", "Range": {"high": "0.10", "low": "0.05"}, "User": "Standard"}, "Q_AUTOTUNE_AXES": {"Bitmask": {"0": "Roll", "1": "Pitch", "2": "Yaw", "3": "YawD"}, "Description": "1-byte bitmap of axes to autotune", "DisplayName": "Autotune axis bitmask", "User": "Standard"}, "Q_AUTOTUNE_MIN_D": {"Description": "Defines the minimum D gain", "DisplayName": "AutoTune minimum D", "Range": {"high": "0.006", "low": "0.001"}, "User": "Standard"}, "Q_A_ACCEL_P_MAX": {"Description": "Maximum acceleration in pitch axis", "DisplayName": "Acceleration Max for Pitch", "Increment": "1000", "Range": {"high": "180000", "low": "0"}, "Units": "cdeg/s/s", "User": "Advanced", "Values": {"0": "Disabled", "108000": "Medium", "162000": "Fast", "30000": "VerySlow", "72000": "Slow"}}, "Q_A_ACCEL_R_MAX": {"Description": "Maximum acceleration in roll axis", "DisplayName": "Acceleration Max for Roll", "Increment": "1000", "Range": {"high": "180000", "low": "0"}, "Units": "cdeg/s/s", "User": "Advanced", "Values": {"0": "Disabled", "108000": "Medium", "162000": "Fast", "30000": "VerySlow", "72000": "Slow"}}, "Q_A_ACCEL_Y_MAX": {"Description": "Maximum acceleration in yaw axis", "DisplayName": "Acceleration Max for Yaw", "Increment": "1000", "Range": {"high": "72000", "low": "0"}, "Units": "cdeg/s/s", "User": "Advanced", "Values": {"0": "Disabled", "18000": "Slow", "36000": "Medium", "54000": "Fast", "9000": "VerySlow"}}, "Q_A_ANGLE_BOOST": {"Description": "Angle Boost increases output throttle as the vehicle leans to reduce loss of altitude", "DisplayName": "Angle Boost", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "Q_A_ANG_LIM_TC": {"Description": "Angle Limit (to maintain altitude) Time Constant", "DisplayName": "Angle Limit (to maintain altitude) Time Constant", "Range": {"high": "10.0", "low": "0.5"}, "User": "Advanced"}, "Q_A_ANG_PIT_P": {"Description": "Pitch axis angle controller P gain. Converts the error between the desired pitch angle and actual angle to a desired pitch rate", "DisplayName": "Pitch axis angle controller P gain", "Range": {"high": "12.000", "low": "3.000"}, "User": "Standard"}, "Q_A_ANG_RLL_P": {"Description": "Roll axis angle controller P gain. Converts the error between the desired roll angle and actual angle to a desired roll rate", "DisplayName": "Roll axis angle controller P gain", "Range": {"high": "12.000", "low": "3.000"}, "User": "Standard"}, "Q_A_ANG_YAW_P": {"Description": "Yaw axis angle controller P gain. Converts the error between the desired yaw angle and actual angle to a desired yaw rate", "DisplayName": "Yaw axis angle controller P gain", "Range": {"high": "12.000", "low": "3.000"}, "User": "Standard"}, "Q_A_INPUT_TC": {"Description": "Attitude control input time constant. Low numbers lead to sharper response, higher numbers to softer response", "DisplayName": "Attitude control input time constant", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "Units": "s", "User": "Standard", "Values": {"0.05": "Very Crisp", "0.1": "Crisp", "0.15": "Medium", "0.2": "Soft", "0.5": "Very Soft"}}, "Q_A_RATE_FF_ENAB": {"Description": "Controls whether body-frame rate feedforward is enabled or disabled", "DisplayName": "Rate Feedforward Enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "Q_A_RATE_P_MAX": {"Description": "Maximum angular velocity in pitch axis", "DisplayName": "Angular Velocity Max for Pitch", "Increment": "1", "Range": {"high": "1080", "low": "0"}, "Units": "deg/s", "User": "Advanced", "Values": {"0": "Disabled", "180": "Medium", "360": "Fast", "60": "Slow"}}, "Q_A_RATE_R_MAX": {"Description": "Maximum angular velocity in roll axis", "DisplayName": "Angular Velocity Max for Roll", "Increment": "1", "Range": {"high": "1080", "low": "0"}, "Units": "deg/s", "User": "Advanced", "Values": {"0": "Disabled", "180": "Medium", "360": "Fast", "60": "Slow"}}, "Q_A_RATE_Y_MAX": {"Description": "Maximum angular velocity in yaw axis", "DisplayName": "Angular Velocity Max for Yaw", "Increment": "1", "Range": {"high": "1080", "low": "0"}, "Units": "deg/s", "User": "Advanced", "Values": {"0": "Disabled", "180": "Medium", "360": "Fast", "60": "Slow"}}, "Q_A_RAT_PIT_D": {"Description": "Pitch axis rate controller D gain. Compensates for short-term change in desired pitch rate vs actual pitch rate", "DisplayName": "Pitch axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.05", "low": "0.0"}, "User": "Standard"}, "Q_A_RAT_PIT_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Pitch Derivative FeedForward Gain", "Increment": "0.0001", "Range": {"high": "0.02", "low": "0"}, "User": "Advanced"}, "Q_A_RAT_PIT_FF": {"Description": "Pitch axis rate controller feed forward", "DisplayName": "Pitch axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "0.5", "low": "0"}, "User": "Standard"}, "Q_A_RAT_PIT_FLTD": {"Description": "Pitch axis rate controller derivative frequency in Hz", "DisplayName": "Pitch axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_PIT_FLTE": {"Description": "Pitch axis rate controller error frequency in Hz", "DisplayName": "Pitch axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_PIT_FLTT": {"Description": "Pitch axis rate controller target frequency in Hz", "DisplayName": "Pitch axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_PIT_I": {"Description": "Pitch axis rate controller I gain. Corrects long-term difference in desired pitch rate vs actual pitch rate", "DisplayName": "Pitch axis rate controller I gain", "Increment": "0.01", "Range": {"high": "2.0", "low": "0.01"}, "User": "Standard"}, "Q_A_RAT_PIT_IMAX": {"Description": "Pitch axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Pitch axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "Q_A_RAT_PIT_NEF": {"Description": "Pitch Error notch filter index", "DisplayName": "Pitch Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_A_RAT_PIT_NTF": {"Description": "Pitch Target notch filter index", "DisplayName": "Pitch Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_A_RAT_PIT_P": {"Description": "Pitch axis rate controller P gain. Corrects in proportion to the difference between the desired pitch rate vs actual pitch rate output", "DisplayName": "Pitch axis rate controller P gain", "Increment": "0.005", "Range": {"high": "0.50", "low": "0.01"}, "User": "Standard"}, "Q_A_RAT_PIT_PDMX": {"Description": "Pitch axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Pitch axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "Q_A_RAT_PIT_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Pitch slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "Q_A_RAT_RLL_D": {"Description": "Roll axis rate controller D gain. Compensates for short-term change in desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.05", "low": "0.0"}, "User": "Standard"}, "Q_A_RAT_RLL_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Roll Derivative FeedForward Gain", "Increment": "0.0001", "Range": {"high": "0.02", "low": "0"}, "User": "Advanced"}, "Q_A_RAT_RLL_FF": {"Description": "Roll axis rate controller feed forward", "DisplayName": "Roll axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "0.5", "low": "0"}, "User": "Standard"}, "Q_A_RAT_RLL_FLTD": {"Description": "Roll axis rate controller derivative frequency in Hz", "DisplayName": "Roll axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_RLL_FLTE": {"Description": "Roll axis rate controller error frequency in Hz", "DisplayName": "Roll axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_RLL_FLTT": {"Description": "Roll axis rate controller target frequency in Hz", "DisplayName": "Roll axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "5"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_RLL_I": {"Description": "Roll axis rate controller I gain. Corrects long-term difference in desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller I gain", "Increment": "0.01", "Range": {"high": "2.0", "low": "0.01"}, "User": "Standard"}, "Q_A_RAT_RLL_IMAX": {"Description": "Roll axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Roll axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "Q_A_RAT_RLL_NEF": {"Description": "Roll Error notch filter index", "DisplayName": "Roll Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_A_RAT_RLL_NTF": {"Description": "Roll Target notch filter index", "DisplayName": "Roll Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_A_RAT_RLL_P": {"Description": "Roll axis rate controller P gain. Corrects in proportion to the difference between the desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller P gain", "Increment": "0.005", "Range": {"high": "0.5", "low": "0.01"}, "User": "Standard"}, "Q_A_RAT_RLL_PDMX": {"Description": "Roll axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Roll axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "Q_A_RAT_RLL_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Roll slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "Q_A_RAT_YAW_D": {"Description": "Yaw axis rate controller D gain. Compensates for short-term change in desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.02", "low": "0.000"}, "User": "Standard"}, "Q_A_RAT_YAW_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Yaw Derivative FeedForward Gain", "Increment": "0.0001", "Range": {"high": "0.02", "low": "0"}, "User": "Advanced"}, "Q_A_RAT_YAW_FF": {"Description": "Yaw axis rate controller feed forward", "DisplayName": "Yaw axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "0.5", "low": "0"}, "User": "Standard"}, "Q_A_RAT_YAW_FLTD": {"Description": "Yaw axis rate controller derivative frequency in Hz", "DisplayName": "Yaw axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "5"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_YAW_FLTE": {"Description": "Yaw axis rate controller error frequency in Hz", "DisplayName": "Yaw axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "20", "low": "0"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_YAW_FLTT": {"Description": "Yaw axis rate controller target frequency in Hz", "DisplayName": "Yaw axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "1"}, "Units": "Hz", "User": "Standard"}, "Q_A_RAT_YAW_I": {"Description": "Yaw axis rate controller I gain. Corrects long-term difference in desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller I gain", "Increment": "0.01", "Range": {"high": "1.0", "low": "0.010"}, "User": "Standard"}, "Q_A_RAT_YAW_IMAX": {"Description": "Yaw axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Yaw axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "Q_A_RAT_YAW_NEF": {"Description": "Yaw Error notch filter index", "DisplayName": "Yaw Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_A_RAT_YAW_NTF": {"Description": "Yaw Target notch filter index", "DisplayName": "Yaw Target notch filter index", "Range": {"high": "8", "low": "1"}, "Units": "Hz", "User": "Advanced"}, "Q_A_RAT_YAW_P": {"Description": "Yaw axis rate controller P gain. Corrects in proportion to the difference between the desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller P gain", "Increment": "0.005", "Range": {"high": "2.50", "low": "0.10"}, "User": "Standard"}, "Q_A_RAT_YAW_PDMX": {"Description": "Yaw axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Yaw axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "Q_A_RAT_YAW_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Yaw slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "Q_A_SLEW_YAW": {"Description": "Maximum rate the yaw target can be updated in RTL and Auto flight modes", "DisplayName": "Yaw target slew rate", "Increment": "100", "Range": {"high": "18000", "low": "500"}, "Units": "cdeg/s", "User": "Advanced"}, "Q_A_THR_G_BOOST": {"Description": "Throttle-gain boost ratio. A value of 0 means no boosting is applied, a value of 1 means full boosting is applied. Describes the ratio increase that is applied to angle P and PD on pitch and roll.", "DisplayName": "Throttle-gain boost", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "Q_A_THR_MIX_MAN": {"Description": "Throttle vs attitude control prioritisation used during manual flight (higher values mean we prioritise attitude control over throttle)", "DisplayName": "Throttle Mix Manual", "Range": {"high": "0.9", "low": "0.1"}, "User": "Advanced"}, "Q_A_THR_MIX_MAX": {"Description": "Throttle vs attitude control prioritisation used during active flight (higher values mean we prioritise attitude control over throttle)", "DisplayName": "Throttle Mix Maximum", "Range": {"high": "0.9", "low": "0.5"}, "User": "Advanced"}, "Q_A_THR_MIX_MIN": {"Description": "Throttle vs attitude control prioritisation used when landing (higher values mean we prioritise attitude control over throttle)", "DisplayName": "Throttle Mix Minimum", "Range": {"high": "0.25", "low": "0.1"}, "User": "Advanced"}, "Q_BACKTRANS_MS": {"Description": "Pitch angle will increase from 0 to angle max over this duration when switching into VTOL flight in a postion control mode. 0 Disables.", "DisplayName": "SLT and Tiltrotor back transition pitch limit duration", "Range": {"high": "10000", "low": "0"}, "Units": "ms"}, "Q_BCK_PIT_LIM": {"Description": "This sets the maximum number of degrees of back or pitch up in Q modes when the airspeed is at AIRSPEED_MIN, and is used to prevent excessive sutructural loads when pitching up decelerate. If airspeed is above or below AIRSPEED_MIN, the pitch up/back will be adjusted according to the formula pitch_limit = Q_BCK_PIT_LIM * (AIRSPEED_MIN / IAS)^2. The backwards/up pitch limit controlled by this parameter is in addition to limiting applied by PTCH_LIM_MAX_DEG and Q_ANGLE_MAX. The BCK_PIT_LIM limit is only applied when Q_FWD_THR_USE is set to 1 or 2 and the vehicle is flying in a mode that uses forward throttle instead of forward tilt to generate forward speed. Set to a non positive value 0 to deactivate this limit.", "DisplayName": "Q mode rearward pitch limit", "Increment": "0.1", "Range": {"high": "15.0", "low": "0.0"}, "Units": "deg", "User": "Standard"}, "Q_ENABLE": {"Description": "This enables QuadPlane functionality, assuming multicopter motors start on output 5. If this is set to 2 then when starting AUTO mode it will initially be in VTOL AUTO mode.", "DisplayName": "Enable QuadPlane", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Enable", "2": "Enable VTOL AUTO"}}, "Q_ESC_CAL": {"Description": "This is used to calibrate the throttle range of the VTOL motors. Please read https://ardupilot.org/plane/docs/quadplane-esc-calibration.html before using. This parameter is automatically set back to 0 on every boot. This parameter only takes effect in QSTABILIZE mode. When set to 1 the output of all motors will come directly from the throttle stick when armed, and will be zero when disarmed. When set to 2 the output of all motors will be maximum when armed and zero when disarmed. Make sure you remove all properllers before using.", "DisplayName": "ESC Calibration", "User": "Standard", "Values": {"0": "Disabled", "1": "ThrottleInput", "2": "FullInput"}}, "Q_FRAME_CLASS": {"Description": "Controls major frame class for multicopter component", "DisplayName": "Frame Class", "User": "Standard", "Values": {"0": "Undefined", "1": "Quad", "10": "Single/Dual", "12": "DodecaHexa", "14": "Deca", "15": "Scripting Matrix", "17": "Dynamic Scripting Matrix", "2": "Hexa", "3": "Octa", "4": "OctaQuad", "5": "Y6", "7": "Tri"}}, "Q_FRAME_TYPE": {"Description": "Controls motor mixing for multicopter component", "DisplayName": "Frame Type (+, X or V)", "User": "Standard", "Values": {"0": "Plus", "1": "X", "10": "Y6B", "11": "Y6F", "12": "BetaFlightX", "13": "DJIX", "14": "ClockwiseX", "15": "I", "16": "MOTOR_FRAME_TYPE_NYT_PLUS", "17": "MOTOR_FRAME_TYPE_NYT_X", "18": "BetaFlightXReversed", "19": "Y4", "2": "V", "3": "H", "4": "V-Tail", "5": "A-Tail"}}, "Q_FWD_MANTHR_MAX": {"Description": "Maximum value for manual forward throttle; used with RC option FWD_THR (209)", "DisplayName": "VTOL manual forward throttle max percent", "Range": {"high": "100", "low": "0"}}, "Q_FWD_PIT_LIM": {"Description": "When forward throttle is being controlled by the Q_FWD_THR_GAIN parameter in Q modes, the vehicle forward (nose down) pitch rotation will be limited to the value specified by this parameter and the any additional forward acceleration required will be produced by use of the forward thrust motor(s) or tilting of moveable rotors. Larger values allow the vehicle to pitch more nose down. Set initially to the amount of nose down pitch required to remove wing lift.", "DisplayName": "Q mode forward pitch limit", "Increment": "0.1", "Range": {"high": "5.0", "low": "0.0"}, "Units": "deg", "User": "Standard"}, "Q_FWD_THR_GAIN": {"Description": "This parameter sets the gain from forward accel/tilt to forward throttle in certain Q modes. The Q modes this feature operates in is controlled by the Q_FWD_THR_USE parameter. Vehicles using separate forward thrust motors, eg quadplanes, should set this parameter to (all up weight) / (maximum combined thrust of forward motors) with a value of 2 being typical. Vehicles that tilt lifting rotors to provide forward thrust should set this parameter to (all up weight) / (weight lifted by tilting rotors) which for most aircraft can be approximated as (total number of lifting rotors) / (number of lifting rotors that tilt). When using this method of forward throttle control, the forward tilt angle limit is controlled by the Q_FWD_PIT_LIM parameter.", "DisplayName": "Q mode fwd throttle gain", "Increment": "0.1", "Range": {"high": "5.0", "low": "0.0"}, "User": "Standard"}, "Q_FWD_THR_USE": {"Description": "This parameter determines when the feature that uses forward throttle instead of forward tilt is used. The amount of forward throttle is controlled by the Q_FWD_THR_GAIN parameter. The maximum amount of forward pitch allowed is controlled by the Q_FWD_PIT_LIM parameter. Q_FWD_THR_USE = 0 disables the feature. Q_FWD_THR_USE = 1 enables the feature in all position controlled modes such as QLOITER, QLAND, QRTL and VTOL TAKEOFF. Q_FWD_THR_USE = 2 enables the feature in all Q modes except QAUTOTUNE and QACRO. When enabling the feature, the legacy method of controlling forward throttle use via velocity controller error should be disabled by setting Q_VFWD_GAIN to 0. Do not use this feature with tailsitters.", "DisplayName": "Q mode forward throttle use", "User": "Standard", "Values": {"0": "Off", "1": "On in all position controlled Q modes", "2": "On in all Q modes except QAUTOTUNE and QACRO"}}, "Q_FW_LND_APR_RAD": {"Description": "This provides the radius used, when using a fixed wing landing approach. If set to 0 then the WP_LOITER_RAD will be selected.", "DisplayName": "Quadplane fixed wing landing approach radius", "Increment": "5", "Range": {"high": "200", "low": "0"}, "Units": "m", "User": "Advanced"}, "Q_GUIDED_MODE": {"Description": "This enables use of VTOL in guided mode. When enabled the aircraft will switch to VTOL flight when the guided destination is reached and hover at the destination.", "DisplayName": "Enable VTOL in GUIDED mode", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "Q_LAND_ALTCHG": {"Description": "The maximum altitude change allowed during land detection. You can raise this value if you find that landing detection takes a long time to complete. It is the maximum change in altitude over a period of 4 seconds for landing to be detected", "DisplayName": "Land detection altitude change threshold", "Increment": "0.05", "Range": {"high": "0.6", "low": "0.1"}, "Units": "m", "User": "Standard"}, "Q_LAND_FINAL_ALT": {"Description": "The altitude at which we should switch to Q_LAND_SPEED descent rate", "DisplayName": "Land final altitude", "Increment": "0.1", "Range": {"high": "50", "low": "0.5"}, "Units": "m", "User": "Standard"}, "Q_LAND_FINAL_SPD": {"Description": "The descent speed for the final stage of landing in m/s", "DisplayName": "Land final speed", "Increment": "0.1", "Range": {"high": "2", "low": "0.3"}, "Units": "m/s", "User": "Standard"}, "Q_LAND_ICE_CUT": {"Description": "This controls stopping an internal combustion engine in the final landing stage of a VTOL. This is important for aircraft where the forward thrust engine may experience prop-strike if left running during landing. This requires the engine controls are enabled using the ICE_* parameters.", "DisplayName": "Cut IC engine on landing", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "Q_LOIT_ACC_MAX": {"Description": "Loiter maximum correction acceleration in cm/s/s. Higher values cause the copter to correct position errors more aggressively.", "DisplayName": "Loiter maximum correction acceleration", "Increment": "1", "Range": {"high": "981", "low": "100"}, "Units": "cm/s/s", "User": "Advanced"}, "Q_LOIT_ANG_MAX": {"Description": "Loiter maximum pilot requested lean angle. Set to zero for 2/3 of Q_P_ANGLE_MAX/Q_ANGLE_MAX. The maximum vehicle lean angle is still limited by Q_P_ANGLE_MAX/Q_ANGLE_MAX", "DisplayName": "Loiter pilot angle max", "Increment": "1", "Range": {"high": "45", "low": "0"}, "Units": "deg", "User": "Advanced"}, "Q_LOIT_BRK_ACCEL": {"Description": "Loiter braking acceleration in cm/s/s. Higher values stop the copter more quickly when the stick is centered.", "DisplayName": "Loiter braking acceleration", "Increment": "1", "Range": {"high": "250", "low": "25"}, "Units": "cm/s/s", "User": "Advanced"}, "Q_LOIT_BRK_DELAY": {"Description": "Loiter brake start delay (in seconds)", "DisplayName": "Loiter brake start delay (in seconds)", "Increment": "0.1", "Range": {"high": "2", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_LOIT_BRK_JERK": {"Description": "Loiter braking jerk in cm/s/s/s. Higher values will remove braking faster if the pilot moves the sticks during a braking maneuver.", "DisplayName": "Loiter braking jerk", "Increment": "1", "Range": {"high": "5000", "low": "500"}, "Units": "cm/s/s/s", "User": "Advanced"}, "Q_LOIT_SPEED": {"Description": "Defines the maximum speed in cm/s which the aircraft will travel horizontally while in loiter mode", "DisplayName": "Loiter Horizontal Maximum Speed", "Increment": "50", "Range": {"high": "3500", "low": "20"}, "Units": "cm/s", "User": "Standard"}, "Q_MAV_TYPE": {"Description": "This controls the mavlink type given in HEARTBEAT messages. For some GCS types a particular setting will be needed for correct operation.", "DisplayName": "MAVLink type identifier", "Values": {"0": "AUTO", "1": "FIXED_WING", "10": "GROUND_ROVER", "11": "SURFACE_BOAT", "12": "SUBMARINE", "16": "FLAPPING_WING", "17": "KITE", "19": "VTOL_DUOROTOR", "2": "QUADROTOR", "20": "VTOL_QUADROTOR", "21": "VTOL_TILTROTOR", "3": "COAXIAL", "4": "HELICOPTER", "7": "AIRSHIP", "8": "FREE_BALLOON", "9": "ROCKET"}}, "Q_M_BAT_CURR_MAX": {"Description": "Maximum current over which maximum throttle is limited (0 = Disabled)", "DisplayName": "Motor Current Max", "Range": {"high": "200", "low": "0"}, "Units": "A", "User": "Advanced"}, "Q_M_BAT_CURR_TC": {"Description": "Time constant used to limit the maximum current", "DisplayName": "Motor Current Max Time Constant", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_M_BAT_IDX": {"Description": "Which battery monitor should be used for doing compensation", "DisplayName": "Battery compensation index", "User": "Advanced", "Values": {"0": "First battery", "1": "Second battery"}}, "Q_M_BAT_VOLT_MAX": {"Description": "Battery voltage compensation maximum voltage (voltage above this will have no additional scaling effect on thrust). Recommend 4.2 * cell count, 0 = Disabled", "DisplayName": "Battery voltage compensation maximum voltage", "Range": {"high": "53", "low": "6"}, "Units": "V", "User": "Advanced"}, "Q_M_BAT_VOLT_MIN": {"Description": "Battery voltage compensation minimum voltage (voltage below this will have no additional scaling effect on thrust). Recommend 3.3 * cell count, 0 = Disabled", "DisplayName": "Battery voltage compensation minimum voltage", "Range": {"high": "42", "low": "6"}, "Units": "V", "User": "Advanced"}, "Q_M_BOOST_SCALE": {"Description": "Booster motor output scaling factor vs main throttle. The output to the BoostThrottle servo will be the main throttle times this scaling factor. A higher scaling factor will put more of the load on the booster motor. A value of 1 will set the BoostThrottle equal to the main throttle.", "DisplayName": "Motor boost scale", "Increment": "0.1", "Range": {"high": "5", "low": "0"}, "User": "Advanced"}, "Q_M_HOVER_LEARN": {"Description": "Enable/Disable automatic learning of hover throttle", "DisplayName": "Hover Value Learning", "User": "Advanced", "Values": {"0": "Disabled", "1": "Learn", "2": "Learn and Save"}}, "Q_M_OPTIONS": {"Bitmask": {"0": "Voltage compensation uses raw voltage"}, "Description": "Motor options", "DisplayName": "Motor options", "User": "Advanced"}, "Q_M_PWM_MAX": {"Description": "This sets the max PWM value in microseconds that will ever be output to the motors", "DisplayName": "PWM output maximum", "Range": {"high": "2000", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "Q_M_PWM_MIN": {"Description": "This sets the min PWM output value in microseconds that will ever be output to the motors", "DisplayName": "PWM output minimum", "Range": {"high": "2000", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "Q_M_PWM_TYPE": {"Description": "This selects the output PWM type, allowing for normal PWM continuous output, OneShot, brushed or DShot motor output.PWMRange and PWMAngle are PWM special/rare cases for ESCs that dont calibrate normally (some Sub motors) or where each ESC must have its PWM range set individually using the Servo params instead of PWM_MIN/MAX parameters.", "DisplayName": "Output PWM type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Normal", "1": "OneShot", "2": "OneShot125", "3": "Brushed", "4": "DShot150", "5": "DShot300", "6": "DShot600", "7": "DShot1200", "8": "PWMRange", "9": "PWMAngle"}}, "Q_M_SAFE_DISARM": {"Description": "Disables motor PWM output when disarmed", "DisplayName": "Motor PWM output disabled when disarmed", "User": "Advanced", "Values": {"0": "PWM enabled while disarmed", "1": "PWM disabled while disarmed"}}, "Q_M_SAFE_TIME": {"Description": "Time taken to disable and enable the motor PWM output when disarmed and armed.", "DisplayName": "Time taken to disable and enable the motor PWM output when disarmed and armed.", "Increment": "0.001", "Range": {"high": "5", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_M_SLEW_DN_TIME": {"Description": "Time in seconds to slew output from full to zero. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.", "DisplayName": "Output slew time for decreasing throttle", "Increment": "0.001", "Range": {"high": ".5", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_M_SLEW_UP_TIME": {"Description": "Time in seconds to slew output from zero to full. This is used to limit the rate at which output can change. Range is constrained between 0 and 0.5.", "DisplayName": "Output slew time for increasing throttle", "Increment": "0.001", "Range": {"high": ".5", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_M_SPIN_ARM": {"Description": "Point at which the motors start to spin expressed as a number from 0 to 1 in the entire output range. Should be lower than MOT_SPIN_MIN.", "DisplayName": "Motor Spin armed", "User": "Advanced", "Values": {"0.0": "Low", "0.1": "Default", "0.2": "High"}}, "Q_M_SPIN_MAX": {"Description": "Point at which the thrust saturates expressed as a number from 0 to 1 in the entire output range", "DisplayName": "Motor Spin maximum", "User": "Advanced", "Values": {"0.9": "Low", "0.95": "Default", "1.0": "High"}}, "Q_M_SPIN_MIN": {"Description": "Point at which the thrust starts expressed as a number from 0 to 1 in the entire output range. Should be higher than MOT_SPIN_ARM.", "DisplayName": "Motor Spin minimum", "User": "Advanced", "Values": {"0.0": "Low", "0.15": "Default", "0.25": "High"}}, "Q_M_SPOOL_TIME": {"Description": "Time in seconds to spool up the motors from zero to min throttle. ", "DisplayName": "Spool up time", "Increment": "0.1", "Range": {"high": "2", "low": "0.05"}, "Units": "s", "User": "Advanced"}, "Q_M_SPOOL_TIM_DN": {"Description": "Time taken to spool down the motors from min to zero throttle. If set to 0 then SPOOL_TIME is used instead.", "DisplayName": "Spool down time", "Increment": "0.001", "Range": {"high": "2", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_M_THST_EXPO": {"Description": "Motor thrust curve exponent (0.0 for linear to 1.0 for second order curve)", "DisplayName": "Thrust Curve Expo", "Range": {"high": "1.0", "low": "-1.0"}, "User": "Advanced"}, "Q_M_THST_HOVER": {"Description": "Motor thrust needed to hover expressed as a number from 0 to 1", "DisplayName": "Thrust Hover Value", "Range": {"high": "0.8", "low": "0.2"}, "User": "Advanced"}, "Q_M_YAW_HEADROOM": {"Description": "Yaw control is given at least this pwm in microseconds range", "DisplayName": "Matrix Yaw Min", "Range": {"high": "500", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "Q_M_YAW_SV_ANGLE": {"Description": "Yaw servo's maximum lean angle (Tricopter only)", "DisplayName": "Yaw Servo Max Lean Angle", "Increment": "1", "Range": {"high": "80", "low": "5"}, "Units": "deg", "User": "Standard"}, "Q_NAVALT_MIN": {"Description": "This is the altitude in meters above which navigation begins in auto takeoff. Below this altitude the target roll and pitch will be zero. A value of zero disables the feature", "DisplayName": "Minimum navigation altitude", "Range": {"high": "5", "low": "0"}, "User": "Advanced"}, "Q_OPTIONS": {"Bitmask": {"0": "Level Transition-keep wings within LEVEL_ROLL_LIMIT and only use forward motor(s) for climb during transition", "1": "Allow FW Takeoff-if bit is not set then NAV_TAKEOFF command on quadplanes will instead perform a NAV_VTOL takeoff", "10": "Disarmed Yaw Tilt-enable motor tilt for yaw when disarmed", "11": "Delay Spoolup-delay VTOL spoolup for 2 seconds after arming", "12": "Disable speed based Qassist when using synthethic airspeed estimates", "13": "Disable Ground Effect Compensation-on baro altitude reports", "14": "Ignore forward flight angle limits-in Qmodes and use Q_ANGLE_MAX exclusively", "15": "ThrLandControl-enable throttle stick control of landing rate", "16": "DisableApproach-disable use of approach and airbrake stages in VTOL landing", "17": "EnableLandResposition-enable pilot controlled repositioning in AUTO land.Descent will pause while repositioning", "18": "ARMVTOL-arm only in VTOL or AUTO modes", "19": "CompleteTransition-to fixed wing if Q_TRANS_FAIL timer times out instead of QLAND", "2": "Allow FW Land-if bit is not set then NAV_LAND command on quadplanes will instead perform a NAV_VTOL_LAND", "20": "Force RTL mode-forces RTL mode on rc failsafe in VTOL modes overriding bit 5(USE_QRTL)", "21": "Tilt rotor-tilt motors up when disarmed in FW modes (except manual) to prevent ground strikes.", "22": "Scale FF by the ratio of VTOL/plane angle P gains in VTOL modes rather than reducing VTOL angle P based on airspeed.", "3": "Vtol Takeoff Frame-command NAV_VTOL_TAKEOFF alt set by the command's reference frame not above current location", "4": "Always use FW spiral approach-always use Use a fixed wing spiral approach for VTOL landings", "5": "USE QRTL-instead of QLAND for rc failsafe when in VTOL modes", "6": "Use Governor-use ICE Idle Governor in MANUAL for forward motor", "7": "Force Qassist-on always", "8": "Mtrs_Only_Qassist-in tailsitters only uses VTOL motors and not flying surfaces for QASSIST"}, "Description": "See description for each bitmask bit description", "DisplayName": "quadplane options"}, "Q_PILOT_ACCEL_Z": {"Description": "The vertical acceleration used when pilot is controlling the altitude", "DisplayName": "Pilot vertical acceleration", "Increment": "0.1", "Range": {"high": "5", "low": "0.5"}, "Units": "m/s/s", "User": "Standard"}, "Q_PILOT_SPD_DN": {"Description": "The maximum vertical velocity the pilot may request in m/s going down. If 0, uses Q_PILOT_SPD_UP value.", "DisplayName": "Pilot maximum vertical speed down", "Increment": "0.1", "Range": {"high": "5", "low": "0.5"}, "Units": "m/s", "User": "Standard"}, "Q_PILOT_SPD_UP": {"Description": "The maximum ascending vertical velocity the pilot may request in m/s", "DisplayName": "Pilot maximum vertical speed up", "Increment": "0.1", "Range": {"high": "5", "low": "0.5"}, "Units": "m/s", "User": "Standard"}, "Q_PLT_Y_EXPO": {"Description": "Pilot controlled yaw expo to allow faster rotation when stick at edges", "DisplayName": "Pilot controlled yaw expo", "Range": {"high": "1.0", "low": "-0.5"}, "User": "Advanced", "Values": {"0": "Disabled", "0.1": "Very Low", "0.2": "Low", "0.3": "Medium", "0.4": "High", "0.5": "Very High"}}, "Q_PLT_Y_RATE": {"Description": "Pilot controlled yaw rate max. Used in all pilot controlled modes except QAcro", "DisplayName": "Pilot controlled yaw rate", "Range": {"high": "360", "low": "1"}, "Units": "deg/s", "User": "Standard"}, "Q_PLT_Y_RATE_TC": {"Description": "Pilot yaw rate control input time constant. Low numbers lead to sharper response, higher numbers to softer response.", "DisplayName": "Pilot yaw rate control input time constant", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "Units": "s", "User": "Standard", "Values": {"0.05": "Very Crisp", "0.1": "Crisp", "0.15": "Medium", "0.2": "Soft", "0.5": "Very Soft"}}, "Q_P_ACCZ_D": {"Description": "Acceleration (vertical) controller D gain. Compensates for short-term change in desired vertical acceleration vs actual acceleration", "DisplayName": "Acceleration (vertical) controller D gain", "Range": {"high": "0.400", "low": "0.000"}, "User": "Standard"}, "Q_P_ACCZ_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Accel (vertical) Derivative FeedForward Gain", "Increment": "0.0001", "Range": {"high": "0.02", "low": "0"}, "User": "Advanced"}, "Q_P_ACCZ_FF": {"Description": "Acceleration (vertical) controller feed forward", "DisplayName": "Acceleration (vertical) controller feed forward", "Increment": "0.001", "Range": {"high": "0.5", "low": "0"}, "User": "Standard"}, "Q_P_ACCZ_FLTD": {"Description": "Acceleration (vertical) controller derivative frequency in Hz", "DisplayName": "Acceleration (vertical) controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "1"}, "Units": "Hz", "User": "Standard"}, "Q_P_ACCZ_FLTE": {"Description": "Acceleration (vertical) controller error frequency in Hz", "DisplayName": "Acceleration (vertical) controller error frequency in Hz", "Increment": "1", "Range": {"high": "100", "low": "1"}, "Units": "Hz", "User": "Standard"}, "Q_P_ACCZ_FLTT": {"Description": "Acceleration (vertical) controller target frequency in Hz", "DisplayName": "Acceleration (vertical) controller target frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "1"}, "Units": "Hz", "User": "Standard"}, "Q_P_ACCZ_I": {"Description": "Acceleration (vertical) controller I gain. Corrects long-term difference in desired vertical acceleration and actual acceleration", "DisplayName": "Acceleration (vertical) controller I gain", "Range": {"high": "3.000", "low": "0.000"}, "User": "Standard"}, "Q_P_ACCZ_IMAX": {"Description": "Acceleration (vertical) controller I gain maximum. Constrains the maximum pwm that the I term will generate", "DisplayName": "Acceleration (vertical) controller I gain maximum", "Range": {"high": "1000", "low": "0"}, "Units": "d%", "User": "Standard"}, "Q_P_ACCZ_NEF": {"Description": "Accel (vertical) Error notch filter index", "DisplayName": "Accel (vertical) Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_P_ACCZ_NTF": {"Description": "Accel (vertical) Target notch filter index", "DisplayName": "Accel (vertical) Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "Q_P_ACCZ_P": {"Description": "Acceleration (vertical) controller P gain. Converts the difference between desired vertical acceleration and actual acceleration into a motor output", "DisplayName": "Acceleration (vertical) controller P gain", "Increment": "0.05", "Range": {"high": "1.500", "low": "0.200"}, "User": "Standard"}, "Q_P_ACCZ_PDMX": {"Description": "Acceleration (vertical) controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Acceleration (vertical) controller PD sum maximum", "Range": {"high": "1000", "low": "0"}, "Units": "d%"}, "Q_P_ACCZ_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Accel (vertical) slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "Q_P_ACC_XY_FILT": {"Description": "Lower values will slow the response of the navigation controller and reduce twitchiness", "DisplayName": "XY Acceleration filter cutoff frequency", "Increment": "0.1", "Range": {"high": "5", "low": "0.5"}, "Units": "Hz", "User": "Advanced"}, "Q_P_ANGLE_MAX": {"Description": "Maximum lean angle autopilot can request. Set to zero to use ANGLE_MAX parameter value", "DisplayName": "Position Control Angle Max", "Increment": "1", "Range": {"high": "45", "low": "0"}, "Units": "deg", "User": "Advanced"}, "Q_P_JERK_XY": {"Description": "Jerk limit of the horizontal kinematic path generation used to determine how quickly the aircraft varies the acceleration target", "DisplayName": "Jerk limit for the horizontal kinematic input shaping", "Increment": "1", "Range": {"high": "20", "low": "1"}, "Units": "m/s/s/s", "User": "Advanced"}, "Q_P_JERK_Z": {"Description": "Jerk limit of the vertical kinematic path generation used to determine how quickly the aircraft varies the acceleration target", "DisplayName": "Jerk limit for the vertical kinematic input shaping", "Increment": "1", "Range": {"high": "50", "low": "5"}, "Units": "m/s/s/s", "User": "Advanced"}, "Q_P_POSXY_P": {"Description": "Position controller P gain. Converts the distance (in the latitude direction) to the target location into a desired speed which is then passed to the loiter latitude rate controller", "DisplayName": "Position (horizontal) controller P gain", "Range": {"high": "2.000", "low": "0.500"}, "User": "Standard"}, "Q_P_POSZ_P": {"Description": "Position (vertical) controller P gain. Converts the difference between the desired altitude and actual altitude into a climb or descent rate which is passed to the throttle rate controller", "DisplayName": "Position (vertical) controller P gain", "Range": {"high": "3.000", "low": "1.000"}, "User": "Standard"}, "Q_P_VELXY_D": {"Description": "Velocity (horizontal) D gain. Corrects short-term changes in velocity", "DisplayName": "Velocity (horizontal) D gain", "Increment": "0.001", "Range": {"high": "1.00", "low": "0.00"}, "User": "Advanced"}, "Q_P_VELXY_FF": {"Description": "Velocity (horizontal) feed forward gain. Converts the difference between desired velocity to a target acceleration", "DisplayName": "Velocity (horizontal) feed forward gain", "Increment": "0.01", "Range": {"high": "6", "low": "0"}, "User": "Advanced"}, "Q_P_VELXY_FLTD": {"Description": "Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for D term", "DisplayName": "Velocity (horizontal) input filter", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "Q_P_VELXY_FLTE": {"Description": "Velocity (horizontal) input filter. This filter (in Hz) is applied to the input for P and I terms", "DisplayName": "Velocity (horizontal) input filter", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "Q_P_VELXY_I": {"Description": "Velocity (horizontal) I gain. Corrects long-term difference between desired and actual velocity to a target acceleration", "DisplayName": "Velocity (horizontal) I gain", "Increment": "0.01", "Range": {"high": "1.00", "low": "0.02"}, "User": "Advanced"}, "Q_P_VELXY_IMAX": {"Description": "Velocity (horizontal) integrator maximum. Constrains the target acceleration that the I gain will output", "DisplayName": "Velocity (horizontal) integrator maximum", "Increment": "10", "Range": {"high": "4500", "low": "0"}, "Units": "cm/s/s", "User": "Advanced"}, "Q_P_VELXY_P": {"Description": "Velocity (horizontal) P gain. Converts the difference between desired and actual velocity to a target acceleration", "DisplayName": "Velocity (horizontal) P gain", "Increment": "0.1", "Range": {"high": "6.0", "low": "0.1"}, "User": "Advanced"}, "Q_P_VELZ_D": {"Description": "Velocity (vertical) controller D gain. Corrects short-term changes in velocity", "DisplayName": "Velocity (vertical) controller D gain", "Increment": "0.001", "Range": {"high": "1.00", "low": "0.00"}, "User": "Advanced"}, "Q_P_VELZ_FF": {"Description": "Velocity (vertical) controller Feed Forward gain. Produces an output that is proportional to the magnitude of the target", "DisplayName": "Velocity (vertical) controller Feed Forward gain", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "Q_P_VELZ_FLTD": {"Description": "Velocity (vertical) input filter for D term. This filter (in Hz) is applied to the input for D terms", "DisplayName": "Velocity (vertical) input filter for D term", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "Q_P_VELZ_FLTE": {"Description": "Velocity (vertical) error filter. This filter (in Hz) is applied to the input for P and I terms", "DisplayName": "Velocity (vertical) error filter", "Range": {"high": "100", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "Q_P_VELZ_I": {"Description": "Velocity (vertical) controller I gain. Corrects long-term difference in desired velocity to a target acceleration", "DisplayName": "Velocity (vertical) controller I gain", "Increment": "0.01", "Range": {"high": "1.00", "low": "0.02"}, "User": "Advanced"}, "Q_P_VELZ_IMAX": {"Description": "Velocity (vertical) controller I gain maximum. Constrains the target acceleration that the I gain will output", "DisplayName": "Velocity (vertical) controller I gain maximum", "Range": {"high": "8.000", "low": "1.000"}, "User": "Standard"}, "Q_P_VELZ_P": {"Description": "Velocity (vertical) controller P gain. Converts the difference between desired vertical speed and actual speed into a desired acceleration that is passed to the throttle acceleration controller", "DisplayName": "Velocity (vertical) controller P gain", "Range": {"high": "8.000", "low": "1.000"}, "User": "Standard"}, "Q_RC_SPEED": {"Description": "This is the PWM refresh rate in Hz for QuadPlane quad motors", "DisplayName": "RC output speed in Hz", "Increment": "10", "Range": {"high": "500", "low": "50"}, "Units": "Hz", "User": "Standard"}, "Q_RTL_ALT": {"Description": "The altitude which QRTL mode heads to initially", "DisplayName": "QRTL return altitude", "Increment": "1", "Range": {"high": "200", "low": "1"}, "Units": "m", "User": "Standard"}, "Q_RTL_ALT_MIN": {"Description": "If VTOL motors are active QRTL mode will VTOL climb to at least this altitude before returning home. If outside 150% the larger of WP_LOITER_RAD and RTL_RADIUS the vehicle will VTOL climb to Q_RTL_ALT. This parameter has no effect if the vehicle is in forward flight. Should be between Q_LAND_FINAL_ALT and Q_RTL_ALT", "DisplayName": "QRTL minimum altitude", "Increment": "1", "Range": {"high": "200", "low": "1"}, "Units": "m", "User": "Standard"}, "Q_RTL_MODE": {"Description": "If this is set to 1 then an RTL will change to QRTL when within RTL_RADIUS meters of the RTL destination, VTOL approach: vehicle will RTL at RTL alt and circle with a radius of Q_FW_LND_APR_RAD down to Q_RTL_ALT and then transition into the wind and QRTL, see 'AUTO VTOL Landing', QRTL Always: do a QRTL instead of RTL", "DisplayName": "VTOL RTL mode", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled", "2": "VTOL approach", "3": "QRTL Always"}}, "Q_TAILSIT_ANGLE": {"Description": "This is the pitch angle at which tailsitter aircraft will change from VTOL control to fixed wing control.", "DisplayName": "Tailsitter fixed wing transition angle", "Range": {"high": "80", "low": "5"}, "Units": "deg"}, "Q_TAILSIT_ANG_VT": {"Description": "This is the pitch angle at which tailsitter aircraft will change from fixed wing control to VTOL control, if zero Q_TAILSIT_ANGLE will be used", "DisplayName": "Tailsitter VTOL transition angle", "Range": {"high": "80", "low": "5"}, "Units": "deg"}, "Q_TAILSIT_DSKLD": {"Description": "This is the vehicle weight in kg divided by the total disk area of all propellers in m^2. Only used with Q_TAILSIT_GSCMSK = 4", "DisplayName": "Tailsitter disk loading", "Range": {"high": "50", "low": "0"}, "Units": "kg/m/m", "User": "Standard"}, "Q_TAILSIT_ENABLE": {"Description": "This enables Tailsitter functionality. A value of 2 forces Qassist active and always stabilize in forward flight with airmode for stabilisation at 0 throttle, for use on vehicles with no control surfaces, vehicle will not arm in forward flight modes, see also Q_OPTIONS \"Mtrs_Only_Qassist\"", "DisplayName": "Enable Tailsitter", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Enable", "2": "Enable Always"}}, "Q_TAILSIT_GSCMAX": {"Description": "Maximum gain scaling for tailsitter Q_TAILSIT_GSCMSK options", "DisplayName": "Maximum tailsitter gain scaling", "Range": {"high": "5", "low": "1"}, "User": "Standard"}, "Q_TAILSIT_GSCMIN": {"Description": "Minimum gain scaling for tailsitter Q_TAILSIT_GSCMSK options", "DisplayName": "Minimum tailsitter gain scaling", "Range": {"high": "1", "low": "0.1"}, "User": "Standard"}, "Q_TAILSIT_GSCMSK": {"Bitmask": {"0": "Throttle", "1": "ATT_THR", "2": "Disk Theory", "3": "Altitude correction"}, "Description": "Bitmask of gain scaling methods to be applied: Throttle: scale gains with throttle, ATT_THR: reduce gain at high throttle/tilt, 2:Disk theory velocity calculation, requires Q_TAILSIT_DSKLD to be set, ATT_THR must not be set, 3:Altitude correction, scale with air density", "DisplayName": "Tailsitter gain scaling mask", "User": "Standard"}, "Q_TAILSIT_INPUT": {"Bitmask": {"0": "PlaneMode", "1": "BodyFrameRoll"}, "Description": "This controls whether stick input when hovering as a tailsitter follows the conventions for fixed wing hovering or multicopter hovering. When PlaneMode is not enabled (bit0 = 0) the roll stick will roll the aircraft in earth frame and yaw stick will yaw in earth frame. When PlaneMode input is enabled, the roll and yaw sticks are swapped so that the roll stick controls earth-frame yaw and rudder controls earth-frame roll. When body-frame roll is enabled (bit1 = 1), the yaw stick controls earth-frame yaw rate and the roll stick controls roll in the tailsitter's body frame when flying level.", "DisplayName": "Tailsitter input type bitmask"}, "Q_TAILSIT_MIN_VO": {"Description": "Use in conjunction with disk theory gain scaling and Q_TAILSIT_DSKLD to specify minumum airspeed over control surfaces, this will be used to boost throttle, when descending for example, 0 disables", "DisplayName": "Tailsitter Disk loading minimum outflow speed", "Range": {"high": "15", "low": "0"}}, "Q_TAILSIT_MOTMX": {"Bitmask": {"0": "Motor 1", "1": "Motor 2", "10": "Motor 11", "11": "Motor 12", "2": "Motor 3", "3": "Motor 4", "4": "Motor 5", "5": "Motor 6", "6": "Motor 7", "7": "Motor 8", "8": "Motor 9", "9": "Motor 10"}, "Description": "Bitmask of motors to remain active in forward flight for a 'Copter' tailsitter. Non-zero indicates airframe is a Copter tailsitter and uses copter style motor layouts determined by Q_FRAME_CLASS and Q_FRAME_TYPE. This should be zero for non-Copter tailsitters.", "DisplayName": "Tailsitter motor mask", "User": "Standard"}, "Q_TAILSIT_RAT_FW": {"Description": "The pitch rate at which tailsitter aircraft will pitch down in the transition from VTOL to forward flight", "DisplayName": "Tailsitter VTOL to forward flight transition rate", "Range": {"high": "500", "low": "10"}, "Units": "deg/s"}, "Q_TAILSIT_RAT_VT": {"Description": "The pitch rate at which tailsitter aircraft will pitch up in the transition from forward flight to VTOL", "DisplayName": "Tailsitter forward flight to VTOL transition rate", "Range": {"high": "500", "low": "10"}, "Units": "deg/s"}, "Q_TAILSIT_RLL_MX": {"Description": "Maximum Allowed roll angle for tailsitters. If this is zero then Q_ANGLE_MAX is used.", "DisplayName": "Maximum Roll angle", "Range": {"high": "80", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_TAILSIT_THR_VT": {"Description": "Throttle used during FW->VTOL transition, -1 uses hover throttle", "DisplayName": "Tailsitter forward flight to VTOL transition throttle", "Range": {"high": "100", "low": "-1"}, "Units": "%"}, "Q_TAILSIT_VFGAIN": {"Description": "This controls the amount of vectored thrust control used in forward flight for a vectored tailsitter", "DisplayName": "Tailsitter vector thrust gain in forward flight", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "Q_TAILSIT_VHGAIN": {"Description": "This controls the amount of vectored thrust control used in hover for a vectored tailsitter", "DisplayName": "Tailsitter vector thrust gain in hover", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "Q_TAILSIT_VHPOW": {"Description": "This controls the amount of extra pitch given to the vectored control when at high pitch errors", "DisplayName": "Tailsitter vector thrust gain power", "Increment": "0.1", "Range": {"high": "4", "low": "0"}}, "Q_TAILSIT_VT_P_P": {"Description": "Scale from PID output to control surface, for use where a single axis is actuated by both motors and Tilt/control surface on a copter style tailsitter, increase to favor control surfaces and reduce motor output by reducing gains", "DisplayName": "Tailsitter VTOL control surface pitch gain", "Range": {"high": "2", "low": "0"}}, "Q_TAILSIT_VT_R_P": {"Description": "Scale from PID output to control surface, for use where a single axis is actuated by both motors and Tilt/control surface on a copter style tailsitter, increase to favor control surfaces and reduce motor output by reducing gains", "DisplayName": "Tailsitter VTOL control surface roll gain", "Range": {"high": "2", "low": "0"}}, "Q_TAILSIT_VT_Y_P": {"Description": "Scale from PID output to control surface, for use where a single axis is actuated by both motors and Tilt/control surface on a copter style tailsitter, increase to favor control surfaces and reduce motor output by reducing gains", "DisplayName": "Tailsitter VTOL control surface yaw gain", "Range": {"high": "2", "low": "0"}}, "Q_THROTTLE_EXPO": {"Description": "Amount of curvature in throttle curve: 0 is linear, 1 is cubic", "DisplayName": "Throttle expo strength", "Increment": ".1", "Range": {"high": "1", "low": "0"}, "User": "Advanced"}, "Q_TILT_ENABLE": {"Description": "This enables Tiltrotor functionality", "DisplayName": "Enable Tiltrotor functionality", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disable", "1": "Enable"}}, "Q_TILT_FIX_ANGLE": {"Description": "This is the angle the motors tilt down when at maximum output for forward flight. Set this to a non-zero value to enable vectoring for roll/pitch in forward flight on tilt-vectored aircraft", "DisplayName": "Fixed wing tiltrotor angle", "Range": {"high": "30", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_TILT_FIX_GAIN": {"Description": "This is the gain for use of tilting motors in fixed wing flight for tilt vectored quadplanes", "DisplayName": "Fixed wing tiltrotor gain", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "Q_TILT_MASK": {"Bitmask": {"0": "Motor 1", "1": "Motor 2", "10": "Motor 11", "11": "Motor 12", "2": "Motor 3", "3": "Motor 4", "4": "Motor 5", "5": "Motor 6", "6": "Motor 7", "7": "Motor 8", "8": "Motor 9", "9": "Motor 10"}, "Description": "This is a bitmask of motors that are tiltable in a tiltrotor (or tiltwing). The mask is in terms of the standard motor order for the frame type.", "DisplayName": "Tiltrotor mask", "User": "Standard"}, "Q_TILT_MAX": {"Description": "This is the maximum angle of the tiltable motors at which multicopter control will be enabled. Beyond this angle the plane will fly solely as a fixed wing aircraft and the motors will tilt to their maximum angle at the TILT_RATE", "DisplayName": "Tiltrotor maximum VTOL angle", "Increment": "1", "Range": {"high": "80", "low": "20"}, "Units": "deg", "User": "Standard"}, "Q_TILT_RATE_DN": {"Description": "This is the maximum speed at which the motor angle will change for a tiltrotor when moving from hover to forward flight. When this is zero the Q_TILT_RATE_UP value is used.", "DisplayName": "Tiltrotor downwards tilt rate", "Increment": "1", "Range": {"high": "300", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "Q_TILT_RATE_UP": {"Description": "This is the maximum speed at which the motor angle will change for a tiltrotor when moving from forward flight to hover", "DisplayName": "Tiltrotor upwards tilt rate", "Increment": "1", "Range": {"high": "300", "low": "10"}, "Units": "deg/s", "User": "Standard"}, "Q_TILT_TYPE": {"Description": "This is the type of tiltrotor when TILT_MASK is non-zero. A continuous tiltrotor can tilt the rotors to any angle on demand. A binary tiltrotor assumes a retract style servo where the servo is either fully forward or fully up. In both cases the servo can't move faster than Q_TILT_RATE. A vectored yaw tiltrotor will use the tilt of the motors to control yaw in hover, Bicopter tiltrotor must use the tailsitter frame class (10)", "DisplayName": "Tiltrotor type", "Values": {"0": "Continuous", "1": "Binary", "2": "VectoredYaw", "3": "Bicopter"}}, "Q_TILT_WING_FLAP": {"Description": "For use on tilt wings, the wing will tilt up to this angle for flap, transition will be complete when the wing reaches this angle from the forward fight position, 0 disables", "DisplayName": "Tiltrotor tilt angle that will be used as flap", "Increment": "1", "Range": {"high": "15", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_TILT_YAW_ANGLE": {"Description": "This is the angle of the tilt servos when in VTOL mode and at minimum output (fully back). This needs to be set in addition to Q_TILT_TYPE=2, to enable vectored control for yaw in tilt quadplanes. This is also used to limit the forward travel of bicopter tilts(Q_TILT_TYPE=3) when in VTOL modes.", "DisplayName": "Tilt minimum angle for vectored yaw", "Range": {"high": "30", "low": "0"}}, "Q_TKOFF_ARSP_LIM": {"Description": "Airspeed limit during takeoff. If the airspeed exceeds this level the vehicle will switch to QLAND. This is useful for ensuring that you don't takeoff into excessively strong wind. If set to 0 there is no limit on airspeed during takeoff.", "DisplayName": "Takeoff airspeed limit", "Increment": "1", "Range": {"high": "20", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "Q_TKOFF_FAIL_SCL": {"Description": "Scalar for how long past the expected takeoff time a takeoff should be considered as failed and the vehicle will switch to QLAND. If set to 0 there is no limit on takeoff time.", "DisplayName": "Takeoff time failure scalar", "Increment": "5.1", "Range": {"high": "5.0", "low": "1.1"}, "User": "Advanced"}, "Q_TRANSITION_MS": {"Description": "Transition time in milliseconds after minimum airspeed is reached", "DisplayName": "Transition time", "Range": {"high": "30000", "low": "500"}, "Units": "ms", "User": "Advanced"}, "Q_TRANS_DECEL": {"Description": "This is deceleration rate that will be used in calculating the stopping distance when transitioning from fixed wing flight to multicopter flight.", "DisplayName": "Transition deceleration", "Increment": "0.1", "Range": {"high": "5", "low": "0.2"}, "Units": "m/s/s", "User": "Standard"}, "Q_TRANS_FAIL": {"Description": "Maximum time allowed for forward transitions, exceeding this time will cancel the transition and the aircraft will immediately change to the mode set by Q_TRANS_FAIL_ACT or finish the transition depending on Q_OPTIONS bit 19. 0 for no limit.", "DisplayName": "Quadplane transition failure time", "Increment": "1", "Range": {"high": "20", "low": "0"}, "Units": "s", "User": "Advanced"}, "Q_TRANS_FAIL_ACT": {"Description": "This sets the mode that is changed to when Q_TRANS_FAIL time elapses, if set. See also Q_OPTIONS bit 19: CompleteTransition if Q_TRANS_FAIL", "DisplayName": "Quadplane transition failure action", "Values": {"-1": "Warn only", "0": "QLand", "1": "QRTL"}}, "Q_TRAN_PIT_MAX": {"Description": "Maximum pitch during transition to auto fixed wing flight", "DisplayName": "Transition max pitch", "Increment": "1", "Range": {"high": "30", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_TRIM_PITCH": {"Description": "This sets the compensation for the pitch angle trim difference between calibrated AHRS level and vertical flight pitch. NOTE! this is relative to calibrated AHRS trim, not forward flight trim which includes PTCH_TRIM_DEG. For tailsitters, this is relative to a baseline of 90 degrees in AHRS.", "DisplayName": "Quadplane AHRS trim pitch", "Increment": "0.1", "Range": {"high": "+10", "low": "-10"}, "RebootRequired": "True", "Units": "deg", "User": "Advanced"}, "Q_VFWD_ALT": {"Description": "Controls altitude to disable forward velocity assist when below this relative altitude. This is useful to keep the forward velocity propeller from hitting the ground. Rangefinder height data is incorporated when available.", "DisplayName": "Forward velocity alt cutoff", "Increment": "0.25", "Range": {"high": "10", "low": "0"}, "Units": "m", "User": "Standard"}, "Q_VFWD_GAIN": {"Description": "The use of this parameter is no longer recommended and has been superseded by a method that works in all VTOL modes with the exception of QAUTOTUNE which is controlled by the Q_FWD_THR_USE parameter. This Q_VFD_GAIN parameter controls use of the forward motor in VTOL modes that use the velocity controller. Set to 0 to disable this function. A value of 0.05 is a good place to start if you want to use the forward motor for position control. No forward motor will be used in QSTABILIZE or QHOVER modes. Use with QLOITER for position hold with the forward motor. ", "DisplayName": "Forward velocity hold gain", "Increment": "0.01", "Range": {"high": "0.5", "low": "0"}, "User": "Standard"}, "Q_WP_ACCEL": {"Description": "Defines the horizontal acceleration in cm/s/s used during missions", "DisplayName": "Waypoint Acceleration ", "Increment": "10", "Range": {"high": "500", "low": "50"}, "Units": "cm/s/s", "User": "Standard"}, "Q_WP_ACCEL_C": {"Description": "Defines the maximum cornering acceleration in cm/s/s used during missions. If zero uses 2x accel value.", "DisplayName": "Waypoint Cornering Acceleration", "Increment": "10", "Range": {"high": "500", "low": "0"}, "Units": "cm/s/s", "User": "Standard"}, "Q_WP_ACCEL_Z": {"Description": "Defines the vertical acceleration in cm/s/s used during missions", "DisplayName": "Waypoint Vertical Acceleration", "Increment": "10", "Range": {"high": "500", "low": "50"}, "Units": "cm/s/s", "User": "Standard"}, "Q_WP_JERK": {"Description": "Defines the horizontal jerk in m/s/s used during missions", "DisplayName": "Waypoint Jerk", "Range": {"high": "20", "low": "1"}, "Units": "m/s/s/s", "User": "Standard"}, "Q_WP_RADIUS": {"Description": "Defines the distance from a waypoint, that when crossed indicates the wp has been hit.", "DisplayName": "Waypoint Radius", "Increment": "1", "Range": {"high": "1000", "low": "5"}, "Units": "cm", "User": "Standard"}, "Q_WP_RFND_USE": {"Description": "This controls if waypoint missions use rangefinder for terrain following", "DisplayName": "Waypoint missions use rangefinder for terrain following", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "Q_WP_SPEED": {"Description": "Defines the speed in cm/s which the aircraft will attempt to maintain horizontally during a WP mission", "DisplayName": "Waypoint Horizontal Speed Target", "Increment": "50", "Range": {"high": "2000", "low": "20"}, "Units": "cm/s", "User": "Standard"}, "Q_WP_SPEED_DN": {"Description": "Defines the speed in cm/s which the aircraft will attempt to maintain while descending during a WP mission", "DisplayName": "Waypoint Descent Speed Target", "Increment": "10", "Range": {"high": "500", "low": "10"}, "Units": "cm/s", "User": "Standard"}, "Q_WP_SPEED_UP": {"Description": "Defines the speed in cm/s which the aircraft will attempt to maintain while climbing during a WP mission", "DisplayName": "Waypoint Climb Speed Target", "Increment": "50", "Range": {"high": "1000", "low": "10"}, "Units": "cm/s", "User": "Standard"}, "Q_WP_TER_MARGIN": {"Description": "Waypoint Terrain following altitude margin. Vehicle will stop if distance from target altitude is larger than this margin (in meters)", "DisplayName": "Waypoint Terrain following altitude margin", "Range": {"high": "100", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "Q_WVANE_ANG_MIN": {"Description": "The minimum target roll/pitch angle before active weathervaning will start. This provides a dead zone that is particularly useful for poorly trimmed quadplanes.", "DisplayName": "Weathervaning min angle", "Increment": "0.1", "Range": {"high": "10", "low": "0"}, "Units": "deg", "User": "Standard"}, "Q_WVANE_ENABLE": {"Description": "Enable weather vaning. When active, the aircraft will automatically yaw into wind when in a VTOL position controlled mode. Pilot yaw commands override the weathervaning action.", "DisplayName": "Enable", "User": "Standard", "Values": {"-1": "Only use during takeoffs or landing see weathervane takeoff and land override parameters", "0": "Disabled", "1": "Nose into wind", "2": "Nose or tail into wind", "3": "Side into wind", "4": "tail into wind"}}, "Q_WVANE_GAIN": {"Description": "This converts the target roll/pitch angle of the aircraft into the correcting (into wind) yaw rate. e.g. Gain = 2, roll = 30 deg, pitch = 0 deg, yaw rate = 60 deg/s.", "DisplayName": "Weathervaning gain", "Increment": "0.1", "Range": {"high": "4", "low": "0.5"}, "User": "Standard"}, "Q_WVANE_HGT_MIN": {"Description": "Above this height weathervaning is permitted. If RNGFND_LANDING is enabled or terrain is enabled then this parameter sets height AGL. Otherwise this parameter sets height above home. Set zero to ignore minimum height requirement to activate weathervaning", "DisplayName": "Weathervaning min height", "Increment": "1", "Range": {"high": "50", "low": "0"}, "Units": "m", "User": "Standard"}, "Q_WVANE_LAND": {"Description": "Override the weather vaning behaviour when in landing", "DisplayName": "Landing override", "User": "Standard", "Values": {"-1": "No override", "0": "Disabled", "1": "Nose into wind", "2": "Nose or tail into wind", "3": "Side into wind", "4": "tail into wind"}}, "Q_WVANE_OPTIONS": {"Bitmask": {"0": "Use pitch when nose or tail-in for faster weathervaning"}, "Description": "Options impacting weathervaning behaviour", "DisplayName": "Weathervaning options", "User": "Standard"}, "Q_WVANE_SPD_MAX": {"Description": "Below this ground speed weathervaning is permitted. Set to 0 to ignore this condition when checking if vehicle should weathervane.", "DisplayName": "Weathervaning max ground speed", "Increment": "0.1", "Range": {"high": "50", "low": "0"}, "Units": "m/s", "User": "Standard"}, "Q_WVANE_TAKEOFF": {"Description": "Override the weather vaning behaviour when in takeoffs", "DisplayName": "Takeoff override", "User": "Standard", "Values": {"-1": "No override", "0": "Disabled", "1": "Nose into wind", "2": "Nose or tail into wind", "3": "Side into wind", "4": "tail into wind"}}, "Q_WVANE_VELZ_MAX": {"Description": "The maximum climb or descent speed that the vehicle will still attempt to weathervane. Set to 0 to ignore this condition to get the aircraft to weathervane at any climb/descent rate. This is particularly useful for aircraft with low disc loading that struggle with yaw control in decent.", "DisplayName": "Weathervaning max vertical speed", "Increment": "0.1", "Range": {"high": "5", "low": "0"}, "Units": "m/s", "User": "Standard"}, "Q_YAW_RATE_MAX": {"Description": "This is the maximum yaw rate for pilot input on rudder stick in degrees/second", "DisplayName": "Maximum yaw rate", "Increment": "1", "Range": {"high": "500", "low": "50"}, "Units": "deg/s", "User": "Standard"}, "RALLY_INCL_HOME": {"Description": "Controls if Home is included as a Rally point (i.e. as a safe landing place) for RTL", "DisplayName": "Rally Include Home", "User": "Standard", "Values": {"0": "DoNotIncludeHome", "1": "IncludeHome"}}, "RALLY_LIMIT_KM": {"Description": "Maximum distance to rally point. If the closest rally point is more than this number of kilometers from the current position and the home location is closer than any of the rally points from the current position then do RTL to home rather than to the closest rally point. This prevents a leftover rally point from a different airfield being used accidentally. If this is set to 0 then the closest rally point is always used.", "DisplayName": "Rally Limit", "Increment": "0.1", "Units": "km", "User": "Advanced"}, "RALLY_TOTAL": {"Description": "Number of rally points currently loaded", "DisplayName": "Rally Total", "User": "Advanced"}, "RC10_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC10_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC10_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC10_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC10_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC10_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC11_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC11_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC11_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC11_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC11_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC11_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC12_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC12_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC12_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC12_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC12_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC12_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC13_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC13_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC13_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC13_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC13_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC13_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC14_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC14_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC14_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC14_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC14_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC14_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC15_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC15_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC15_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC15_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC15_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC15_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC16_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC16_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC16_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC16_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC16_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC16_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC1_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC1_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC1_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC1_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC1_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC1_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC2_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC2_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC2_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC2_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC2_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC2_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC3_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC3_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC3_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC3_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC3_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC3_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC4_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC4_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC4_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC4_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC4_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC4_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC5_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC5_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC5_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC5_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC5_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC5_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC6_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC6_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC6_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC6_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC6_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC6_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC7_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC7_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC7_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC7_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC7_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC7_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC8_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC8_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC8_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC8_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC8_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC8_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC9_DZ": {"Description": "PWM dead zone in microseconds around trim or bottom", "DisplayName": "RC dead-zone", "Range": {"high": "200", "low": "0"}, "Units": "PWM", "User": "Advanced"}, "RC9_MAX": {"Description": "RC maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC max PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC9_MIN": {"Description": "RC minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC min PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RC9_OPTION": {"Description": "Function assigned to this RC channel", "DisplayName": "RC input option", "User": "Standard", "Values": {"0": "Do Nothing", "100": "KillIMU1", "101": "KillIMU2", "102": "Camera Mode Toggle", "105": "GPS Disable Yaw", "106": "Disable Airspeed Use", "107": "Enable FW Autotune", "108": "QRTL Mode", "11": "Fence Enable", "110": "KillIMU3", "112": "SwitchExternalAHRS", "150": "CRUISE Mode", "153": "ArmDisarm (4.2 and higher)", "154": "ArmDisarm with Quadplane AirMode (4.2 and higher)", "155": "Set roll pitch and yaw trim to current servo and RC", "157": "Force FS Action to FBWA", "158": "Optflow Calibration", "16": "AUTO Mode", "160": "Weathervane Enable", "162": "FFT Tune", "163": "Mount Lock", "164": "Pause Stream Logging", "165": "Arm/Emergency Motor Stop", "166": "Camera Record Video", "167": "Camera Zoom", "168": "Camera Manual Focus", "169": "Camera Auto Focus", "170": "QSTABILIZE Mode", "171": "Calibrate Compasses", "172": "Battery MPPT Enable", "173": "Plane AUTO Mode Landing Abort", "174": "Camera Image Tracking", "175": "Camera Lens", "176": "Quadplane Fwd Throttle Override enable", "177": "Mount LRF enable", "208": "Flap", "209": "VTOL Forward Throttle", "210": "Airbrakes", "212": "Mount1 Roll", "213": "Mount1 Pitch", "214": "Mount1 Yaw", "215": "Mount2 Roll", "216": "Mount2 Pitch", "217": "Mount2 Yaw", "22": "Parachute Release", "24": "Auto Mission Reset", "27": "Retract Mount1", "28": "Relay1 On/Off", "29": "Landing Gear", "30": "Lost Plane Sound", "300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8", "31": "Motor Emergency Stop", "34": "Relay2 On/Off", "35": "Relay3 On/Off", "36": "Relay4 On/Off", "38": "ADSB Avoidance Enable", "4": "RTL", "41": "ArmDisarm (4.1 and lower)", "43": "InvertedFlight Enable", "46": "RC Override Enable", "51": "MANUAL Mode", "52": "ACRO Mode", "55": "GUIDED Mode", "56": "LOITER Mode", "58": "Clear Waypoints", "62": "Compass Learn", "64": "Reverse Throttle", "65": "GPS Disable", "66": "Relay5 On/Off", "67": "Relay6 On/Off", "72": "CIRCLE Mode", "77": "TAKEOFF Mode", "78": "RunCam Control", "79": "RunCam OSD Control", "81": "Disarm", "82": "QAssist 3pos", "84": "AirMode", "85": "Generator", "86": "Non Auto Terrain Follow Disable", "87": "Crow Select", "88": "Soaring Enable", "89": "Landing Flare", "9": "Camera Trigger", "90": "EKF Pos Source", "91": "Airspeed Ratio Calibration", "92": "FBWA Mode", "94": "VTX Power", "95": "FBWA taildragger takeoff mode", "96": "Trigger re-reading of mode switch", "98": "TRAINING Mode"}}, "RC9_REVERSED": {"Description": "Reverse channel input. Set to 0 for normal operation. Set to 1 to reverse this input channel.", "DisplayName": "RC reversed", "User": "Advanced", "Values": {"0": "Normal", "1": "Reversed"}}, "RC9_TRIM": {"Description": "RC trim (neutral) PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "RC trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Advanced"}, "RCK_DEBUG": {"Description": "Sends Rockblock debug text to GCS via statustexts", "DisplayName": "Display Rockblock debugging text", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RCK_ENABLE": {"Description": "Enables the Rockblock sending and recieving", "DisplayName": "Enable Message transmission", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RCK_FORCEHL": {"Description": "Automatically enables High Latency mode if not already enabled", "DisplayName": "Force enable High Latency mode", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RCK_PERIOD": {"Description": "When in High Latency mode, send Rockblock updates every N seconds", "DisplayName": "Update rate", "Range": {"high": "600", "low": "0"}, "Units": "s", "User": "Standard"}, "RCMAP_PITCH": {"Description": "Pitch channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Pitch is normally on channel 2, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.", "DisplayName": "Pitch channel", "Increment": "1", "Range": {"high": "16", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "RCMAP_ROLL": {"Description": "Roll channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Roll is normally on channel 1, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.", "DisplayName": "Roll channel", "Increment": "1", "Range": {"high": "16", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "RCMAP_THROTTLE": {"Description": "Throttle channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Throttle is normally on channel 3, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.", "DisplayName": "Throttle channel", "Increment": "1", "Range": {"high": "16", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "RCMAP_YAW": {"Description": "Yaw channel number. This is useful when you have a RC transmitter that can't change the channel order easily. Yaw (also known as rudder) is normally on channel 4, but you can move it to any channel with this parameter. Reboot is required for changes to take effect.", "DisplayName": "Yaw channel", "Increment": "1", "Range": {"high": "16", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "RC_FS_TIMEOUT": {"Description": "RC failsafe will trigger this many seconds after loss of RC", "DisplayName": "RC Failsafe timeout", "Range": {"high": "10.0", "low": "0.5"}, "Units": "s", "User": "Standard"}, "RC_OPTIONS": {"Bitmask": {"0": "Ignore RC Receiver", "1": "Ignore MAVLink Overrides", "10": "Enable multiple receiver support", "11": "Use Link Quality for RSSI with CRSF", "12": "Annotate CRSF flight mode with * on disarm", "13": "Use 420kbaud for ELRS protocol", "2": "Ignore Receiver Failsafe bit but allow other RC failsafes if setup", "3": "FPort Pad", "4": "Log RC input bytes", "5": "Arming check throttle for 0 input", "6": "Skip the arming check for neutral Roll/Pitch/Yaw sticks", "7": "Allow Switch reverse", "8": "Use passthrough for CRSF telemetry", "9": "Suppress CRSF mode/rate message for ELRS systems"}, "Description": "RC input options", "DisplayName": "RC options", "User": "Advanced"}, "RC_OVERRIDE_TIME": {"Description": "Timeout after which RC overrides will no longer be used, and RC input will resume, 0 will disable RC overrides, -1 will never timeout, and continue using overrides until they are disabled", "DisplayName": "RC override timeout", "Range": {"high": "120.0", "low": "0.0"}, "Units": "s", "User": "Advanced"}, "RC_PROTOCOLS": {"Bitmask": {"0": "All", "1": "PPM", "10": "ST24", "11": "FPORT", "12": "FPORT2", "13": "FastSBUS", "14": "DroneCAN", "15": "Ghost", "16": "MAVRadio", "2": "IBUS", "3": "SBUS", "4": "SBUS_NI", "5": "DSM", "6": "SUMD", "7": "SRXL", "8": "SRXL2", "9": "CRSF"}, "Description": "Bitmask of enabled RC protocols. Allows narrowing the protocol detection to only specific types of RC receivers which can avoid issues with incorrect detection. Set to 1 to enable all protocols.", "DisplayName": "RC protocols enabled", "User": "Advanced"}, "RELAY10_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY10_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY10_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY10_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY11_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY11_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY11_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY11_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY12_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY12_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY12_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY12_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY13_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY13_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY13_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY13_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY14_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY14_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY14_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY14_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY15_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY15_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY15_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY15_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY16_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY16_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY16_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY16_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY1_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY1_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY1_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY1_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY2_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY2_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY2_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY2_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY3_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY3_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY3_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY3_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY4_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY4_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY4_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY4_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY5_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY5_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY5_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY5_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY6_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY6_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY6_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY6_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY7_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY7_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY7_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY7_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY8_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY8_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY8_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY8_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RELAY9_DEFAULT": {"Description": "Should the relay default to on or off, this only applies to RELAYx_FUNC \"Relay\" (1). All other uses will pick the appropriate default output state from within the controlling function's parameters. Note that if INVERTED is set then the default is inverted.", "DisplayName": "Relay default state", "User": "Standard", "Values": {"0": "Off", "1": "On", "2": "NoChange"}}, "RELAY9_FUNCTION": {"Description": "The function the relay channel is mapped to.", "DisplayName": "Relay function", "Values": {"0": "None", "1": "Relay", "2": "Ignition", "3": "Parachute", "4": "Camera", "9": "ICE Starter"}}, "RELAY9_INVERTED": {"Description": "Should the relay output signal be inverted. If enabled, relay on would be pin low and relay off would be pin high. NOTE: this impact's DEFAULT.", "DisplayName": "Relay invert output signal", "User": "Standard", "Values": {"0": "Normal", "1": "Inverted"}}, "RELAY9_PIN": {"Description": "Digital pin number for relay control. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Relay pin", "User": "Standard", "Values": {"-1": "Disabled", "1000": "DroneCAN Hardpoint ID 0", "1001": "DroneCAN Hardpoint ID 1", "1002": "DroneCAN Hardpoint ID 2", "1003": "DroneCAN Hardpoint ID 3", "1004": "DroneCAN Hardpoint ID 4", "1005": "DroneCAN Hardpoint ID 5", "1006": "DroneCAN Hardpoint ID 6", "1007": "DroneCAN Hardpoint ID 7", "1008": "DroneCAN Hardpoint ID 8", "1009": "DroneCAN Hardpoint ID 9", "101": "MainOut1", "1010": "DroneCAN Hardpoint ID 10", "1011": "DroneCAN Hardpoint ID 11", "1012": "DroneCAN Hardpoint ID 12", "1013": "DroneCAN Hardpoint ID 13", "1014": "DroneCAN Hardpoint ID 14", "1015": "DroneCAN Hardpoint ID 15", "102": "MainOut2", "103": "MainOut3", "104": "MainOut4", "105": "MainOut5", "106": "MainOut6", "107": "MainOut7", "108": "MainOut8", "113": "BB Blue GP0 pin 6", "116": "BB Blue GP0 pin 5", "49": "BB Blue GP0 pin 4", "50": "AUXOUT1", "51": "AUXOUT2", "52": "AUXOUT3", "53": "AUXOUT4", "54": "AUXOUT5", "55": "AUXOUT6", "57": "BB Blue GP0 pin 3", "62": "BBBMini Pin P8.13"}}, "RLL2SRV_RMAX": {"Description": "This sets the maximum roll rate that the attitude controller will demand (degrees/sec) in angle stabilized modes. Setting it to zero disables this limit.", "DisplayName": "Maximum Roll Rate", "Increment": "1", "Range": {"high": "180", "low": "0"}, "Units": "deg/s", "User": "Advanced"}, "RLL2SRV_TCONST": {"Description": "Time constant in seconds from demanded to achieved roll angle. Most models respond well to 0.5. May be reduced for faster responses, but setting lower than a model can achieve will not help.", "DisplayName": "Roll Time Constant", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.4"}, "Units": "s", "User": "Advanced"}, "RLL_RATE_D": {"Description": "Roll axis rate controller D gain. Compensates for short-term change in desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0.001"}, "User": "Standard"}, "RLL_RATE_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Roll Derivative FeedForward Gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0"}, "User": "Advanced"}, "RLL_RATE_FF": {"Description": "Roll axis rate controller feed forward", "DisplayName": "Roll axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "3.0", "low": "0"}, "User": "Standard"}, "RLL_RATE_FLTD": {"Description": "Roll axis rate controller derivative frequency in Hz", "DisplayName": "Roll axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "0"}, "Units": "Hz", "User": "Standard"}, "RLL_RATE_FLTE": {"Description": "Roll axis rate controller error frequency in Hz", "DisplayName": "Roll axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "RLL_RATE_FLTT": {"Description": "Roll axis rate controller target frequency in Hz", "DisplayName": "Roll axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "RLL_RATE_I": {"Description": "Roll axis rate controller I gain. Corrects long-term difference in desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller I gain", "Increment": "0.01", "Range": {"high": "0.6", "low": "0.01"}, "User": "Standard"}, "RLL_RATE_IMAX": {"Description": "Roll axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Roll axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "RLL_RATE_NEF": {"Description": "Roll Error notch filter index", "DisplayName": "Roll Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "RLL_RATE_NTF": {"Description": "Roll Target notch filter index", "DisplayName": "Roll Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "RLL_RATE_P": {"Description": "Roll axis rate controller P gain. Corrects in proportion to the difference between the desired roll rate vs actual roll rate", "DisplayName": "Roll axis rate controller P gain", "Increment": "0.005", "Range": {"high": "0.35", "low": "0.08"}, "User": "Standard"}, "RLL_RATE_PDMX": {"Description": "Roll axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Roll axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "RLL_RATE_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Roll slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}, "RNGFND1_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND1_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND1_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND1_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND1_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND1_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND1_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND1_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND1_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND1_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND1_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND1_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND1_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND1_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND1_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND1_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND1_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND1_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND1_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND1_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND1_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND1_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND1_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND1_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND2_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND2_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND2_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND2_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND2_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND2_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND2_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND2_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND2_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND2_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND2_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND2_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND2_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND2_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND2_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND2_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND2_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND2_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND2_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND2_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND2_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND2_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND2_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND2_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND3_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND3_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND3_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND3_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND3_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND3_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND3_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND3_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND3_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND3_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND3_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND3_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND3_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND3_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND3_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND3_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND3_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND3_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND3_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND3_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND3_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND3_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND3_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND3_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND4_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND4_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND4_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND4_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND4_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND4_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND4_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND4_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND4_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND4_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND4_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND4_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND4_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND4_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND4_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND4_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND4_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND4_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND4_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND4_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND4_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND4_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND4_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND4_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND5_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND5_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND5_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND5_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND5_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND5_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND5_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND5_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND5_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND5_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND5_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND5_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND5_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND5_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND5_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND5_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND5_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND5_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND5_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND5_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND5_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND5_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND5_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND5_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND6_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND6_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND6_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND6_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND6_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND6_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND6_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND6_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND6_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND6_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND6_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND6_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND6_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND6_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND6_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND6_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND6_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND6_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND6_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND6_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND6_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND6_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND6_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND6_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND7_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND7_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND7_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND7_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND7_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND7_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND7_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND7_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND7_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND7_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND7_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND7_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND7_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND7_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND7_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND7_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND7_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND7_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND7_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND7_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND7_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND7_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND7_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND7_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND8_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND8_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND8_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND8_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND8_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND8_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND8_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND8_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND8_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND8_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND8_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND8_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND8_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND8_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND8_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND8_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND8_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND8_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND8_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND8_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND8_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND8_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND8_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND8_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND9_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFND9_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFND9_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFND9_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND9_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFND9_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFND9_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFND9_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND9_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND9_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND9_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFND9_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFND9_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND9_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFND9_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFND9_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFND9_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFND9_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFND9_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND9_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFND9_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFND9_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND9_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFND9_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFNDA_ADDR": {"Description": "This sets the bus address of the sensor, where applicable. Used for the I2C and DroneCAN sensors to allow for multiple sensors on different addresses.", "DisplayName": "Bus address of sensor", "Increment": "1", "Range": {"high": "127", "low": "0"}, "User": "Standard"}, "RNGFNDA_FUNCTION": {"Description": "Control over what function is used to calculate distance. For a linear function, the distance is (voltage-offset)*scaling. For a inverted function the distance is (offset-voltage)*scaling. For a hyperbolic function the distance is scaling/(voltage-offset). The functions return the distance in meters.", "DisplayName": "Rangefinder function", "User": "Standard", "Values": {"0": "Linear", "1": "Inverted", "2": "Hyperbolic"}}, "RNGFNDA_GNDCLEAR": {"Description": "This parameter sets the expected range measurement(in cm) that the range finder should return when the vehicle is on the ground.", "DisplayName": "Distance (in cm) from the range finder to the ground", "Increment": "1", "Range": {"high": "127", "low": "5"}, "Units": "cm", "User": "Standard"}, "RNGFNDA_MAX_CM": {"Description": "Maximum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder maximum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFNDA_MIN_CM": {"Description": "Minimum distance in centimeters that rangefinder can reliably read", "DisplayName": "Rangefinder minimum distance", "Increment": "1", "Units": "cm", "User": "Standard"}, "RNGFNDA_OFFSET": {"Description": "Offset in volts for zero distance for analog rangefinders. Offset added to distance in centimeters for PWM lidars", "DisplayName": "rangefinder offset", "Increment": "0.001", "Units": "V", "User": "Standard"}, "RNGFNDA_ORIENT": {"Description": "Orientation of rangefinder", "DisplayName": "Rangefinder orientation", "User": "Advanced", "Values": {"0": "Forward", "1": "Forward-Right", "2": "Right", "24": "Up", "25": "Down", "3": "Back-Right", "4": "Back", "5": "Back-Left", "6": "Left", "7": "Forward-Left"}}, "RNGFNDA_PIN": {"Description": "Analog or PWM input pin that rangefinder is connected to. Airspeed ports can be used for Analog input, AUXOUT can be used for PWM input. When using analog pin 103, the maximum value of the input in 3.3V. For PWM input, the pin must be configured as a digital GPIO, see the Wiki's \"GPIOs\" section for details.", "DisplayName": "Rangefinder pin", "User": "Standard", "Values": {"-1": "Not Used", "103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFNDA_POS_X": {"Description": "X position of the rangefinder in body frame. Positive X is forward of the origin. Use the zero range datum point if supplied.", "DisplayName": " X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFNDA_POS_Y": {"Description": "Y position of the rangefinder in body frame. Positive Y is to the right of the origin. Use the zero range datum point if supplied.", "DisplayName": "Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFNDA_POS_Z": {"Description": "Z position of the rangefinder in body frame. Positive Z is down from the origin. Use the zero range datum point if supplied.", "DisplayName": "Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "RNGFNDA_PWRRNG": {"Description": "This parameter sets the estimated terrain distance in meters above which the sensor will be put into a power saving mode (if available). A value of zero means power saving is not enabled", "DisplayName": "Powersave range", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "RNGFNDA_RECV_ID": {"Description": "The receive ID of the CAN frames. A value of zero means all IDs are accepted.", "DisplayName": "RangeFinder CAN receive ID", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFNDA_RMETRIC": {"Description": "This parameter sets whether an analog rangefinder is ratiometric. Most analog rangefinders are ratiometric, meaning that their output voltage is influenced by the supply voltage. Some analog rangefinders (such as the SF/02) have their own internal voltage regulators so they are not ratiometric.", "DisplayName": "Ratiometric", "User": "Standard", "Values": {"0": "No", "1": "Yes"}}, "RNGFNDA_SCALING": {"Description": "Scaling factor between rangefinder reading and distance. For the linear and inverted functions this is in meters per volt. For the hyperbolic function the units are meterVolts. For Maxbotix serial sonar this is unit conversion to meters.", "DisplayName": "Rangefinder scaling", "Increment": "0.001", "Units": "m/V", "User": "Standard"}, "RNGFNDA_SNR_MIN": {"Description": "RangeFinder Minimum signal strength (SNR) to accept distance", "DisplayName": "RangeFinder Minimum signal strength", "Range": {"high": "65535", "low": "0"}, "User": "Advanced"}, "RNGFNDA_STOP_PIN": {"Description": "Digital pin that enables/disables rangefinder measurement for the pwm rangefinder. A value of -1 means no pin. If this is set, then the pin is set to 1 to enable the rangefinder and set to 0 to disable it. This is used to enable powersaving when out of range. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Rangefinder stop pin", "User": "Standard", "Values": {"-1": "Not Used", "111": "PX4 FMU Relay1", "112": "PX4 FMU Relay2", "113": "PX4IO Relay1", "114": "PX4IO Relay2", "115": "PX4IO ACC1", "116": "PX4IO ACC2", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RNGFNDA_TYPE": {"Description": "Type of connected rangefinder", "DisplayName": "Rangefinder type", "User": "Standard", "Values": {"0": "None", "1": "Analog", "10": "MAVLink", "100": "SITL", "11": "USD1_Serial", "12": "LeddarOne", "13": "MaxbotixSerial", "14": "TeraRangerI2C", "15": "LidarLiteV3-I2C", "16": "VL53L0X or VL53L1X", "17": "NMEA", "18": "WASP-LRF", "19": "BenewakeTF02", "2": "MaxbotixI2C", "20": "Benewake-Serial", "21": "LidarLightV3HP", "22": "PWM", "23": "BlueRoboticsPing", "24": "DroneCAN", "25": "BenewakeTFminiPlus-I2C", "26": "LanbaoPSK-CM8JL65-CC5", "27": "BenewakeTF03", "28": "VL53L1X-ShortRange", "29": "LeddarVu8-Serial", "3": "LidarLite-I2C", "30": "HC-SR04", "31": "GYUS42v2", "32": "MSP", "33": "USD1_CAN", "34": "Benewake_CAN", "35": "TeraRangerSerial", "36": "Lua_Scripting", "37": "NoopLoop_TOFSense", "38": "NoopLoop_TOFSense_CAN", "39": "NRA24_CAN", "40": "NoopLoop_TOFSenseF_I2C", "41": "JRE_Serial", "42": "Ainstein_LR_D1", "43": "RDS02UF", "5": "PWM", "6": "BBB-PRU", "7": "LightWareI2C", "8": "LightWareSerial", "9": "Bebop"}}, "RNGFNDA_WSP_AVG": {"Description": "Sets the number of pulses to be used in multi-pulse averaging mode. In this mode, a sequence of rapid fire ranges are taken and then averaged to improve the accuracy of the measurement", "DisplayName": "Multi-pulse averages", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFNDA_WSP_BAUD": {"Description": "Desired baud rate", "DisplayName": "Baud rate", "User": "Advanced", "Values": {"0": "Low Speed", "1": "High Speed"}}, "RNGFNDA_WSP_FRQ": {"Description": "Sets the repetition frequency of the ranging operation in Hertz. Upon entering the desired frequency the system will calculate the nearest frequency that it can handle according to the resolution of internal timers.", "DisplayName": "Frequency", "Range": {"high": "10000", "low": "0"}, "User": "Advanced"}, "RNGFNDA_WSP_MAVG": {"Description": "Sets the number of historic range results to use for calculating the current range result. When MAVG is greater than 1, the current range result will be the current measured value averaged with the N-1 previous results", "DisplayName": "Moving Average Range", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFNDA_WSP_MEDF": {"Description": "Sets the window size for the real-time median filter. When MEDF is greater than 0 the median filter is active", "DisplayName": "Moving Median Filter", "Range": {"high": "255", "low": "0"}, "User": "Advanced"}, "RNGFNDA_WSP_THR": {"Description": "Sets the system sensitivity. Larger values of THR represent higher sensitivity. The system may limit the maximum value of THR to prevent excessive false alarm rates based on settings made at the factory. Set to -1 for automatic threshold adjustments", "DisplayName": "Sensitivity threshold", "Range": {"high": "255", "low": "-1"}, "User": "Advanced"}, "RNGFND_LANDING": {"Description": "This enables the use of a rangefinder for automatic landing. The rangefinder will be used both on the landing approach and for final flare", "DisplayName": "Enable rangefinder for landing", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "ROLL_LIMIT_DEG": {"Description": "Maximum bank angle commanded in modes with stabilized limits. Increase this value for sharper turns, but decrease to prevent accelerated stalls.", "DisplayName": "Maximum Bank Angle", "Increment": "1", "Range": {"high": "90", "low": "0"}, "Units": "deg", "User": "Standard"}, "RPM1_DC_ID": {"Description": "DroneCAN sensor ID to assign to this backend", "DisplayName": "DroneCAN Sensor ID", "Increment": "1", "Range": {"high": "10", "low": "-1"}, "User": "Advanced"}, "RPM1_ESC_INDEX": {"Description": "ESC Telemetry Index to write RPM to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write RPM to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "RPM1_ESC_MASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "2": "Channel3", "3": "Channel4", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged", "DisplayName": "Bitmask of ESC telemetry channels to average", "User": "Advanced"}, "RPM1_MAX": {"Description": "Maximum RPM to report. Only used on type = GPIO.", "DisplayName": "Maximum RPM", "Increment": "1", "User": "Standard"}, "RPM1_MIN": {"Description": "Minimum RPM to report. Only used on type = GPIO.", "DisplayName": "Minimum RPM", "Increment": "1", "User": "Standard"}, "RPM1_MIN_QUAL": {"Description": "Minimum data quality to be used", "DisplayName": "Minimum Quality", "Increment": "0.1", "User": "Advanced"}, "RPM1_PIN": {"Description": "Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Input pin number", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RPM1_SCALING": {"Description": "Scaling factor between sensor reading and RPM.", "DisplayName": "RPM scaling", "Increment": "0.001", "User": "Standard"}, "RPM1_TYPE": {"Description": "What type of RPM sensor is connected", "DisplayName": "RPM type", "User": "Standard", "Values": {"0": "None", "1": "Not Used", "2": "GPIO", "3": "EFI", "4": "Harmonic Notch", "5": "ESC Telemetry Motors Bitmask", "6": "Generator", "7": "DroneCAN"}}, "RPM2_DC_ID": {"Description": "DroneCAN sensor ID to assign to this backend", "DisplayName": "DroneCAN Sensor ID", "Increment": "1", "Range": {"high": "10", "low": "-1"}, "User": "Advanced"}, "RPM2_ESC_INDEX": {"Description": "ESC Telemetry Index to write RPM to. Use 0 to disable.", "DisplayName": "ESC Telemetry Index to write RPM to", "Increment": "1", "Range": {"high": "10", "low": "0"}, "User": "Advanced"}, "RPM2_ESC_MASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "2": "Channel3", "3": "Channel4", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Mask of channels which support ESC rpm telemetry. RPM telemetry of the selected channels will be averaged", "DisplayName": "Bitmask of ESC telemetry channels to average", "User": "Advanced"}, "RPM2_MAX": {"Description": "Maximum RPM to report. Only used on type = GPIO.", "DisplayName": "Maximum RPM", "Increment": "1", "User": "Standard"}, "RPM2_MIN": {"Description": "Minimum RPM to report. Only used on type = GPIO.", "DisplayName": "Minimum RPM", "Increment": "1", "User": "Standard"}, "RPM2_MIN_QUAL": {"Description": "Minimum data quality to be used", "DisplayName": "Minimum Quality", "Increment": "0.1", "User": "Advanced"}, "RPM2_PIN": {"Description": "Which digital GPIO pin to use. Only used on type = GPIO. Some common values are given, but see the Wiki's \"GPIOs\" page for how to determine the pin number for a given autopilot.", "DisplayName": "Input pin number", "User": "Standard", "Values": {"-1": "Disabled", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6"}}, "RPM2_SCALING": {"Description": "Scaling factor between sensor reading and RPM.", "DisplayName": "RPM scaling", "Increment": "0.001", "User": "Standard"}, "RPM2_TYPE": {"Description": "What type of RPM sensor is connected", "DisplayName": "RPM type", "User": "Standard", "Values": {"0": "None", "1": "Not Used", "2": "GPIO", "3": "EFI", "4": "Harmonic Notch", "5": "ESC Telemetry Motors Bitmask", "6": "Generator", "7": "DroneCAN"}}, "RSSI_ANA_PIN": {"Description": "Pin used to read the RSSI voltage or PWM value", "DisplayName": "Receiver RSSI sensing pin", "User": "Standard", "Values": {"103": "Pixhawk SBUS", "11": "Pixracer", "13": "Pixhawk ADC4", "14": "Pixhawk ADC3", "15": "Pixhawk ADC6/Pixhawk2 ADC", "50": "AUX1", "51": "AUX2", "52": "AUX3", "53": "AUX4", "54": "AUX5", "55": "AUX6", "8": "V5 Nano"}}, "RSSI_CHANNEL": {"Description": "The channel number where RSSI will be output by the radio receiver (5 and above).", "DisplayName": "Receiver RSSI channel number", "Range": {"high": "16", "low": "0"}, "User": "Standard"}, "RSSI_CHAN_HIGH": {"Description": "PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers output inverted values so this value may be higher than RSSI_CHAN_LOW", "DisplayName": "Receiver RSSI PWM high value", "Range": {"high": "2000", "low": "0"}, "Units": "PWM", "User": "Standard"}, "RSSI_CHAN_LOW": {"Description": "PWM value that the radio receiver will put on the RSSI_CHANNEL or RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers output inverted values so this value may be lower than RSSI_CHAN_HIGH", "DisplayName": "RSSI PWM low value", "Range": {"high": "2000", "low": "0"}, "Units": "PWM", "User": "Standard"}, "RSSI_PIN_HIGH": {"Description": "RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the strongest. Some radio receivers put out inverted values so this value may be lower than RSSI_PIN_LOW. When using pin 103, the maximum value of the parameter is 3.3V.", "DisplayName": "RSSI pin's highest voltage", "Increment": "0.01", "Range": {"high": "5.0", "low": "0"}, "Units": "V", "User": "Standard"}, "RSSI_PIN_LOW": {"Description": "RSSI pin's voltage received on the RSSI_ANA_PIN when the signal strength is the weakest. Some radio receivers put out inverted values so this value may be higher than RSSI_PIN_HIGH. When using pin 103, the maximum value of the parameter is 3.3V.", "DisplayName": "RSSI pin's lowest voltage", "Increment": "0.01", "Range": {"high": "5.0", "low": "0"}, "Units": "V", "User": "Standard"}, "RSSI_TYPE": {"Description": "Radio Receiver RSSI type. If your radio receiver supports RSSI of some kind, set it here, then set its associated RSSI_XXXXX parameters, if any.", "DisplayName": "RSSI Type", "User": "Standard", "Values": {"0": "Disabled", "1": "AnalogPin", "2": "RCChannelPwmValue", "3": "ReceiverProtocol", "4": "PWMInputPin", "5": "TelemetryRadioRSSI"}}, "RTL_ALTITUDE": {"Description": "Target altitude above home for RTL mode. Maintains current altitude if set to -1. Rally point altitudes are used if plane does not return to home.", "DisplayName": "RTL altitude", "Units": "m", "User": "Standard"}, "RTL_AUTOLAND": {"Description": "Automatically begin landing sequence after arriving at RTL location. This requires the addition of a DO_LAND_START mission item, which acts as a marker for the start of a landing sequence. The closest landing sequence will be chosen to the current location. If this is set to 0 and there is a DO_LAND_START mission item then you will get an arming check failure. You can set to a value of 3 to avoid the arming check failure and use the DO_LAND_START for go-around without it changing RTL behaviour. For a value of 1 a rally point will be used instead of HOME if in range (see rally point documentation).", "DisplayName": "RTL auto land", "User": "Standard", "Values": {"0": "Disable", "1": "Fly HOME then land", "2": "Go directly to landing sequence", "3": "OnlyForGoAround"}}, "RTL_CLIMB_MIN": {"Description": "The vehicle will climb this many m during the initial climb portion of the RTL. During this time the roll will be limited to LEVEL_ROLL_LIMIT degrees.", "DisplayName": "RTL minimum climb", "Increment": "1", "Range": {"high": "30", "low": "0"}, "Units": "m", "User": "Standard"}, "RTL_RADIUS": {"Description": "Defines the radius of the loiter circle when in RTL mode. If this is zero then WP_LOITER_RAD is used. If the radius is negative then a counter-clockwise is used. If positive then a clockwise loiter is used.", "DisplayName": "RTL loiter radius", "Increment": "1", "Range": {"high": "32767", "low": "-32767"}, "Units": "m", "User": "Standard"}, "RTUN_AUTO_FILTER": {"Description": "When enabled the PID filter settings are automatically set based on INS_GYRO_FILTER", "DisplayName": "Rover Quicktune auto filter enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RTUN_AUTO_SAVE": {"Description": "Number of seconds after completion of tune to auto-save. This is useful when using a 2 position switch for quicktune", "DisplayName": "Rover Quicktune auto save", "Units": "s", "User": "Standard"}, "RTUN_AXES": {"Bitmask": {"0": "Steering", "1": "Speed"}, "Description": "axes to tune", "DisplayName": "Rover Quicktune axes", "User": "Standard"}, "RTUN_ENABLE": {"Description": "Enable quicktune system", "DisplayName": "Rover Quicktune enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RTUN_RC_FUNC": {"Description": "RCn_OPTION number to use to control tuning stop/start/save", "DisplayName": "Rover Quicktune RC function", "User": "Standard", "Values": {"300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8"}}, "RTUN_SPD_FFRATIO": {"Description": "Ratio between measured response and CRUISE_THROTTLE value. Raise this to get a higher CRUISE_THROTTLE value", "DisplayName": "Rover Quicktune Speed FeedForward (equivalent) ratio", "Range": {"high": "1.0", "low": "0"}, "User": "Standard"}, "RTUN_SPD_I_RATIO": {"Description": "Ratio between speed FF and I gain. Raise this to get a higher I gain, 0 to leave I unchanged", "DisplayName": "Rover Quicktune Speed FF to I ratio", "Range": {"high": "2.0", "low": "0"}, "User": "Standard"}, "RTUN_SPD_P_RATIO": {"Description": "Ratio between speed FF and P gain. Raise this to get a higher P gain, 0 to leave P unchanged", "DisplayName": "Rover Quicktune Speed FF to P ratio", "Range": {"high": "2.0", "low": "0"}, "User": "Standard"}, "RTUN_STR_FFRATIO": {"Description": "Ratio between measured response and FF gain. Raise this to get a higher FF gain", "DisplayName": "Rover Quicktune Steering Rate FeedForward ratio", "Range": {"high": "1.0", "low": "0"}, "User": "Standard"}, "RTUN_STR_I_RATIO": {"Description": "Ratio between steering FF and I gains. Raise this to get a higher I gain, 0 to leave I unchanged", "DisplayName": "Rover Quicktune Steering FF to I ratio", "Range": {"high": "2.0", "low": "0"}, "User": "Standard"}, "RTUN_STR_P_RATIO": {"Description": "Ratio between steering FF and P gains. Raise this to get a higher P gain, 0 to leave P unchanged", "DisplayName": "Rover Quicktune Steering FF to P ratio", "Range": {"high": "2.0", "low": "0"}, "User": "Standard"}, "RUDDER_ONLY": {"Description": "Enable rudder only mode. The rudder will control attitude in attitude controlled modes (such as FBWA). You should setup your transmitter to send roll stick inputs to the RCMAP_YAW channel (normally channel 4). The rudder servo should be attached to the RCMAP_YAW channel as well. Note that automatic ground steering will be disabled for rudder only aircraft. You should also set KFF_RDDRMIX to 1.0. You will also need to setup the YAW2SRV_DAMP yaw damping appropriately for your aircraft. A value of 0.5 for YAW2SRV_DAMP is a good starting point.", "DisplayName": "Rudder only aircraft", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "RUDD_DT_GAIN": {"Description": "gain control from rudder to differential thrust", "DisplayName": "rudder differential thrust gain", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "SCALING_SPEED": {"Description": "Airspeed in m/s to use when calculating surface speed scaling. Note that changing this value will affect all PID values", "DisplayName": "speed used for speed scaling calculations", "Increment": "0.1", "Range": {"high": "50", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "SCHED_DEBUG": {"Description": "Set to non-zero to enable scheduler debug messages. When set to show \"Slips\" the scheduler will display a message whenever a scheduled task is delayed due to too much CPU load. When set to ShowOverruns the scheduled will display a message whenever a task takes longer than the limit promised in the task table.", "DisplayName": "Scheduler debug level", "User": "Advanced", "Values": {"0": "Disabled", "2": "ShowSlips", "3": "ShowOverruns"}}, "SCHED_LOOP_RATE": {"Description": "This controls the rate of the main control loop in Hz. This should only be changed by developers. This only takes effect on restart. Values over 400 are considered highly experimental.", "DisplayName": "Scheduling main loop rate", "RebootRequired": "True", "User": "Advanced", "Values": {"100": "100Hz", "200": "200Hz", "250": "250Hz", "300": "300Hz", "400": "400Hz", "50": "50Hz"}}, "SCHED_OPTIONS": {"Bitmask": {"0": "Enable per-task perf info"}, "Description": "This controls optional aspects of the scheduler.", "DisplayName": "Scheduling options", "User": "Advanced"}, "SCR_DEBUG_OPTS": {"Bitmask": {"0": "No Scripts to run message if all scripts have stopped", "1": "Runtime messages for memory usage and execution time", "2": "Suppress logging scripts to dataflash", "3": "log runtime memory usage and execution time", "4": "Disable pre-arm check", "5": "Save CRC of current scripts to loaded and running checksum parameters enabling pre-arm"}, "Description": "Debugging options", "DisplayName": "Scripting Debug Level", "User": "Advanced"}, "SCR_DIR_DISABLE": {"Bitmask": {"0": "ROMFS", "1": "APM/scripts"}, "Description": "This will stop scripts being loaded from the given locations", "DisplayName": "Directory disable", "RebootRequired": "True", "User": "Advanced"}, "SCR_ENABLE": {"Description": "Controls if scripting is enabled", "DisplayName": "Enable Scripting", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "Lua Scripts"}}, "SCR_HEAP_SIZE": {"Description": "Amount of memory available for scripting", "DisplayName": "Scripting Heap Size", "Increment": "1024", "Range": {"high": "1048576", "low": "1024"}, "RebootRequired": "True", "User": "Advanced"}, "SCR_LD_CHECKSUM": {"Description": "Required XOR of CRC32 checksum of loaded scripts, vehicle will not arm with incorrect scripts loaded, -1 disables", "DisplayName": "Loaded script checksum", "User": "Advanced"}, "SCR_RUN_CHECKSUM": {"Description": "Required XOR of CRC32 checksum of running scripts, vehicle will not arm with incorrect scripts running, -1 disables", "DisplayName": "Running script checksum", "User": "Advanced"}, "SCR_THD_PRIORITY": {"Description": "This sets the priority of the scripting thread. This is normally set to a low priority to prevent scripts from interfering with other parts of the system. Advanced users can change this priority if scripting needs to be prioritised for realtime applications. WARNING: changing this parameter can impact the stability of your flight controller. The scipting thread priority in this parameter is chosen based on a set of system level priorities for other subsystems. It is strongly recommended that you use the lowest priority that is sufficient for your application. Note that all scripts run at the same priority, so if you raise this priority you must carefully audit all lua scripts for behaviour that does not interfere with the operation of the system.", "DisplayName": "Scripting thread priority", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "Normal", "1": "IO Priority", "2": "Storage Priority", "3": "UART Priority", "4": "I2C Priority", "5": "SPI Priority", "6": "Timer Priority", "7": "Main Priority", "8": "Boost Priority"}}, "SCR_USER1": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter1", "User": "Standard"}, "SCR_USER2": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter2", "User": "Standard"}, "SCR_USER3": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter3", "User": "Standard"}, "SCR_USER4": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter4", "User": "Standard"}, "SCR_USER5": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter5", "User": "Standard"}, "SCR_USER6": {"Description": "General purpose user variable input for scripts", "DisplayName": "Scripting User Parameter6", "User": "Standard"}, "SCR_VM_I_COUNT": {"Description": "The number virtual machine instructions that can be run before considering a script to have taken an excessive amount of time", "DisplayName": "Scripting Virtual Machine Instruction Count", "Increment": "10000", "Range": {"high": "1000000", "low": "1000"}, "User": "Advanced"}, "SERIAL0_BAUD": {"Description": "The baud rate used on the USB console. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial0 baud rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL0_PROTOCOL": {"Description": "Control what protocol to use on the console. ", "DisplayName": "Console protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"1": "MAVlink1", "2": "MAVLink2"}}, "SERIAL1_BAUD": {"Description": "The baud rate used on the Telem1 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Telem1 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL1_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Telem1 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL1_PROTOCOL": {"Description": "Control what protocol to use on the Telem1 port. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Telem1 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL2_BAUD": {"Description": "The baud rate of the Telem2 port. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Telemetry 2 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL2_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Telem2 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL2_PROTOCOL": {"Description": "Control what protocol to use on the Telem2 port. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Telemetry 2 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL3_BAUD": {"Description": "The baud rate used for the Serial 3 (GPS). Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 3 (GPS) Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL3_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial3 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL3_PROTOCOL": {"Description": "Control what protocol Serial 3 (GPS) should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial 3 (GPS) protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL4_BAUD": {"Description": "The baud rate used for Serial4. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 4 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL4_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial4 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL4_PROTOCOL": {"Description": "Control what protocol Serial4 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial4 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL5_BAUD": {"Description": "The baud rate used for Serial5. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 5 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL5_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial5 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL5_PROTOCOL": {"Description": "Control what protocol Serial5 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial5 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL6_BAUD": {"Description": "The baud rate used for Serial6. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 6 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL6_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial6 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL6_PROTOCOL": {"Description": "Control what protocol Serial6 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial6 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL7_BAUD": {"Description": "The baud rate used for Serial7. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 7 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL7_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial7 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL7_PROTOCOL": {"Description": "Control what protocol Serial7 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial7 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL8_BAUD": {"Description": "The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 8 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL8_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial8 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL8_PROTOCOL": {"Description": "Control what protocol Serial8 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial8 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL9_BAUD": {"Description": "The baud rate used for Serial8. Most stm32-based boards can support rates of up to 1500. If you setup a rate you cannot support and then can't connect to your board you should load a firmware from a different vehicle type. That will reset all your parameters to defaults.", "DisplayName": "Serial 9 Baud Rate", "User": "Standard", "Values": {"1": "1200", "111": "111100", "115": "115200", "1500": "1500000", "19": "19200", "2": "2400", "2000": "2000000", "230": "230400", "256": "256000", "38": "38400", "4": "4800", "460": "460800", "500": "500000", "57": "57600", "9": "9600", "921": "921600"}}, "SERIAL9_OPTIONS": {"Bitmask": {"0": "InvertRX", "1": "InvertTX", "10": "Don't forward mavlink to/from", "11": "DisableFIFO", "12": "Ignore Streamrate", "2": "HalfDuplex", "3": "SwapTXRX", "4": "RX_PullDown", "5": "RX_PullUp", "6": "TX_PullDown", "7": "TX_PullUp", "8": "RX_NoDMA", "9": "TX_NoDMA"}, "Description": "Control over UART options. The InvertRX option controls invert of the receive pin. The InvertTX option controls invert of the transmit pin. The HalfDuplex option controls half-duplex (onewire) mode, where both transmit and receive is done on the transmit wire. The Swap option allows the RX and TX pins to be swapped on STM32F7 based boards.", "DisplayName": "Serial9 options", "RebootRequired": "True", "User": "Advanced"}, "SERIAL9_PROTOCOL": {"Description": "Control what protocol Serial9 port should be used for. Note that the Frsky options require external converter hardware. See the wiki for details.", "DisplayName": "Serial9 protocol selection", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "None", "1": "MAVLink1", "10": "FrSky SPort Passthrough (OpenTX)", "11": "Lidar360", "13": "Beacon", "14": "Volz servo out", "15": "SBus servo out", "16": "ESC Telemetry", "17": "Devo Telemetry", "18": "OpticalFlow", "19": "RobotisServo", "2": "MAVLink2", "20": "NMEA Output", "21": "WindVane", "22": "SLCAN", "23": "RCIN", "24": "EFI Serial", "25": "LTM", "26": "RunCam", "27": "HottTelem", "28": "Scripting", "29": "Crossfire VTX", "3": "Frsky D", "30": "Generator", "31": "Winch", "32": "MSP", "33": "DJI FPV", "34": "AirSpeed", "35": "ADSB", "36": "AHRS", "37": "SmartAudio", "38": "FETtecOneWire", "39": "Torqeedo", "4": "Frsky SPort", "40": "AIS", "41": "CoDevESC", "42": "DisplayPort", "43": "MAVLink High Latency", "44": "IRC Tramp", "45": "DDS XRCE", "46": "IMUDATA", "5": "GPS", "7": "Alexmos Gimbal Serial", "8": "Gimbal", "9": "Rangefinder"}}, "SERIAL_PASS1": {"Description": "This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port", "DisplayName": "Serial passthru first port", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "SERIAL_PASS2": {"Description": "This sets one side of pass-through between two serial ports. Once both sides are set then all data received on either port will be passed to the other port", "DisplayName": "Serial passthru second port", "User": "Advanced", "Values": {"-1": "Disabled", "0": "Serial0", "1": "Serial1", "2": "Serial2", "3": "Serial3", "4": "Serial4", "5": "Serial5", "6": "Serial6"}}, "SERIAL_PASSTIMO": {"Description": "This sets a timeout for serial pass-through in seconds. When the pass-through is enabled by setting the SERIAL_PASS1 and SERIAL_PASS2 parameters then it remains in effect until no data comes from the first port for SERIAL_PASSTIMO seconds. This allows the port to revent to its normal usage (such as MAVLink connection to a GCS) when it is no longer needed. A value of 0 means no timeout.", "DisplayName": "Serial passthru timeout", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Advanced"}, "SERVO10_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO10_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO10_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO10_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO10_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO11_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO11_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO11_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO11_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO11_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO12_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO12_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO12_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO12_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO12_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO13_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO13_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO13_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO13_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO13_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO14_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO14_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO14_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO14_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO14_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO15_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO15_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO15_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO15_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO15_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO16_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO16_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO16_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO16_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO16_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO17_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO17_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO17_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO17_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO17_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO18_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO18_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO18_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO18_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO18_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO19_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO19_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO19_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO19_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO19_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO1_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO1_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO1_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO1_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO1_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO20_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO20_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO20_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO20_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO20_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO21_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO21_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO21_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO21_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO21_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO22_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO22_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO22_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO22_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO22_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO23_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO23_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO23_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO23_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO23_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO24_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO24_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO24_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO24_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO24_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO25_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO25_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO25_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO25_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO25_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO26_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO26_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO26_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO26_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO26_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO27_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO27_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO27_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO27_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO27_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO28_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO28_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO28_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO28_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO28_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO29_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO29_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO29_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO29_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO29_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO2_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO2_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO2_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO2_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO2_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO30_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO30_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO30_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO30_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO30_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO31_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO31_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO31_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO31_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO31_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO32_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO32_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO32_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO32_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO32_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO3_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO3_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO3_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO3_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO3_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO4_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO4_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO4_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO4_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO4_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO5_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO5_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO5_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO5_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO5_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO6_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO6_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO6_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO6_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO6_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO7_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO7_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO7_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO7_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO7_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO8_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO8_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO8_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO8_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO8_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO9_FUNCTION": {"Description": "Function assigned to this servo. Setting this to Disabled(0) will setup this output for control by auto missions or MAVLink servo set commands. any other value will enable the corresponding function", "DisplayName": "Servo output function", "RebootRequired": "True", "User": "Standard", "Values": {"-1": "GPIO", "0": "Disabled", "1": "RCPassThru", "10": "CameraTrigger", "100": "Script7", "101": "Script8", "102": "Script9", "103": "Script10", "104": "Script11", "105": "Script12", "106": "Script13", "107": "Script14", "108": "Script15", "109": "Script16", "110": "Airbrakes", "12": "Mount2Yaw", "120": "NeoPixel1", "121": "NeoPixel2", "122": "NeoPixel3", "123": "NeoPixel4", "124": "RateRoll", "125": "RatePitch", "126": "RateThrust", "127": "RateYaw", "129": "ProfiLED1", "13": "Mount2Pitch", "130": "ProfiLED2", "131": "ProfiLED3", "132": "ProfiLEDClock", "134": "SERVOn_MIN", "135": "SERVOn_TRIM", "136": "SERVOn_MAX", "138": "Alarm", "139": "Alarm Inverted", "14": "Mount2Roll", "140": "RCIN1Scaled", "141": "RCIN2Scaled", "142": "RCIN3Scaled", "143": "RCIN4Scaled", "144": "RCIN5Scaled", "145": "RCIN6Scaled", "146": "RCIN7Scaled", "147": "RCIN8Scaled", "148": "RCIN9Scaled", "149": "RCIN10Scaled", "15": "Mount2Retract", "150": "RCIN11Scaled", "151": "RCIN12Scaled", "152": "RCIN13Scaled", "153": "RCIN14Scaled", "154": "RCIN15Scaled", "155": "RCIN16Scaled", "16": "DifferentialSpoilerLeft1", "17": "DifferentialSpoilerRight1", "19": "Elevator", "2": "Flap", "21": "Rudder", "22": "SprayerPump", "23": "SprayerSpinner", "24": "FlaperonLeft", "25": "FlaperonRight", "26": "GroundSteering", "27": "Parachute", "28": "Gripper", "29": "LandingGear", "3": "FlapAuto", "30": "EngineRunEnable", "33": "Motor1", "34": "Motor2", "35": "Motor3", "36": "Motor4", "37": "Motor5", "38": "Motor6", "39": "Motor7/TailTiltServo", "4": "Aileron", "40": "Motor8", "41": "TiltMotorsFront", "45": "TiltMotorsRear", "46": "TiltMotorRearLeft", "47": "TiltMotorRearRight", "51": "RCIN1", "52": "RCIN2", "53": "RCIN3", "54": "RCIN4", "55": "RCIN5", "56": "RCIN6", "57": "RCIN7", "58": "RCIN8", "59": "RCIN9", "6": "Mount1Yaw", "60": "RCIN10", "61": "RCIN11", "62": "RCIN12", "63": "RCIN13", "64": "RCIN14", "65": "RCIN15", "66": "RCIN16", "67": "Ignition", "69": "Starter", "7": "Mount1Pitch", "70": "Throttle", "73": "ThrottleLeft", "74": "ThrottleRight", "75": "TiltMotorFrontLeft", "76": "TiltMotorFrontRight", "77": "ElevonLeft", "78": "ElevonRight", "79": "VTailLeft", "8": "Mount1Roll", "80": "VTailRight", "82": "Motor9", "83": "Motor10", "84": "Motor11", "85": "Motor12", "86": "DifferentialSpoilerLeft2", "87": "DifferentialSpoilerRight2", "9": "Mount1Retract", "90": "CameraISO", "91": "CameraAperture", "92": "CameraFocus", "93": "CameraShutterSpeed", "94": "Script1", "95": "Script2", "96": "Script3", "97": "Script4", "98": "Script5", "99": "Script6"}}, "SERVO9_MAX": {"Description": "maximum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Maximum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO9_MIN": {"Description": "minimum PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Minimum PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO9_REVERSED": {"Description": "Reverse servo operation. Set to 0 for normal operation. Set to 1 to reverse this output channel.", "DisplayName": "Servo reverse", "User": "Standard", "Values": {"0": "Normal", "1": "Reversed"}}, "SERVO9_TRIM": {"Description": "Trim PWM pulse width in microseconds. Typically 1000 is lower limit, 1500 is neutral and 2000 is upper limit.", "DisplayName": "Trim PWM", "Increment": "1", "Range": {"high": "2200", "low": "800"}, "Units": "PWM", "User": "Standard"}, "SERVO_32_ENABLE": {"Description": "This allows for up to 32 outputs, enabling parameters for outputs above 16", "DisplayName": "Enable outputs 17 to 31", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SERVO_AUTO_TRIM": {"Description": "This enables automatic servo trim in flight. Servos will be trimed in stabilized flight modes when the aircraft is close to level. Changes to servo trim will be saved every 10 seconds and will persist between flights. The automatic trim won't go more than 20% away from a centered trim.", "DisplayName": "Automatic servo trim", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "SERVO_BLH_3DMASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "16": "Channel 17", "17": "Channel 18", "18": "Channel 19", "19": "Channel 20", "2": "Channel3", "20": "Channel 21", "21": "Channel 22", "22": "Channel 23", "23": "Channel 24", "24": "Channel 25", "25": "Channel 26", "26": "Channel 27", "27": "Channel 28", "28": "Channel 29", "29": "Channel 30", "3": "Channel4", "30": "Channel 31", "31": "Channel 32", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Mask of channels which are dynamically reversible. This is used to configure ESCs in '3D' mode, allowing for the motor to spin in either direction", "DisplayName": "BLHeli bitmask of 3D channels", "RebootRequired": "True", "User": "Advanced"}, "SERVO_BLH_AUTO": {"Description": "If set to 1 this auto-enables BLHeli pass-thru support for all multicopter motors", "DisplayName": "BLHeli pass-thru auto-enable for multicopter motors", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "SERVO_BLH_BDMASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "16": "Channel 17", "17": "Channel 18", "18": "Channel 19", "19": "Channel 20", "2": "Channel3", "20": "Channel 21", "21": "Channel 22", "22": "Channel 23", "23": "Channel 24", "24": "Channel 25", "25": "Channel 26", "26": "Channel 27", "27": "Channel 28", "28": "Channel 29", "29": "Channel 30", "3": "Channel4", "30": "Channel 31", "31": "Channel 32", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Mask of channels which support bi-directional dshot. This is used for ESCs which have firmware that supports bi-directional dshot allowing fast rpm telemetry values to be returned for the harmonic notch.", "DisplayName": "BLHeli bitmask of bi-directional dshot channels", "RebootRequired": "True", "User": "Advanced"}, "SERVO_BLH_DEBUG": {"Description": "When set to 1 this enabled verbose debugging output over MAVLink when the blheli protocol is active. This can be used to diagnose failures.", "DisplayName": "BLHeli debug level", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "SERVO_BLH_MASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "16": "Channel 17", "17": "Channel 18", "18": "Channel 19", "19": "Channel 20", "2": "Channel3", "20": "Channel 21", "21": "Channel 22", "22": "Channel 23", "23": "Channel 24", "24": "Channel 25", "25": "Channel 26", "26": "Channel 27", "27": "Channel 28", "28": "Channel 29", "29": "Channel 30", "3": "Channel4", "30": "Channel 31", "31": "Channel 32", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Enable of BLHeli pass-thru servo protocol support to specific channels. This mask is in addition to motors enabled using SERVO_BLH_AUTO (if any)", "DisplayName": "BLHeli Channel Bitmask", "RebootRequired": "True", "User": "Advanced"}, "SERVO_BLH_OTYPE": {"Description": "When set to a non-zero value this overrides the output type for the output channels given by SERVO_BLH_MASK. This can be used to enable DShot on outputs that are not part of the multicopter motors group.", "DisplayName": "BLHeli output type override", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "OneShot", "2": "OneShot125", "3": "Brushed", "4": "DShot150", "5": "DShot300", "6": "DShot600", "7": "DShot1200"}}, "SERVO_BLH_POLES": {"Description": "This allows calculation of true RPM from ESC's eRPM. The default is 14.", "DisplayName": "BLHeli Motor Poles", "Range": {"high": "127", "low": "1"}, "RebootRequired": "True", "User": "Advanced"}, "SERVO_BLH_PORT": {"Description": "This sets the mavlink channel to use for blheli pass-thru. The channel number is determined by the number of serial ports configured to use mavlink. So 0 is always the console, 1 is the next serial port using mavlink, 2 the next after that and so on.", "DisplayName": "Control port", "User": "Advanced", "Values": {"0": "Console", "1": "Mavlink Serial Channel1", "2": "Mavlink Serial Channel2", "3": "Mavlink Serial Channel3", "4": "Mavlink Serial Channel4", "5": "Mavlink Serial Channel5"}}, "SERVO_BLH_RVMASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "16": "Channel 17", "17": "Channel 18", "18": "Channel 19", "19": "Channel 20", "2": "Channel3", "20": "Channel 21", "21": "Channel 22", "22": "Channel 23", "23": "Channel 24", "24": "Channel 25", "25": "Channel 26", "26": "Channel 27", "27": "Channel 28", "28": "Channel 29", "29": "Channel 30", "3": "Channel4", "30": "Channel 31", "31": "Channel 32", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Mask of channels which are reversed. This is used to configure ESCs in reversed mode", "DisplayName": "BLHeli bitmask of reversed channels", "RebootRequired": "True", "User": "Advanced"}, "SERVO_BLH_TEST": {"Description": "Setting SERVO_BLH_TEST to a motor number enables an internal test of the BLHeli ESC protocol to the corresponding ESC. The debug output is displayed on the USB console.", "DisplayName": "BLHeli internal interface test", "User": "Advanced", "Values": {"0": "Disabled", "1": "TestMotor1", "2": "TestMotor2", "3": "TestMotor3", "4": "TestMotor4", "5": "TestMotor5", "6": "TestMotor6", "7": "TestMotor7", "8": "TestMotor8"}}, "SERVO_BLH_TMOUT": {"Description": "This sets the inactivity timeout for the BLHeli protocol in seconds. If no packets are received in this time normal MAVLink operations are resumed. A value of 0 means no timeout", "DisplayName": "BLHeli protocol timeout", "Range": {"high": "300", "low": "0"}, "Units": "s", "User": "Standard"}, "SERVO_BLH_TRATE": {"Description": "This sets the rate in Hz for requesting telemetry from ESCs. It is the rate per ESC. Setting to zero disables telemetry requests", "DisplayName": "BLHeli telemetry rate", "Range": {"high": "500", "low": "0"}, "Units": "Hz", "User": "Standard"}, "SERVO_DSHOT_ESC": {"Description": "DShot ESC type for all outputs. The ESC type affects the range of DShot commands available and the bit widths used. None means that no dshot commands will be executed. Some ESC types support Extended DShot Telemetry (EDT) which allows telemetry other than RPM data to be returned when using bi-directional dshot. If you enable EDT you must install EDT capable firmware for correct operation.", "DisplayName": "Servo DShot ESC type", "User": "Advanced", "Values": {"0": "None", "1": "BLHeli32/Kiss", "2": "BLHeli_S", "3": "BLHeli32/Kiss+EDT", "4": "BLHeli_S+EDT"}}, "SERVO_DSHOT_RATE": {"Description": "DShot output rate for all outputs as a multiple of the loop rate. 0 sets the output rate to be fixed at 1Khz for low loop rates. This value should never be set below 500Hz.", "DisplayName": "Servo DShot output rate", "User": "Advanced", "Values": {"0": "1Khz", "1": "loop-rate", "2": "double loop-rate", "3": "triple loop-rate", "4": "quadruple loop rate"}}, "SERVO_FTW_MASK": {"Bitmask": {"0": "SERVO1", "1": "SERVO2", "10": "SERVO11", "11": "SERVO12", "2": "SERVO3", "3": "SERVO4", "4": "SERVO5", "5": "SERVO6", "6": "SERVO7", "7": "SERVO8", "8": "SERVO9", "9": "SERVO10"}, "Description": "Servo channel mask specifying FETtec ESC output.", "DisplayName": "Servo channel output bitmask", "RebootRequired": "True", "User": "Standard"}, "SERVO_FTW_POLES": {"Description": "Number of motor electrical poles", "DisplayName": "Nr. electrical poles", "Range": {"high": "50", "low": "2"}, "User": "Standard"}, "SERVO_FTW_RVMASK": {"Bitmask": {"0": "SERVO1", "1": "SERVO2", "10": "SERVO11", "11": "SERVO12", "2": "SERVO3", "3": "SERVO4", "4": "SERVO5", "5": "SERVO6", "6": "SERVO7", "7": "SERVO8", "8": "SERVO9", "9": "SERVO10"}, "Description": "Servo channel mask to reverse rotation of FETtec ESC outputs.", "DisplayName": "Servo channel reverse rotation bitmask", "User": "Standard"}, "SERVO_GPIO_MASK": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "16": "Servo 17", "17": "Servo 18", "18": "Servo 19", "19": "Servo 20", "2": "Servo 3", "20": "Servo 21", "21": "Servo 22", "22": "Servo 23", "23": "Servo 24", "24": "Servo 25", "25": "Servo 26", "26": "Servo 27", "27": "Servo 28", "28": "Servo 29", "29": "Servo 30", "3": "Servo 4", "30": "Servo 31", "31": "Servo 32", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "Bitmask of outputs which will be available as GPIOs. Any output with either the function set to -1 or with the corresponding bit set in this mask will be available for use as a GPIO pin", "DisplayName": "Servo GPIO mask", "RebootRequired": "True", "User": "Advanced"}, "SERVO_RATE": {"Description": "Default output rate in Hz for all PWM outputs.", "DisplayName": "Servo default output rate", "Range": {"high": "400", "low": "25"}, "Units": "Hz", "User": "Advanced"}, "SERVO_RC_FS_MSK": {"Bitmask": {"0": "RCIN1Scaled", "1": "RCIN2Scaled", "10": "RCIN11Scaled", "11": "SRCIN12Scaled", "12": "RCIN13Scaled", "13": "RCIN14Scaled", "14": "RCIN15Scaled", "15": "RCIN16Scaled", "2": "RCIN3Scaled", "3": "RCIN4Scaled", "4": "RCIN5Scaled", "5": "RCIN6Scaled", "6": "RCIN7Scaled", "7": "RCIN8Scaled", "8": "RCIN9Scaled", "9": "RCIN10Scaled"}, "Description": "Bitmask of scaled passthru output channels which will be set to their trim value during rc failsafe instead of holding their last position before failsafe.", "DisplayName": "Servo RC Failsafe Mask", "User": "Advanced"}, "SERVO_ROB_POSMAX": {"Description": "Position maximum at servo max value. This should be within the position control range of the servos, normally 0 to 4095", "DisplayName": "Robotis servo position max", "Range": {"high": "4095", "low": "0"}, "User": "Standard"}, "SERVO_ROB_POSMIN": {"Description": "Position minimum at servo min value. This should be within the position control range of the servos, normally 0 to 4095", "DisplayName": "Robotis servo position min", "Range": {"high": "4095", "low": "0"}, "User": "Standard"}, "SERVO_SBUS_RATE": {"Description": "This sets the SBUS output frame rate in Hz.", "DisplayName": "SBUS default output rate", "Range": {"high": "250", "low": "25"}, "Units": "Hz", "User": "Advanced"}, "SERVO_VOLZ_MASK": {"Bitmask": {"0": "Channel1", "1": "Channel2", "10": "Channel11", "11": "Channel12", "12": "Channel13", "13": "Channel14", "14": "Channel15", "15": "Channel16", "16": "Channel17", "17": "Channel18", "18": "Channel19", "19": "Channel20", "2": "Channel3", "20": "Channel21", "21": "Channel22", "22": "Channel23", "23": "Channel24", "24": "Channel25", "25": "Channel26", "26": "Channel27", "28": "Channel29", "29": "Channel30", "3": "Channel4", "30": "Channel31", "31": "Channel32", "4": "Channel5", "5": "Channel6", "6": "Channel7", "7": "Channel8", "8": "Channel9", "9": "Channel10"}, "Description": "Enable of volz servo protocol to specific channels", "DisplayName": "Channel Bitmask", "User": "Standard"}, "SHIP_AUTO_OFS": {"Description": "Settings this parameter to one triggers an automatic follow offset calculation based on current position of the vehicle and the landing target. NOTE: This parameter will auto-reset to zero once the offset has been calculated.", "DisplayName": "Ship automatic offset trigger", "User": "Standard", "Values": {"0": "Disabled", "1": "Trigger"}}, "SHIP_ENABLE": {"Description": "Enable ship landing system", "DisplayName": "Ship landing enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "SHIP_LAND_ANGLE": {"Description": "Angle from the stern of the ship for landing approach. Use this to ensure that on a go-around that ship superstructure and cables are avoided. A value of zero means to approach from the rear of the ship. A value of 90 means the landing will approach from the port (left) side of the ship. A value of -90 will mean approaching from the starboard (right) side of the ship. A value of 180 will approach from the bow of the ship. This parameter is combined with the sign of the RTL_RADIUS parameter to determine the holdoff pattern. If RTL_RADIUS is positive then a clockwise loiter is performed, if RTL_RADIUS is negative then a counter-clockwise loiter is used.", "DisplayName": "Ship landing angle", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Standard"}, "SIM_ACC1_BIAS_X": {"Description": "bias of simulated accelerometer sensor (X-axis)", "DisplayName": "Accel 1 bias", "User": "Advanced"}, "SIM_ACC1_BIAS_Y": {"Description": "bias of simulated accelerometer sensor (Y-axis)", "DisplayName": "Accel 1 bias", "User": "Advanced"}, "SIM_ACC1_BIAS_Z": {"Description": "bias of simulated accelerometer sensor (Z-axis)", "DisplayName": "Accel 1 bias", "User": "Advanced"}, "SIM_ACC1_SCAL_X": {"Description": "scaling factors applied to simulated accelerometer (X-axis)", "DisplayName": "Accel 1 scaling factor", "User": "Advanced"}, "SIM_ACC1_SCAL_Y": {"Description": "scaling factors applied to simulated accelerometer (Y-axis)", "DisplayName": "Accel 1 scaling factor", "User": "Advanced"}, "SIM_ACC1_SCAL_Z": {"Description": "scaling factors applied to simulated accelerometer (Z-axis)", "DisplayName": "Accel 1 scaling factor", "User": "Advanced"}, "SIM_ACC2_BIAS_X": {"Description": "bias of simulated accelerometer sensor (X-axis)", "DisplayName": "Accel 2 bias", "User": "Advanced"}, "SIM_ACC2_BIAS_Y": {"Description": "bias of simulated accelerometer sensor (Y-axis)", "DisplayName": "Accel 2 bias", "User": "Advanced"}, "SIM_ACC2_BIAS_Z": {"Description": "bias of simulated accelerometer sensor (Z-axis)", "DisplayName": "Accel 2 bias", "User": "Advanced"}, "SIM_ACC2_SCAL_X": {"Description": "scaling factors applied to simulated accelerometer (X-axis)", "DisplayName": "Accel 2 scaling factor", "User": "Advanced"}, "SIM_ACC2_SCAL_Y": {"Description": "scaling factors applied to simulated accelerometer (Y-axis)", "DisplayName": "Accel 2 scaling factor", "User": "Advanced"}, "SIM_ACC2_SCAL_Z": {"Description": "scaling factors applied to simulated accelerometer (Z-axis)", "DisplayName": "Accel 2 scaling factor", "User": "Advanced"}, "SIM_ACC3_BIAS_X": {"Description": "bias of simulated accelerometer sensor (X-axis)", "DisplayName": "Accel 3 bias", "User": "Advanced"}, "SIM_ACC3_BIAS_Y": {"Description": "bias of simulated accelerometer sensor (Y-axis)", "DisplayName": "Accel 3 bias", "User": "Advanced"}, "SIM_ACC3_BIAS_Z": {"Description": "bias of simulated accelerometer sensor (Z-axis)", "DisplayName": "Accel 3 bias", "User": "Advanced"}, "SIM_ACC3_SCAL_X": {"Description": "scaling factors applied to simulated accelerometer (X-axis)", "DisplayName": "Accel 3 scaling factor", "User": "Advanced"}, "SIM_ACC3_SCAL_Y": {"Description": "scaling factors applied to simulated accelerometer (Y-axis)", "DisplayName": "Accel 3 scaling factor", "User": "Advanced"}, "SIM_ACC3_SCAL_Z": {"Description": "scaling factors applied to simulated accelerometer (Z-axis)", "DisplayName": "Accel 3 scaling factor", "User": "Advanced"}, "SIM_ACC4_BIAS_X": {"Description": "bias of simulated accelerometer sensor (X-axis)", "DisplayName": "Accel 4 bias", "User": "Advanced"}, "SIM_ACC4_BIAS_Y": {"Description": "bias of simulated accelerometer sensor (Y-axis)", "DisplayName": "Accel 4 bias", "User": "Advanced"}, "SIM_ACC4_BIAS_Z": {"Description": "bias of simulated accelerometer sensor (Z-axis)", "DisplayName": "Accel 4 bias", "User": "Advanced"}, "SIM_ACC4_SCAL_X": {"Description": "scaling factors applied to simulated accelerometer (X-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACC4_SCAL_Y": {"Description": "scaling factors applied to simulated accelerometer (Y-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACC4_SCAL_Z": {"Description": "scaling factors applied to simulated accelerometer (Z-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACC5_BIAS_X": {"Description": "bias of simulated accelerometer sensor (X-axis)", "DisplayName": "Accel 5 bias", "User": "Advanced"}, "SIM_ACC5_BIAS_Y": {"Description": "bias of simulated accelerometer sensor (Y-axis)", "DisplayName": "Accel 5 bias", "User": "Advanced"}, "SIM_ACC5_BIAS_Z": {"Description": "bias of simulated accelerometer sensor (Z-axis)", "DisplayName": "Accel 5 bias", "User": "Advanced"}, "SIM_ACC5_SCAL_X": {"Description": "scaling factors applied to simulated accelerometer (X-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACC5_SCAL_Y": {"Description": "scaling factors applied to simulated accelerometer (Y-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACC5_SCAL_Z": {"Description": "scaling factors applied to simulated accelerometer (Z-axis)", "DisplayName": "Accel 4 scaling factor", "User": "Advanced"}, "SIM_ACCEL1_FAIL": {"Description": "Simulated failure of ACCEL1", "DisplayName": "ACCEL1 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "ACCEL1 Failure"}}, "SIM_ACCEL2_FAIL": {"Description": "Simulated failure of ACCEL2", "DisplayName": "ACCEL2 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "ACCEL2 Failure"}}, "SIM_ACCEL3_FAIL": {"Description": "Simulated failure of ACCEL3", "DisplayName": "ACCEL3 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "ACCEL3 Failure"}}, "SIM_ACCEL4_FAIL": {"Description": "Simulated failure of ACCEL4", "DisplayName": "ACCEL4 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "ACCEL4 Failure"}}, "SIM_ACCEL5_FAIL": {"Description": "Simulated failure of ACCEL5", "DisplayName": "ACCEL5 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "ACCEL5 Failure"}}, "SIM_ACC_FAIL_MSK": {"Description": "Determines if the acclerometer reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params", "DisplayName": "Accelerometer Failure Mask", "User": "Advanced", "Values": {"0": "Disabled", "1": "Readings stopped"}}, "SIM_ADSB_TYPES": {"Bitmask": {"0": "MAVLink", "3": "SageTechMXS"}, "Description": "specifies which simulated ADSB types are active", "DisplayName": "Simulated ADSB Type mask", "User": "Advanced"}, "SIM_ARSPD2_FAIL": {"Description": "Simulates Airspeed sensor 1 failure", "DisplayName": "Airspeed sensor failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_ARSPD2_FAILP": {"Description": "Simulated airspeed sensor failure pressure", "DisplayName": "Airspeed sensor failure pressure", "Units": "Pa", "User": "Advanced"}, "SIM_ARSPD2_PITOT": {"Description": "Simulated airspeed sensor pitot tube failure pressure", "DisplayName": "Airspeed pitot tube failure pressure", "Units": "Pa", "User": "Advanced"}, "SIM_ARSPD2_RATIO": {"Description": "Simulated airspeed sensor ratio", "DisplayName": "Airspeed ratios", "User": "Advanced"}, "SIM_ARSPD2_SIGN": {"Description": "Simulated airspeed sensor with reversed pitot/static connections", "DisplayName": "Airspeed signflip", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_ARSPD_FAIL": {"Description": "Simulates Airspeed sensor 1 failure", "DisplayName": "Airspeed sensor failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_ARSPD_FAILP": {"Description": "Simulated airspeed sensor failure pressure", "DisplayName": "Airspeed sensor failure pressure", "Units": "Pa", "User": "Advanced"}, "SIM_ARSPD_PITOT": {"Description": "Simulated airspeed sensor pitot tube failure pressure", "DisplayName": "Airspeed pitot tube failure pressure", "Units": "Pa", "User": "Advanced"}, "SIM_ARSPD_RATIO": {"Description": "Simulated airspeed sensor ratio", "DisplayName": "Airspeed ratios", "User": "Advanced"}, "SIM_ARSPD_SIGN": {"Description": "Simulated airspeed sensor with reversed pitot/static connections", "DisplayName": "Airspeed signflip", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_BAR2_GLITCH": {"Description": "Glitch for 2nd baro", "DisplayName": "Baro2 Glitch", "Units": "m", "User": "Advanced"}, "SIM_BAR2_RND": {"Description": "Amount of (evenly-distributed) noise injected into the 2nd baro", "DisplayName": "Baro2 Noise", "Units": "m", "User": "Advanced"}, "SIM_BAR3_GLITCH": {"Description": "Glitch for 2nd baro", "DisplayName": "Baro3 Glitch", "Units": "m", "User": "Advanced"}, "SIM_BAR3_RND": {"Description": "Amount of (evenly-distributed) noise injected into the 3rd baro", "DisplayName": "Baro3 Noise", "Units": "m", "User": "Advanced"}, "SIM_BARO_DRIFT": {"Description": "Barometer altitude drifts at this rate", "DisplayName": "Baro altitude drift", "Units": "m/s", "User": "Advanced"}, "SIM_BARO_GLITCH": {"Description": "Glitch for 1st baro", "DisplayName": "Baro Glitch", "Units": "m", "User": "Advanced"}, "SIM_BARO_RND": {"Description": "Amount of (evenly-distributed) noise injected into the 1st baro", "DisplayName": "Baro Noise", "Units": "m", "User": "Advanced"}, "SIM_BATT_VOLTAGE": {"Description": "Simulated battery (constant) voltage", "DisplayName": "Simulated battery voltage", "Units": "V", "User": "Advanced"}, "SIM_CAN_SRV_MSK": {"Bitmask": {"0": "Servo 1", "1": "Servo 2", "10": "Servo 11", "11": "Servo 12", "12": "Servo 13", "13": "Servo 14", "14": "Servo 15", "15": "Servo 16", "16": "Servo 17", "17": "Servo 18", "18": "Servo 19", "19": "Servo 20", "2": "Servo 3", "20": "Servo 21", "21": "Servo 22", "22": "Servo 23", "23": "Servo 24", "24": "Servo 25", "25": "Servo 26", "26": "Servo 27", "27": "Servo 28", "28": "Servo 29", "29": "Servo 30", "3": "Servo 4", "30": "Servo 31", "31": "Servo 32", "4": "Servo 5", "5": "Servo 6", "6": "Servo 7", "7": "Servo 8", "8": "Servo 9", "9": "Servo 10"}, "Description": "The set of actuators controlled externally by CAN SITL AP_Periph", "DisplayName": "Mask of CAN servos/ESCs", "User": "Advanced"}, "SIM_CAN_TYPE1": {"Description": "transport type for first CAN interface", "DisplayName": "transport type for first CAN interface", "User": "Advanced", "Values": {"0": "MulticastUDP", "1": "SocketCAN"}}, "SIM_CAN_TYPE2": {"Description": "transport type for second CAN interface", "DisplayName": "transport type for second CAN interface", "User": "Advanced", "Values": {"0": "MulticastUDP", "1": "SocketCAN"}}, "SIM_ESC_TELEM": {"Description": "enable perfect simulated ESC telemetry", "DisplayName": "Simulated ESC Telemetry", "User": "Advanced"}, "SIM_FLOAT_EXCEPT": {"Description": "If set, if a numerical error occurs SITL will die with a floating point exception.", "DisplayName": "Generate floating point exceptions", "User": "Advanced"}, "SIM_FLOW_DELAY": {"Description": "Opflow data delay", "DisplayName": "Opflow Delay", "Units": "ms"}, "SIM_FLOW_ENABLE": {"Description": "Enable simulated Optical Flow sensor", "DisplayName": "Opflow Enable", "Values": {"0": "Disable", "1": "Enabled"}}, "SIM_FLOW_POS_X": {"Description": "XYZ position of the optical flow sensor focal point relative to the body frame origin (X-axis)", "DisplayName": "Opflow Pos", "Units": "m"}, "SIM_FLOW_POS_Y": {"Description": "XYZ position of the optical flow sensor focal point relative to the body frame origin (Y-axis)", "DisplayName": "Opflow Pos", "Units": "m"}, "SIM_FLOW_POS_Z": {"Description": "XYZ position of the optical flow sensor focal point relative to the body frame origin (Z-axis)", "DisplayName": "Opflow Pos", "Units": "m"}, "SIM_FLOW_RATE": {"Description": "Opflow Data Rate", "DisplayName": "Opflow Rate", "Units": "Hz"}, "SIM_FLOW_RND": {"Description": "Optical Flow sensor measurement noise in rad/sec", "DisplayName": "Opflow noise"}, "SIM_GLD_BLN_BRST": {"Description": "balloon burst height", "DisplayName": "balloon burst height", "Units": "m"}, "SIM_GLD_BLN_RATE": {"Description": "balloon climb rate", "DisplayName": "balloon climb rate", "Units": "m/s"}, "SIM_GPS2_ACC": {"Description": "GPS 2 Accuracy", "DisplayName": "GPS 2 Accuracy", "User": "Advanced"}, "SIM_GPS2_ALT_OFS": {"Description": "GPS 2 Altitude Error", "DisplayName": "GPS 2 Altitude Offset", "Units": "m"}, "SIM_GPS2_BYTELOS": {"Description": "Percent of bytes lost from GPS 2", "DisplayName": "GPS 2 Byteloss", "Units": "%", "User": "Advanced"}, "SIM_GPS2_DISABLE": {"Description": "Disables GPS 2", "DisplayName": "GPS 2 disable", "User": "Advanced", "Values": {"0": "Enable", "1": "GPS Disabled"}}, "SIM_GPS2_DRFTALT": {"Description": "GPS 2 altitude drift error", "DisplayName": "GPS 2 Altitude Drift", "Units": "m", "User": "Advanced"}, "SIM_GPS2_GLTCH_X": {"Description": "Glitch offsets of simulated GPS 2 sensor (X-axis)", "DisplayName": "GPS 2 Glitch", "User": "Advanced"}, "SIM_GPS2_GLTCH_Y": {"Description": "Glitch offsets of simulated GPS 2 sensor (Y-axis)", "DisplayName": "GPS 2 Glitch", "User": "Advanced"}, "SIM_GPS2_GLTCH_Z": {"Description": "Glitch offsets of simulated GPS 2 sensor (Z-axis)", "DisplayName": "GPS 2 Glitch", "User": "Advanced"}, "SIM_GPS2_HDG": {"Description": "Enable GPS2 output of NMEA heading HDT sentence or UBLOX_RELPOSNED", "DisplayName": "GPS 2 Heading", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GPS2_HZ": {"Description": "GPS 2 Update rate", "DisplayName": "GPS 2 Hz", "Units": "Hz"}, "SIM_GPS2_JAM": {"Description": "Enable simulated GPS jamming", "DisplayName": "GPS jamming enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GPS2_LAG_MS": {"Description": "GPS 2 lag in ms", "DisplayName": "GPS 2 Lag", "Units": "ms", "User": "Advanced"}, "SIM_GPS2_LCKTIME": {"Description": "Delay in seconds before GPS2 acquires lock", "DisplayName": "GPS 2 Lock Time", "Units": "s", "User": "Advanced"}, "SIM_GPS2_NOISE": {"Description": "Amplitude of the GPS2 altitude error", "DisplayName": "GPS 2 Noise", "Units": "m", "User": "Advanced"}, "SIM_GPS2_NUMSATS": {"Description": "Number of satellites GPS 2 has in view", "DisplayName": "GPS 2 Num Satellites"}, "SIM_GPS2_POS_X": {"Description": "GPS 2 antenna phase center position relative to the body frame origin (X-axis)", "DisplayName": "GPS 2 Position", "Units": "m"}, "SIM_GPS2_POS_Y": {"Description": "GPS 2 antenna phase center position relative to the body frame origin (Y-axis)", "DisplayName": "GPS 2 Position", "Units": "m"}, "SIM_GPS2_POS_Z": {"Description": "GPS 2 antenna phase center position relative to the body frame origin (Z-axis)", "DisplayName": "GPS 2 Position", "Units": "m"}, "SIM_GPS2_TYPE": {"Description": "Sets the type of simulation used for GPS 2", "DisplayName": "GPS 2 type", "User": "Advanced", "Values": {"0": "None", "1": "UBlox", "11": "Trimble", "19": "MSP", "5": "NMEA", "6": "SBP", "7": "File", "8": "Nova", "9": "SBP2"}}, "SIM_GPS2_VERR_X": {"Description": "GPS 2 Velocity Error Offsets in NED (X-axis)", "DisplayName": "GPS 2 Velocity Error", "User": "Advanced"}, "SIM_GPS2_VERR_Y": {"Description": "GPS 2 Velocity Error Offsets in NED (Y-axis)", "DisplayName": "GPS 2 Velocity Error", "User": "Advanced"}, "SIM_GPS2_VERR_Z": {"Description": "GPS 2 Velocity Error Offsets in NED (Z-axis)", "DisplayName": "GPS 2 Velocity Error", "User": "Advanced"}, "SIM_GPS_ACC": {"Description": "GPS 1 Accuracy", "DisplayName": "GPS 1 Accuracy", "User": "Advanced"}, "SIM_GPS_ALT_OFS": {"Description": "GPS 1 Altitude Error", "DisplayName": "GPS 1 Altitude Offset", "Units": "m"}, "SIM_GPS_BYTELOSS": {"Description": "Percent of bytes lost from GPS 1", "DisplayName": "GPS Byteloss", "Units": "%", "User": "Advanced"}, "SIM_GPS_DISABLE": {"Description": "Disables GPS 1", "DisplayName": "GPS 1 disable", "User": "Advanced", "Values": {"0": "Enable", "1": "GPS Disabled"}}, "SIM_GPS_DRIFTALT": {"Description": "GPS 1 altitude drift error", "DisplayName": "GPS 1 Altitude Drift", "Units": "m", "User": "Advanced"}, "SIM_GPS_GLITCH_X": {"Description": "Glitch offsets of simulated GPS 1 sensor (X-axis)", "DisplayName": "GPS 1 Glitch", "User": "Advanced"}, "SIM_GPS_GLITCH_Y": {"Description": "Glitch offsets of simulated GPS 1 sensor (Y-axis)", "DisplayName": "GPS 1 Glitch", "User": "Advanced"}, "SIM_GPS_GLITCH_Z": {"Description": "Glitch offsets of simulated GPS 1 sensor (Z-axis)", "DisplayName": "GPS 1 Glitch", "User": "Advanced"}, "SIM_GPS_HDG": {"Description": "Enable GPS1 output of NMEA heading HDT sentence or UBLOX_RELPOSNED", "DisplayName": "GPS 1 Heading", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GPS_HZ": {"Description": "GPS 1 Update rate", "DisplayName": "GPS 1 Hz", "Units": "Hz"}, "SIM_GPS_JAM": {"Description": "Enable simulated GPS jamming", "DisplayName": "GPS jamming enable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GPS_LAG_MS": {"Description": "GPS 1 lag", "DisplayName": "GPS 1 Lag", "Units": "ms", "User": "Advanced"}, "SIM_GPS_LOCKTIME": {"Description": "Delay in seconds before GPS1 acquires lock", "DisplayName": "GPS 1 Lock Time", "Units": "s", "User": "Advanced"}, "SIM_GPS_LOG_NUM": {"Description": "Log number for GPS:update_file()", "DisplayName": "GPS Log Number"}, "SIM_GPS_NOISE": {"Description": "Amplitude of the GPS1 altitude error", "DisplayName": "GPS 1 Noise", "Units": "m", "User": "Advanced"}, "SIM_GPS_NUMSATS": {"Description": "Number of satellites GPS 1 has in view", "DisplayName": "GPS 1 Num Satellites"}, "SIM_GPS_POS_X": {"Description": "GPS 1 antenna phase center position relative to the body frame origin (X-axis)", "DisplayName": "GPS 1 Position", "Units": "m"}, "SIM_GPS_POS_Y": {"Description": "GPS 1 antenna phase center position relative to the body frame origin (Y-axis)", "DisplayName": "GPS 1 Position", "Units": "m"}, "SIM_GPS_POS_Z": {"Description": "GPS 1 antenna phase center position relative to the body frame origin (Z-axis)", "DisplayName": "GPS 1 Position", "Units": "m"}, "SIM_GPS_TYPE": {"Description": "Sets the type of simulation used for GPS 1", "DisplayName": "GPS 1 type", "User": "Advanced", "Values": {"0": "None", "1": "UBlox", "11": "Trimble", "19": "MSP", "5": "NMEA", "6": "SBP", "7": "File", "8": "Nova", "9": "SBP2"}}, "SIM_GPS_VERR_X": {"Description": "GPS 1 Velocity Error Offsets in NED (X-axis)", "DisplayName": "GPS 1 Velocity Error", "User": "Advanced"}, "SIM_GPS_VERR_Y": {"Description": "GPS 1 Velocity Error Offsets in NED (Y-axis)", "DisplayName": "GPS 1 Velocity Error", "User": "Advanced"}, "SIM_GPS_VERR_Z": {"Description": "GPS 1 Velocity Error Offsets in NED (Z-axis)", "DisplayName": "GPS 1 Velocity Error", "User": "Advanced"}, "SIM_GRPE_ENABLE": {"Description": "Allows you to enable (1) or disable (0) the gripper servo simulation", "DisplayName": "Gripper servo Sim enable/disable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GRPE_PIN": {"Description": "The pin number that the gripper emp is connected to. (start at 1)", "DisplayName": "Gripper emp pin", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "SIM_GRPS_ENABLE": {"Description": "Allows you to enable (1) or disable (0) the gripper servo simulation", "DisplayName": "Gripper servo Sim enable/disable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_GRPS_GRAB": {"Description": "PWM value in microseconds sent to Gripper to initiate grabbing the cargo", "DisplayName": "Gripper Grab PWM", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Advanced"}, "SIM_GRPS_PIN": {"Description": "The pin number that the gripper servo is connected to. (start at 1)", "DisplayName": "Gripper servo pin", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "SIM_GRPS_RELEASE": {"Description": "PWM value in microseconds sent to Gripper to release the cargo", "DisplayName": "Gripper Release PWM", "Range": {"high": "2000", "low": "1000"}, "Units": "PWM", "User": "Advanced"}, "SIM_GRPS_REVERSE": {"Description": "Reverse the closing direction.", "DisplayName": "Gripper close direction", "User": "Advanced", "Values": {"0": "Normal", "1": "Reverse"}}, "SIM_GYR1_BIAS_X": {"Description": "First Gyro bias on X axis", "DisplayName": "First Gyro bias on X axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR1_BIAS_Y": {"Description": "First Gyro bias on Y axis", "DisplayName": "First Gyro bias on Y axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR1_BIAS_Z": {"Description": "First Gyro bias on Z axis", "DisplayName": "First Gyro bias on Z axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR1_SCALE_X": {"Description": "scaling factors applied to simulated gyroscope (X-axis)", "DisplayName": "Gyro 1 scaling factor", "User": "Advanced"}, "SIM_GYR1_SCALE_Y": {"Description": "scaling factors applied to simulated gyroscope (Y-axis)", "DisplayName": "Gyro 1 scaling factor", "User": "Advanced"}, "SIM_GYR1_SCALE_Z": {"Description": "scaling factors applied to simulated gyroscope (Z-axis)", "DisplayName": "Gyro 1 scaling factor", "User": "Advanced"}, "SIM_GYR2_BIAS_X": {"Description": "Second Gyro bias on X axis", "DisplayName": "Second Gyro bias on X axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR2_BIAS_Y": {"Description": "Second Gyro bias on Y axis", "DisplayName": "Second Gyro bias on Y axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR2_BIAS_Z": {"Description": "Second Gyro bias on Z axis", "DisplayName": "Second Gyro bias on Z axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR2_SCALE_X": {"Description": "scaling factors applied to simulated gyroscope (X-axis)", "DisplayName": "Gyro 2 scaling factor", "User": "Advanced"}, "SIM_GYR2_SCALE_Y": {"Description": "scaling factors applied to simulated gyroscope (Y-axis)", "DisplayName": "Gyro 2 scaling factor", "User": "Advanced"}, "SIM_GYR2_SCALE_Z": {"Description": "scaling factors applied to simulated gyroscope (Z-axis)", "DisplayName": "Gyro 2 scaling factor", "User": "Advanced"}, "SIM_GYR3_BIAS_X": {"Description": "Third Gyro bias on X axis", "DisplayName": "Third Gyro bias on X axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR3_BIAS_Y": {"Description": "Third Gyro bias on Y axis", "DisplayName": "Third Gyro bias on Y axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR3_BIAS_Z": {"Description": "Third Gyro bias on Z axis", "DisplayName": "Third Gyro bias on Z axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR3_SCALE_X": {"Description": "scaling factors applied to simulated gyroscope (X-axis)", "DisplayName": "Gyro 3 scaling factor", "User": "Advanced"}, "SIM_GYR3_SCALE_Y": {"Description": "scaling factors applied to simulated gyroscope (Y-axis)", "DisplayName": "Gyro 3 scaling factor", "User": "Advanced"}, "SIM_GYR3_SCALE_Z": {"Description": "scaling factors applied to simulated gyroscope (Z-axis)", "DisplayName": "Gyro 3 scaling factor", "User": "Advanced"}, "SIM_GYR4_BIAS_X": {"Description": "Fourth Gyro bias on X axis", "DisplayName": "Fourth Gyro bias on X axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR4_BIAS_Y": {"Description": "Fourth Gyro bias on Y axis", "DisplayName": "Fourth Gyro bias on Y axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR4_BIAS_Z": {"Description": "Fourth Gyro bias on Z axis", "DisplayName": "Fourth Gyro bias on Z axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR4_SCALE_X": {"Description": "scaling factors applied to simulated gyroscope (X-axis)", "DisplayName": "Gyro 4 scaling factor", "User": "Advanced"}, "SIM_GYR4_SCALE_Y": {"Description": "scaling factors applied to simulated gyroscope (Y-axis)", "DisplayName": "Gyro 4 scaling factor", "User": "Advanced"}, "SIM_GYR4_SCALE_Z": {"Description": "scaling factors applied to simulated gyroscope (Z-axis)", "DisplayName": "Gyro 4 scaling factor", "User": "Advanced"}, "SIM_GYR5_BIAS_X": {"Description": "Fifth Gyro bias on X axis", "DisplayName": "Fifth Gyro bias on X axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR5_BIAS_Y": {"Description": "Fifth Gyro bias on Y axis", "DisplayName": "Fifth Gyro bias on Y axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR5_BIAS_Z": {"Description": "Fifth Gyro bias on Z axis", "DisplayName": "Fifth Gyro bias on Z axis", "Units": "rad/s", "User": "Advanced"}, "SIM_GYR5_SCALE_X": {"Description": "scaling factors applied to simulated gyroscope (X-axis)", "DisplayName": "Gyro 5 scaling factor", "User": "Advanced"}, "SIM_GYR5_SCALE_Y": {"Description": "scaling factors applied to simulated gyroscope (Y-axis)", "DisplayName": "Gyro 5 scaling factor", "User": "Advanced"}, "SIM_GYR5_SCALE_Z": {"Description": "scaling factors applied to simulated gyroscope (Z-axis)", "DisplayName": "Gyro 5 scaling factor", "User": "Advanced"}, "SIM_GYRO_FAIL_MSK": {"Description": "Determines if the gyro reading updates are stopped when for an IMU simulated failure by ACCELx_FAIL params", "DisplayName": "Gyro Failure Mask", "User": "Advanced", "Values": {"0": "Disabled", "1": "Readings stopped"}}, "SIM_IMU_COUNT": {"Description": "Number of simulated IMUs to create", "DisplayName": "IMU count"}, "SIM_IMU_POS_X": {"Description": "XYZ position of the IMU accelerometer relative to the body frame origin (X-axis)", "DisplayName": "IMU Offsets", "Units": "m"}, "SIM_IMU_POS_Y": {"Description": "XYZ position of the IMU accelerometer relative to the body frame origin (Y-axis)", "DisplayName": "IMU Offsets", "Units": "m"}, "SIM_IMU_POS_Z": {"Description": "XYZ position of the IMU accelerometer relative to the body frame origin (Z-axis)", "DisplayName": "IMU Offsets", "Units": "m"}, "SIM_INIT_ALT_OFS": {"Description": "GPS initial alt offset from origin", "DisplayName": "Initial Altitude Offset"}, "SIM_INIT_LAT_OFS": {"Description": "GPS initial lat offset from origin", "DisplayName": "Initial Latitude Offset"}, "SIM_INIT_LON_OFS": {"Description": "GPS initial lon offset from origin", "DisplayName": "Initial Longitude Offset"}, "SIM_JSON_MASTER": {"Description": "the instance number to take servos from", "DisplayName": "JSON master instance"}, "SIM_MAG1_DEVID": {"Description": "Device ID of simulated compass 1", "DisplayName": "MAG1 Device ID", "User": "Advanced"}, "SIM_MAG1_FAIL": {"Description": "Simulated failure of MAG1", "DisplayName": "MAG1 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "MAG1 Failure"}}, "SIM_MAG2_FAIL": {"Description": "Simulated failure of MAG2", "DisplayName": "MAG2 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "MAG2 Failure"}}, "SIM_MAG3_FAIL": {"Description": "Simulated failure of MAG3", "DisplayName": "MAG3 Failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "MAG3 Failure"}}, "SIM_MAG_SAVE_IDS": {"Description": "This forces saving of compass devids on startup so that simulated compasses start as calibrated", "DisplayName": "Save MAG devids on startup", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_OH_MASK": {"Description": "channels which are passed through to actual hardware when running sim on actual hardware", "DisplayName": "SIM-on_hardware Output Enable Mask"}, "SIM_OH_RELAY_MSK": {"Description": "Allow relay output operation when running SIM-on-hardware", "DisplayName": "SIM-on_hardware Relay Enable Mask"}, "SIM_OPOS_ALT": {"Description": "Specifies vehicle's startup altitude (AMSL)", "DisplayName": "Original Position (Altitude)", "User": "Advanced"}, "SIM_OPOS_HDG": {"Description": "Specifies vehicle's startup heading (0-360)", "DisplayName": "Original Position (Heading)", "User": "Advanced"}, "SIM_OPOS_LAT": {"Description": "Specifies vehicle's startup latitude", "DisplayName": "Original Position (Latitude)", "User": "Advanced"}, "SIM_OPOS_LNG": {"Description": "Specifies vehicle's startup longitude", "DisplayName": "Original Position (Longitude)", "User": "Advanced"}, "SIM_OSD_COLUMNS": {"Description": "Simulated OSD number of text columns", "DisplayName": "Simulated OSD number of text columns", "Range": {"high": "100", "low": "10"}}, "SIM_OSD_ROWS": {"Description": "Simulated OSD number of text rows", "DisplayName": "Simulated OSD number of text rows", "Range": {"high": "100", "low": "10"}}, "SIM_PLD_ALT_LIMIT": {"Description": "Precland device maximum range altitude", "DisplayName": "Precland device alt range", "Range": {"high": "100", "low": "0"}, "Units": "m", "User": "Advanced"}, "SIM_PLD_DIST_LIMIT": {"Description": "Precland device maximum lateral range", "DisplayName": "Precland device lateral range", "Range": {"high": "100", "low": "5"}, "Units": "m", "User": "Advanced"}, "SIM_PLD_ENABLE": {"Description": "Allows you to enable (1) or disable (0) the Preland simulation", "DisplayName": "Preland device Sim enable/disable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_PLD_HEIGHT": {"Description": "Precland device center's height above SITL origin. Assumes a 2x2m square as station base", "DisplayName": "Precland device center's height SITL origin", "Increment": "1", "Range": {"high": "10000", "low": "0"}, "Units": "m", "User": "Advanced"}, "SIM_PLD_LAT": {"Description": "Precland device center's latitude", "DisplayName": "Precland device center's latitude", "Increment": "0.000001", "Range": {"high": "90", "low": "-90"}, "Units": "deg", "User": "Advanced"}, "SIM_PLD_LON": {"Description": "Precland device center's longitude", "DisplayName": "Precland device center's longitude", "Increment": "0.000001", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "SIM_PLD_OPTIONS": {"Bitmask": {"0": "Enable target distance"}, "Description": "SIM_Precland extra options", "DisplayName": "SIM_Precland extra options", "User": "Advanced"}, "SIM_PLD_ORIENT": {"Description": "Precland device orientation vector", "DisplayName": "Precland device orientation", "User": "Advanced", "Values": {"0": "Front", "24": "Up", "4": "Back"}}, "SIM_PLD_RATE": {"Description": "Precland device rate. e.g led patter refresh rate, RF message rate, etc.", "DisplayName": "Precland device update rate", "Range": {"high": "200", "low": "0"}, "Units": "Hz", "User": "Advanced"}, "SIM_PLD_SHIP": {"Description": "This makes the position of the landing beacon follow the simulated ship from SIM_SHIP. The ship movement is controlled with the SIM_SHIP parameters", "DisplayName": "SIM_Precland follow ship", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_PLD_TYPE": {"Description": "Precland device radiance type: it can be a cylinder, a cone, or a sphere.", "DisplayName": "Precland device radiance type", "User": "Advanced", "Values": {"0": "cylinder", "1": "cone", "2": "sphere"}}, "SIM_PLD_YAW": {"Description": "Precland device systems rotation from north", "DisplayName": "Precland device systems rotation from north", "Increment": "1", "Range": {"high": "+180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "SIM_RC_FAIL": {"Description": "Allows you to emulate rc failures in sim", "DisplayName": "Simulated RC signal failure", "User": "Advanced", "Values": {"0": "Disabled", "1": "No RC pusles", "2": "All Channels neutral except Throttle is 950us"}}, "SIM_SB_ALT_TARG": {"Description": "altitude target", "DisplayName": "altitude target", "Units": "m"}, "SIM_SB_ARM_LEN": {"Description": "distance from center of mass to one motor", "DisplayName": "arm length", "Units": "m"}, "SIM_SB_CLMB_RT": {"Description": "target climb rate", "DisplayName": "target climb rate", "Units": "m/s"}, "SIM_SB_COL": {"Description": "center of lift position above CoG", "DisplayName": "center of lift", "Units": "m"}, "SIM_SB_DRAG_FWD": {"Description": "drag on X axis", "DisplayName": "drag in forward direction"}, "SIM_SB_DRAG_SIDE": {"Description": "drag on Y axis", "DisplayName": "drag in sidewards direction"}, "SIM_SB_DRAG_UP": {"Description": "drag on Z axis", "DisplayName": "drag in upward direction"}, "SIM_SB_FLR": {"Description": "amount of additional lift generated by the helper balloon (for the purpose of ascent), as a proportion of the 'neutral buoyancy' lift", "DisplayName": "free lift rate"}, "SIM_SB_HMASS": {"Description": "mass of lifting gas", "DisplayName": "helium mass", "Units": "kg"}, "SIM_SB_MASS": {"Description": "mass of blimp not including lifting gas", "DisplayName": "mass", "Units": "kg"}, "SIM_SB_MOI_PITCH": {"Description": "moment of inertia in pitch", "DisplayName": "moment of inertia in pitch"}, "SIM_SB_MOI_ROLL": {"Description": "moment of inertia in roll", "DisplayName": "moment of inertia in roll"}, "SIM_SB_MOI_YAW": {"Description": "moment of inertia in yaw", "DisplayName": "moment of inertia in yaw"}, "SIM_SB_MOT_ANG": {"Description": "maximum motor tilt angle", "DisplayName": "motor angle", "Units": "deg"}, "SIM_SB_MOT_THST": {"Description": "thrust at max throttle for one motor", "DisplayName": "motor thrust", "Units": "N"}, "SIM_SB_WVANE": {"Description": "center of drag for weathervaning", "DisplayName": "weathervaning offset", "Units": "m"}, "SIM_SB_YAW_RT": {"Description": "maximum yaw rate with full left throttle at target altitude", "DisplayName": "yaw rate", "Units": "deg/s"}, "SIM_SERVO_DELAY": {"Description": "servo delay", "DisplayName": "servo delay", "Units": "s"}, "SIM_SERVO_FILTER": {"Description": "servo filter", "DisplayName": "servo filter", "Units": "Hz"}, "SIM_SERVO_SPEED": {"Description": "servo speed (time for 60 degree deflection). If DELAY and FILTER are not set then this is converted to a 1p lowpass filter. If DELAY or FILTER are set then this is treated as a rate of change limit", "DisplayName": "servo speed", "Units": "s"}, "SIM_SPEEDUP": {"Description": "Runs the simulation at multiples of normal speed. Do not use if realtime physics, like RealFlight, is being used", "DisplayName": "Sim Speedup", "Range": {"high": "10", "low": "1"}, "User": "Advanced "}, "SIM_SPR_ENABLE": {"Description": "Allows you to enable (1) or disable (0) the Sprayer simulation", "DisplayName": "Sprayer Sim enable/disable", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "SIM_SPR_PUMP": {"Description": "The pin number that the Sprayer pump is connected to. (start at 1)", "DisplayName": "Sprayer pump pin", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "SIM_SPR_SPIN": {"Description": "The pin number that the Sprayer spinner servo is connected to. (start at 1)", "DisplayName": "Sprayer spinner servo pin", "Range": {"high": "15", "low": "0"}, "User": "Advanced"}, "SIM_UART_LOSS": {"Description": "Sets percentage of outgoing byte loss on UARTs", "DisplayName": "UART byte loss percentage", "Units": "%", "User": "Advanced"}, "SIM_VICON_FAIL": {"Description": "SITL vicon failure", "DisplayName": "SITL vicon failure", "User": "Advanced", "Values": {"0": "Vicon Healthy", "1": "Vicon Failed"}}, "SIM_VICON_GLIT_X": {"Description": "SITL vicon position glitch North", "DisplayName": "SITL vicon position glitch North", "Units": "m", "User": "Advanced"}, "SIM_VICON_GLIT_Y": {"Description": "SITL vicon position glitch East", "DisplayName": "SITL vicon position glitch East", "Units": "m", "User": "Advanced"}, "SIM_VICON_GLIT_Z": {"Description": "SITL vicon position glitch Down", "DisplayName": "SITL vicon position glitch Down", "Units": "m", "User": "Advanced"}, "SIM_VICON_POS_X": {"Description": "SITL vicon position on vehicle in Forward direction", "DisplayName": "SITL vicon position on vehicle in Forward direction", "Range": {"high": "10", "low": "0"}, "Units": "m", "User": "Advanced"}, "SIM_VICON_POS_Y": {"Description": "SITL vicon position on vehicle in Right direction", "DisplayName": "SITL vicon position on vehicle in Right direction", "Range": {"high": "10", "low": "0"}, "Units": "m", "User": "Advanced"}, "SIM_VICON_POS_Z": {"Description": "SITL vicon position on vehicle in Down direction", "DisplayName": "SITL vicon position on vehicle in Down direction", "Range": {"high": "10", "low": "0"}, "Units": "m", "User": "Advanced "}, "SIM_VICON_TMASK": {"Bitmask": {"0": "VISION_POSITION_ESTIMATE", "1": "VISION_SPEED_ESTIMATE", "2": "VICON_POSITION_ESTIMATE", "3": "VISION_POSITION_DELTA", "4": "ODOMETRY"}, "Description": "SITL vicon messages sent", "DisplayName": "SITL vicon type mask", "User": "Advanced"}, "SIM_VICON_VGLI_X": {"Description": "SITL vicon velocity glitch North", "DisplayName": "SITL vicon velocity glitch North", "Units": "m/s", "User": "Advanced"}, "SIM_VICON_VGLI_Y": {"Description": "SITL vicon velocity glitch East", "DisplayName": "SITL vicon velocity glitch East", "Units": "m/s", "User": "Advanced"}, "SIM_VICON_VGLI_Z": {"Description": "SITL vicon velocity glitch Down", "DisplayName": "SITL vicon velocity glitch Down", "Units": "m/s", "User": "Advanced"}, "SIM_VICON_YAW": {"Description": "SITL vicon yaw angle in earth frame", "DisplayName": "SITL vicon yaw angle in earth frame", "Range": {"high": "360", "low": "0"}, "Units": "deg", "User": "Advanced"}, "SIM_VICON_YAWERR": {"Description": "SITL vicon yaw added to reported yaw sent to vehicle", "DisplayName": "SITL vicon yaw error", "Range": {"high": "180", "low": "-180"}, "Units": "deg", "User": "Advanced"}, "SIM_WIND_DIR": {"Description": "Allows you to set wind direction (true deg) in sim", "DisplayName": "Simulated Wind direction", "Units": "deg", "User": "Advanced"}, "SIM_WIND_SPD": {"Description": "Allows you to emulate wind in sim", "DisplayName": "Simulated Wind speed", "Units": "m/s", "User": "Advanced"}, "SIM_WIND_TURB": {"Description": "Allows you to emulate random wind variations in sim", "DisplayName": "Simulated Wind variation", "Units": "m/s", "User": "Advanced"}, "SIM_WIND_T_": {"Description": "Selects how wind varies from surface to WIND_T_ALT", "DisplayName": "Wind Profile Type", "User": "Advanced ", "Values": {"0": "square law", "1": "none", "2": "linear-see WIND_T_COEF"}}, "SIM_WIND_T_ALT": {"Description": "Altitude at which wind reaches full strength, decaying from full strength as altitude lowers to ground level", "DisplayName": "Full Wind Altitude", "Units": "m", "User": "Advanced"}, "SIM_WIND_T_COEF": {"Description": "For linear wind profile,wind is reduced by (Altitude-WIND_T_ALT) x this value", "DisplayName": "Linear Wind Curve Coeff", "User": "Advanced"}, "SIM_WOW_PIN": {"Description": "SITL set this simulated pin to true if vehicle is on ground", "DisplayName": "Weight on Wheels Pin", "User": "Advanced"}, "SOAR_ALT_CUTOFF": {"Description": "Cut off throttle at this alt.", "DisplayName": "Maximum power altitude, relative to the home location", "Range": {"high": "5000.0", "low": "0"}, "Units": "m", "User": "Advanced"}, "SOAR_ALT_MAX": {"Description": "Don't thermal any higher than this.", "DisplayName": "Maximum soaring altitude, relative to the home location", "Range": {"high": "5000.0", "low": "0"}, "Units": "m", "User": "Advanced"}, "SOAR_ALT_MIN": {"Description": "Don't get any lower than this.", "DisplayName": "Minimum soaring altitude, relative to the home location", "Range": {"high": "1000.0", "low": "0"}, "Units": "m", "User": "Advanced"}, "SOAR_CRSE_ARSPD": {"Description": "If non-zero this airspeed will be used when cruising between thermals in AUTO. If set to -1, airspeed will be selected based on speed-to-fly theory. If set to 0, then AIRSPEED_CRUISE will be used while cruising between thermals.", "DisplayName": "Specific setting for airspeed when soaring in AUTO mode.", "Range": {"high": "50", "low": "-1"}, "User": "Advanced"}, "SOAR_DIST_AHEAD": {"Description": "Initial guess of the distance to the thermal center", "DisplayName": "Distance to thermal center", "Range": {"high": "100", "low": "0"}, "Units": "m", "User": "Advanced"}, "SOAR_ENABLE": {"Description": "Toggles the soaring mode on and off", "DisplayName": "Is the soaring mode enabled or not", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "SOAR_MAX_DRIFT": {"Description": "The previous mode will be restored if the horizontal distance to the thermalling start location exceeds this value. -1 to disable.", "DisplayName": "(Optional) Maximum drift distance to allow when thermalling.", "Range": {"high": "1000", "low": "0"}, "User": "Advanced"}, "SOAR_MAX_RADIUS": {"Description": "RTL will be entered when a thermal is exited and the plane is more than this distance from home. -1 to disable.", "DisplayName": "(Optional) Maximum distance from home", "Range": {"high": "1000", "low": "0"}, "User": "Advanced"}, "SOAR_MIN_CRSE_S": {"Description": "Minimum number of seconds to spend cruising", "DisplayName": "Minimum cruising time", "Range": {"high": "600", "low": "0"}, "Units": "s", "User": "Advanced"}, "SOAR_MIN_THML_S": {"Description": "Minimum number of seconds to spend thermalling", "DisplayName": "Minimum thermalling time", "Range": {"high": "600", "low": "0"}, "Units": "s", "User": "Advanced"}, "SOAR_POLAR_B": {"Description": "Induced drag coeffient", "DisplayName": "Induced drag coeffient", "Range": {"high": "0.05", "low": "0.005"}, "User": "Advanced"}, "SOAR_POLAR_CD0": {"Description": "Zero lift drag coefficient", "DisplayName": "Zero lift drag coef.", "Range": {"high": "0.5", "low": "0.005"}, "User": "Advanced"}, "SOAR_POLAR_K": {"Description": "Cl factor 2*m*g/(rho*S)", "DisplayName": "Cl factor", "Range": {"high": "400", "low": "20"}, "Units": "m.m/s/s", "User": "Advanced"}, "SOAR_Q1": {"Description": "Standard deviation of noise in process for strength", "DisplayName": "Process noise", "Range": {"high": "0.01", "low": "0.0001"}, "User": "Advanced"}, "SOAR_Q2": {"Description": "Standard deviation of noise in process for position and radius", "DisplayName": "Process noise", "Range": {"high": "1", "low": "0.01"}, "User": "Advanced"}, "SOAR_R": {"Description": "Standard deviation of noise in measurement", "DisplayName": "Measurement noise", "Range": {"high": "1", "low": "0.01"}, "User": "Advanced"}, "SOAR_THML_ARSPD": {"Description": "If non-zero this airspeed will be used when thermalling. A value of 0 will use AIRSPEED_CRUISE.", "DisplayName": "Specific setting for airspeed when soaring in THERMAL mode.", "Range": {"high": "50", "low": "0"}, "User": "Advanced"}, "SOAR_THML_BANK": {"Description": "This parameter sets the bank angle to use when thermalling. Typically 30 - 45 degrees works well.", "DisplayName": "Thermalling bank angle", "Range": {"high": "50", "low": "20"}, "Units": "deg", "User": "Advanced"}, "SOAR_THML_FLAP": {"Description": "This sets the flap when in LOITER with soaring active. Overrides the usual auto flap behaviour.", "DisplayName": "Flap percent to be used during thermalling flight.", "Range": {"high": "100", "low": "0"}, "User": "Advanced"}, "SOAR_VSPEED": {"Description": "Rate of climb to trigger themalling speed", "DisplayName": "Vertical v-speed", "Range": {"high": "10", "low": "0"}, "Units": "m/s", "User": "Advanced"}, "SR0_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR0_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR0_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR1_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR1_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR2_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR2_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR3_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR3_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR4_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR4_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR5_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR5_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_ADSB": {"Description": "MAVLink ADSB stream rate", "DisplayName": "ADSB stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_EXTRA1": {"Description": "MAVLink Stream rate of ATTITUDE, SIMSTATE (SIM only), AHRS2, RPM, AOA_SSA, LANDING,ESC_TELEMETRY,EFI_STATUS, and PID_TUNING", "DisplayName": "Extra data type 1 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_EXTRA2": {"Description": "MAVLink Stream rate of VFR_HUD", "DisplayName": "Extra data type 2 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "SR6_EXTRA3": {"Description": "MAVLink Stream rate of AHRS, SYSTEM_TIME, WIND, RANGEFINDER, DISTANCE_SENSOR, TERRAIN_REQUEST, BATTERY2, GIMBAL_DEVICE_ATTITUDE_STATUS, OPTICAL_FLOW, MAG_CAL_REPORT, MAG_CAL_PROGRESS, EKF_STATUS_REPORT, VIBRATION, and BATTERY_STATUS", "DisplayName": "Extra data type 3 stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_EXT_STAT": {"Description": "MAVLink Stream rate of SYS_STATUS, POWER_STATUS, MCU_STATUS, MEMINFO, CURRENT_WAYPOINT, GPS_RAW_INT, GPS_RTK (if available), GPS2_RAW_INT (if available), GPS2_RTK (if available), NAV_CONTROLLER_OUTPUT, FENCE_STATUS, and GLOBAL_TARGET_POS_INT", "DisplayName": "Extended status stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_PARAMS": {"Description": "MAVLink Stream rate of PARAM_VALUE", "DisplayName": "Parameter stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_POSITION": {"Description": "MAVLink Stream rate of GLOBAL_POSITION_INT and LOCAL_POSITION_NED", "DisplayName": "Position stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_RAW_CTRL": {"Description": "MAVLink Raw Control stream rate of SERVO_OUT", "DisplayName": "Raw Control stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_RAW_SENS": {"Description": "MAVLink Stream rate of RAW_IMU, SCALED_IMU2, SCALED_IMU3, SCALED_PRESSURE, SCALED_PRESSURE2, and SCALED_PRESSURE3", "DisplayName": "Raw sensor stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "SR6_RC_CHAN": {"Description": "MAVLink Stream rate of SERVO_OUTPUT_RAW and RC_CHANNELS", "DisplayName": "RC Channel stream rate", "Increment": "1", "Range": {"high": "50", "low": "0"}, "RebootRequired": "True", "Units": "Hz", "User": "Advanced"}, "STAB_PITCH_DOWN": {"Description": "Degrees of down pitch added when throttle is below TRIM_THROTTLE in FBWA and AUTOTUNE modes. Scales linearly so full value is added when THR_MIN is reached. Helps to keep airspeed higher in glides or landing approaches and prevents accidental stalls. 2 degrees recommended for most planes.", "DisplayName": "Low throttle pitch down trim", "Increment": "0.1", "Range": {"high": "15", "low": "0"}, "Units": "deg", "User": "Advanced"}, "STALL_PREVENTION": {"Description": "Enables roll limits at low airspeed in roll limiting flight modes. Roll limits based on aerodynamic load factor in turns and scale on AIRSPEED_MIN that must be set correctly. Without airspeed sensor, uses synthetic airspeed from wind speed estimate that may both be inaccurate.", "DisplayName": "Enable stall prevention", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "STAT_BOOTCNT": {"Description": "Number of times board has been booted", "DisplayName": "Boot Count", "ReadOnly": "True", "User": "Standard"}, "STAT_FLTTIME": {"Description": "Total FlightTime (seconds)", "DisplayName": "Total FlightTime", "ReadOnly": "True", "Units": "s", "User": "Standard"}, "STAT_RESET": {"Description": "Seconds since January 1st 2016 (Unix epoch+1451606400) since statistics reset (set to 0 to reset statistics, other set values will be ignored)", "DisplayName": "Statistics Reset Time", "ReadOnly": "True", "Units": "s", "User": "Standard"}, "STAT_RUNTIME": {"Description": "Total time autopilot has run", "DisplayName": "Total RunTime", "ReadOnly": "True", "Units": "s", "User": "Standard"}, "STEER2SRV_D": {"Description": "This adjusts the damping of the steering control loop. This gain helps to reduce steering jitter with vibration. It should be increased in 0.01 increments as too high a value can lead to a high frequency steering oscillation that could overstress the vehicle.", "DisplayName": "Damping Gain", "Increment": "0.01", "Range": {"high": "0.1", "low": "0"}, "User": "Standard"}, "STEER2SRV_DRTFCT": {"Description": "Degrees of steering wheel to derate at each additional m/s of speed above \"Derating speed\". Should be set so that at higher speeds the plane does not roll to the wing in turns.", "DisplayName": "Derating factor", "Increment": "0.1", "Range": {"high": "50.0", "low": "0.0"}, "Units": "deg/m/s", "User": "Advanced"}, "STEER2SRV_DRTMIN": {"Description": "The angle that limits smallest angle of steering wheel at maximum speed. Even if it should derate below, it will stop derating at this angle.", "DisplayName": "Minimum angle of wheel", "Increment": "10", "Range": {"high": "4500", "low": "0"}, "Units": "cdeg", "User": "Advanced"}, "STEER2SRV_DRTSPD": {"Description": "Speed after that the maximum degree of steering will start to derate. Set this speed to a maximum speed that a plane can do controlled turn at maximum angle of steering wheel without rolling to wing. If 0 then no derating is used.", "DisplayName": "Derating speed", "Increment": "0.1", "Range": {"high": "30.0", "low": "0.0"}, "Units": "m/s", "User": "Advanced"}, "STEER2SRV_FF": {"Description": "The feed forward gain for steering this is the ratio of the achieved turn rate to applied steering. A value of 1 means that the vehicle would yaw at a rate of 45 degrees per second with full steering deflection at 1m/s ground speed.", "DisplayName": "Steering feed forward", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.0"}, "User": "Standard"}, "STEER2SRV_I": {"Description": "This is the gain from the integral of steering angle. Increasing this gain causes the controller to trim out steady offsets due to an out of trim vehicle.", "DisplayName": "Integrator Gain", "Increment": "0.05", "Range": {"high": "1.0", "low": "0"}, "User": "Standard"}, "STEER2SRV_IMAX": {"Description": "This limits the number of degrees of steering in centi-degrees over which the integrator will operate. At the default setting of 1500 centi-degrees, the integrator will be limited to +- 15 degrees of servo travel. The maximum servo deflection is +- 45 centi-degrees, so the default value represents a 1/3rd of the total control throw which is adequate unless the vehicle is severely out of trim.", "DisplayName": "Integrator limit", "Increment": "10", "Range": {"high": "4500", "low": "0"}, "Units": "cdeg", "User": "Advanced"}, "STEER2SRV_MINSPD": {"Description": "This is the minimum assumed ground speed in meters/second for steering. Having a minimum speed prevents oscillations when the vehicle first starts moving. The vehicle can still drive slower than this limit, but the steering calculations will be done based on this minimum speed.", "DisplayName": "Minimum speed", "Increment": "0.1", "Range": {"high": "5", "low": "0"}, "Units": "m/s", "User": "Standard"}, "STEER2SRV_P": {"Description": "The proportional gain for steering. This should be approximately equal to the diameter of the turning circle of the vehicle at low speed and maximum steering angle", "DisplayName": "Steering turning gain", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "User": "Standard"}, "STEER2SRV_TCONST": {"Description": "This controls the time constant in seconds from demanded to achieved steering angle. A value of 0.75 is a good default and will work with nearly all rovers. Ground steering in aircraft needs a bit smaller time constant, and a value of 0.5 is recommended for best ground handling in fixed wing aircraft. A value of 0.75 means that the controller will try to correct any deviation between the desired and actual steering angle in 0.75 seconds. Advanced users may want to reduce this time to obtain a faster response but there is no point setting a time less than the vehicle can achieve.", "DisplayName": "Steering Time Constant", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.4"}, "Units": "s", "User": "Advanced"}, "STICK_MIXING": {"Description": "When enabled, this adds user stick input to the control surfaces in auto modes, allowing the user to have some degree of flight control without changing modes. There are two types of stick mixing available. If you set STICK_MIXING to 1 then it will use \"fly by wire\" mixing, which controls the roll and pitch in the same way that the FBWA mode does. This is the safest option if you usually fly ArduPlane in FBWA or FBWB mode. If you set STICK_MIXING to 3 then it will apply to the yaw while in quadplane modes only, such as while doing an automatic VTOL takeoff or landing.", "DisplayName": "Stick Mixing", "User": "Advanced", "Values": {"0": "Disabled", "1": "FBWMixing", "3": "VTOL Yaw only"}}, "SYSID_ENFORCE": {"Description": "This controls whether packets from other than the expected GCS system ID will be accepted", "DisplayName": "GCS sysid enforcement", "User": "Advanced", "Values": {"0": "NotEnforced", "1": "Enforced"}}, "SYSID_MYGCS": {"Description": "The identifier of the ground station in the MAVLink protocol. Don't change this unless you also modify the ground station to match.", "DisplayName": "Ground station MAVLink system ID", "Increment": "1", "Range": {"high": "255", "low": "1"}, "User": "Advanced"}, "SYSID_THISMAV": {"Description": "Allows setting an individual MAVLink system id for this vehicle to distinguish it from others on the same network", "DisplayName": "MAVLink system ID of this vehicle", "Range": {"high": "255", "low": "1"}, "User": "Advanced"}, "TECS_APPR_SMAX": {"Description": "The sink rate max for the landing approach stage of landing. This will need to be large for steep landing approaches especially when using reverse thrust. If 0, then use TECS_SINK_MAX.", "DisplayName": "Sink rate max for landing approach stage", "Increment": "0.1", "Range": {"high": "20.0", "low": "0.0"}, "Units": "m/s", "User": "Advanced"}, "TECS_CLMB_MAX": {"Description": "Maximum demanded climb rate. Do not set higher than the climb speed at THR_MAX at AIRSPEED_CRUISE when the battery is at low voltage. Reduce value if airspeed cannot be maintained on ascent. Increase value if throttle does not increase significantly to ascend.", "DisplayName": "Maximum Climb Rate (metres/sec)", "Increment": "0.1", "Range": {"high": "20.0", "low": "0.1"}, "User": "Standard"}, "TECS_FLARE_HGT": {"Description": "When height above ground is below this, the sink rate will be held at TECS_LAND_SINK. Use this to perform a hold-off manoeuvre when combined with small values for TECS_LAND_SINK.", "DisplayName": "Flare holdoff height", "Range": {"high": "15", "low": "0"}, "Units": "m", "User": "Advanced"}, "TECS_HDEM_TCONST": {"Description": "This sets the time constant of the low pass filter that is applied to the height demand input when bit 1 of TECS_OPTIONS is not selected.", "DisplayName": "Height Demand Time Constant", "Increment": "0.2", "Range": {"high": "5.0", "low": "1.0"}, "Units": "s", "User": "Advanced"}, "TECS_HGT_OMEGA": {"Description": "This is the cross-over frequency of the complementary filter used to fuse vertical acceleration and baro alt to obtain an estimate of height rate and height.", "DisplayName": "Height complementary filter frequency (radians/sec)", "Increment": "0.05", "Range": {"high": "5.0", "low": "1.0"}, "User": "Advanced"}, "TECS_INTEG_GAIN": {"Description": "Integrator gain to trim out long-term speed and height errors.", "DisplayName": "Controller integrator", "Increment": "0.02", "Range": {"high": "0.5", "low": "0.0"}, "User": "Advanced"}, "TECS_LAND_ARSPD": {"Description": "When performing an autonomus landing, this value is used as the goal airspeed during approach. Max airspeed allowed is Trim Airspeed or AIRSPEED_MAX as defined by LAND_OPTIONS bitmask. Note that this parameter is not useful if your platform does not have an airspeed sensor (use TECS_LAND_THR instead). If negative then this value is halfway between AIRSPEED_MIN and TRIM_CRUISE_CM speed for fixed wing autolandings.", "DisplayName": "Airspeed during landing approach (m/s)", "Increment": "1", "Range": {"high": "127", "low": "-1"}, "User": "Standard"}, "TECS_LAND_DAMP": {"Description": "This is the sink rate gain for the pitch demand loop when in final landing stage of flight. It should be larger than TECS_PTCH_DAMP to allow for better sink rate control during flare.", "DisplayName": "Controller sink rate to pitch gain during flare", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "TECS_LAND_IGAIN": {"Description": "This is the integrator gain on the control loop during landing. When set to 0 then TECS_INTEG_GAIN is used. Increase to increase the rate at which speed and height offsets are trimmed out. Typically values lower than TECS_INTEG_GAIN work best", "DisplayName": "Controller integrator during landing", "Increment": "0.02", "Range": {"high": "0.5", "low": "0.0"}, "User": "Advanced"}, "TECS_LAND_PDAMP": {"Description": "This is the damping gain for the pitch demand loop during landing. Increase to add damping to correct for oscillations in speed and height. If set to 0 then TECS_PTCH_DAMP will be used instead.", "DisplayName": "Pitch damping gain when landing", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "TECS_LAND_PMAX": {"Description": "This limits the pitch used during the final stage of automatic landing. During the final landing stage most planes need to keep their pitch small to avoid stalling. A maximum of 10 degrees is usually good. A value of zero means to use the normal pitch limits.", "DisplayName": "Maximum pitch during final stage of landing", "Increment": "1", "Range": {"high": "40", "low": "-5"}, "User": "Advanced"}, "TECS_LAND_SINK": {"Description": "The sink rate in meters/second for the final stage of landing.", "DisplayName": "Sink rate for final landing stage", "Increment": "0.1", "Range": {"high": "2.0", "low": "0.0"}, "User": "Advanced"}, "TECS_LAND_SPDWGT": {"Description": "Same as SPDWEIGHT parameter, with the exception that this parameter is applied during landing flight stages. A value closer to 2 will result in the plane ignoring height error during landing and our experience has been that the plane will therefore keep the nose up -- sometimes good for a glider landing (with the side effect that you will likely glide a ways past the landing point). A value closer to 0 results in the plane ignoring speed error -- use caution when lowering the value below 1 -- ignoring speed could result in a stall. Values between 0 and 2 are valid values for a fixed landing weight. When using -1 the weight will be scaled during the landing. At the start of the landing approach it starts with TECS_SPDWEIGHT and scales down to 0 by the time you reach the land point. Example: Halfway down the landing approach you'll effectively have a weight of TECS_SPDWEIGHT/2.", "DisplayName": "Weighting applied to speed control during landing.", "Increment": "0.1", "Range": {"high": "2.0", "low": "-1.0"}, "User": "Advanced"}, "TECS_LAND_SRC": {"Description": "When zero, the flare sink rate (TECS_LAND_SINK) is a fixed sink demand. With this enabled the flare sinkrate will increase/decrease the flare sink demand as you get further beyond the LAND waypoint. Has no effect before the waypoint. This value is added to TECS_LAND_SINK proportional to distance traveled after wp. With an increasing sink rate you can still land in a given distance if you're traveling too fast and cruise passed the land point. A positive value will force the plane to land sooner proportional to distance passed land point. A negative number will tell the plane to slowly climb allowing for a pitched-up stall landing. Recommend 0.2 as initial value.", "DisplayName": "Land sink rate change", "Increment": "0.1", "Range": {"high": "2.0", "low": "-2.0"}, "Units": "m/s/m", "User": "Advanced"}, "TECS_LAND_TCONST": {"Description": "This is the time constant of the TECS control algorithm when in final landing stage of flight. It should be smaller than TECS_TIME_CONST to allow for faster flare", "DisplayName": "Land controller time constant (sec)", "Increment": "0.2", "Range": {"high": "5.0", "low": "1.0"}, "User": "Advanced"}, "TECS_LAND_TDAMP": {"Description": "Damping gain for the throttle demand loop during an auto-landing. Same as TECS_THR_DAMP but only in effect during an auto-land. Increase to add throttle activity to dampen oscillations in speed and height. When set to 0 landing throttle damping is controlled by TECS_THR_DAMP.", "DisplayName": "Controller throttle damping when landing", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "TECS_LAND_THR": {"Description": "Use this parameter instead of LAND_ARSPD if your platform does not have an airspeed sensor. It is the cruise throttle during landing approach. If this value is negative then it is disabled and TECS_LAND_ARSPD is used instead.", "DisplayName": "Cruise throttle during landing approach (percentage)", "Increment": "0.1", "Range": {"high": "100", "low": "-1"}, "User": "Standard"}, "TECS_OPTIONS": {"Bitmask": {"0": "GliderOnly", "1": "AllowDescentSpeedup"}, "Description": "This allows the enabling of special features in the speed/height controller.", "DisplayName": "Extra TECS options", "User": "Advanced"}, "TECS_PITCH_MAX": {"Description": "Overrides PTCH_LIM_MAX_DEG in automatic throttle modes to reduce climb rates. Uses PTCH_LIM_MAX_DEG if set to 0. For proper TECS tuning, set to the angle that the aircraft can climb at AIRSPEED_CRUISE and THR_MAX.", "DisplayName": "Maximum pitch in auto flight", "Increment": "1", "Range": {"high": "45", "low": "0"}, "User": "Advanced"}, "TECS_PITCH_MIN": {"Description": "Overrides PTCH_LIM_MIN_DEG in automatic throttle modes to reduce descent rates. Uses PTCH_LIM_MIN_DEG if set to 0. For proper TECS tuning, set to the angle that the aircraft can descend at without overspeeding.", "DisplayName": "Minimum pitch in auto flight", "Increment": "1", "Range": {"high": "0", "low": "-45"}, "User": "Advanced"}, "TECS_PTCH_DAMP": {"Description": "Damping gain for pitch control from TECS control. Increasing may correct for oscillations in speed and height, but too much may cause additional oscillation and degraded control.", "DisplayName": "Controller pitch damping", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "TECS_PTCH_FF_K": {"Description": "This parameter sets the gain between demanded airspeed and pitch. It has units of radians per metre per second and should generally be negative. A good starting value is -0.04 for gliders and -0.08 for draggy airframes. The default (0.0) disables this feed-forward.", "DisplayName": "Gain for pitch feed-forward.", "Range": {"high": "0.0", "low": "-5.0"}, "User": "Advanced"}, "TECS_PTCH_FF_V0": {"Description": "This parameter sets the airspeed at which no feed-forward is applied between demanded airspeed and pitch. It should correspond to the airspeed in metres per second at which the plane glides at neutral pitch including STAB_PITCH_DOWN.", "DisplayName": "Baseline airspeed for pitch feed-forward.", "Range": {"high": "50.0", "low": "5.0"}, "User": "Advanced"}, "TECS_RLL2THR": {"Description": "Gain from bank angle to throttle to compensate for loss of airspeed from drag in turns. Set to approximately 10x the sink rate in m/s caused by a 45-degree turn. High efficiency models may need less while less efficient aircraft may need more. Should be tuned in an automatic mission with waypoints and turns greater than 90 degrees. Tune with PTCH2SRV_RLL and KFF_RDDRMIX to achieve constant airspeed, constant altitude turns.", "DisplayName": "Bank angle compensation gain", "Increment": "1.0", "Range": {"high": "30.0", "low": "5.0"}, "User": "Advanced"}, "TECS_SINK_MAX": {"Description": "Maximum demanded descent rate. Do not set higher than the vertical speed the aircraft can maintain at THR_MIN, TECS_PITCH_MIN, and AIRSPEED_MAX.", "DisplayName": "Maximum Descent Rate (metres/sec)", "Increment": "0.1", "Range": {"high": "20.0", "low": "0.0"}, "User": "Standard"}, "TECS_SINK_MIN": {"Description": "Minimum sink rate when at THR_MIN and AIRSPEED_CRUISE.", "DisplayName": "Minimum Sink Rate (metres/sec)", "Increment": "0.1", "Range": {"high": "10.0", "low": "0.1"}, "User": "Standard"}, "TECS_SPDWEIGHT": {"Description": "Mixing of pitch and throttle correction for height and airspeed errors. Pitch controls altitude and throttle controls airspeed if set to 0. Pitch controls airspeed and throttle controls altitude if set to 2 (good for gliders). Blended if set to 1.", "DisplayName": "Weighting applied to speed control", "Increment": "0.1", "Range": {"high": "2.0", "low": "0.0"}, "User": "Advanced"}, "TECS_SPD_OMEGA": {"Description": "This is the cross-over frequency of the complementary filter used to fuse longitudinal acceleration and airspeed to obtain a lower noise and lag estimate of airspeed.", "DisplayName": "Speed complementary filter frequency (radians/sec)", "Increment": "0.05", "Range": {"high": "2.0", "low": "0.5"}, "User": "Advanced"}, "TECS_SYNAIRSPEED": {"Description": "This enables the use of synthetic airspeed in TECS for aircraft that don't have a real airspeed sensor. This is useful for development testing where the user is aware of the considerable limitations of the synthetic airspeed system, such as very poor estimates when a wind estimate is not accurate. Do not enable this option unless you fully understand the limitations of a synthetic airspeed estimate. This option has no effect if a healthy airspeed sensor is being used for airspeed measurements.", "DisplayName": "Enable the use of synthetic airspeed", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "TECS_THR_DAMP": {"Description": "Damping gain for throttle demand loop. Increase to add throttle activity to dampen oscillations in speed and height.", "DisplayName": "Controller throttle damping", "Increment": "0.1", "Range": {"high": "1.0", "low": "0.1"}, "User": "Advanced"}, "TECS_TIME_CONST": {"Description": "Time constant of the TECS control algorithm. Small values make faster altitude corrections but can cause overshoot and aggressive behavior.", "DisplayName": "Controller time constant (sec)", "Increment": "0.2", "Range": {"high": "10.0", "low": "3.0"}, "User": "Advanced"}, "TECS_TKOFF_IGAIN": {"Description": "This is the integrator gain on the control loop during takeoff. When set to 0 then TECS_INTEG_GAIN is used. Increase to increase the rate at which speed and height offsets are trimmed out. Typically values higher than TECS_INTEG_GAIN work best", "DisplayName": "Controller integrator during takeoff", "Increment": "0.02", "Range": {"high": "0.5", "low": "0.0"}, "User": "Advanced"}, "TECS_VERT_ACC": {"Description": "Maximum vertical acceleration used to correct speed or height errors.", "DisplayName": "Vertical Acceleration Limit (metres/sec^2)", "Increment": "0.5", "Range": {"high": "10.0", "low": "1.0"}, "User": "Advanced"}, "TELEM_DELAY": {"Description": "The amount of time (in seconds) to delay radio telemetry to prevent an Xbee bricking on power up", "DisplayName": "Telemetry startup delay", "Increment": "1", "Range": {"high": "30", "low": "0"}, "Units": "s", "User": "Standard"}, "TEMP1_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP1_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP1_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP1_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP1_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP1_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP1_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP1_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP1_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP1_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP1_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP2_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP2_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP2_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP2_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP2_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP2_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP2_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP2_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP2_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP2_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP2_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP3_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP3_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP3_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP3_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP3_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP3_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP3_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP3_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP3_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP3_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP3_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP4_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP4_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP4_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP4_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP4_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP4_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP4_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP4_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP4_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP4_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP4_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP5_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP5_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP5_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP5_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP5_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP5_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP5_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP5_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP5_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP5_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP5_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP6_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP6_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP6_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP6_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP6_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP6_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP6_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP6_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP6_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP6_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP6_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP7_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP7_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP7_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP7_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP7_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP7_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP7_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP7_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP7_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP7_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP7_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP8_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP8_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP8_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP8_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP8_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP8_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP8_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP8_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP8_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP8_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP8_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP9_A0": {"Description": "a0 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 0th polynomial coefficient"}, "TEMP9_A1": {"Description": "a1 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 1st polynomial coefficient"}, "TEMP9_A2": {"Description": "a2 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 2nd polynomial coefficient"}, "TEMP9_A3": {"Description": "a3 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 3rd polynomial coefficient"}, "TEMP9_A4": {"Description": "a4 in polynomial of form temperature in deg = a0 + a1*voltage + a2*voltage^2 + a3*voltage^3 + a4*voltage^4", "DisplayName": "Temperature sensor analog 4th polynomial coefficient"}, "TEMP9_ADDR": {"Description": "Temperature sensor address, typically used for I2C address", "DisplayName": "Temperature sensor address", "Range": {"high": "127", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP9_BUS": {"Description": "Temperature sensor bus number, typically used to select from multiple I2C buses", "DisplayName": "Temperature sensor bus", "Range": {"high": "3", "low": "0"}, "RebootRequired": "True", "User": "Advanced"}, "TEMP9_PIN": {"Description": "Sets the analog input pin that should be used for temprature monitoring.", "DisplayName": "Temperature sensor analog voltage sensing pin", "User": "Standard", "Values": {"-1": "Disabled", "100": "PX4-v1", "13": "Pixhawk2_PM2/CubeOrange_PM2", "14": "CubeOrange", "16": "Durandal", "2": "Pixhawk/Pixracer/Navio2/Pixhawk2_PM1", "5": "Navigator"}}, "TEMP9_SRC": {"Description": "Sensor Source is used to designate which device's temperature report will be replaced by this temperature sensor's data. If 0 (None) then the data is only available via log. In the future a new Motor temperature report will be created for returning data directly.", "DisplayName": "Sensor Source", "User": "Standard", "Values": {"0": "None", "1": "ESC", "2": "Motor", "3": "Battery Index", "4": "Battery ID/SerialNumber", "5": "CAN based Pitot tube", "6": "DroneCAN-out on AP_Periph"}}, "TEMP9_SRC_ID": {"Description": "Sensor Source Identification is used to replace a specific instance of a system component's temperature report with the temp sensor's. Examples: TEMP_SRC = 1 (ESC), TEMP_SRC_ID = 1 will set the temp of ESC1. TEMP_SRC = 3 (BatteryIndex),TEMP_SRC_ID = 2 will set the temp of BATT2. TEMP_SRC = 4 (BatteryId/SerialNum),TEMP_SRC_ID=42 will set the temp of all batteries that have param BATTn_SERIAL = 42.", "DisplayName": "Sensor Source Identification"}, "TEMP9_TYPE": {"Description": "Enables temperature sensors", "DisplayName": "Temperature Sensor Type", "RebootRequired": "True", "User": "Standard", "Values": {"0": "Disabled", "1": "TSYS01", "2": "MCP9600", "3": "MAX31865", "4": "TSYS03", "5": "Analog", "6": "DroneCAN"}}, "TEMP_LOG": {"Description": "Enables temperature sensor logging", "DisplayName": "Logging", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "TERRAIN_ENABLE": {"Description": "enable terrain data. This enables the vehicle storing a database of terrain data on the SD card. The terrain data is requested from the ground station as needed, and stored for later use on the SD card. To be useful the ground station must support TERRAIN_REQUEST messages and have access to a terrain database, such as the SRTM database.", "DisplayName": "Terrain data enable", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "TERRAIN_FOLLOW": {"Bitmask": {"0": "Enable all modes", "1": "FBWB", "10": "QLand", "11": "Qloiter", "2": "Cruise", "3": "Auto", "4": "RTL", "5": "Avoid_ADSB", "6": "Guided", "7": "Loiter", "8": "Circle", "9": "QRTL"}, "Description": "This enables terrain following for CRUISE mode, FBWB mode, RTL and for rally points. To use this option you also need to set TERRAIN_ENABLE to 1, which enables terrain data fetching from the GCS, and you need to have a GCS that supports sending terrain data to the aircraft. When terrain following is enabled then CRUISE and FBWB mode will hold height above terrain rather than height above home. In RTL the return to launch altitude will be considered to be a height above the terrain. Rally point altitudes will be taken as height above the terrain. This option does not affect mission items, which have a per-waypoint flag for whether they are height above home or height above the terrain. To use terrain following missions you need a ground station which can set the waypoint type to be a terrain height waypoint when creating the mission.", "DisplayName": "Use terrain following", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "TERRAIN_LOOKAHD": {"Description": "This controls how far ahead the terrain following code looks to ensure it stays above upcoming terrain. A value of zero means no lookahead, so the controller will track only the terrain directly below the aircraft. The lookahead will never extend beyond the next waypoint when in AUTO mode.", "DisplayName": "Terrain lookahead", "Range": {"high": "10000", "low": "0"}, "Units": "m", "User": "Standard"}, "TERRAIN_MARGIN": {"Description": "Margin in centi-meters to accept terrain data from the GCS. This can be used to allow older terrain data generated with less accurate latitude/longitude scaling to be used", "DisplayName": "Acceptance margin", "Range": {"high": "50000", "low": "0.05"}, "Units": "m", "User": "Advanced"}, "TERRAIN_OFS_MAX": {"Description": "The maximum adjustment of terrain altitude based on the assumption that the vehicle is on the ground when it is armed. When the vehicle is armed the location of the vehicle is recorded, and when terrain data is available for that location a height adjustment for terrain data is calculated that aligns the terrain height at that location with the altitude recorded at arming. This height adjustment is applied to all terrain data. This parameter clamps the amount of adjustment. A value of zero disables the use of terrain height adjustment.", "DisplayName": "Terrain reference offset maximum", "Range": {"high": "50", "low": "0"}, "Units": "m", "User": "Advanced"}, "TERRAIN_OPTIONS": {"Bitmask": {"0": "Disable Download"}, "Description": "Options to change behaviour of terrain system", "DisplayName": "Terrain options", "User": "Advanced"}, "TERRAIN_SPACING": {"Description": "Distance between terrain grid points in meters. This controls the horizontal resolution of the terrain data that is stored on te SD card and requested from the ground station. If your GCS is using the ArduPilot SRTM database like Mission Planner or MAVProxy, then a resolution of 100 meters is appropriate. Grid spacings lower than 100 meters waste SD card space if the GCS cannot provide that resolution. The grid spacing also controls how much data is kept in memory during flight. A larger grid spacing will allow for a larger amount of data in memory. A grid spacing of 100 meters results in the vehicle keeping 12 grid squares in memory with each grid square having a size of 2.7 kilometers by 3.2 kilometers. Any additional grid squares are stored on the SD once they are fetched from the GCS and will be loaded as needed.", "DisplayName": "Terrain grid spacing", "Increment": "1", "Units": "m", "User": "Advanced"}, "TERR_BRK_ALT": {"Description": "terrain brake altitude. The altitude above the ground below which BRAKE mode will be engaged if in LOITER mode.", "DisplayName": "terrain brake altitude", "Range": {"high": "100", "low": "1"}, "Units": "m", "User": "Standard"}, "TERR_BRK_ENABLE": {"Description": "terrain brake enable", "DisplayName": "terrain brake enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "TERR_BRK_HDIST": {"Description": "terrain brake home distance. The distance from home where the auto BRAKE will be enabled. When within this distance of home the script will not activate", "DisplayName": "terrain brake home distance", "Range": {"high": "1000", "low": "0"}, "Units": "m", "User": "Standard"}, "TERR_BRK_SPD": {"Description": "terrain brake speed threshold. Don't trigger BRAKE if both horizontal speed and descent rate are below this threshold. By setting this to a small value this can be used to allow the user to climb up to a safe altitude in LOITER mode. A value of 0.5 is recommended if you want to use LOITER to recover from an emergency terrain BRAKE mode change.", "DisplayName": "terrain brake speed threshold", "Range": {"high": "5", "low": "0"}, "Units": "m/s", "User": "Standard"}, "THROTTLE_NUDGE": {"Description": "When enabled, this uses the throttle input in auto-throttle modes to 'nudge' the throttle or airspeed to higher or lower values. When you have an airspeed sensor the nudge affects the target airspeed, so that throttle inputs above 50% will increase the target airspeed from AIRSPEED_CRUISE up to a maximum of AIRSPEED_MAX. When no airspeed sensor is enabled the throttle nudge will push up the target throttle for throttle inputs above 50%.", "DisplayName": "Throttle nudge enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "THR_FAILSAFE": {"Description": "0 disables the failsafe. 1 enables failsafe on loss of RC input. This is detected either by throttle values below THR_FS_VALUE, loss of receiver valid pulses/data, or by the FS bit in receivers that provide it, like SBUS. A programmable failsafe action will occur and RC inputs, if present, will be ignored. A value of 2 means that the RC inputs won't be used when RC failsafe is detected by any of the above methods, but it won't trigger an RC failsafe action.", "DisplayName": "Throttle and RC Failsafe Enable", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled", "2": "EnabledNoFailsafe"}}, "THR_FS_VALUE": {"Description": "The PWM level on the throttle input channel below which throttle failsafe triggers. Note that this should be well below the normal minimum for your throttle channel.", "DisplayName": "Throttle Failsafe Value", "Increment": "1", "Range": {"high": "2200", "low": "925"}, "User": "Standard"}, "THR_MAX": {"Description": "Maximum throttle percentage used in all modes except manual, provided THR_PASS_STAB is not set.", "DisplayName": "Maximum Throttle", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "THR_MIN": {"Description": "Minimum throttle percentage used in all modes except manual, provided THR_PASS_STAB is not set. Negative values allow reverse thrust if hardware supports it.", "DisplayName": "Minimum Throttle", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "%", "User": "Standard"}, "THR_PASS_STAB": {"Description": "If this is set then when in STABILIZE, FBWA or ACRO modes the throttle is a direct passthru from the transmitter. This means the THR_MIN and THR_MAX settings are not used in these modes. This is useful for petrol engines where you setup a throttle cut switch that suppresses the throttle below the normal minimum.", "DisplayName": "Throttle passthru in stabilize", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "THR_SLEWRATE": {"Description": "Maximum change in throttle percentage per second. Lower limit based on 1 microsend of servo increase per loop. Divide SCHED_LOOP_RATE by approximately 10 to determine minimum achievable value.", "DisplayName": "Throttle slew rate", "Increment": "1", "Range": {"high": "127", "low": "0"}, "Units": "%/s", "User": "Standard"}, "THR_SUPP_MAN": {"Description": "When throttle is suppressed in auto mode it is normally forced to zero. If you enable this option, then while suppressed it will be manual throttle. This is useful on petrol engines to hold the idle throttle manually while waiting for takeoff", "DisplayName": "Throttle suppress manual passthru", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "TKOFF_ACCEL_CNT": {"Description": "This is the number of acceleration events to require for arming with TKOFF_THR_MINACC. The default is 1, which means a single forward acceleration above TKOFF_THR_MINACC will arm. By setting this higher than 1 you can require more forward/backward movements to arm.", "DisplayName": "Takeoff throttle acceleration count", "Range": {"high": "10", "low": "1"}, "User": "Standard"}, "TKOFF_ALT": {"Description": "This is the target altitude for TAKEOFF mode", "DisplayName": "Takeoff mode altitude", "Increment": "1", "Range": {"high": "200", "low": "0"}, "Units": "m", "User": "Standard"}, "TKOFF_DIST": {"Description": "This is the distance from the takeoff location where the plane will loiter. The loiter point will be in the direction of takeoff (the direction the plane is facing when the plane begins takeoff)", "DisplayName": "Takeoff mode distance", "Increment": "1", "Range": {"high": "500", "low": "0"}, "Units": "m", "User": "Standard"}, "TKOFF_FLAP_PCNT": {"Description": "The amount of flaps (as a percentage) to apply in automatic takeoff", "DisplayName": "Takeoff flap percentage", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "TKOFF_GND_PITCH": {"Description": "Degrees of pitch angle demanded during the takeoff run before speed reaches TKOFF_ROTATE_SPD. For taildraggers set to 3-point ground pitch angle and use TKOFF_TDRAG_ELEV to prevent nose tipover. For nose-wheel steer aircraft set to the ground pitch angle and if a reduction in nose-wheel load is required as speed rises, use a positive offset in TKOFF_GND_PITCH of up to 5 degrees above the angle on ground, starting at the mesured pitch angle and incrementing in 1 degree steps whilst checking for premature rotation and takeoff with each increment. To increase nose-wheel load, use a negative TKOFF_TDRAG_ELEV and refer to notes on TKOFF_TDRAG_ELEV before making adjustments.", "DisplayName": "Takeoff run pitch demand", "Increment": "0.1", "Range": {"high": "10.0", "low": "-5.0"}, "Units": "deg", "User": "Standard"}, "TKOFF_LVL_ALT": {"Description": "This is the altitude below which the wings are held level for TAKEOFF and AUTO modes. Below this altitude, roll demand is restricted to LEVEL_ROLL_LIMIT. Normal-flight roll restriction resumes above TKOFF_LVL_ALT*3 or TKOFF_ALT, whichever is lower. Roll limits are scaled while between TKOFF_LVL_ALT and those altitudes for a smooth transition.", "DisplayName": "Takeoff mode altitude level altitude", "Increment": "1", "Range": {"high": "50", "low": "0"}, "Units": "m", "User": "Standard"}, "TKOFF_LVL_PITCH": {"Description": "This is the target pitch for the initial climb to TKOFF_LVL_ALT", "DisplayName": "Takeoff mode altitude initial pitch", "Increment": "1", "Range": {"high": "30", "low": "0"}, "Units": "deg", "User": "Standard"}, "TKOFF_PLIM_SEC": {"Description": "This parameter reduces the pitch minimum limit of an auto-takeoff just a few seconds before it reaches the target altitude. This reduces overshoot by allowing the flight controller to start leveling off a few seconds before reaching the target height. When set to zero, the mission pitch min is enforced all the way to and through the target altitude, otherwise the pitch min slowly reduces to zero in the final segment. This is the pitch_min, not the demand. The flight controller should still be commanding to gain altitude to finish the takeoff but with this param it is not forcing it higher than it wants to be.", "DisplayName": "Takeoff pitch limit reduction", "Increment": "0.5", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Advanced"}, "TKOFF_ROTATE_SPD": {"Description": "This parameter sets the airspeed at which the aircraft will \"rotate\", setting climb pitch specified in the mission. If TKOFF_ROTATE_SPD is zero then the climb pitch will be used as soon as takeoff is started. For hand launch and catapult launches a TKOFF_ROTATE_SPD of zero should be set. For all ground launches TKOFF_ROTATE_SPD should be set above the stall speed, usually by about 10 to 30 percent. During the run, use TKOFF_GND_PITCH to keep the aircraft on the runway while below this airspeed.", "DisplayName": "Takeoff rotate speed", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m/s", "User": "Standard"}, "TKOFF_TDRAG_ELEV": {"Description": "This parameter sets the amount of elevator to apply during the initial stage of a takeoff. It is used to hold the tail wheel of a taildragger on the ground during the initial takeoff stage to give maximum steering. This option should be combined with the TKOFF_TDRAG_SPD1 option and the GROUND_STEER_ALT option along with tuning of the ground steering controller. A value of zero means to bypass the initial \"tail hold\" stage of takeoff. Set to zero for hand and catapult launch. For tail-draggers you should normally set this to 100, meaning full up elevator during the initial stage of takeoff. For most tricycle undercarriage aircraft a value of zero will work well, but for some tricycle aircraft a small negative value (say around -20 to -30) will apply down elevator which will hold the nose wheel firmly on the ground during initial acceleration. Only use a negative value if you find that the nosewheel doesn't grip well during takeoff. Too much down elevator on a tricycle undercarriage may cause instability in steering as the plane pivots around the nosewheel. Add down elevator 10 percent at a time.", "DisplayName": "Takeoff tail dragger elevator", "Increment": "1", "Range": {"high": "100", "low": "-100"}, "Units": "%", "User": "Standard"}, "TKOFF_TDRAG_SPD1": {"Description": "This parameter sets the airspeed at which to stop holding the tail down and transition to rudder control of steering on the ground. When TKOFF_TDRAG_SPD1 is reached the pitch of the aircraft will be held level until TKOFF_ROTATE_SPD is reached, at which point the takeoff pitch specified in the mission will be used to \"rotate\" the pitch for takeoff climb. Set TKOFF_TDRAG_SPD1 to zero to go straight to rotation. This should be set to zero for hand launch and catapult launch. It should also be set to zero for tricycle undercarriages unless you are using the method above to gently hold the nose wheel down. For tail dragger aircraft it should be set just below the stall speed.", "DisplayName": "Takeoff tail dragger speed1", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m/s", "User": "Standard"}, "TKOFF_THR_DELAY": {"Description": "This parameter sets the time delay (in 1/10ths of a second) that the ground speed check is delayed after the forward acceleration check controlled by TKOFF_THR_MINACC has passed. For hand launches with pusher propellers it is essential that this is set to a value of no less than 2 (0.2 seconds) to ensure that the aircraft is safely clear of the throwers arm before the motor can start. For bungee launches a larger value can be used (such as 30) to give time for the bungee to release from the aircraft before the motor is started.", "DisplayName": "Takeoff throttle delay", "Increment": "1", "Range": {"high": "127", "low": "0"}, "Units": "ds", "User": "Standard"}, "TKOFF_THR_MAX": {"Description": "The maximum throttle setting during automatic takeoff. If this is zero then THR_MAX is used for takeoff as well.", "DisplayName": "Maximum Throttle for takeoff", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Advanced"}, "TKOFF_THR_MAX_T": {"Description": "This sets the time that maximum throttle will be forced during a fixed wing takeoff without an airspeed sensor. If an airspeed sensor is being used then the throttle is set to maximum until the takeoff airspeed is reached.", "DisplayName": "Takeoff throttle maximum time", "Increment": "0.5", "Range": {"high": "10", "low": "0"}, "Units": "s", "User": "Standard"}, "TKOFF_THR_MINACC": {"Description": "Minimum forward acceleration in m/s/s before arming the ground speed check in auto-takeoff. This is meant to be used for hand launches. Setting this value to 0 disables the acceleration test which means the ground speed check will always be armed which could allow GPS velocity jumps to start the engine. For hand launches and bungee launches this should be set to around 15. Also see TKOFF_ACCEL_CNT paramter for control of full \"shake to arm\".", "DisplayName": "Takeoff throttle min acceleration", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m/s/s", "User": "Standard"}, "TKOFF_THR_MINSPD": {"Description": "Minimum GPS ground speed in m/s used by the speed check that un-suppresses throttle in auto-takeoff. This can be be used for catapult launches where you want the motor to engage only after the plane leaves the catapult, but it is preferable to use the TKOFF_THR_MINACC and TKOFF_THR_DELAY parameters for catapult launches due to the errors associated with GPS measurements. For hand launches with a pusher prop it is strongly advised that this parameter be set to a value no less than 4 m/s to provide additional protection against premature motor start. Note that the GPS velocity will lag the real velocity by about 0.5 seconds. The ground speed check is delayed by the TKOFF_THR_DELAY parameter.", "DisplayName": "Takeoff throttle min speed", "Increment": "0.1", "Range": {"high": "30", "low": "0"}, "Units": "m/s", "User": "Standard"}, "TKOFF_THR_SLEW": {"Description": "This parameter sets the slew rate for the throttle during auto takeoff. When this is zero the THR_SLEWRATE parameter is used during takeoff. For rolling takeoffs it can be a good idea to set a lower slewrate for takeoff to give a slower acceleration which can improve ground steering control. The value is a percentage throttle change per second, so a value of 20 means to advance the throttle over 5 seconds on takeoff. Values below 20 are not recommended as they may cause the plane to try to climb out with too little throttle. A value of -1 means no limit on slew rate in takeoff.", "DisplayName": "Takeoff throttle slew rate", "Increment": "1", "Range": {"high": "127", "low": "-1"}, "Units": "%/s", "User": "Standard"}, "TKOFF_TIMEOUT": {"Description": "This is the timeout for an automatic takeoff. If this is non-zero and the aircraft does not reach a ground speed of at least 4 m/s within this number of seconds then the takeoff is aborted and the vehicle disarmed. If the value is zero then no timeout applies.", "DisplayName": "Takeoff timeout", "Increment": "1", "Range": {"high": "120", "low": "0"}, "Units": "s", "User": "Standard"}, "TOFSENSE_ID1": {"Description": "First TOFSENSE-M sensor ID. Leave this at 0 to accept all IDs and if only one sensor is present. You can change ID of sensor from NAssistant Software", "DisplayName": "TOFSENSE-M First ID", "Range": {"high": "255", "low": "1"}, "User": "Standard"}, "TOFSENSE_ID2": {"Description": "Second TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software", "DisplayName": "TOFSENSE-M Second ID", "Range": {"high": "255", "low": "1"}, "User": "Standard"}, "TOFSENSE_ID3": {"Description": "Third TOFSENSE-M sensor ID. This cannot be 0. You can change ID of sensor from NAssistant Software", "DisplayName": "TOFSENSE-M Thir ID", "Range": {"high": "255", "low": "1"}, "User": "Standard"}, "TOFSENSE_INST1": {"Description": "First TOFSENSE-M sensors backend Instance. Setting this to 1 will pick the first backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)", "DisplayName": "TOFSENSE-M First Instance", "Range": {"high": "3", "low": "1"}, "User": "Standard"}, "TOFSENSE_INST2": {"Description": "Second TOFSENSE-M sensors backend Instance. Setting this to 2 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)", "DisplayName": "TOFSENSE-M Second Instance", "Range": {"high": "3", "low": "1"}, "User": "Standard"}, "TOFSENSE_INST3": {"Description": "Third TOFSENSE-M sensors backend Instance. Setting this to 3 will pick the second backend from PRX_ or RNG_ Parameters (Depending on TOFSENSE_PRX)", "DisplayName": "TOFSENSE-M Third Instance", "Range": {"high": "3", "low": "1"}, "User": "Standard"}, "TOFSENSE_MODE": {"Description": "TOFSENSE-M mode to be used. 0 for 8x8 mode. 1 for 4x4 mode", "DisplayName": "TOFSENSE-M mode to be used", "User": "Standard", "Values": {"0": "8x8 mode", "1": "4x4 mode"}}, "TOFSENSE_NO": {"Description": "Number of TOFSENSE-M CAN sensors connected", "DisplayName": "TOFSENSE-M Connected", "Range": {"high": "3", "low": "1"}, "User": "Standard"}, "TOFSENSE_PRX": {"Description": "Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)", "DisplayName": "TOFSENSE-M to be used as Proximity sensor", "User": "Standard", "Values": {"0": "Set as Rangefinder", "1": "Set as Proximity sensor"}}, "TOFSENSE_S1_BR": {"Description": "Serial Port baud rate. Sensor baud rate can be changed from Nassistant software", "DisplayName": "TOFSENSE-M serial port baudrate", "User": "Standard"}, "TOFSENSE_S1_PRX": {"Description": "Set 0 if sensor is to be used as a 1-D rangefinder (minimum of all distances will be sent, typically used for height detection). Set 1 if it should be used as a 3-D proximity device (Eg. Obstacle Avoidance)", "DisplayName": "TOFSENSE-M to be used as Proximity sensor", "User": "Standard", "Values": {"0": "Set as Rangefinder", "1": "Set as Proximity sensor"}}, "TOFSENSE_S1_SP": {"Description": "UART instance sensor is connected to. Set 1 if sensor is connected to the port with fist SERIALx_PROTOCOL = 28. ", "DisplayName": "TOFSENSE-M serial port config", "Range": {"high": "4", "low": "1"}, "User": "Standard"}, "TRIK_ACT_FN": {"Description": "Setting an RC channel's _OPTION to this value will use it for trick action (abort,announce,execute)", "DisplayName": "Trik Action Scripting Function", "Range": {"high": "307", "low": "301"}}, "TRIK_COUNT": {"Description": "Number of tricks which can be selected over the range of the trik selection RC channel", "DisplayName": "Trik Count", "Range": {"high": "11", "low": "1"}}, "TRIK_ENABLE": {"Description": "Enables Tricks on Switch. TRIK params hidden until enabled", "DisplayName": "Tricks on Switch Enable"}, "TRIK_SEL_FN": {"Description": "Setting an RC channel's _OPTION to this value will use it for trick selection", "DisplayName": "Trik Selection Scripting Function", "Range": {"high": "307", "low": "301"}}, "TRIM_THROTTLE": {"Description": "Target percentage of throttle to apply for flight in automatic throttle modes and throttle percentage that maintains AIRSPEED_CRUISE. Caution: low battery voltages at the end of flights may require higher throttle to maintain airspeed.", "DisplayName": "Throttle cruise percentage", "Increment": "1", "Range": {"high": "100", "low": "0"}, "Units": "%", "User": "Standard"}, "TUNE_CHAN": {"Description": "This sets the channel for transmitter tuning. This should be connected to a knob or slider on your transmitter. It needs to be setup to use the PWM range given by TUNE_CHAN_MIN to TUNE_CHAN_MAX", "DisplayName": "Transmitter tuning channel", "User": "Standard", "Values": {"0": "Disable", "10": "Chan10", "11": "Chan11", "12": "Chan12", "13": "Chan13", "14": "Chan14", "15": "Chan15", "16": "Chan16", "5": "Chan5", "6": "Chan6", "7": "Chan7", "8": "Chan8", "9": "Chan9"}}, "TUNE_CHAN_MAX": {"Description": "This sets the PWM upper limit for the tuning channel", "DisplayName": "Transmitter tuning channel maximum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "TUNE_CHAN_MIN": {"Description": "This sets the PWM lower limit for the tuning channel", "DisplayName": "Transmitter tuning channel minimum pwm", "Range": {"high": "2100", "low": "900"}, "User": "Standard"}, "TUNE_ERR_THRESH": {"Description": "This sets the controller error threshold above which an alarm will sound and a message will be sent to the GCS to warn of controller instability while tuning. The error is the rms value of the P+D corrections in the loop. High values in hover indicate possible instability due to too high PID gains or excessively high D to P gain ratios.-1 will disable this message.", "DisplayName": "Controller error threshold", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "TUNE_MODE_REVERT": {"Description": "This controls whether tuning values will revert on a flight mode change.", "DisplayName": "Revert on mode change", "User": "Standard", "Values": {"0": "Disable", "1": "Enable"}}, "TUNE_PARAM": {"Description": "This sets which parameter or set of parameters will be tuned. Values greater than 100 indicate a set of parameters rather than a single parameter. Parameters less than 50 are for QuadPlane vertical lift motors only.", "DisplayName": "Transmitter tuning parameter or set of parameters", "User": "Standard", "Values": {"0": "None", "1": "RateRollPI", "10": "RateYawP", "101": "Set_RateRollPitch", "102": "Set_RateRoll", "103": "Set_RatePitch", "104": "Set_RateYaw", "105": "Set_AngleRollPitch", "106": "Set_VelXY", "107": "Set_AccelZ", "108": "Set_RatePitchDP", "109": "Set_RateRollDP", "11": "RateYawI", "110": "Set_RateYawDP", "12": "RateYawD", "13": "AngleRollP", "14": "AnglePitchP", "15": "AngleYawP", "16": "PosXYP", "17": "PosZP", "18": "VelXYP", "19": "VelXYI", "2": "RateRollP", "20": "VelZP", "21": "AccelZP", "22": "AccelZI", "23": "AccelZD", "24": "RatePitchFF", "25": "RateRollFF", "26": "RateYawFF", "3": "RateRollI", "4": "RateRollD", "5": "RatePitchPI", "50": "FixedWingRollP", "51": "FixedWingRollI", "52": "FixedWingRollD", "53": "FixedWingRollFF", "54": "FixedWingPitchP", "55": "FixedWingPitchI", "56": "FixedWingPitchD", "57": "FixedWingPitchFF", "6": "RatePitchP", "7": "RatePitchI", "8": "RatePitchD", "9": "RateYawPI"}}, "TUNE_RANGE": {"Description": "This sets the range over which tuning will change a parameter. A value of 2 means the tuning parameter will go from 0.5 times the start value to 2x the start value over the range of the tuning channel", "DisplayName": "Transmitter tuning range", "User": "Standard"}, "TUNE_SELECTOR": {"Description": "This sets the channel for the transmitter tuning selector switch. This should be a 2 position switch, preferably spring loaded. A PWM above 1700 means high, below 1300 means low. If no selector is set then you won't be able to switch between parameters during flight or re-center the tuning knob", "DisplayName": "Transmitter tuning selector channel", "User": "Standard", "Values": {"0": "Disable", "1": "Chan1", "10": "Chan10", "11": "Chan11", "12": "Chan12", "13": "Chan13", "14": "Chan14", "15": "Chan15", "16": "Chan16", "2": "Chan3", "3": "Chan3", "4": "Chan4", "5": "Chan5", "6": "Chan6", "7": "Chan7", "8": "Chan8", "9": "Chan9"}}, "USE_REV_THRUST": {"Bitmask": {"0": "AUTO_ALWAYS", "1": "AUTO_LAND", "10": "GUIDED", "11": "AUTO_LANDING_PATTERN", "12": "FBWA", "13": "ACRO", "14": "STABILIZE", "15": "THERMAL", "2": "AUTO_LOITER_TO_ALT", "3": "AUTO_LOITER_ALL", "4": "AUTO_WAYPOINTS", "5": "LOITER", "6": "RTL", "7": "CIRCLE", "8": "CRUISE", "9": "FBWB"}, "Description": "This controls when to use reverse thrust. If set to zero then reverse thrust is never used. If set to a non-zero value then the bits correspond to flight stages where reverse thrust may be used. The most commonly used value for USE_REV_THRUST is 2, which means AUTO_LAND only. That enables reverse thrust in the landing stage of AUTO mode. Another common choice is 1, which means to use reverse thrust in all auto flight stages. Reverse thrust is always used in MANUAL mode if enabled with THR_MIN < 0. In non-autothrottle controlled modes, if reverse thrust is not used, then THR_MIN is effectively set to 0 for that mode.", "DisplayName": "Bitmask for when to allow negative reverse thrust", "User": "Advanced", "Values": {"0": "MANUAL ONLY", "1": "AutoAlways", "2": "AutoLanding"}}, "VIEP_CAM_SWHIGH": {"Description": "Camera selection when switch is in high position", "DisplayName": "ViewPro Camera For Switch High", "User": "Standard", "Values": {"0": "No change in camera selection", "1": "EO1", "2": "IR thermal", "3": "EO1 + IR Picture-in-picture", "4": "IR + EO1 Picture-in-picture", "5": "Fusion", "6": "IR1 13mm", "7": "IR2 52mm"}}, "VIEP_CAM_SWLOW": {"Description": "Camera selection when switch is in low position", "DisplayName": "ViewPro Camera For Switch Low", "User": "Standard", "Values": {"0": "No change in camera selection", "1": "EO1", "2": "IR thermal", "3": "EO1 + IR Picture-in-picture", "4": "IR + EO1 Picture-in-picture", "5": "Fusion", "6": "IR1 13mm", "7": "IR2 52mm"}}, "VIEP_CAM_SWMID": {"Description": "Camera selection when switch is in middle position", "DisplayName": "ViewPro Camera For Switch Mid", "User": "Standard", "Values": {"0": "No change in camera selection", "1": "EO1", "2": "IR thermal", "3": "EO1 + IR Picture-in-picture", "4": "IR + EO1 Picture-in-picture", "5": "Fusion", "6": "IR1 13mm", "7": "IR2 52mm"}}, "VIEP_DEBUG": {"Description": "ViewPro debug", "DisplayName": "ViewPro debug", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled", "2": "Enabled including attitude reporting"}}, "VIEP_ZOOM_MAX": {"Description": "ViewPro Zoom Times Max", "DisplayName": "ViewPro Zoom Times Max", "Range": {"high": "30", "low": "0"}, "User": "Standard"}, "VIEP_ZOOM_SPEED": {"Description": "ViewPro Zoom Speed. Higher numbers result in faster zooming", "DisplayName": "ViewPro Zoom Speed", "Range": {"high": "7", "low": "0"}, "User": "Standard"}, "VISO_DELAY_MS": {"Description": "Visual odometry sensor delay relative to inertial measurements", "DisplayName": "Visual odometry sensor delay", "Range": {"high": "250", "low": "0"}, "Units": "ms", "User": "Advanced"}, "VISO_ORIENT": {"Description": "Visual odometery camera orientation", "DisplayName": "Visual odometery camera orientation", "User": "Advanced", "Values": {"0": "Forward", "2": "Right", "24": "Up", "25": "Down", "4": "Back", "6": "Left"}}, "VISO_POS_M_NSE": {"Description": "Visual odometry position measurement noise minimum (meters). This value will be used if the sensor provides a lower noise value (or no noise value)", "DisplayName": "Visual odometry position measurement noise ", "Range": {"high": "10.0", "low": "0.1"}, "Units": "m", "User": "Advanced"}, "VISO_POS_X": {"Description": "X position of the camera in body frame. Positive X is forward of the origin.", "DisplayName": "Visual odometry camera X position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "VISO_POS_Y": {"Description": "Y position of the camera in body frame. Positive Y is to the right of the origin.", "DisplayName": "Visual odometry camera Y position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "VISO_POS_Z": {"Description": "Z position of the camera in body frame. Positive Z is down from the origin.", "DisplayName": "Visual odometry camera Z position offset", "Increment": "0.01", "Range": {"high": "5", "low": "-5"}, "Units": "m", "User": "Advanced"}, "VISO_QUAL_MIN": {"Description": "Visual odometry will only be sent to EKF if over this value. -1 to always send (even bad values), 0 to send if good or unknown", "DisplayName": "Visual odometry minimum quality", "Range": {"high": "100", "low": "-1"}, "Units": "%", "User": "Advanced"}, "VISO_SCALE": {"Description": "Visual odometry scaling factor applied to position estimates from sensor", "DisplayName": "Visual odometry scaling factor", "User": "Advanced"}, "VISO_TYPE": {"Description": "Visual odometry camera connection type", "DisplayName": "Visual odometry camera connection type", "RebootRequired": "True", "User": "Advanced", "Values": {"0": "None", "1": "MAVLink", "2": "IntelT265", "3": "VOXL(ModalAI)"}}, "VISO_VEL_M_NSE": {"Description": "Visual odometry velocity measurement noise in m/s", "DisplayName": "Visual odometry velocity measurement noise", "Range": {"high": "5.0", "low": "0.05"}, "Units": "m/s", "User": "Advanced"}, "VISO_YAW_M_NSE": {"Description": "Visual odometry yaw measurement noise minimum (radians), This value will be used if the sensor provides a lower noise value (or no noise value)", "DisplayName": "Visual odometry yaw measurement noise", "Range": {"high": "1.0", "low": "0.05"}, "Units": "rad", "User": "Advanced"}, "VTX_BAND": {"Description": "Video Transmitter Band", "DisplayName": "Video Transmitter Band", "User": "Standard", "Values": {"0": "Band A", "1": "Band B", "2": "Band E", "3": "Airwave", "4": "RaceBand", "5": "Low RaceBand", "6": "1G3 Band A", "7": "1G3 Band B", "8": "Band X"}}, "VTX_CHANNEL": {"Description": "Video Transmitter Channel", "DisplayName": "Video Transmitter Channel", "Range": {"high": "7", "low": "0"}, "User": "Standard"}, "VTX_ENABLE": {"Description": "Toggles the Video Transmitter on and off", "DisplayName": "Is the Video Transmitter enabled or not", "Values": {"0": "Disable", "1": "Enable"}}, "VTX_FREQ": {"Description": "Video Transmitter Frequency. The frequency is derived from the setting of BAND and CHANNEL", "DisplayName": "Video Transmitter Frequency", "Range": {"high": "6000", "low": "1000"}, "ReadOnly": "True", "User": "Standard"}, "VTX_MAX_POWER": {"Description": "Video Transmitter Maximum Power Level. Different VTXs support different power levels, this prevents the power aux switch from requesting too high a power level. The switch supports 6 power levels and the selected power will be a subdivision between 0 and this setting.", "DisplayName": "Video Transmitter Max Power Level", "Range": {"high": "1000", "low": "25"}}, "VTX_OPTIONS": {"Bitmask": {"0": "Pitmode", "1": "Pitmode until armed", "2": "Pitmode when disarmed", "3": "Unlocked", "4": "Add leading zero byte to requests", "5": "Use 1 stop-bit in SmartAudio", "6": "Ignore CRC in SmartAudio", "7": "Ignore status updates in CRSF and blindly set VTX options"}, "Description": "Video Transmitter Options. Pitmode puts the VTX in a low power state. Unlocked enables certain restricted frequencies and power levels. Do not enable the Unlocked option unless you have appropriate permissions in your jurisdiction to transmit at high power levels. One stop-bit may be required for VTXs that erroneously mimic iNav behaviour.", "DisplayName": "Video Transmitter Options", "User": "Advanced"}, "VTX_POWER": {"Description": "Video Transmitter Power Level. Different VTXs support different power levels, the power level chosen will be rounded down to the nearest supported power level", "DisplayName": "Video Transmitter Power Level", "Range": {"high": "1000", "low": "1"}}, "WEB_BIND_PORT": {"Description": "web server TCP port", "DisplayName": "web server TCP port", "Range": {"high": "65535", "low": "1"}, "User": "Standard"}, "WEB_BLOCK_SIZE": {"Description": "web server block size for download", "DisplayName": "web server block size", "Range": {"high": "65535", "low": "1"}, "User": "Advanced"}, "WEB_DEBUG": {"Description": "web server debugging", "DisplayName": "web server debugging", "User": "Advanced", "Values": {"0": "Disabled", "1": "Enabled"}}, "WEB_ENABLE": {"Description": "enable web server", "DisplayName": "enable web server", "User": "Standard", "Values": {"0": "Disabled", "1": "Enabled"}}, "WEB_SENDFILE_MIN": {"Description": "sendfile is an offloading mechanism for faster file download. If this is non-zero and the file is larger than this size then sendfile will be used for file download", "DisplayName": "web server minimum file size for sendfile", "Range": {"high": "10000000", "low": "0"}, "User": "Advanced"}, "WEB_TIMEOUT": {"Description": "timeout for inactive connections", "DisplayName": "web server timeout", "Range": {"high": "60", "low": "0.1"}, "Units": "s", "User": "Advanced"}, "WINCH_RATE_DN": {"Description": "Maximum rate when releasing line", "DisplayName": "WinchControl Rate Down", "Range": {"high": "5.0", "low": "0.1"}, "User": "Standard"}, "WINCH_RATE_UP": {"Description": "Maximum rate when retracting line", "DisplayName": "WinchControl Rate Up", "Range": {"high": "5.0", "low": "0.1"}, "User": "Standard"}, "WINCH_RC_FUNC": {"Description": "RCn_OPTION number to use to control winch rate", "DisplayName": "Winch Rate Control RC function", "User": "Standard", "Values": {"300": "Scripting1", "301": "Scripting2", "302": "Scripting3", "303": "Scripting4", "304": "Scripting5", "305": "Scripting6", "306": "Scripting7", "307": "Scripting8"}}, "WP_LOITER_RAD": {"Description": "Defines the distance from the waypoint center, the plane will maintain during a loiter. If you set this value to a negative number then the default loiter direction will be counter-clockwise instead of clockwise.", "DisplayName": "Waypoint Loiter Radius", "Increment": "1", "Range": {"high": "32767", "low": "-32767"}, "Units": "m", "User": "Standard"}, "WP_MAX_RADIUS": {"Description": "Sets the maximum distance to a waypoint for the waypoint to be considered complete. This overrides the \"cross the finish line\" logic that is normally used to consider a waypoint complete. For normal AUTO behaviour this parameter should be set to zero. Using a non-zero value is only recommended when it is critical that the aircraft does approach within the given radius, and should loop around until it has done so. This can cause the aircraft to loop forever if its turn radius is greater than the maximum radius set.", "DisplayName": "Waypoint Maximum Radius", "Increment": "1", "Range": {"high": "32767", "low": "0"}, "Units": "m", "User": "Standard"}, "WP_RADIUS": {"Description": "Defines the maximum distance from a waypoint that when crossed indicates the waypoint may be complete. To avoid the aircraft looping around the waypoint in case it misses by more than the WP_RADIUS an additional check is made to see if the aircraft has crossed a \"finish line\" passing through the waypoint and perpendicular to the flight path from the previous waypoint. If that finish line is crossed then the waypoint is considered complete. Note that the navigation controller may decide to turn later than WP_RADIUS before a waypoint, based on how sharp the turn is and the speed of the aircraft. It is safe to set WP_RADIUS much larger than the usual turn radius of your aircraft and the navigation controller will work out when to turn. If you set WP_RADIUS too small then you will tend to overshoot the turns.", "DisplayName": "Waypoint Radius", "Increment": "1", "Range": {"high": "32767", "low": "1"}, "Units": "m", "User": "Standard"}, "YAW2SRV_DAMP": {"Description": "Gain from yaw rate to rudder. Most effective at yaw damping and should be tuned after KFF_RDDRMIX. Also disables YAW2SRV_INT if set to 0.", "DisplayName": "Yaw damping", "Increment": "0.25", "Range": {"high": "2", "low": "0"}, "User": "Advanced"}, "YAW2SRV_IMAX": {"Description": "Limit of yaw integrator gain in centi-degrees of servo travel. Servos are assumed to have +/- 4500 centi-degrees of travel, so a value of 1500 allows trim of up to 1/3 of servo travel range.", "DisplayName": "Integrator limit", "Increment": "1", "Range": {"high": "4500", "low": "0"}, "User": "Advanced"}, "YAW2SRV_INT": {"Description": "Integral gain from lateral acceleration error. Effectively trims rudder to eliminate long-term sideslip.", "DisplayName": "Sideslip control integrator", "Increment": "0.25", "Range": {"high": "2", "low": "0"}, "User": "Advanced"}, "YAW2SRV_RLL": {"Description": "Gain to the yaw rate required to keep it consistent with the turn rate in a coordinated turn. Corrects for yaw tendencies after the turn is established. Increase yaw into the turn by raising. Increase yaw out of the turn by decreasing. Values outside of 0.9-1.1 range indicate airspeed calibration problems.", "DisplayName": "Yaw coordination gain", "Increment": "0.05", "Range": {"high": "1.2", "low": "0.8"}, "User": "Advanced"}, "YAW2SRV_SLIP": {"Description": "Gain from lateral acceleration to demanded yaw rate for aircraft with enough fuselage area to detect lateral acceleration and sideslips. Do not enable for flying wings and gliders. Actively coordinates flight more than just yaw damping. Set after YAW2SRV_DAMP and YAW2SRV_INT are tuned.", "DisplayName": "Sideslip control gain", "Increment": "0.25", "Range": {"high": "4", "low": "0"}, "User": "Advanced"}, "YAW_RATE_D": {"Description": "Yaw axis rate controller D gain. Compensates for short-term change in desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller D gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0.001"}, "User": "Standard"}, "YAW_RATE_D_FF": {"Description": "FF D Gain which produces an output that is proportional to the rate of change of the target", "DisplayName": "Yaw Derivative FeedForward Gain", "Increment": "0.001", "Range": {"high": "0.03", "low": "0"}, "User": "Advanced"}, "YAW_RATE_ENABLE": {"Description": "Enable yaw rate controller for aerobatic flight", "DisplayName": "Yaw rate enable", "User": "Advanced", "Values": {"0": "Disable", "1": "Enable"}}, "YAW_RATE_FF": {"Description": "Yaw axis rate controller feed forward", "DisplayName": "Yaw axis rate controller feed forward", "Increment": "0.001", "Range": {"high": "3.0", "low": "0"}, "User": "Standard"}, "YAW_RATE_FLTD": {"Description": "Yaw axis rate controller derivative frequency in Hz", "DisplayName": "Yaw axis rate controller derivative frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "0"}, "Units": "Hz", "User": "Standard"}, "YAW_RATE_FLTE": {"Description": "Yaw axis rate controller error frequency in Hz", "DisplayName": "Yaw axis rate controller error frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "YAW_RATE_FLTT": {"Description": "Yaw axis rate controller target frequency in Hz", "DisplayName": "Yaw axis rate controller target frequency in Hz", "Increment": "1", "Range": {"high": "50", "low": "2"}, "Units": "Hz", "User": "Standard"}, "YAW_RATE_I": {"Description": "Yaw axis rate controller I gain. Corrects long-term difference in desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller I gain", "Increment": "0.01", "Range": {"high": "0.6", "low": "0.01"}, "User": "Standard"}, "YAW_RATE_IMAX": {"Description": "Yaw axis rate controller I gain maximum. Constrains the maximum that the I term will output", "DisplayName": "Yaw axis rate controller I gain maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}, "User": "Standard"}, "YAW_RATE_NEF": {"Description": "Yaw Error notch filter index", "DisplayName": "Yaw Error notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "YAW_RATE_NTF": {"Description": "Yaw Target notch filter index", "DisplayName": "Yaw Target notch filter index", "Range": {"high": "8", "low": "1"}, "User": "Advanced"}, "YAW_RATE_P": {"Description": "Yaw axis rate controller P gain. Corrects in proportion to the difference between the desired yaw rate vs actual yaw rate", "DisplayName": "Yaw axis rate controller P gain", "Increment": "0.005", "Range": {"high": "0.35", "low": "0.08"}, "User": "Standard"}, "YAW_RATE_PDMX": {"Description": "Yaw axis rate controller PD sum maximum. The maximum/minimum value that the sum of the P and D term can output", "DisplayName": "Yaw axis rate controller PD sum maximum", "Increment": "0.01", "Range": {"high": "1", "low": "0"}}, "YAW_RATE_SMAX": {"Description": "Sets an upper limit on the slew rate produced by the combined P and D gains. If the amplitude of the control action produced by the rate feedback exceeds this value, then the D+P gain is reduced to respect the limit. This limits the amplitude of high frequency oscillations caused by an excessive gain. The limit should be set to no more than 25% of the actuators maximum slew rate to allow for load effects. Note: The gain will not be reduced to less than 10% of the nominal value. A value of zero will disable this feature.", "DisplayName": "Yaw slew rate limit", "Increment": "0.5", "Range": {"high": "200", "low": "0"}, "User": "Advanced"}} \ No newline at end of file diff --git a/gcs/data/generate_param_definitions.py b/gcs/data/generate_param_definitions.py new file mode 100644 index 000000000..ec2b0aff7 --- /dev/null +++ b/gcs/data/generate_param_definitions.py @@ -0,0 +1,44 @@ +import json +import lzma +import os +from urllib.request import urlretrieve + +# https://autotest.ardupilot.org/Parameters/ +param_defs = [ + [ + "https://autotest.ardupilot.org/Parameters/ArduCopter/apm.pdef.json.xz", + "gen_apm_params_def_copter.json", + ], + [ + "https://autotest.ardupilot.org/Parameters/ArduPlane/apm.pdef.json.xz", + "gen_apm_params_def_plane.json", + ], +] + +temp_file_name = "temp.pdef.json.xz" + +if os.path.exists(temp_file_name): + os.remove(temp_file_name) + +for url, output_filename in param_defs: + urlretrieve(url, temp_file_name) + with lzma.open(temp_file_name) as f: + data = f.read() + json_data = json.loads(data) + + with open(output_filename, "w") as f: + del json_data["json"] + + params = {} + + for item in json_data: + params.update(json_data[item]) + + sorted_params = dict(sorted(params.items())) + + json.dump(sorted_params, f) + +if os.path.exists(temp_file_name): + os.remove(temp_file_name) + +print("Generated param definition files") diff --git a/gcs/data/generate_params.py b/gcs/data/generate_params.py deleted file mode 100644 index a48b0aa4e..000000000 --- a/gcs/data/generate_params.py +++ /dev/null @@ -1,19 +0,0 @@ -import json - -# https://autotest.ardupilot.org/Parameters/ -input_filename = "apm.pdef.json" -output_filename = "gen_apm_params_def_plane.json" - -with open(input_filename, "r") as f: - data = json.load(f) - del data["json"] - - params = {} - - for item in data: - params.update(data[item]) - -sorted_params = dict(sorted(params.items())) - -with open(output_filename, "w") as f: - json.dump(sorted_params, f) diff --git a/gcs/electron/fla.js b/gcs/electron/fla.js index 1f6a1acfc..cbab270ec 100644 --- a/gcs/electron/fla.js +++ b/gcs/electron/fla.js @@ -2,16 +2,16 @@ This file contains the logic for parsing different types of log files on the main electron process. */ -import fs from 'fs' -import createRecentLogsManager from '../settings/recentLogManager' +import fs from "fs" +import createRecentLogsManager from "../settings/recentLogManager" const recentLogsManager = createRecentLogsManager() -function parseDataflashLogFile(fileData, webContents) { +async function parseDataflashLogFile(fileData, webContents) { // https://ardupilot.org/copter/docs/logmessages.html // https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_Logger - const stringTypes = ['n', 'N', 'Z', 'M'] + const stringTypes = new Set(["n", "N", "Z", "M"]) const formatMessages = {} const messages = {} @@ -19,208 +19,230 @@ function parseDataflashLogFile(fileData, webContents) { const numberOfLines = fileData.length let aircraftType = null + const PROGRESS_INTERVAL = 25000 // Reduce progress update frequency + const CHUNK_SIZE = 10000 // Process in chunks to prevent blocking - for (const [idx, line] of fileData.entries()) { - const splitLineData = line.split(',').map(function (item) { - return item.trim() - }) - const messageName = splitLineData[0] - if (messageName === 'FMT') { + for (let idx = 0; idx < numberOfLines; idx++) { + const line = fileData[idx] + + // Skip empty lines early + if (!line || line.length < 3) continue + + // Optimized splitting - avoid trim on every element + const splitLineData = line.split(",") + const messageName = splitLineData[0].trim() + if (messageName === "FMT") { // Message defining the format of messages in this file - const definedMessageType = parseInt(splitLineData[1]) // unique-to-this-log identifier for message being defined - const definedMessageLength = parseInt(splitLineData[2]) // the number of bytes taken up by this message (including all headers) - const definedMessageName = splitLineData[3] // name of the message being defined - const definedMessageFormat = splitLineData[4] // character string defining the C-storage-type of the fields in this message - const fields = splitLineData.slice(5) + const definedMessageType = parseInt(splitLineData[1]) + const definedMessageLength = parseInt(splitLineData[2]) + const definedMessageName = splitLineData[3].trim() + const definedMessageFormat = splitLineData[4].trim() + const fields = splitLineData.slice(5).map((f) => f.trim()) formatMessages[definedMessageName] = { - length: definedMessageLength, // is this even needed? + length: definedMessageLength, name: definedMessageName, type: definedMessageType, format: definedMessageFormat, fields, } - - // if (definedMessageName === 'ATT') { - // console.log(formatMessages[definedMessageName]) - // } - } else if (messageName === 'UNIT') { + } else if (messageName === "UNIT") { // Message mapping from single character to SI unit - const unitId = splitLineData[2] - const unitName = splitLineData[3] - units[String.fromCharCode(unitId)] = unitName - } else if (messageName === 'FMTU') { + const unitId = splitLineData[2]?.trim() + const unitName = splitLineData[3]?.trim() + if (unitId && unitName) { + const unitCharCode = parseInt(unitId) + if (!isNaN(unitCharCode)) { + units[String.fromCharCode(unitCharCode)] = unitName + } + } + } else if (messageName === "FMTU") { // Message defining units and multipliers used for fields of other messages const messageType = parseInt(splitLineData[2]) - const messageUnits = splitLineData[3] - const messageMultiplier = splitLineData[4] + const messageUnits = splitLineData[3]?.trim() + const messageMultiplier = splitLineData[4]?.trim() - Object.keys(formatMessages).forEach((formatMessageName) => { + // Cache format message names to avoid repeated Object.keys() calls + for (const formatMessageName in formatMessages) { const formatMessage = formatMessages[formatMessageName] if (formatMessage.type === messageType) { formatMessage.units = messageUnits formatMessage.multiplier = messageMultiplier } - }) - } else if (messageName === 'MULT') { + } + } else if (messageName === "MULT") { // Message mapping from single character to numeric multiplier - } else if (messageName === 'PARM') { + } else if (messageName === "PARM") { // Parameter value - if (splitLineData[2] === 'Q_ENABLE' && splitLineData[3] === '1') { - aircraftType = 'quadplane' + if ( + splitLineData[2]?.trim() === "Q_ENABLE" && + splitLineData[3]?.trim() === "1" + ) { + aircraftType = "quadplane" } - } else if (messageName === 'FILE') { + } else if (messageName === "FILE") { // File data - } else if (messageName === 'MSG') { + } else if (messageName === "MSG") { // MSG data - const text = splitLineData[2] - - if (aircraftType !== null) { - continue - } - - if (text.toLowerCase().indexOf('arduplane') > -1) { - aircraftType = 'plane' - } else if (text.toLowerCase().indexOf('arducopter') > -1) { - aircraftType = 'copter' + const text = splitLineData[2]?.trim() + + if (aircraftType === null && text) { + const lowerText = text.toLowerCase() + if (lowerText.includes("arduplane")) { + aircraftType = "plane" + } else if (lowerText.includes("arducopter")) { + aircraftType = "copter" + } } } else { // Message data - if (Object.keys(formatMessages).includes(messageName)) { - if (!Object.keys(messages).includes(messageName)) { + const formatMessage = formatMessages[messageName] + if (formatMessage) { + if (!messages[messageName]) { messages[messageName] = [] } - const formatMessage = formatMessages[messageName] - const messageObj = { name: messageName, type: formatMessage.type, - // length: formatMessage.length, // is this even needed? } - const messageData = splitLineData.slice(1) const fields = formatMessage.fields const format = formatMessage.format - - for (let i = 0; i < fields.length; i++) { - let field = fields[i] - let formatType = format[i] - let value = messageData[i] - - if (stringTypes.includes(formatType)) { - messageObj[field] = value - } else { - messageObj[field] = parseFloat(value) + const fieldsLength = fields.length + + for (let i = 0; i < fieldsLength && i < splitLineData.length - 1; i++) { + const field = fields[i] + const formatType = format[i] + const value = splitLineData[i + 1]?.trim() + + if (value !== undefined && value !== "") { + if (stringTypes.has(formatType)) { + messageObj[field] = value + } else { + const numValue = parseFloat(value) + messageObj[field] = isNaN(numValue) ? 0 : numValue + } } } - // if (messageName === 'ATT' && messages[messageName].length === 0) { - // console.log(messageObj) - // } - messages[messageName].push(messageObj) } } - if (idx % 5000 === 0) { - webContents.send('fla:log-parse-progress', { - percent: Math.round((idx / numberOfLines) * 100), - }) + + if (idx % PROGRESS_INTERVAL === 0) { + const percent = Math.round((idx / numberOfLines) * 100) + webContents.send("fla:log-parse-progress", { percent }) + } + + // Yield control to prevent blocking for very large files + if (idx % CHUNK_SIZE === 0 && idx > 0) { + await new Promise((resolve) => setTimeout(resolve, 0)) } } - webContents.send('fla:log-parse-progress', { + webContents.send("fla:log-parse-progress", { percent: 100, }) // Add format messages to messages for later digesting and return - messages['format'] = formatMessages - messages['units'] = units - messages['aircraftType'] = aircraftType + messages["format"] = formatMessages + messages["units"] = units + messages["aircraftType"] = aircraftType return messages } -function parseFgcsTelemetryLogFile(fileData, webContents) { +async function parseFgcsTelemetryLogFile(fileData, webContents) { const formatMessages = {} const messages = {} const numberOfLines = fileData.length + const CHUNK_SIZE = 10000 + const PROGRESS_INTERVAL = 25000 + if (numberOfLines < 2) { return null } - for (const [idx, line] of fileData.entries()) { - if (line.includes('==')) { - // ignore lines which aren't meant for parsing + for (let idx = 0; idx < numberOfLines; idx++) { + const line = fileData[idx] + if (!line || line.length < 5 || line.includes("==")) { continue } - const splitLineData = line.split(',').map(function (item) { - return item.trim() - }) + const splitLineData = line.split(",") const timestamp = parseFloat(splitLineData[0]) - const messageName = splitLineData[1] - const messageData = splitLineData.splice(2) + const messageName = splitLineData[1]?.trim() - if (messageName === 'STATUSTEXT') { + // TODO: Don't skip these messages + if ( + !messageName || + messageName === "STATUSTEXT" || + messageName === "BATTERY_STATUS" || + messageName === "ESC_TELEMETRY_1_TO_4" + ) { continue } - // get the field names from the message data and add it to the format object - // if it doesn't exist for that message name already - if (!(messageName in formatMessages)) { - const fields = messageData.map((keyVal) => keyVal.split(':')[0]) - - formatMessages[messageName] = { - fields, + const messageData = splitLineData.slice(2) + + // Get field names and cache format + if (!formatMessages[messageName]) { + const fields = [] + for (let i = 0; i < messageData.length; i++) { + const keyVal = messageData[i]?.trim() + if (keyVal) { + const colonIndex = keyVal.indexOf(":") + if (colonIndex > 0) { + fields.push(keyVal.substring(0, colonIndex)) + } + } } + formatMessages[messageName] = { fields } } - // This object contains the message data in a more structured format so FLA can read and interpret it const messageObj = { - // moment (the datatime adapter for chartjs) uses milliseconds from epoch - // as default, so this is a small hack to convert the seconds into milliseconds - // as the timestamp recorded in a .ftlog is higher precision. - TimeUS: parseInt(timestamp * 1000), + TimeUS: Math.round(timestamp * 1000), // Use round instead of parseInt for better precision name: messageName, } - // ignore certain messages as the data contains an array which is hard to parse - // TOOD: fix - if (messageName === 'BATTERY_STATUS') { - continue - } else if (messageName === 'ESC_TELEMETRY_1_TO_4') { - continue - } - - messageData.forEach((keyVal) => { - const [key, value] = keyVal.split(':') - - try { - messageObj[key] = parseFloat(value) - } catch (e) { - // messageObj[key] = null + for (let i = 0; i < messageData.length; i++) { + const keyVal = messageData[i]?.trim() + if (keyVal) { + const colonIndex = keyVal.indexOf(":") + if (colonIndex > 0) { + const key = keyVal.substring(0, colonIndex) + const value = keyVal.substring(colonIndex + 1) + const numValue = parseFloat(value) + if (!isNaN(numValue)) { + messageObj[key] = numValue + } + } } - }) + } - if (!(messageName in messages)) { + if (!messages[messageName]) { messages[messageName] = [] } messages[messageName].push(messageObj) - if (idx % 5000 === 0) { - webContents.send('fla:log-parse-progress', { - percent: Math.round((idx / numberOfLines) * 100), - }) + if (idx % PROGRESS_INTERVAL === 0) { + const percent = Math.round((idx / numberOfLines) * 100) + webContents.send("fla:log-parse-progress", { percent }) + } + + // Yield control for large files + if (idx % CHUNK_SIZE === 0 && idx > 0) { + await new Promise((resolve) => setTimeout(resolve, 0)) } } - webContents.send('fla:log-parse-progress', { + webContents.send("fla:log-parse-progress", { percent: 100, }) // Add format messages to messages for later digesting and return - messages['format'] = formatMessages + messages["format"] = formatMessages return messages } @@ -229,24 +251,24 @@ function determineLogFileType(filePath, firstLine) { const ext = reFileExtension.exec(filePath)[1] const extensionToTypeMap = { - log: 'dataflash', - ftlog: 'fgcs_telemetry', + log: "dataflash", + ftlog: "fgcs_telemetry", // exclude txt from map as txt's are ambiguous } - if (ext !== undefined && ext !== 'txt' && ext in extensionToTypeMap) { + if (ext !== undefined && ext !== "txt" && ext in extensionToTypeMap) { return extensionToTypeMap[ext] } else { // Try to figure out the type of log file from the first line of the file if ( - firstLine === 'FMT, 128, 89, FMT, BBnNZ, Type,Length,Name,Format,Columns' + firstLine === "FMT, 128, 89, FMT, BBnNZ, Type,Length,Name,Format,Columns" ) { - return 'dataflash' - } else if (firstLine.includes('==START_TIME==')) { - return 'fgcs_telemetry' + return "dataflash" + } else if (firstLine.includes("==START_TIME==")) { + return "fgcs_telemetry" } else if (firstLine.match(/\d{2}\/\d{2}\/\d{4}\s\d{2}:\d{2}:\d{2}/)) { // check if first line contains a string similar to "30/04/2024 13:08:13" - return 'mp_telemetry' + return "mp_telemetry" } else { return null } @@ -263,32 +285,36 @@ export function clearRecentFiles() { recentLogsManager.clearRecentLogs() } -export default function openFile(event, filePath) { +export default async function openFile(event, filePath) { if (filePath == null) { - return null + return { success: false, error: "No file path provided" } } try { - const fileData = fs.readFileSync(filePath, 'utf8') - const fileLines = fileData.trim().split('\n') + const fileData = fs.readFileSync(filePath, "utf8") + const fileLines = fileData.trim().split("\n") const logType = determineLogFileType(filePath, fileLines[0]) if (logType === null) { - return { success: false, error: 'Unknown log file type' } + return { success: false, error: "Unknown log file type" } } - var messages = null + let messages = null - if (logType === 'dataflash') { - messages = parseDataflashLogFile(fileLines, event.sender) - } else if (logType === 'fgcs_telemetry') { - messages = parseFgcsTelemetryLogFile(fileLines, event.sender) - } else if (logType === 'mp_telemetry') { + if (logType === "dataflash") { + messages = await parseDataflashLogFile(fileLines, event.sender) + } else if (logType === "fgcs_telemetry") { + messages = await parseFgcsTelemetryLogFile(fileLines, event.sender) + } else if (logType === "mp_telemetry") { // TODO: implement - // messages = parseMpTelemetryLogFile(fileLines, event.sender) + // messages = await parseMpTelemetryLogFile(fileLines, event.sender) + return { + success: false, + error: "MP telemetry parsing not yet implemented", + } } else { - return { success: false, error: 'Unknown log file type' } + return { success: false, error: "Unknown log file type" } } if (messages !== null) { @@ -299,8 +325,11 @@ export default function openFile(event, filePath) { messages, logType, } + } else { + return { success: false, error: "Failed to parse log file" } } } catch (err) { - return { success: false, error: err } + console.error("Error parsing log file:", err) + return { success: false, error: err.message || "Unknown parsing error" } } } diff --git a/gcs/electron/main.ts b/gcs/electron/main.ts index 762cb3b81..57b37d90b 100644 --- a/gcs/electron/main.ts +++ b/gcs/electron/main.ts @@ -1,11 +1,32 @@ -import { BrowserWindow, Event, Menu, MenuItemConstructorOptions, MessageBoxOptions, Rectangle, app, dialog, ipcMain, nativeImage, shell } from 'electron' -import { ChildProcessWithoutNullStreams, spawn, spawnSync } from 'node:child_process' -import fs from 'node:fs' -import path from 'node:path' -import packageInfo from '../package.json' +import { + BrowserWindow, + Menu, + MenuItemConstructorOptions, + app, + dialog, + ipcMain, + shell, +} from "electron" +import { + ChildProcessWithoutNullStreams, + spawn, + spawnSync, +} from "node:child_process" +import fs from "node:fs" +import path from "node:path" +import packageInfo from "../package.json" // @ts-expect-error - no types available -import openFile, { getRecentFiles, clearRecentFiles } from './fla' +import openFile, { clearRecentFiles, getRecentFiles } from "./fla" +import registerAboutIPC, { + destroyAboutWindow, + openAboutPopout, +} from "./modules/aboutWindow" +import registerLinkStatsIPC, { + destroyLinkStatsWindow, + openLinkStatsWindow, +} from "./modules/linkStatsWindow" +import registerWebcamIPC, { destroyWebcamWindow } from "./modules/webcam" // The built directory structure // // β”œβ”€β”¬β”€β”¬ dist @@ -15,20 +36,28 @@ import openFile, { getRecentFiles, clearRecentFiles } from './fla' // β”‚ β”‚ β”œβ”€β”€ main.js // β”‚ β”‚ └── preload.js // β”‚ -process.env.DIST = path.join(__dirname, '../dist') +process.env.DIST = path.join(__dirname, "../dist") process.env.VITE_PUBLIC = app.isPackaged ? process.env.DIST - : path.join(process.env.DIST, '../public') + : path.join(process.env.DIST, "../public") // Fix UI Scaling -app.commandLine.appendSwitch('high-dpi-support', '1') -app.commandLine.appendSwitch('force-device-scale-factor', '1') +app.commandLine.appendSwitch("high-dpi-support", "1") +app.commandLine.appendSwitch("force-device-scale-factor", "1") + +// Fix linux WebGL error (icl chatgpt made this) +if (process.platform === "linux") { + app.commandLine.appendSwitch("use-gl", "desktop") // force mesa + app.commandLine.appendSwitch("ignore-gpu-blacklist") // allow iris, etc. + app.commandLine.appendSwitch("enable-webgl") + app.commandLine.appendSwitch("enable-webgl2-compute-context") +} let win: BrowserWindow | null let loadingWin: BrowserWindow | null -let webcamPopoutWin: BrowserWindow | null + // 🚧 Use ['ENV_NAME'] avoid vite:define plugin - Vite@2.x -const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL'] +const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"] let pythonBackend: ChildProcessWithoutNullStreams | null = null @@ -39,15 +68,19 @@ function getWindow() { // Settings logic interface Settings { - version: string, + version: string settings: object } let userSettings: Settings | null = null -function saveUserConfiguration(settings: Settings){ - userSettings = settings; - fs.writeFileSync(path.join(app.getPath('userData'), 'settings.json'), JSON.stringify(userSettings, null, 2), 'utf-8'); +function saveUserConfiguration(settings: Settings) { + userSettings = settings + fs.writeFileSync( + path.join(app.getPath("userData"), "settings.json"), + JSON.stringify(userSettings, null, 2), + "utf-8", + ) } /** @@ -55,17 +88,17 @@ function saveUserConfiguration(settings: Settings){ * @param configPath The path to the configuration file * @returns */ -function checkAppVersion(configPath: string){ - - if (userSettings === null){ - console.warn("Attempting to check app version when user settings have not been loaded"); - return; +function checkAppVersion(configPath: string) { + if (userSettings === null) { + console.warn( + "Attempting to check app version when user settings have not been loaded", + ) + return } - if (userSettings.version == app.getVersion()) - return; + if (userSettings.version == app.getVersion()) return - userSettings.version = app.getVersion(); + userSettings.version = app.getVersion() fs.writeFileSync(configPath, JSON.stringify(userSettings)) } @@ -74,197 +107,134 @@ function checkAppVersion(configPath: string){ * * @returns */ -function getUserConfiguration(){ - +function getUserConfiguration() { // Return the already loaded user settings if loaded - console.log("Fetching user settings!"); + console.log("Fetching user settings!") if (userSettings !== null) return userSettings - // Directories - const userDir = app.getPath('userData'); - const config = path.join(userDir, 'settings.json'); + const userDir = app.getPath("userData") + const config = path.join(userDir, "settings.json") // Write version and blank settings to user config if doesn't exist if (!fs.existsSync(config)) { console.log("Generating user settings") - userSettings = {version: app.getVersion(), settings: {}} + userSettings = { version: app.getVersion(), settings: {} } fs.writeFileSync(config, JSON.stringify(userSettings)) - } else{ + } else { console.log("Reading user settings from config file " + config) - userSettings = JSON.parse(fs.readFileSync(config, 'utf-8')) + userSettings = JSON.parse(fs.readFileSync(config, "utf-8")) checkAppVersion(config) } return userSettings } -ipcMain.handle("getSettings", () => {return getUserConfiguration(); }) -ipcMain.handle("setSettings", (_, settings) => {saveUserConfiguration(settings)}) - -// Webcam popout window - -const MIN_WEBCAM_HEIGHT: number = 100 -const WEBCAM_TITLEBAR_HEIGHT: number = 28 - -// Disable unused vars because they are needed for TS function type -// eslint-disable-next-line no-unused-vars -type ResizeCallback = (event: Event, arg1: Rectangle) => void; - -let currentResizeHandler: ResizeCallback | null = null - -/** - * If id and name are provided, passes the id and name to the webcam popout so that the given - * video stream is rendered. If id or name are not provided, prevents any video streams from - * being rendered on the window so that the webcam is not showing in the background - * @param id The device stream ID - * @param name The name of the device - */ -function loadWebcam(id: string = "", name: string = ""){ - - const params: string = id && name ? "/webcam?deviceId=" + id + "&deviceName=" + name : "/webcam"; - - if (VITE_DEV_SERVER_URL) - webcamPopoutWin?.loadURL(VITE_DEV_SERVER_URL + "#" + params) - else - webcamPopoutWin?.loadFile(path.join(process.env.DIST, 'index.html'), {hash: params}) -} - -function openWebcamPopout(videoStreamId: string, name: string, aspect: number){ - - if (webcamPopoutWin === null) return; - loadWebcam(videoStreamId, name); - - webcamPopoutWin.setTitle(name); - - // Remove previous resize handler - if (currentResizeHandler) - webcamPopoutWin.off("will-resize", currentResizeHandler) - - // Create resize handler to maintain aspect ratio - currentResizeHandler = function(event, newBounds){ - event.preventDefault(); - - const newWidth = newBounds.width; - const newHeight = Math.round((newWidth / aspect) + WEBCAM_TITLEBAR_HEIGHT); - - webcamPopoutWin?.setBounds({ - x: newBounds.x, - y: newBounds.y, - width: newWidth, - height: newHeight - }); - } - - webcamPopoutWin.on('will-resize', currentResizeHandler); - - // Ensure initial size fits the aspect ratio () - webcamPopoutWin.setSize(webcamPopoutWin.getBounds().width, Math.round(webcamPopoutWin.getBounds().width / aspect) + WEBCAM_TITLEBAR_HEIGHT); - - webcamPopoutWin.setMinimumSize(Math.round(aspect * (MIN_WEBCAM_HEIGHT-28)), MIN_WEBCAM_HEIGHT); - webcamPopoutWin.show(); - -} - -function closeWebcamPopout(){ - webcamPopoutWin?.hide() - loadWebcam(); - win?.webContents.send("webcam-closed"); -} - -ipcMain.handle("openWebcamWindow", (_, videoStreamId, name, aspect) => {openWebcamPopout(videoStreamId, name, aspect)}) -ipcMain.handle("closeWebcamWindow", () => closeWebcamPopout()) - +ipcMain.handle("getSettings", () => { + return getUserConfiguration() +}) +ipcMain.handle("setSettings", (_, settings) => { + saveUserConfiguration(settings) +}) -ipcMain.handle("isMac", () => { return process.platform == "darwin" }) -ipcMain.on('close', () => {closeWithBackend()}) -ipcMain.on('minimise', () => {getWindow()?.minimize()}) -ipcMain.on('maximise', () => {getWindow()?.isMaximized() ? getWindow()?.unmaximize() : getWindow()?.maximize()}) +ipcMain.handle("isMac", () => { + return process.platform == "darwin" +}) +ipcMain.on("close", () => { + closeWithBackend() +}) +ipcMain.on("minimise", () => { + getWindow()?.minimize() +}) +ipcMain.on("maximise", () => { + getWindow()?.isMaximized() + ? getWindow()?.unmaximize() + : getWindow()?.maximize() +}) -ipcMain.on("reload", () => {getWindow()?.reload()}) -ipcMain.on("force_reload", () => {getWindow()?.webContents.reloadIgnoringCache()}) -ipcMain.on("toggle_developer_tools", () => {getWindow()?.webContents.toggleDevTools()}) -ipcMain.on("actual_size", () => {getWindow()?.webContents.setZoomFactor(1)}) -ipcMain.on("toggle_fullscreen", () => {getWindow()?.isFullScreen() ? getWindow()?.setFullScreen(false) : getWindow()?.setFullScreen(true)}) +ipcMain.on("reload", () => { + getWindow()?.reload() +}) +ipcMain.on("force_reload", () => { + getWindow()?.webContents.reloadIgnoringCache() +}) +ipcMain.on("toggle_developer_tools", () => { + getWindow()?.webContents.toggleDevTools() +}) +ipcMain.on("actual_size", () => { + getWindow()?.webContents.setZoomFactor(1) +}) +ipcMain.on("toggle_fullscreen", () => { + getWindow()?.isFullScreen() + ? getWindow()?.setFullScreen(false) + : getWindow()?.setFullScreen(true) +}) ipcMain.on("zoom_in", () => { - const window = getWindow()?.webContents; + const window = getWindow()?.webContents window?.setZoomFactor(window?.getZoomFactor() + 0.1) }) ipcMain.on("zoom_out", () => { - const window = getWindow()?.webContents; + const window = getWindow()?.webContents window?.setZoomFactor(window?.getZoomFactor() - 0.1) }) -ipcMain.on("openFileInExplorer", (_event, filePath) => {shell.showItemInFolder(filePath)}) +ipcMain.on("openFileInExplorer", (_event, filePath) => { + shell.showItemInFolder(filePath) +}) function createWindow() { win = new BrowserWindow({ - icon: path.join(process.env.VITE_PUBLIC, 'app_icon.ico'), + icon: path.join(process.env.VITE_PUBLIC, "app_icon.ico"), webPreferences: { - preload: path.join(__dirname, 'preload.js'), + preload: path.join(__dirname, "preload.js"), nodeIntegration: true, }, show: false, alwaysOnTop: true, minWidth: 750, minHeight: 500, - titleBarStyle: 'hidden', + titleBarStyle: "hidden", frame: false, }) - // Create webcam window keep it hidden to avoid delay between popping out windows - webcamPopoutWin = new BrowserWindow({ - width: 400, - height: 300, - frame: false, - alwaysOnTop: true, - icon: path.join(process.env.VITE_PUBLIC, 'app_icon.ico'), - show: false, - title: "Webcam", - webPreferences: { - nodeIntegration: true, - preload: path.join(__dirname, 'preload.js'), - contextIsolation: true - }, - fullscreen: false, - fullscreenable: false, - }); - - - // We load the webcam route here to prevent having to load the page on popout - loadWebcam(); + registerWebcamIPC(win) + registerAboutIPC() + registerLinkStatsIPC() // Open links in browser, not within the electron window. // Note, links must have target="_blank" win.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) - return { action: 'deny' } + return { action: "deny" } }) // Test active push message to Renderer-process. - win.webContents.on('did-finish-load', () => { - win?.webContents.send('main-process-message', new Date().toLocaleString()) + win.webContents.on("did-finish-load", () => { + win?.webContents.send("main-process-message", new Date().toLocaleString()) }) if (VITE_DEV_SERVER_URL) { win.loadURL(VITE_DEV_SERVER_URL) } else { // win.loadFile('dist/index.html') - win.loadFile(path.join(process.env.DIST, 'index.html')) + win.loadFile(path.join(process.env.DIST, "index.html")) } // Swap to main window when ready - win.once('ready-to-show', () => { + win.once("ready-to-show", () => { loadingWin?.destroy() win?.maximize() // Window starts always on top so it opens even if loading window is hid win?.setAlwaysOnTop(false) }) + win.on("close", () => { + closeWithBackend() + }) + // Set Main Menu on Mac Only - if(process.platform === 'darwin'){ + if (process.platform === "darwin") { setMainMenu() } - } // For Mac only @@ -274,59 +244,48 @@ function setMainMenu() { label: app.name, submenu: [ { - label: 'About FGCS', - click: async () => { - const icon = nativeImage.createFromPath(path.join(__dirname, '../public/window_loading_icon-2.png')) - - const options: MessageBoxOptions = { - type: 'info', - buttons: [ 'OK','Report a bug',], - title: 'About FGCS', - message: 'FGCS Version: ' + app.getVersion(), // get version from package.json - detail: 'For more information, visit our GitHub page.', - icon: icon, - defaultId: 1, - }; - - const response = await dialog.showMessageBox(options); - if (response.response === 1) { - shell.openExternal(packageInfo.bugs.url) - } + label: "About FGCS", + click: () => { + openAboutPopout() }, }, - { type: 'separator' }, + { type: "separator" }, { - label: 'Report a bug', + label: "Report a bug", click: async () => { - await shell.openExternal( - packageInfo.bugs.url, - ) + await shell.openExternal(packageInfo.bugs.url) }, }, - { type: 'separator' }, - { role: 'quit' }, + { type: "separator" }, + { role: "quit" }, ], }, { - label: 'View', + label: "View", submenu: [ - { role: 'reload' }, - { role: 'forceReload' }, - { role: 'toggleDevTools' }, - { type: 'separator' }, - { role: 'resetZoom' }, - { role: 'zoomIn' }, - { role: 'zoomOut' }, - { type: 'separator' }, - { role: 'togglefullscreen' } - ] - } + { + label: "Connection Stats", + click: () => { + openLinkStatsWindow() + }, + }, + { type: "separator" }, + { role: "reload" }, + { role: "forceReload" }, + { role: "toggleDevTools" }, + { type: "separator" }, + { role: "resetZoom" }, + { role: "zoomIn" }, + { role: "zoomOut" }, + { type: "separator" }, + { role: "togglefullscreen" }, + ], + }, ] const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) } - function createLoadingWindow() { loadingWin = new BrowserWindow({ frame: false, @@ -336,7 +295,7 @@ function createLoadingWindow() { // Resize and center window loadingWin.loadFile( - path.join(process.env.VITE_PUBLIC, 'window_loading_icon.svg'), + path.join(process.env.VITE_PUBLIC, "window_loading_icon.svg"), ) loadingWin.setSize(300, 300, true) loadingWin.center() @@ -344,74 +303,88 @@ function createLoadingWindow() { function startBackend() { if (pythonBackend) { - console.log('Backend already running'); - return; + console.log("Backend already running") + return } - console.log('Starting backend'); + console.log("Starting backend") // Add more platforms here - const backendPaths: Partial> ={ - win32: 'extras/fgcs_backend.exe', - darwin: path.join(process.resourcesPath, '../extras', 'fgcs_backend.app', 'Contents', 'MacOS', 'fgcs_backend') - }; + const backendPaths: Partial> = { + win32: "extras/fgcs_backend.exe", + darwin: path.join( + process.resourcesPath, + "../extras", + "fgcs_backend.app", + "Contents", + "MacOS", + "fgcs_backend", + ), + } - const backendPath = backendPaths[process.platform]; + const backendPath = backendPaths[process.platform] if (!backendPath) { - console.error('Unsupported platform!'); - return; + console.error("Unsupported platform!") + return } - console.log(`Starting backend: ${backendPath}`); - pythonBackend = spawn(backendPath); + console.log(`Starting backend: ${backendPath}`) + pythonBackend = spawn(backendPath) // pythonBackend.stdout.on('data', (data) => console.log(`Backend stdout: ${data}`)); // pythonBackend.stderr.on('data', (data) => console.error(`Backend stderr: ${data}`)); - pythonBackend.on('close', (code) => { - console.log(`Backend process exited with code ${code}`); - pythonBackend = null; - }); + pythonBackend.on("close", (code) => { + console.log(`Backend process exited with code ${code}`) + pythonBackend = null + }) - pythonBackend.on('error', (error) => { - console.error('Failed to start backend:', error); - dialog.showErrorBox('Backend Error', `Failed to start backend: ${error.message}`); - }); + pythonBackend.on("error", (error) => { + console.error("Failed to start backend:", error) + dialog.showErrorBox( + "Backend Error", + `Failed to start backend: ${error.message}`, + ) + }) } // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. function closeWithBackend() { - if (process.platform !== 'darwin') { + // Always close all popout windows first + destroyWebcamWindow() + destroyAboutWindow() + destroyLinkStatsWindow() + console.log("Killing backend") + // kill any processes with the name "fgcs_backend.exe" + // Windows + spawn("taskkill /f /im fgcs_backend.exe", { shell: true }) + if (process.platform !== "darwin") { app.quit() win = null - webcamPopoutWin?.close() - webcamPopoutWin = null } - - console.log('Killing backend') - // kill any processes with the name "fgcs_backend.exe" - // Windows - spawn('taskkill /f /im fgcs_backend.exe', { shell: true }) } -app.on('window-all-closed', () => { - closeWithBackend(); + +app.on("window-all-closed", () => { + closeWithBackend() }) // To ensure that the backend process is killed with Cmd + Q on macOS, // listen to the before-quit event. -app.on('before-quit', () => { - if(process.platform === 'darwin' && pythonBackend){ - console.log('Stopping backend') - spawnSync('pkill', ['-f', 'fgcs_backend']); +app.on("before-quit", () => { + if (process.platform === "darwin" && pythonBackend) { + console.log("Stopping backend") + spawnSync("pkill", ["-f", "fgcs_backend"]) pythonBackend = null + destroyWebcamWindow() + destroyAboutWindow() + destroyLinkStatsWindow() } - webcamPopoutWin?.close(); -}); +}) -app.on('activate', () => { +app.on("activate", () => { // On OS X it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) { @@ -422,10 +395,10 @@ app.on('activate', () => { app.whenReady().then(() => { createLoadingWindow() // Open file and Get Recent Logs - ipcMain.handle('fla:open-file', openFile) - ipcMain.handle('fla:get-recent-logs', async () => { + ipcMain.handle("fla:open-file", openFile) + ipcMain.handle("fla:get-recent-logs", async () => { try { - const recentLogs = getRecentFiles(); + const recentLogs = getRecentFiles() if (!Array.isArray(recentLogs)) { throw new Error( `Expected recentLogs to be an array, but got ${typeof recentLogs}`, @@ -446,12 +419,25 @@ app.whenReady().then(() => { } }) // Clear recent logs - ipcMain.handle('fla:clear-recent-logs', clearRecentFiles) + ipcMain.handle("fla:clear-recent-logs", clearRecentFiles) + + // Save mission file + ipcMain.handle( + "missions:get-save-mission-file-path", + async (event, options) => { + const window = BrowserWindow.fromWebContents(event.sender) + if (!window) { + throw new Error("No active window found") + } + const result = await dialog.showSaveDialog(window, options) + return result + }, + ) - ipcMain.handle('app:get-node-env', () => - app.isPackaged ? 'production' : 'development', + ipcMain.handle("app:get-node-env", () => + app.isPackaged ? "production" : "development", ) - ipcMain.handle('app:get-version', () => app.getVersion()) + ipcMain.handle("app:get-version", () => app.getVersion()) if (app.isPackaged && pythonBackend === null) { startBackend() diff --git a/gcs/electron/modules/aboutWindow.ts b/gcs/electron/modules/aboutWindow.ts new file mode 100644 index 000000000..431e92348 --- /dev/null +++ b/gcs/electron/modules/aboutWindow.ts @@ -0,0 +1,68 @@ +import { BrowserWindow, ipcMain, shell } from "electron" +import path from "path" + +let aboutPopoutWin: BrowserWindow | null = null + +const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"] + +export function openAboutPopout() { + if (aboutPopoutWin === null) { + aboutPopoutWin = new BrowserWindow({ + width: 400, + height: 300, + frame: true, + icon: path.join(process.env.VITE_PUBLIC, "app_icon.ico"), + show: false, + title: "About FGCS", + webPreferences: { + preload: path.join(__dirname, "preload.js"), + contextIsolation: true, + }, + fullscreen: false, + fullscreenable: false, + }) + } + + if (VITE_DEV_SERVER_URL) { + aboutPopoutWin?.loadURL(VITE_DEV_SERVER_URL + "aboutWindow.html") + } else { + aboutPopoutWin?.loadFile(path.join(process.env.DIST, "aboutWindow.html")) + } + + // Open links in browser, not within the electron window. + // Note, links must have target="_blank" + aboutPopoutWin.webContents.setWindowOpenHandler((details) => { + shell.openExternal(details.url) + + return { action: "deny" } + }) + + // Windows doesn't consider maximising to be fullscreening so we must prevent default + aboutPopoutWin.on("maximize", (e: Event) => { + e.preventDefault() + }) + aboutPopoutWin.on("close", () => { + aboutPopoutWin = null + }) + aboutPopoutWin.setMenuBarVisibility(false) + aboutPopoutWin.show() +} + +export function closeAboutPopout() { + destroyAboutWindow() +} + +export function destroyAboutWindow() { + aboutPopoutWin?.close() + aboutPopoutWin = null +} + +export default function registerAboutIPC() { + ipcMain.removeHandler("openAboutWindow") + ipcMain.removeHandler("closeAboutWindow") + + ipcMain.handle("openAboutWindow", () => { + openAboutPopout() + }) + ipcMain.handle("closeAboutWindow", () => closeAboutPopout()) +} diff --git a/gcs/electron/modules/linkStatsWindow.ts b/gcs/electron/modules/linkStatsWindow.ts new file mode 100644 index 000000000..6f7d91014 --- /dev/null +++ b/gcs/electron/modules/linkStatsWindow.ts @@ -0,0 +1,68 @@ +import { BrowserWindow, ipcMain } from "electron" +import path from "path" + +const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"] + +let linkStatsWin: BrowserWindow | null = null + +export function openLinkStatsWindow() { + if (linkStatsWin === null) { + linkStatsWin = new BrowserWindow({ + width: 500, + height: 300, + frame: true, + icon: path.join(process.env.VITE_PUBLIC, "app_icon.ico"), + show: false, + title: "Connection Stats", + webPreferences: { + preload: path.join(__dirname, "preload.js"), + contextIsolation: true, + }, + fullscreen: false, + fullscreenable: false, + }) + } + + if (VITE_DEV_SERVER_URL) { + linkStatsWin?.loadURL(VITE_DEV_SERVER_URL + "linkStats.html") + } else { + linkStatsWin?.loadFile(path.join(process.env.DIST, "linkStats.html")) + } + + // Windows doesn't consider maximising to be fullscreening so we must prevent default + linkStatsWin.on("maximize", (e: Event) => { + e.preventDefault() + }) + linkStatsWin.on("close", () => { + linkStatsWin = null + }) + linkStatsWin.setMenuBarVisibility(false) + linkStatsWin.show() +} + +export function closeLinkStatsWindow() { + destroyLinkStatsWindow() +} + +export function destroyLinkStatsWindow() { + linkStatsWin?.close() + linkStatsWin = null +} + +export default function registerLinkStatsIPC() { + ipcMain.removeHandler("openLinkStatsWindow") + ipcMain.removeHandler("closeLinkStatsWindow") + ipcMain.removeHandler("update-link-stats") + + ipcMain.handle("openLinkStatsWindow", () => { + openLinkStatsWindow() + }) + ipcMain.handle("closeLinkStatsWindow", () => closeLinkStatsWindow()) + ipcMain.handle("update-link-stats", (_, linkStats) => { + linkStatsWin?.webContents.send("send-link-stats", linkStats) + const uptimeFormatted = new Date(Math.round(linkStats.uptime) * 1000) + .toISOString() + .substring(11, 19) + linkStatsWin?.setTitle(`Connection Stats | Uptime: ${uptimeFormatted}`) + }) +} diff --git a/gcs/electron/modules/webcam.ts b/gcs/electron/modules/webcam.ts new file mode 100644 index 000000000..738b90573 --- /dev/null +++ b/gcs/electron/modules/webcam.ts @@ -0,0 +1,111 @@ +import { BrowserWindow, ipcMain } from "electron" +import path from "path" + +let webcamPopoutWin: BrowserWindow | null = null + +const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"] + +const MIN_WEBCAM_HEIGHT: number = 100 +const WEBCAM_TITLEBAR_HEIGHT: number = 28 + +/** + * If id and name are provided, passes the id and name to the webcam popout so that the given + * video stream is rendered. If id or name are not provided, prevents any video streams from + * being rendered on the window so that the webcam is not showing in the background + * @param id The device stream ID + * @param name The name of the device + */ +function loadWebcam(id: string = "", name: string = "") { + const params: string = + id && name + ? "webcam.html?deviceId=" + id + "&deviceName=" + name + : "webcam.html" + + if (VITE_DEV_SERVER_URL) + webcamPopoutWin?.loadURL(VITE_DEV_SERVER_URL + params) + else + webcamPopoutWin?.loadFile(path.join(process.env.DIST, "webcam.html"), { + search: id && name ? `?deviceId=${id}&deviceName=${name}` : "", + }) +} + +export function openWebcamPopout( + videoStreamId: string, + name: string, + aspect: number, +) { + if (webcamPopoutWin === null) { + webcamPopoutWin = new BrowserWindow({ + width: 400, + height: 300, + frame: false, + icon: path.join(process.env.VITE_PUBLIC, "app_icon.ico"), + show: false, + title: "Webcam", + webPreferences: { + nodeIntegration: true, + preload: path.join(__dirname, "preload.js"), + contextIsolation: true, + }, + fullscreen: false, + fullscreenable: false, + }) + } else { + console.warn("2nd webcam window requested, ignoring") + } + + loadWebcam(videoStreamId, name) + webcamPopoutWin.setTitle(name) + + webcamPopoutWin.on("will-resize", (event, newBounds) => { + event.preventDefault() + + const newWidth = newBounds.width + const newHeight = Math.round(newWidth / aspect + WEBCAM_TITLEBAR_HEIGHT) + + webcamPopoutWin?.setBounds({ + x: newBounds.x, + y: newBounds.y, + width: newWidth, + height: newHeight, + }) + }) + + // Windows doesn't consider maximising to be fullscreening so we must prevent default + webcamPopoutWin.on("maximize", (e: Event) => { + e.preventDefault() + }) + + // Ensure initial size fits the aspect ratio () + webcamPopoutWin.setSize( + webcamPopoutWin.getBounds().width, + Math.round(webcamPopoutWin.getBounds().width / aspect) + + WEBCAM_TITLEBAR_HEIGHT, + ) + webcamPopoutWin.setMinimumSize( + Math.round(aspect * (MIN_WEBCAM_HEIGHT - 28)), + MIN_WEBCAM_HEIGHT, + ) + webcamPopoutWin.show() +} + +export function closeWebcamPopout(mainWindow: BrowserWindow | null) { + console.log("Destroying webcam window") + destroyWebcamWindow() + mainWindow?.webContents.send("webcam-closed") +} + +export function destroyWebcamWindow() { + webcamPopoutWin?.close() + webcamPopoutWin = null +} + +export default function registerWebcamIPC(mainWindow: BrowserWindow) { + ipcMain.removeHandler("openWebcamWindow") + ipcMain.removeHandler("closeWebcamWindow") + + ipcMain.handle("openWebcamWindow", (_, videoStreamId, name, aspect) => { + openWebcamPopout(videoStreamId, name, aspect) + }) + ipcMain.handle("closeWebcamWindow", () => closeWebcamPopout(mainWindow)) +} diff --git a/gcs/electron/preload.js b/gcs/electron/preload.js index c52ab7d36..bbb174752 100644 --- a/gcs/electron/preload.js +++ b/gcs/electron/preload.js @@ -1,18 +1,30 @@ -import { contextBridge, ipcRenderer } from 'electron' +import { contextBridge, ipcRenderer } from "electron" // --------- Expose some API to the Renderer process --------- -contextBridge.exposeInMainWorld('ipcRenderer', { +contextBridge.exposeInMainWorld("ipcRenderer", { ...withPrototype(ipcRenderer), - loadFile: (data) => ipcRenderer.invoke('fla:open-file', data), - getRecentLogs: () => ipcRenderer.invoke('fla:get-recent-logs'), - clearRecentLogs: () => ipcRenderer.invoke('fla:clear-recent-logs'), - getNodeEnv: () => ipcRenderer.invoke('app:get-node-env'), - getVersion: () => ipcRenderer.invoke('app:get-version'), - getSettings: () => ipcRenderer.invoke('getSettings'), - saveSettings: (settings) => ipcRenderer.invoke('setSettings', settings), - openWebcamWindow: (id, name, aspect) => ipcRenderer.invoke("openWebcamWindow", id, name, aspect), - closeWebcamWindow: () => ipcRenderer.invoke('closeWebcamWindow'), - onCameraWindowClose: (callback) => ipcRenderer.on("webcam-closed", () => callback()) + loadFile: (data) => ipcRenderer.invoke("fla:open-file", data), + getRecentLogs: () => ipcRenderer.invoke("fla:get-recent-logs"), + clearRecentLogs: () => ipcRenderer.invoke("fla:clear-recent-logs"), + getSaveMissionFilePath: (options) => + ipcRenderer.invoke("missions:get-save-mission-file-path", options), + getNodeEnv: () => ipcRenderer.invoke("app:get-node-env"), + getVersion: () => ipcRenderer.invoke("app:get-version"), + getSettings: () => ipcRenderer.invoke("getSettings"), + saveSettings: (settings) => ipcRenderer.invoke("setSettings", settings), + openWebcamWindow: (id, name, aspect) => + ipcRenderer.invoke("openWebcamWindow", id, name, aspect), + closeWebcamWindow: () => ipcRenderer.invoke("closeWebcamWindow"), + onCameraWindowClose: (callback) => + ipcRenderer.on("webcam-closed", () => callback()), + openAboutWindow: () => ipcRenderer.invoke("openAboutWindow"), + closeAboutWindow: () => ipcRenderer.invoke("closeAboutWindow"), + openLinkStatsWindow: () => ipcRenderer.invoke("openLinkStatsWindow"), + closeLinkStatsWindow: () => ipcRenderer.invoke("closeLinkStatsWindow"), + updateLinkStats: (linkStats) => + ipcRenderer.invoke("update-link-stats", linkStats), + onGetLinkStats: (callback) => + ipcRenderer.on("send-link-stats", (_, stats) => callback(stats)), }) // `exposeInMainWorld` can't detect attributes and methods of `prototype`, manually patching it. @@ -22,7 +34,7 @@ function withPrototype(obj) { for (const [key, value] of Object.entries(protos)) { if (Object.prototype.hasOwnProperty.call(obj, key)) continue - if (typeof value === 'function') { + if (typeof value === "function") { // Some native APIs, like `NodeJS.EventEmitter['on']`, don't work in the Renderer process. Wrapping them into a function. obj[key] = function (...args) { return value.call(obj, ...args) @@ -35,12 +47,12 @@ function withPrototype(obj) { } // --------- Preload scripts loading --------- -function domReady(condition = ['complete', 'interactive']) { +function domReady(condition = ["complete", "interactive"]) { return new Promise((resolve) => { if (condition.includes(document.readyState)) { resolve(true) } else { - document.addEventListener('readystatechange', () => { + document.addEventListener("readystatechange", () => { if (condition.includes(document.readyState)) { resolve(true) } @@ -97,12 +109,12 @@ function useLoading() { z-index: 9; } ` - const oStyle = document.createElement('style') - const oDiv = document.createElement('div') + const oStyle = document.createElement("style") + const oDiv = document.createElement("div") - oStyle.id = 'app-loading-style' + oStyle.id = "app-loading-style" oStyle.innerHTML = styleContent - oDiv.className = 'app-loading-wrap' + oDiv.className = "app-loading-wrap" oDiv.innerHTML = `
` return { @@ -124,7 +136,7 @@ const { appendLoading, removeLoading } = useLoading() domReady().then(appendLoading) window.onmessage = (ev) => { - ev.data.payload === 'removeLoading' && removeLoading() + ev.data.payload === "removeLoading" && removeLoading() } setTimeout(removeLoading, 4999) diff --git a/gcs/linkStats.html b/gcs/linkStats.html new file mode 100644 index 000000000..d22a0453c --- /dev/null +++ b/gcs/linkStats.html @@ -0,0 +1,12 @@ + + + + + + + + +
+ + + diff --git a/gcs/package.json b/gcs/package.json index ae71c4c11..7c66c9e50 100644 --- a/gcs/package.json +++ b/gcs/package.json @@ -6,9 +6,10 @@ "name": "Avis-Drone-Labs" }, "private": true, - "version": "0.1.9-alpha", + "version": "0.2.0-alpha", "license": "GPL-3.0-only", "homepage": "https://fgcs.projectfalcon.uk", + "githubLink": "https://github.com/Avis-Drone-Labs/FGCS", "bugs": { "url": "https://github.com/Avis-Drone-Labs/FGCS/issues/new/choose" }, diff --git a/gcs/src/about.jsx b/gcs/src/about.jsx new file mode 100644 index 000000000..ed22e0291 --- /dev/null +++ b/gcs/src/about.jsx @@ -0,0 +1,21 @@ +import "./css/index.css" // Needs to be at the top of the file +import "./css/resizable.css" + +// Style imports +import "@mantine/code-highlight/styles.css" +import "@mantine/core/styles.css" +import "@mantine/notifications/styles.css" +import "@mantine/spotlight/styles.css" +import "@mantine/tiptap/styles.css" + +import React from "react" +import ReactDOM from "react-dom/client" +import AboutWindow from "./components/aboutWindow/aboutWindow" + +ReactDOM.createRoot(document.getElementById("root")).render( + + + , +) + +postMessage({ payload: "removeLoading" }, "*") diff --git a/gcs/src/components/SingleRunWrapper.jsx b/gcs/src/components/SingleRunWrapper.jsx index b6f5e5437..236fbe94a 100644 --- a/gcs/src/components/SingleRunWrapper.jsx +++ b/gcs/src/components/SingleRunWrapper.jsx @@ -16,13 +16,13 @@ import { import { Octokit } from "octokit" import semverGt from "semver/functions/gt" -// Custom helpers -import { showErrorNotification } from "../helpers/notification.js" +// Other +import { useSettings } from "../helpers/settings.js" // Styling imports import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../../tailwind.config.js" -import { useSettings } from "../helpers/settings.js" +import { showErrorNotification } from "../helpers/notification.js" const tailwindColors = resolveConfig(tailwindConfig).theme.colors @@ -31,8 +31,7 @@ const octokit = new Octokit({}) export default function SingleRunWrapper({ children }) { const [opened, { open, close }] = useDisclosure(false) const [fgcsOutOfDateInfo, setFgcsOutOfDateInfo] = useState(null) - // eslint-disable-next-line no-unused-vars - const [outOfDate, setOutOfDate] = useSessionStorage({ + const [, setOutOfDate] = useSessionStorage({ key: "outOfDate", defaultValue: false, }) @@ -77,7 +76,7 @@ export default function SingleRunWrapper({ children }) { } } else { showErrorNotification( - "Failed to check for updates. Please check your internet connection.", + "Failed to check for updates. Please check your internet connection and try again later.", ) } } diff --git a/gcs/src/components/aboutWindow/aboutWindow.jsx b/gcs/src/components/aboutWindow/aboutWindow.jsx new file mode 100644 index 000000000..2473abc83 --- /dev/null +++ b/gcs/src/components/aboutWindow/aboutWindow.jsx @@ -0,0 +1,41 @@ +"use client" + +import packageJson from "../../../package.json" + +export default function AboutWindow() { + return ( +
+
+ +
+ + Our website + + + Our GitHub + + + Report a bug + +
+

{packageJson.version} | Made with ❀ in the UK

+
+
+ ) +} diff --git a/gcs/src/components/config/flightModes.jsx b/gcs/src/components/config/flightModes.jsx index 798bc7fbe..1f144380a 100644 --- a/gcs/src/components/config/flightModes.jsx +++ b/gcs/src/components/config/flightModes.jsx @@ -6,27 +6,34 @@ each mode. */ // Base imports -import { useEffect, useState } from "react" +import { useEffect, useMemo } from "react" +import { + selectAircraftTypeString, + selectFlightModeString, +} from "../../redux/slices/droneInfoSlice" // 3rd party imports -import { Button, LoadingOverlay, Select } from "@mantine/core" -import { - useListState, - useLocalStorage, - useSessionStorage, -} from "@mantine/hooks" +import { LoadingOverlay, Select } from "@mantine/core" -// Helper javascript files +// Redux +import { useDispatch, useSelector } from "react-redux" import { - COPTER_MODES_FLIGHT_MODE_MAP, - MAV_AUTOPILOT_INVALID, - PLANE_MODES_FLIGHT_MODE_MAP, -} from "../../helpers/mavlinkConstants" + emitSetState, + selectConnectedToDrone, +} from "../../redux/slices/droneConnectionSlice" import { - showErrorNotification, - showSuccessNotification, -} from "../../helpers/notification" -import { socket } from "../../helpers/socket" + emitGetFlightModeConfig, + emitRefreshFlightModeData, + emitSetFlightMode, + selectFlightModeChannel, + selectFlightModesList, + selectPwmValue, + selectRefreshingFlightModeData, + setRefreshingFlightModeData, +} from "../../redux/slices/configSlice" + +// Helper javascript files +import { getFlightModeMap } from "../../helpers/mavlinkConstants" const FLIGHT_MODE_PWM_VALUES = [ [0, 1230], @@ -38,105 +45,35 @@ const FLIGHT_MODE_PWM_VALUES = [ ] export default function FlightModes() { - const [connected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: false, - }) - - function getCurrentFlightMap(currentFlightState) { - if (currentFlightState === 1) { - return PLANE_MODES_FLIGHT_MODE_MAP - } else if (currentFlightState === 2) { - return COPTER_MODES_FLIGHT_MODE_MAP - } - - return {} - } - - const [flightModes, flightModesHandler] = useListState([ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - ]) - const [flightModeChannel, setFlightModeChannel] = useState("UNKNOWN") - const [currentFlightMode, setCurrentFlightMode] = useState("UNKNOWN") - const [aircraftType] = useLocalStorage({ - key: "aircraftType", - }) - const [currentPwmValue, setCurrentPwmValue] = useState(0) - const [refreshingFlightModeData, setRefreshingFlightModeData] = - useState(false) - - const flightModesSelectValuesMap = Object.keys( - getCurrentFlightMap(aircraftType), - ).map((mappedFlightModeNumber) => ({ - value: mappedFlightModeNumber.toString(), - label: getCurrentFlightMap(aircraftType)[mappedFlightModeNumber], - })) + const dispatch = useDispatch() + const connected = useSelector(selectConnectedToDrone) + const flightModes = useSelector(selectFlightModesList) + const flightModeChannel = useSelector(selectFlightModeChannel) + const refreshingFlightModeData = useSelector(selectRefreshingFlightModeData) + const aircraftType = useSelector(selectAircraftTypeString) + const currentFlightMode = useSelector(selectFlightModeString) + const currentPwmValue = useSelector(selectPwmValue) + + const flightModeSelectDataMap = useMemo(() => { + const flightModeMap = getFlightModeMap(aircraftType) + return Object.keys(flightModeMap).map((key) => { + return { + value: key, + label: flightModeMap[key], + } + }) + }, [aircraftType]) useEffect(() => { if (!connected) { return } - socket.emit("set_state", { state: "config.flight_modes" }) - socket.emit("get_flight_mode_config") - - socket.on("flight_mode_config", (data) => { - flightModesHandler.setState(data.flight_modes) - setFlightModeChannel(data.flight_mode_channel) - setRefreshingFlightModeData(false) - }) - - socket.on("set_flight_mode_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - - socket.emit("get_flight_mode_config") - }) - - return () => { - socket.emit("set_state", { state: "config" }) - socket.off("flight_mode_config") - socket.off("set_flight_mode_result") - } + dispatch(emitSetState("config.flight_modes")) + dispatch(emitGetFlightModeConfig()) + refreshFlightModeData() }, [connected]) - useEffect(() => { - socket.on("incoming_msg", (msg) => { - if ( - msg.mavpackettype === "RC_CHANNELS" && - flightModeChannel !== "UNKNOWN" - ) { - setCurrentPwmValue(msg[`chan${flightModeChannel}_raw`]) - } else if ( - msg.mavpackettype === "HEARTBEAT" && - msg.autopilot !== MAV_AUTOPILOT_INVALID && - msg.type - ) { - // Get the current flight mode - let mode = "UNKNOWN" - if (msg.type === 1) { - mode = PLANE_MODES_FLIGHT_MODE_MAP[msg.custom_mode] - } else if (msg.type === 2) { - mode = COPTER_MODES_FLIGHT_MODE_MAP[msg.custom_mode] - } - - setCurrentFlightMode(mode) - } - }) - - return () => { - socket.off("incoming_msg") - } - }, [flightModeChannel]) - function isFlightModeActive(mode_idx) { // Check if the current PWM value is within the range of the flight mode // If the second value is undefined, then check if the current PWM value is @@ -153,15 +90,17 @@ export default function FlightModes() { } function changeFlightMode(modeNumber, newFlightMode) { - socket.emit("set_flight_mode", { - mode_number: modeNumber + 1, // Mode number is 1 + indexed value - flight_mode: parseInt(newFlightMode), - }) + dispatch( + emitSetFlightMode({ + mode_number: modeNumber + 1, // Mode number is 1 + indexed value + flight_mode: parseInt(newFlightMode), + }), + ) } function refreshFlightModeData() { - socket.emit("refresh_flight_mode_data") - setRefreshingFlightModeData(true) + dispatch(emitRefreshFlightModeData()) + dispatch(setRefreshingFlightModeData(true)) } return ( @@ -178,11 +117,11 @@ export default function FlightModes() { {flightModes.map((flightModeNumber, idx) => ( updateFenceItemData("command", parseInt(value))} + allowDeselect={false} + /> + + + updateFenceItemData("param1", val)} + hideControls + /> + + + + + + + + + + + + updateFenceItemData("x", coordToInt(val))} + hideControls + /> + + + updateFenceItemData("y", coordToInt(val))} + hideControls + /> + + + updateFenceItemData("z", val)} + hideControls + /> + + {getPositionFrameName(fenceItem.frame)} + + + dispatch(reorderDrawingItem({ id: fenceItem.id, increment: -1 })) + } + > + + + + dispatch(reorderDrawingItem({ id: fenceItem.id, increment: 1 })) + } + > + + + dispatch(removeDrawingItem(fenceItem.id))} + color="red" + > + + + + + ) +} diff --git a/gcs/src/components/missions/missionItemsTable.jsx b/gcs/src/components/missions/missionItemsTable.jsx index acd7fef14..ee0412648 100644 --- a/gcs/src/components/missions/missionItemsTable.jsx +++ b/gcs/src/components/missions/missionItemsTable.jsx @@ -4,52 +4,50 @@ import { Table } from "@mantine/core" import React from "react" +import { isGlobalFrameHomeCommand } from "../../helpers/filterMissions" import MissionItemsTableRow from "./missionItemsTableRow" -function MissionItemsTableNonMemo({ - missionItems, - aircraftType, - updateMissionItem, -}) { - return ( - - - - - Command - Param 1 - Param 2 - Param 3 - Param 4 - Lat - Long - Alt - Frame - - - - {missionItems.map((missionItem, idx) => { - // Skip home location - if ( - missionItem.command === 16 && - missionItem.frame === 0 && - missionItem.mission_type === 0 - ) { - return null - } +// Redux +import { useSelector } from "react-redux" +import { selectDrawingMissionItems } from "../../redux/slices/missionSlice" + +function MissionItemsTableNonMemo({ tableSectionHeight }) { + const missionItems = useSelector(selectDrawingMissionItems) - return ( - - ) - })} - -
+ return ( + + + + + + Command + Param 1 + Param 2 + Param 3 + Param 4 + Lat + Lng + Alt + Frame + + + + + {missionItems.map((missionItem, idx) => { + // Skip home location + if (idx === 0 && isGlobalFrameHomeCommand(missionItem)) { + return null + } + return ( + + ) + })} + +
+
) } diff --git a/gcs/src/components/missions/missionItemsTableRow.jsx b/gcs/src/components/missions/missionItemsTableRow.jsx index 29ae943ec..864d69f40 100644 --- a/gcs/src/components/missions/missionItemsTableRow.jsx +++ b/gcs/src/components/missions/missionItemsTableRow.jsx @@ -2,32 +2,42 @@ This component displays the row for a mission item in a table. */ -import { NumberInput, Select, TableTd, TableTr } from "@mantine/core" -import { useEffect, useState } from "react" -import { coordToInt, intToCoord } from "../../helpers/dataFormatters" +import { + ActionIcon, + NumberInput, + Select, + TableTd, + TableTr, +} from "@mantine/core" +import { IconArrowDown, IconArrowUp, IconTrash } from "@tabler/icons-react" +import { + coordToInt, + getPositionFrameName, + intToCoord, +} from "../../helpers/dataFormatters" import { COPTER_MISSION_ITEM_COMMANDS_LIST, - MAV_FRAME_LIST, PLANE_MISSION_ITEM_COMMANDS_LIST, } from "../../helpers/mavlinkConstants" -const coordsFractionDigits = 9 - -export default function MissionItemsTableRow({ - index, - aircraftType, - missionItem, - updateMissionItem, -}) { - const [missionItemData, setMissionItemData] = useState(missionItem) +// Redux +import { useDispatch, useSelector } from "react-redux" +import { selectAircraftType } from "../../redux/slices/droneInfoSlice" +import { + removeDrawingItem, + reorderDrawingItem, + selectDrawingMissionItemByIdx, + updateDrawingItem, +} from "../../redux/slices/missionSlice" - useEffect(() => { - setMissionItemData(missionItem) - }, [missionItem]) +const coordsFractionDigits = 9 - useEffect(() => { - updateMissionItem(missionItemData) - }, [missionItemData]) +export default function MissionItemsTableRow({ missionItemIndex }) { + const dispatch = useDispatch() + const aircraftType = useSelector(selectAircraftType) + const missionItem = useSelector( + selectDrawingMissionItemByIdx(missionItemIndex), + ) function getDisplayCommandName(commandName) { if (commandName.startsWith("MAV_CMD_NAV_")) { @@ -51,30 +61,22 @@ export default function MissionItemsTableRow({ })) } - function getFrameName(frameId) { - var frameName = MAV_FRAME_LIST[frameId] - - if (frameName.startsWith("MAV_FRAME_")) { - frameName = frameName.replace("MAV_FRAME_", "") - } - - return frameName || "UNKNOWN" - } - function updateMissionItemData(key, newVal) { - setMissionItemData({ - ...missionItemData, - [key]: newVal, - }) + dispatch( + updateDrawingItem({ + ...missionItem, + [key]: newVal, + }), + ) } return ( - {index} + {missionItem.seq} - + - + - + - + updateRallyItemData("x", coordToInt(val))} hideControls /> updateRallyItemData("y", coordToInt(val))} hideControls /> updateRallyItemData("z", val)} hideControls /> - {getFrameName(rallyItemData.frame)} + {getPositionFrameName(rallyItem.frame)} + + dispatch(removeDrawingItem(rallyItem.id))} + color="red" + > + + + ) } diff --git a/gcs/src/components/missions/updatePlannedHomePositionModal.jsx b/gcs/src/components/missions/updatePlannedHomePositionModal.jsx new file mode 100644 index 000000000..10d7004a9 --- /dev/null +++ b/gcs/src/components/missions/updatePlannedHomePositionModal.jsx @@ -0,0 +1,127 @@ +import { Button, Modal } from "@mantine/core" +import { useDispatch, useSelector } from "react-redux" +import { intToCoord } from "../../helpers/dataFormatters" +import { + resetUpdatePlannedHomePositionFromLoadData, + selectPlannedHomePosition, + selectUpdatePlannedHomePositionFromLoadData, + selectUpdatePlannedHomePositionFromLoadModal, + setUpdatePlannedHomePositionFromLoadModal, + updatePlannedHomePositionBasedOnLoadedWaypointsThunk, +} from "../../redux/slices/missionSlice" + +const coordsFractionDigits = 7 + +export default function UpdatePlannedHomePositionModal() { + const dispatch = useDispatch() + + const plannedHomePosition = useSelector(selectPlannedHomePosition) + const updatePlannedHomePositionFromLoadModalOpened = useSelector( + selectUpdatePlannedHomePositionFromLoadModal, + ) + const updatePlannedHomePositionFromLoadModalData = useSelector( + selectUpdatePlannedHomePositionFromLoadData, + ) + + const currentLat = intToCoord(plannedHomePosition?.lat).toFixed( + coordsFractionDigits, + ) + const currentLon = intToCoord(plannedHomePosition?.lon).toFixed( + coordsFractionDigits, + ) + const currentAlt = plannedHomePosition?.alt + const newLat = intToCoord( + updatePlannedHomePositionFromLoadModalData?.lat, + ).toFixed(coordsFractionDigits) + const newLon = intToCoord( + updatePlannedHomePositionFromLoadModalData?.lon, + ).toFixed(coordsFractionDigits) + const newAlt = updatePlannedHomePositionFromLoadModalData?.alt + + function differenceBetweenCoordsStyling(coord, compare) { + if (!coord) return - + if (coord === compare) return {coord} + + // Loop through each digit and highlight it and the rest of the string red + let differentIndex = 0 + for (let i = 0; i < coord.length; i++) { + differentIndex = i + if (coord[i] !== compare[i]) break + } + coord = coord.toString() + return ( + <> + {coord.slice(0, differentIndex)} + + {coord.slice(differentIndex)} + + + ) + } + + return ( + dispatch(setUpdatePlannedHomePositionFromLoadModal(false))} + closeOnClickOutside={false} + closeOnEscape={false} + withCloseButton={false} + centered + overlayProps={{ + backgroundOpacity: 0.55, + blur: 3, + }} + > +
+

+ Would you like to update the planned home position to the home + position loaded from the{" "} + {updatePlannedHomePositionFromLoadModalData?.from || "source"}? +

+ +
+
+
+ Current + Lat: {currentLat ?? "-"} + Lon: {currentLon ?? "-"} + Alt: {currentAlt ?? "-"} +
+
+ New + + Lat: {differenceBetweenCoordsStyling(newLat, currentLat)} + + + Lon: {differenceBetweenCoordsStyling(newLon, currentLon)} + + + Alt: {differenceBetweenCoordsStyling(newAlt, currentAlt)} + +
+
+
+ +
+ + +
+
+
+ ) +} diff --git a/gcs/src/components/navbar.jsx b/gcs/src/components/navbar.jsx index 8314fc65d..8e188323b 100644 --- a/gcs/src/components/navbar.jsx +++ b/gcs/src/components/navbar.jsx @@ -7,7 +7,6 @@ */ // Base imports -import { useEffect, useState } from "react" import { Link } from "react-router-dom" // Third party imports @@ -17,17 +16,14 @@ import { Group, LoadingOverlay, Modal, + Progress, SegmentedControl, Select, Tabs, TextInput, Tooltip, } from "@mantine/core" -import { - useDisclosure, - useLocalStorage, - useSessionStorage, -} from "@mantine/hooks" +import { useSessionStorage } from "@mantine/hooks" import { IconInfoCircle, IconRefresh } from "@tabler/icons-react" // Local imports @@ -35,215 +31,123 @@ import { AddCommand } from "./spotlight/commandHandler.js" // Helper imports import { IconAlertTriangle } from "@tabler/icons-react" -import { showErrorNotification } from "../helpers/notification.js" -import { socket } from "../helpers/socket" + +// Redux +import { useDispatch, useSelector } from "react-redux" +import { + ConnectionType, + emitConnectToDrone, + emitDisconnectFromDrone, + emitGetComPorts, + selectBaudrate, + selectComPorts, + selectConnectedToDrone, + selectConnecting, + selectConnectionModal, + selectConnectionStatus, + selectConnectionType, + selectCurrentPage, + selectFetchingComPorts, + selectIp, + selectNetworkType, + selectPort, + selectSelectedComPorts, + selectWireless, + setBaudrate, + setConnecting, + setConnectionModal, + setConnectionType, + setIp, + setNetworkType, + setPort, + setSelectedComPorts, + setWireless, +} from "../redux/slices/droneConnectionSlice.js" +import { selectIsConnectedToSocket } from "../redux/slices/socketSlice.js" // Styling imports +import { useEffect } from "react" import { twMerge } from "tailwind-merge" import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../../tailwind.config.js" +import { showErrorNotification } from "../helpers/notification.js" const tailwindColors = resolveConfig(tailwindConfig).theme.colors -export default function Navbar({ currentPage }) { - // Panel is open/closed - const [opened, { open, close }] = useDisclosure(false) +export default function Navbar() { + // Redux + const dispatch = useDispatch() + const openedModal = useSelector(selectConnectionModal) + + const connecting = useSelector(selectConnecting) + const connectedToDrone = useSelector(selectConnectedToDrone) + const connectedToSocket = useSelector(selectIsConnectedToSocket) + + const comPorts = useSelector(selectComPorts) + const selectedComPort = useSelector(selectSelectedComPorts) + const fetchingComPorts = useSelector(selectFetchingComPorts) + const wireless = useSelector(selectWireless) + const selectedBaudRate = useSelector(selectBaudrate) + const connectionType = useSelector(selectConnectionType) + const networkType = useSelector(selectNetworkType) + const ip = useSelector(selectIp) + const port = useSelector(selectPort) + const droneConnectionStatus = useSelector(selectConnectionStatus) + // Panel is open/closed const [outOfDate] = useSessionStorage({ key: "outOfDate" }) - - // Connection to drone - const [connecting, setConnecting] = useState(false) - const [connected, setConnected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: false, - }) - const [wireless, setWireless] = useLocalStorage({ - key: "wirelessConnection", - defaultValue: true, - }) - const [connectedToSocket, setConnectedToSocket] = useSessionStorage({ - key: "socketConnection", - defaultValue: false, - }) - const [selectedBaudRate, setSelectedBaudRate] = useLocalStorage({ - key: "baudrate", - defaultValue: "9600", - }) - - // eslint-disable-next-line no-unused-vars - const [aircraftType, setAircraftType] = useLocalStorage({ - key: "aircraftType", - defaultValue: 0, - }) - - const ConnectionType = { - Serial: "serial", - Network: "network", - } - - const [connectionType, setConnectionType] = useLocalStorage({ - key: "connectionType", - defaultValue: ConnectionType.Serial, - }) - - // Com Ports - const [comPorts, setComPorts] = useState([]) - const [selectedComPort, setSelectedComPort] = useSessionStorage({ - key: "selectedComPort", - defaultValue: null, - }) - const [fetchingComPorts, setFetchingComPorts] = useState(false) - - // Network Connection - const [networkType, setNetworkType] = useLocalStorage({ - key: "networkType", - defaultValue: "tcp", - }) - const [ip, setIp] = useLocalStorage({ - key: "ip", - defaultValue: "127.0.0.1", - }) - const [port, setPort] = useLocalStorage({ - key: "port", - defaultValue: "5760", - }) - - const [droneConnectionStatusMessage, setDroneConnectionStatusMessage] = - useState(null) - - function getComPorts() { - if (!connectedToSocket) return - socket.emit("get_com_ports") - setFetchingComPorts(true) - } - - // Check if connected to drone - useEffect(() => { - if (selectedComPort === null) { - socket.emit("is_connected_to_drone") - } - - socket.on("connect", () => { - setConnectedToSocket(true) - }) - - socket.on("disconnect", () => { - setConnectedToSocket(false) - }) - - // Flag connected/not connected, if not fetch ports - socket.on("is_connected_to_drone", (msg) => { - if (msg) { - setConnected(true) - } else { - setConnected(false) - setConnecting(false) - getComPorts() - } - }) - - // Fetch com ports and list them - socket.on("list_com_ports", (msg) => { - setFetchingComPorts(false) - setComPorts(msg) - if (selectedComPort === null || !msg.includes(selectedComPort)) { - const possibleComPort = msg.find( - (port) => - port.toLowerCase().includes("mavlink") || - port.toLowerCase().includes("ardupilot"), - ) - if (possibleComPort !== undefined) { - setSelectedComPort(possibleComPort) - } else if (msg.length > 0) { - setSelectedComPort(msg[0]) - } - } - }) - - // Flags that the drone is connected - socket.on("connected_to_drone", (data) => { - setAircraftType(data.aircraft_type) - if (data.aircraft_type != 1 && data.aircraft_type != 2) { - showErrorNotification("Aircraft not of type quadcopter or plane") - } - setConnected(true) - setConnecting(false) - close() - }) - - // Flags that the drone is disconnected - socket.on("disconnected_from_drone", () => { - console.log("disconnected_from_drone") - setConnected(false) - }) - - // Handles disconnect trigger - socket.on("disconnect", () => { - setConnected(false) - setConnecting(false) - }) - - // Flags an error with the com port - socket.on("connection_error", (msg) => { - console.log(msg.message) - showErrorNotification(msg.message) - setConnecting(false) - setConnected(false) - }) - - socket.on("drone_connect_status", (msg) => { - setDroneConnectionStatusMessage(msg.message) - }) - - return () => { - socket.off("connect") - socket.off("disconnect") - socket.off("is_connected_to_drone") - socket.off("list_com_ports") - socket.off("connected_to_drone") - socket.off("disconnected_from_drone") - socket.off("disconnect") - socket.off("connection_error") - socket.off("drone_connect_status") - setConnected(false) - } - }, []) + const currentPage = useSelector(selectCurrentPage) function connectToDrone(type) { if (type === ConnectionType.Serial) { - socket.emit("connect_to_drone", { - port: selectedComPort, - baud: parseInt(selectedBaudRate), - wireless: wireless, - connectionType: type, - }) + dispatch( + emitConnectToDrone({ + port: selectedComPort, + baud: parseInt(selectedBaudRate), + wireless: wireless, + connectionType: type, + }), + ) } else if (type === ConnectionType.Network) { if (ip === "" || port === "") { showErrorNotification("IP Address and Port cannot be empty") return } const networkString = `${networkType}:${ip}:${port}` - socket.emit("connect_to_drone", { - port: networkString, - baud: 115200, - wireless: true, - connectionType: type, - }) + dispatch( + emitConnectToDrone({ + port: networkString, + baud: 115200, + wireless: true, + connectionType: type, + }), + ) } else { return } - setConnecting(true) + + dispatch(setConnecting(true)) } + // All seems to be broken, made a ticket for joe to look into: https://github.com/orgs/Avis-Drone-Labs/projects/10/views/1?pane=issue&itemId=124913361 function disconnect() { - socket.emit("disconnect_from_drone") + dispatch(emitDisconnectFromDrone()) } function connectToDroneFromButton() { - getComPorts() - open() + dispatch(emitGetComPorts()) + dispatch(setConnectionModal(true)) } - AddCommand("connect_to_drone", connectToDroneFromButton) - AddCommand("disconnect_from_drone", disconnect) + + useEffect(() => { + AddCommand("connect_to_drone", connectToDroneFromButton) + AddCommand("disconnect_from_drone", disconnect) + }, []) + + useEffect(() => { + if (!comPorts.includes(selectedComPort)) { + dispatch(setSelectedComPorts(null)) + } + }, [comPorts, selectedComPort]) const linkClassName = "text-md px-2 rounded-sm outline-none focus:text-falconred-400 hover:text-falconred-400 transition-colors delay-50" @@ -252,10 +156,10 @@ export default function Navbar({ currentPage }) {
{/* Connect to drone modal - should probably be moved into its own component? */} { - close() - setConnecting(false) + dispatch(setConnectionModal(false)) + dispatch(setConnecting(false)) }} title="Connect to aircraft" centered @@ -269,6 +173,8 @@ export default function Navbar({ currentPage }) { }, }} withCloseButton={false} + closeOnClickOutside={!connecting} + closeOnEscape={!connecting} >
{ @@ -276,7 +182,10 @@ export default function Navbar({ currentPage }) { connectToDrone(connectionType) }} > - + dispatch(setConnectionType(value))} + > Serial Connection @@ -296,11 +205,11 @@ export default function Navbar({ currentPage }) { } data={comPorts} value={selectedComPort} - onChange={setSelectedComPort} + onChange={(value) => dispatch(setSelectedComPorts(value))} rightSectionPointerEvents="all" rightSection={} rightSectionProps={{ - onClick: getComPorts, + onClick: () => dispatch(emitGetComPorts()), className: "hover:cursor-pointer hover:bg-transparent/50", }} /> @@ -322,14 +231,14 @@ export default function Navbar({ currentPage }) { "250000", ]} value={selectedBaudRate} - onChange={setSelectedBaudRate} + onChange={(value) => dispatch(setBaudrate(value))} />
- setWireless(event.currentTarget.checked) + dispatch(setWireless(event.currentTarget.checked)) } /> @@ -344,7 +253,7 @@ export default function Navbar({ currentPage }) { label="Network Connection type" description="Select a network connection type" value={networkType} - onChange={setNetworkType} + onChange={(value) => dispatch(setNetworkType(value))} data={[ { value: "tcp", label: "TCP" }, { value: "udp", label: "UDP" }, @@ -355,7 +264,9 @@ export default function Navbar({ currentPage }) { description="Enter the IP Address" placeholder="127.0.0.1" value={ip} - onChange={(event) => setIp(event.currentTarget.value)} + onChange={(event) => + dispatch(setIp(event.currentTarget.value)) + } data-autofocus /> setPort(event.currentTarget.value)} + onChange={(event) => + dispatch(setPort(event.currentTarget.value)) + } />
@@ -374,9 +287,10 @@ export default function Navbar({ currentPage }) { variant="filled" color={tailwindColors.red[600]} onClick={() => { - close() - setConnecting(false) + dispatch(setConnectionModal(false)) + dispatch(setConnecting(false)) }} + disabled={connecting} > Close @@ -396,9 +310,22 @@ export default function Navbar({ currentPage }) { - {connecting && droneConnectionStatusMessage !== null && ( -

{droneConnectionStatusMessage}

- )} + {connecting && + droneConnectionStatus.message !== null && + typeof droneConnectionStatus.progress === "number" && ( + <> +

+ {droneConnectionStatus.message} +

+ + + )}
@@ -475,7 +402,7 @@ export default function Navbar({ currentPage }) { {/* Connected to message */}

- {connected && ( + {connectedToDrone && ( <> Connected to @@ -493,15 +420,15 @@ export default function Navbar({ currentPage }) { {/* Button to connect to drone */} {connectedToSocket ? ( ) : ( diff --git a/gcs/src/components/params/autopilotRebootModal.jsx b/gcs/src/components/params/autopilotRebootModal.jsx index eb3ab4d77..4b3c075a2 100644 --- a/gcs/src/components/params/autopilotRebootModal.jsx +++ b/gcs/src/components/params/autopilotRebootModal.jsx @@ -6,15 +6,27 @@ import { Button, Loader, Modal } from "@mantine/core" // Styling imports -import tailwindConfig from "../../../tailwind.config.js" import resolveConfig from "tailwindcss/resolveConfig" +import tailwindConfig from "../../../tailwind.config.js" const tailwindColors = resolveConfig(tailwindConfig).theme.colors -export default function AutopilotRebootModal({ rebootData, opened, onClose }) { +// Redux +import { useDispatch, useSelector } from "react-redux" +import { + selectAutoPilotRebootModalOpen, + selectRebootData, + setAutoPilotRebootModalOpen, +} from "../../redux/slices/paramsSlice.js" + +export default function AutopilotRebootModal() { + const dispatch = useDispatch() + const rebootData = useSelector(selectRebootData) + const opened = useSelector(selectAutoPilotRebootModalOpen) + return ( dispatch(setAutoPilotRebootModalOpen(false))} title="Rebooting autopilot" closeOnClickOutside={false} closeOnEscape={false} @@ -36,7 +48,7 @@ export default function AutopilotRebootModal({ rebootData, opened, onClose }) { {rebootData.message} You will need to reconnect.

+ { + if (!isValidNumber(num, range)) return + updateValue(id, parseInt(num)) + }} + suffix={suffix} + /> +
+ ))} +
+ +
+
+ ) +} + function Setting({ settingName, df }) { return ( -
-
{df.display}:
- {df.type == "number" ? ( +
+
+
{df.display}:
+

{df.description}

+
+ {df.type == "extendableNumber" ? ( + + ) : df.type == "number" ? ( ) : df.type == "boolean" ? ( - + ) : df.type == "option" ? ( ) : ( @@ -111,7 +192,7 @@ function SettingsModal() { {settingTabs.map((t) => { return ( - + {Object.keys(DefaultSettings[t]).map((s) => { return ( { open() }) - AddCommand("connect_to_drone", () => { - /* connect */ - }) - AddCommand("disconnect_from_drone", () => { - /* disconnect */ - }) // Register hotkeys useHotkeys([ @@ -78,14 +72,18 @@ export function AddCommand(id, command, shortcut = null, macShortcut = null) { shortcut: shortcut, macShortcut: macShortcut, }) + } else { + console.error(`Attempting to add command that already exists: ${id}`) } } export function RunCommand(id) { // Search for a command by id - try { - commands.find((entry) => entry.id == id).command() - } catch { - console.log(`Couldn't find command, ${id}, to run`) + + var cmd = commands.find((entry) => entry.id == id) + if (cmd !== undefined) { + cmd.command() + } else { + console.error(`Couldn't find command ${id} to run`) } } diff --git a/gcs/src/components/toolbar/menus/file.jsx b/gcs/src/components/toolbar/menus/file.jsx index 01e6b8b1b..a3b5e93ed 100644 --- a/gcs/src/components/toolbar/menus/file.jsx +++ b/gcs/src/components/toolbar/menus/file.jsx @@ -3,11 +3,11 @@ */ // Local Imports +import packageJson from "../../../../package.json" +import { useSettings } from "../../../helpers/settings" import Divider from "./divider" import MenuItem from "./menuItem" import MenuTemplate from "./menuTemplate" -import packageJson from "../../../../package.json" -import { useSettings } from "../../../helpers/settings" export default function FileMenu(props) { const { open } = useSettings() @@ -20,8 +20,9 @@ export default function FileMenu(props) { > { + window.ipcRenderer.openAboutWindow() + }} /> diff --git a/gcs/src/components/toolbar/menus/menuItem.jsx b/gcs/src/components/toolbar/menus/menuItem.jsx index 64f4d3f97..45afad9d7 100644 --- a/gcs/src/components/toolbar/menus/menuItem.jsx +++ b/gcs/src/components/toolbar/menus/menuItem.jsx @@ -13,7 +13,7 @@ export default function MenuItem(props) { {props.name} ) : ( -
{props.name}
+
{props.name}
)}
{props.shortcut}
diff --git a/gcs/src/components/toolbar/menus/view.jsx b/gcs/src/components/toolbar/menus/view.jsx index 43349d5c6..51f4f9be5 100644 --- a/gcs/src/components/toolbar/menus/view.jsx +++ b/gcs/src/components/toolbar/menus/view.jsx @@ -14,6 +14,15 @@ export default function ViewMenu(props) { areMenusActive={props.areMenusActive} setMenusActive={props.setMenusActive} > + { + window.ipcRenderer.openLinkStatsWindow() + }} + /> + + + + + { if (!connected) { setActiveTab(null) - return } else { - socket.emit("set_state", { state: "config" }) - socket.emit("gripper_enabled") - } - - socket.on("gripper_enabled", setGripperEnabled) - - socket.on("set_gripper_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - }) - - socket.on("motor_test_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - }) - - socket.on("param_set_success", (data) => { - showSuccessNotification(data.message) - }) - - socket.on("params_error", (data) => { - showErrorNotification(data.message) - }) - - return () => { - socket.off("gripper_enabled") - socket.off("set_gripper_result") - socket.off("motor_test_result") - socket.off("param_set_success") - socket.off("params_error") + dispatch(emitGetGripperEnabled()) } }, [connected]) @@ -99,7 +63,7 @@ export default function Config() { onChange={setActiveTab} > - + Gripper Motor Test diff --git a/gcs/src/css/Inter-Italic.ttf b/gcs/src/css/Inter-Italic.ttf new file mode 100644 index 000000000..43ed4f5ee Binary files /dev/null and b/gcs/src/css/Inter-Italic.ttf differ diff --git a/gcs/src/css/Inter.ttf b/gcs/src/css/Inter.ttf new file mode 100644 index 000000000..e31b51e3e Binary files /dev/null and b/gcs/src/css/Inter.ttf differ diff --git a/gcs/src/css/index.css b/gcs/src/css/index.css index 1e82cb715..61afd32d0 100644 --- a/gcs/src/css/index.css +++ b/gcs/src/css/index.css @@ -2,9 +2,21 @@ @tailwind components; @tailwind utilities; +@font-face { + font-family: "Inter"; + font-display: swap; + src: url("Inter.ttf"); +} + +@font-face { + font-family: "Inter"; + font-style: italic; + font-display: swap; + src: url("Inter-Italic.ttf"); +} + :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - /* line-height: 1.5; */ font-weight: 400; font-synthesis: none; diff --git a/gcs/src/dashboard.jsx b/gcs/src/dashboard.jsx index c5bdede23..266cc8168 100644 --- a/gcs/src/dashboard.jsx +++ b/gcs/src/dashboard.jsx @@ -7,14 +7,12 @@ */ // Base imports -import { useCallback, useEffect, useRef, useState } from "react" +import { useEffect, useRef, useState } from "react" // 3rd Party Imports import { Divider } from "@mantine/core" import { - useListState, useLocalStorage, - usePrevious, useSessionStorage, useViewportSize, } from "@mantine/hooks" @@ -27,20 +25,23 @@ import { } from "@tabler/icons-react" import { ResizableBox } from "react-resizable" -// Helper javascript files -import { defaultDataMessages } from "./helpers/dashboardDefaultDataMessages" -import { - COPTER_MODES_FLIGHT_MODE_MAP, - GPS_FIX_TYPES, - MAV_AUTOPILOT_INVALID, - MAV_STATE, - PLANE_MODES_FLIGHT_MODE_MAP, -} from "./helpers/mavlinkConstants" +// Redux +import { useDispatch, useSelector } from "react-redux" +import { selectConnectedToDrone } from "./redux/slices/droneConnectionSlice" import { - showErrorNotification, - showSuccessNotification, -} from "./helpers/notification" -import { socket } from "./helpers/socket" + selectAircraftTypeString, + selectBatteryData, + selectDroneCoords, + selectFlightMode, + selectGPSRawInt, + selectNotificationSound, + selectRSSI, + soundPlayed, +} from "./redux/slices/droneInfoSlice" +import { selectMessages } from "./redux/slices/statusTextSlice" + +// Helper javascript files +import { GPS_FIX_TYPES } from "./helpers/mavlinkConstants" // Custom component import useSound from "use-sound" @@ -63,14 +64,18 @@ import armSound from "./assets/sounds/armed.mp3" import disarmSound from "./assets/sounds/disarmed.mp3" export default function Dashboard() { - // Local Storage - const [connected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: false, - }) - const [aircraftType] = useLocalStorage({ - key: "aircraftType", - }) + const dispatch = useDispatch() + const rssi = useSelector(selectRSSI) + + const currentFlightModeNumber = useSelector(selectFlightMode) + const aircraftTypeString = useSelector(selectAircraftTypeString) + + const { lat, lon } = useSelector(selectDroneCoords) + const batteryData = useSelector(selectBatteryData) + const statustextMessages = useSelector(selectMessages) + const armedNotification = useSelector(selectNotificationSound) + const { fixType, satellitesVisible } = useSelector(selectGPSRawInt) + const connectedToDrone = useSelector(selectConnectedToDrone) // Telemetry panel sizing const [telemetryPanelSize, setTelemetryPanelSize] = useLocalStorage({ @@ -94,47 +99,11 @@ export default function Dashboard() { const { height: viewportHeight, width: viewportWidth } = useViewportSize() - // Heartbeat data - const [heartbeatData, setHeartbeatData] = useState({ system_status: 0 }) - const previousHeartbeatData = usePrevious(heartbeatData) - - // System data - const [batteryData, setBatteryData] = useState([]) - const [navControllerOutputData, setNavControllerOutputData] = useState({}) - const [statustextMessages, statustextMessagesHandler] = useListState([]) - const [sysStatusData, setSysStatusData] = useState({ - onboard_control_sensors_enabled: 0, - }) - const [rcChannelsData, setRCChannelsData] = useState({ rssi: 0 }) - - // GPS and Telemetry - const [gpsData, setGpsData] = useState({}) - const [telemetryData, setTelemetryData] = useState({}) - const [attitudeData, setAttitudeData] = useState({ roll: 0, pitch: 0 }) - const [gpsRawIntData, setGpsRawIntData] = useState({ - fix_type: 0, - satellites_visible: 0, - }) - const [currentMissionData, setCurrentMissionData] = useState({ - mission_state: 0, - seq: 0, - total: 0, - }) - - // Mission - const [missionItems, setMissionItems] = useState({ - mission_items: [], - fence_items: [], - rally_items: [], - }) - const [homePosition, setHomePosition] = useState(null) - // Following Drone const [followDrone, setFollowDrone] = useSessionStorage({ key: "followDroneBool", defaultValue: false, }) - const [currentFlightModeNumber, setCurrentFlightModeNumber] = useState(null) // Map and messages const mapRef = useRef() @@ -143,203 +112,22 @@ export default function Dashboard() { const [playArmed] = useSound(armSound, { volume: 0.1 }) const [playDisarmed] = useSound(disarmSound, { volume: 0.1 }) - const [displayedData, setDisplayedData] = useLocalStorage({ - key: "dashboardDataMessages", - defaultValue: defaultDataMessages, - }) - - const incomingMessageHandler = useCallback( - () => ({ - VFR_HUD: (msg) => setTelemetryData(msg), - BATTERY_STATUS: (msg) => { - const battery = localBatteryData.filter( - (battery) => battery.id == msg.id, - )[0] - if (battery) { - Object.assign(battery, msg) - } else { - localBatteryData.push(msg) - } - localBatteryData.sort((b1, b2) => b1.id - b2.id) - setBatteryData(localBatteryData) - }, - ATTITUDE: (msg) => setAttitudeData(msg), - GLOBAL_POSITION_INT: (msg) => setGpsData(msg), - NAV_CONTROLLER_OUTPUT: (msg) => setNavControllerOutputData(msg), - HEARTBEAT: (msg) => { - if (msg.autopilot !== MAV_AUTOPILOT_INVALID) { - setHeartbeatData(msg) - } - }, - STATUSTEXT: (msg) => statustextMessagesHandler.prepend(msg), - SYS_STATUS: (msg) => setSysStatusData(msg), - GPS_RAW_INT: (msg) => setGpsRawIntData(msg), - RC_CHANNELS: (msg) => setRCChannelsData(msg), - MISSION_CURRENT: (msg) => setCurrentMissionData(msg), - }), - [], - ) - + // Play queued arming sounds useEffect(() => { - // Use localStorage.getItem as useLocalStorage hook updates slower - const oldDisplayedData = localStorage.getItem("dashboardDataMessages") - - if (oldDisplayedData) { - const resetDisplayedDataValues = Object.keys( - JSON.parse(oldDisplayedData), - ).map((key) => { - return { ...JSON.parse(oldDisplayedData)[key], value: 0 } - }) - setDisplayedData(resetDisplayedDataValues) + if (armedNotification !== "") { + armedNotification === "armed" ? playArmed() : playDisarmed() + dispatch(soundPlayed()) } - }, []) - - useEffect(() => { - if (!connected) { - return - } else { - socket.emit("set_state", { state: "dashboard" }) - socket.emit("get_home_position") - } - - socket.on("incoming_msg", (msg) => { - if (incomingMessageHandler()[msg.mavpackettype] !== undefined) { - incomingMessageHandler()[msg.mavpackettype](msg) - // Store packetType that has arrived - const packetType = msg.mavpackettype - - // Use functional form of setState to ensure the latest state is used - setDisplayedData((prevDisplayedData) => { - // Create a copy of displayedData to modify - let updatedDisplayedData = [...prevDisplayedData] - - // Iterate over displayedData to find and update the matching item - updatedDisplayedData = updatedDisplayedData.map((dataItem) => { - if (dataItem.currently_selected.startsWith(packetType)) { - const specificData = dataItem.currently_selected.split(".")[1] - if (Object.prototype.hasOwnProperty.call(msg, specificData)) { - return { ...dataItem, value: msg[specificData] } - } - } - return dataItem - }) - - return updatedDisplayedData - }) - } - }) - - socket.on("arm_disarm", (msg) => { - if (!msg.success) { - showErrorNotification(msg.message) - } - }) - - socket.on("current_mission_all", (msg) => { - setMissionItems(msg) - }) - - socket.on("set_current_flight_mode_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - }) - - socket.on("nav_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - }) - - socket.on("mission_control_result", (data) => { - if (data.success) { - showSuccessNotification(data.message) - } else { - showErrorNotification(data.message) - } - }) - - socket.on("home_position_result", (data) => { - if (data.success) { - setHomePosition(data.data) - } else { - showErrorNotification(data.message) - } - socket.emit("get_current_mission_all") - }) - - return () => { - socket.off("incoming_msg") - socket.off("arm_disarm") - socket.off("current_mission_all") - socket.off("set_current_flight_mode_result") - socket.off("nav_result") - socket.off("mission_control_result") - socket.off("home_position_result") - } - }, [connected]) + }, [armedNotification, playArmed, playDisarmed, dispatch]) // Following drone logic useEffect(() => { - if ( - mapRef.current && - gpsData?.lon !== 0 && - gpsData?.lat !== 0 && - followDrone - ) { - let lat = parseFloat(gpsData.lat * 1e-7) - let lon = parseFloat(gpsData.lon * 1e-7) + if (mapRef.current && followDrone && lon !== 0 && lat !== 0) { mapRef.current.setCenter({ lng: lon, lat: lat }) } - }, [gpsData]) - - useEffect(() => { - if (!previousHeartbeatData?.base_mode || !heartbeatData?.base_mode) return - - if ( - heartbeatData.base_mode & 128 && - !(previousHeartbeatData.base_mode & 128) - ) { - playArmed() - } else if ( - !(heartbeatData.base_mode & 128) && - previousHeartbeatData.base_mode & 128 - ) { - playDisarmed() - } - - if (currentFlightModeNumber !== heartbeatData.custom_mode) { - setCurrentFlightModeNumber(heartbeatData.custom_mode) - } - }, [heartbeatData]) - - function getFlightMode() { - if (aircraftType === 1) { - return PLANE_MODES_FLIGHT_MODE_MAP[heartbeatData.custom_mode] - } else if (aircraftType === 2) { - return COPTER_MODES_FLIGHT_MODE_MAP[heartbeatData.custom_mode] - } - - return "UNKNOWN" - } - - function getIsArmed() { - return heartbeatData.base_mode & 128 - } - - function prearmEnabled() { - // Checks if prearm check is enabled, if yes then not armable - // TOOD: test if this returns true if all checks pass - return Boolean(sysStatusData.onboard_control_sensors_enabled & 268435456) - } + }, [followDrone, lon, lat]) function centerMapOnDrone() { - let lat = parseFloat(gpsData.lat * 1e-7) - let lon = parseFloat(gpsData.lon * 1e-7) mapRef.current.getMap().flyTo({ center: [lon, lat], }) @@ -364,23 +152,15 @@ export default function Dashboard() { return (190 - Math.max(calcIndicatorSize(), sideBarHeight)) / 2 } - let localBatteryData = [] - return (
{ setFollowDrone(false) }} - getFlightMode={getFlightMode} mapId="dashboard" />
@@ -394,58 +174,40 @@ export default function Dashboard() { > {/* Telemetry Information */} {/* Actions */} - + {/* Status Bar */} } - value={GPS_FIX_TYPES[gpsRawIntData.fix_type]} + value={GPS_FIX_TYPES[fixType]} tooltip="GPS fix type" /> } - value={`(${gpsData.lat !== undefined ? (gpsData.lat * 1e-7).toFixed(6) : 0}, ${ - gpsData.lon !== undefined ? (gpsData.lon * 1e-7).toFixed(6) : 0 + value={`(${lat !== undefined ? lat.toFixed(7) : 0}, ${ + lon !== undefined ? lon.toFixed(7) : 0 })`} tooltip="GPS (lat, lon)" /> } - value={gpsRawIntData.satellites_visible} + value={satellitesVisible} tooltip="Satellites visible" /> } - value={rcChannelsData.rssi} + value={rssi} tooltip="RC RSSI" /> - {statustextMessages.length !== 0 && ( + {connectedToDrone && (
( + handle={(_, ref) => ( )} handleSize={[32, 32]} @@ -485,10 +245,26 @@ export default function Dashboard() { setMessagesPanelSize({ width: size.width, height: size.height }) }} > - + <> + {/* Show a "Waiting for message area" */} + {statustextMessages.length == 0 && ( + + )} + {/* Show real messages */} + +
)} diff --git a/gcs/src/fla.jsx b/gcs/src/fla.jsx index abd114169..446a2e69a 100644 --- a/gcs/src/fla.jsx +++ b/gcs/src/fla.jsx @@ -5,743 +5,298 @@ */ // Base imports -import { Fragment, useEffect, useState } from "react" +import { useEffect, useMemo, useState } from "react" // 3rd Party Imports -import { - Accordion, - Button, - Divider, - FileButton, - LoadingOverlay, - Progress, - ScrollArea, - Tooltip, -} from "@mantine/core" -import { useDisclosure } from "@mantine/hooks" -import { useSelector, useDispatch } from "react-redux" -import _ from "lodash" +import { useDispatch, useSelector } from "react-redux" // Styling imports -import resolveConfig from "tailwindcss/resolveConfig" -import tailwindConfig from "../tailwind.config.js" +import { + buildDefaultMessageFilters, + calcGPSOffset, + calculateMeanValues, + clearUnitCache, + convertTimeUStoUTC, + getUnit, + hexToRgba, + processFlightModes, + sortObjectByKeys, +} from "./components/fla/utils" // Custom components and helpers -import moment from "moment" -import ChartDataCard from "./components/fla/chartDataCard.jsx" -import Graph from "./components/fla/graph" -import { dataflashOptions, fgcsOptions } from "./components/fla/graphConfigs.js" import { logEventIds } from "./components/fla/logEventIds.js" -import MessageAccordionItem from "./components/fla/messageAccordionItem.jsx" -import PresetAccordionItem from "./components/fla/presetAccordionItem.jsx" -import { usePresetCategories } from "./components/fla/presetCategories.js" + +import SelectFlightLog from "./components/fla/SelectFlightLog.jsx" +import MainDisplay from "./components/fla/mainDisplay.jsx" import Layout from "./components/layout.jsx" +import { showErrorNotification } from "./helpers/notification.js" import { - showErrorNotification, - showSuccessNotification, -} from "./helpers/notification.js" -import { + selectCustomColors, + selectFormatMessages, + selectLogMessages, + selectMessageFilters, + // Selectors + selectUnits, + setAircraftType, + setCanSavePreset, + setColorIndex, + setCustomColors, setFile, - setUnits, + setFlightModeMessages, setFormatMessages, - setLogMessages, setLogEvents, - setFlightModeMessages, + setLogMessages, setLogType, - setUtcAvailable, setMessageFilters, setMessageMeans, - setChartData, - setCustomColors, - setColorIndex, - setAircraftType, - setCanSavePreset, -} from "./redux/logAnalyserSlice.js" -import SavePresetModal from "./components/fla/savePresetModal.jsx" - -const tailwindColors = resolveConfig(tailwindConfig).theme.colors - -// Helper function to convert hex color to rgba -function hexToRgba(hex, alpha) { - const [r, g, b] = hex.match(/\w\w/g).map((x) => parseInt(x, 16)) - return `rgba(${r},${g},${b},${alpha})` -} - -const ignoredMessages = [ - "ERR", - "EV", - "MSG", - "VER", - "TIMESYNC", - "PARAM_VALUE", - "units", - "format", - "aircraftType", -] -const ignoredKeys = ["TimeUS", "function", "source", "result", "time_boot_ms"] -const colorPalette = [ - "#36a2eb", - "#ff6383", - "#fe9e40", - "#4ade80", - "#ffcd57", - "#4cbfc0", - "#9966ff", - "#c8cbce", -] -const colorInputSwatch = [ - "#f5f5f5", - "#868e96", - "#fa5252", - "#e64980", - "#be4bdb", - "#7950f2", - "#4c6ef5", - "#228be6", - "#15aabf", - "#12b886", - "#40c057", - "#82c91e", - "#fab005", - "#fd7e14", -] + setUnits, + setUtcAvailable, +} from "./redux/slices/logAnalyserSlice.js" export default function FLA() { - // ==================================================== - // 1. Custom Hooks and State Management - // ==================================================== - - const { - presetCategories, - saveCustomPreset, - deleteCustomPreset, - findExistingPreset, - } = usePresetCategories() - - // Redux state + // Redux const dispatch = useDispatch() - const { - file, - units, - formatMessages, - logMessages, - logEvents, - flightModeMessages, - logType, - utcAvailable, - messageFilters, - messageMeans, - chartData, - customColors, - colorIndex, - aircraftType, - canSavePreset, - } = useSelector((state) => state.logAnalyser) + const units = useSelector(selectUnits) + const formatMessages = useSelector(selectFormatMessages) + const logMessages = useSelector(selectLogMessages) + const messageFilters = useSelector(selectMessageFilters) + const customColors = useSelector(selectCustomColors) // Local states - const [recentFgcsLogs, setRecentFgcsLogs] = useState(null) - const [loadingFile, setLoadingFile] = useState(false) - const [loadingFileProgress, setLoadingFileProgress] = useState(0) - const [opened, { open, close }] = useDisclosure(false) - - // Redux dispatch functions - const updateFile = (newFile) => dispatch(setFile(newFile)) - const updateUnits = (newUnits) => dispatch(setUnits(newUnits)) - const updateFormatMessages = (newFormatMessages) => - dispatch(setFormatMessages(newFormatMessages)) - const updateLogMessages = (newLogMessages) => - dispatch(setLogMessages(newLogMessages)) - const updateLogEvents = (newLogEvents) => dispatch(setLogEvents(newLogEvents)) - const updateFlightModeMessages = (newFlightModeMessages) => - dispatch(setFlightModeMessages(newFlightModeMessages)) - const updateLogType = (newLogType) => dispatch(setLogType(newLogType)) - const updateUtcAvailable = (newUtcAvailable) => - dispatch(setUtcAvailable(newUtcAvailable)) - const updateMessageFilters = (newMessageFilters) => - dispatch(setMessageFilters(newMessageFilters)) - const updateMessageMeans = (newMessageMeans) => - dispatch(setMessageMeans(newMessageMeans)) - const updateChartData = (newChartData) => dispatch(setChartData(newChartData)) - const updateCustomColors = (newCustomColors) => - dispatch(setCustomColors(newCustomColors)) - const updateColorIndex = (newColorIndex) => - dispatch(setColorIndex(newColorIndex)) - const updateAircraftType = (newAircraftType) => - dispatch(setAircraftType(newAircraftType)) - const updateCanSavePreset = (newCanSavePreset) => - dispatch(setCanSavePreset(newCanSavePreset)) - - // ==================================================== - // 2. File Management Functions - // ==================================================== - - async function loadFile() { - // If log messages have already been set from prev session, don't load again - if (file != null && logMessages === null) { - setLoadingFile(true) - const result = await window.ipcRenderer.loadFile(file.path) - - let gpsOffset = null; // To store the offset between TimeUS and TimeUTC - - if (result.success) { - // Load messages into states - setLoadingFile(false) - const loadedLogMessages = result.messages - - if (loadedLogMessages === null) { - showErrorNotification("Error loading file, no messages found.") - return - } - - updateLogType(result.logType) - - updateAircraftType(loadedLogMessages.aircraftType) - - delete loadedLogMessages.aircraftType // Remove aircraftType so it's not iterated upon later - - updateLogMessages(loadedLogMessages) - - if (result.logType === "dataflash") { - updateFlightModeMessages(loadedLogMessages.MODE) - } else if (result.logType === "fgcs_telemetry") { - updateUtcAvailable(true) - // Get the heartbeat messages only where index is the first or last or the mode changes - const modeMessages = [] - for (let i = 0; i < loadedLogMessages.HEARTBEAT.length; i++) { - const msg = loadedLogMessages.HEARTBEAT[i] - if ( - modeMessages.length === 0 || - i === loadedLogMessages.HEARTBEAT.length - 1 - ) { - modeMessages.push(msg) - } else { - const lastMsg = modeMessages[modeMessages.length - 1] - if (lastMsg.custom_mode !== msg.custom_mode) { - modeMessages.push(msg) - } - } - } - updateFlightModeMessages(modeMessages) - } - - if ("units" in loadedLogMessages) { - updateUnits(loadedLogMessages["units"]) - } - - if ("format" in loadedLogMessages) { - updateFormatMessages(loadedLogMessages["format"]) - } - - // Set the default state to false for all message filters - const logMessageFilterDefaultState = {} - Object.keys(loadedLogMessages["format"]) - .sort() - .forEach((key) => { - if ( - Object.keys(loadedLogMessages).includes(key) && - !ignoredMessages.includes(key) - ) { - const fieldsState = {} - - // Set all field states to false if they're not ignored - loadedLogMessages["format"][key].fields.map((field) => { - if (!ignoredKeys.includes(field)) { - fieldsState[field] = false - } - }) - logMessageFilterDefaultState[key] = fieldsState - } - }) - - if (loadedLogMessages["ESC"]) { - // Load each ESC data into its own array - loadedLogMessages["ESC"].map((escData) => { - const newEscData = { - ...escData, - name: `ESC${escData["Instance"] + 1}`, - } - loadedLogMessages[newEscData.name] = ( - loadedLogMessages[newEscData.name] || [] - ).concat([newEscData]) - // Add filter state for new ESC - if (!logMessageFilterDefaultState[newEscData.name]) - logMessageFilterDefaultState[newEscData.name] = { - ...logMessageFilterDefaultState["ESC"], - } - }) - - // Remove old ESC motor data - delete loadedLogMessages["ESC"] - delete logMessageFilterDefaultState["ESC"] - } - - let tempLoadedLogMessages = { ...loadedLogMessages } - - if ("GPS" in loadedLogMessages && result.logType === "dataflash" && gpsOffset === null) { - const messageObj = tempLoadedLogMessages["GPS"][0] // Get the first GPS message - - // Calculate the offset - if (messageObj.GWk !== undefined && messageObj.GMS !== undefined) { - const utcTime = gpsToUTC(messageObj.GWk, messageObj.GMS); - gpsOffset = utcTime.getTime() - messageObj.TimeUS/1000; - } - - // Loop through all messages and replace TimeUS with UTC - Object.keys(tempLoadedLogMessages).forEach((key) => { - if (key !== "format" && key !== "units") { - tempLoadedLogMessages[key] = tempLoadedLogMessages[key].map((message) => { - return { - ...message, - TimeUS: message.TimeUS/1000 + gpsOffset, // Add the new property - }; - }); - } - }); - updateUtcAvailable(true) - updateFlightModeMessages(tempLoadedLogMessages.MODE) - } - - if (loadedLogMessages["BAT"]) { - let tempMsgFormat = { ...loadedLogMessages["format"] } - - // Load each BATT data into its own array - loadedLogMessages["BAT"].map((battData) => { - // Check for both "Inst" and "Instance" keys - const instanceValue = battData["Instance"] ?? battData["Inst"] - const battName = `BAT${(instanceValue ?? 0) + 1}` - - // Initialize the array if it doesn't exist - if (!tempLoadedLogMessages[battName]) { - tempLoadedLogMessages[battName] = [] - } - - tempLoadedLogMessages[battName].push({ - ...battData, - name: battName, - TimeUS: battData.TimeUS/1000 + gpsOffset - }) - - // Add filter state for new BATT - if (!logMessageFilterDefaultState[battName]) - logMessageFilterDefaultState[battName] = { - ...logMessageFilterDefaultState["BAT"], - } - - // Add format state for new BATT - if (!tempMsgFormat[battName]) - tempMsgFormat[battName] = { - ...tempMsgFormat["BAT"], - name: battName, - } - - tempLoadedLogMessages["format"] = tempMsgFormat - }) - - // Remove old BATT motor data - delete tempLoadedLogMessages["BAT"] - delete tempLoadedLogMessages["format"]["BAT"] - delete logMessageFilterDefaultState["BAT"] - updateLogMessages(tempLoadedLogMessages) - updateFormatMessages(tempLoadedLogMessages["format"]) - } + const [chartData, setLocalChartData] = useState({ datasets: [] }) + + /** + * Process the entire log file + */ + async function processLoadedFile(result) { + clearUnitCache() // Clear cache when loading new file + const loadedLogMessages = result.messages + + if (!loadedLogMessages) { + showErrorNotification("Error loading file, no messages found.") + return + } - // Sort new filters - const sortedLogMessageFilterState = Object.keys( - logMessageFilterDefaultState, + // 1. Update log and aircraft type + dispatch(setLogType(result.logType)) + dispatch(setAircraftType(loadedLogMessages.aircraftType)) + delete loadedLogMessages.aircraftType + dispatch(setLogMessages(loadedLogMessages)) + + // 2. Update format and units + if ("units" in loadedLogMessages) + dispatch(setUnits(loadedLogMessages["units"])) + if ("format" in loadedLogMessages) + dispatch(setFormatMessages(loadedLogMessages["format"])) + + // 3. Process flight modes and set UTC availability + const flightModeMessages = processFlightModes(result, loadedLogMessages) + dispatch(setFlightModeMessages(flightModeMessages)) + if (result.logType === "fgcs_telemetry") dispatch(setUtcAvailable(true)) + + // 4. Build default message filters. Hover over function name for details. + let logMessageFilterDefaultState = + buildDefaultMessageFilters(loadedLogMessages) + + // 5. Expand ESC into separate array based on instance + const { updatedMessages: messagesWithESC, updatedFilters: filtersWithESC } = + expandESCMessages(loadedLogMessages, logMessageFilterDefaultState) + + // 6. Convert TimeUS to TimeUTC if GPS data is available (for dataflash logs) + let tempLoadedLogMessages = { ...messagesWithESC } + let gpsOffset = null + if (messagesWithESC.GPS && result.logType === "dataflash") { + gpsOffset = calcGPSOffset(messagesWithESC) + if (gpsOffset !== null) { + tempLoadedLogMessages = convertTimeUStoUTC( + tempLoadedLogMessages, + gpsOffset, ) - .sort() - .reduce((acc, c) => { - acc[c] = logMessageFilterDefaultState[c] - return acc - }, {}) - - updateMessageFilters(sortedLogMessageFilterState) - calculateMeanValues(loadedLogMessages) - - // Set event logs for the event lines on graph - if ("EV" in loadedLogMessages) { - updateLogEvents( - loadedLogMessages["EV"].map((event) => ({ - time: event.TimeUS, - message: logEventIds[event.Id], - })), - ) - } - - // Close modal and show success message - showSuccessNotification(`${file.name} loaded successfully`) - } else { - showErrorNotification("Error loading file, file not found. Reload.") - setLoadingFile(false) + dispatch(setUtcAvailable(true)) + dispatch(setFlightModeMessages(tempLoadedLogMessages.MODE)) } } - } - - function gpsToUTC(gpsWeek, gms, leapSeconds = 18) { - // GPS epoch starts at 1980-01-06 00:00:00 UTC - const gpsEpoch = new Date(Date.UTC(1980, 0, 6)); - - // Calculate total milliseconds since Unix epoch - const totalMs = - gpsEpoch.getTime() + - gpsWeek * 604_800_000 + // Convert weeks to milliseconds - gms - // Add GPS milliseconds - leapSeconds * 1_000; // Subtract leap seconds - - return new Date(totalMs); - } - // Get a list of the recent FGCS telemetry logs - async function getFgcsLogs() { - setRecentFgcsLogs(await window.ipcRenderer.getRecentLogs()) - } - - // Clear the list of recent FGCS telemetry logs - async function clearFgcsLogs() { - await window.ipcRenderer.clearRecentLogs() - getFgcsLogs() - } - - // Close file - function closeLogFile() { - setLoadingFileProgress(0) - resetState() - getFgcsLogs() - } - - function resetState() { - updateFile(null) - updateLogMessages(null) - updateChartData({ datasets: [] }) - updateMessageFilters(null) - updateCustomColors({}) - updateUtcAvailable(false) - updateColorIndex(0) - updateLogEvents(null) - updateLogType("dataflash") - updateCanSavePreset(false) - } - - // ==================================================== - // 3. Data Processing Functions - // ==================================================== - - function calculateMeanValues(loadedLogMessages) { - // Loop over all fields and precalculate min, max, mean - let rawValues = {} - if (loadedLogMessages !== null) { - // Putting all raw data into a list - Object.keys(loadedLogMessages).forEach((key) => { - if (!ignoredMessages.includes(key)) { - let messageData = loadedLogMessages[key] - let messageDataMeans = {} - - messageData.map((message) => { - Object.keys(message).forEach((dataPointKey) => { - let dataPoint = message[dataPointKey] - if (dataPointKey != dataPoint && dataPointKey != "name") { - if (messageDataMeans[dataPointKey] == undefined) { - messageDataMeans[dataPointKey] = [dataPoint] - } else { - messageDataMeans[dataPointKey].push(dataPoint) - } - } - }) - }) - - rawValues[key] = messageDataMeans - } - }) - - // Looping over each list and finding min, max, mean - let means = {} - Object.keys(rawValues).forEach((key) => { - means[key] = {} - let messageData = rawValues[key] - Object.keys(messageData).forEach((messageKey) => { - let messageValues = messageData[messageKey] - let min = messageValues.reduce( - (x, y) => Math.min(x, y), - Number.NEGATIVE_INFINITY, - ) - let max = messageValues.reduce( - (x, y) => Math.max(x, y), - Number.NEGATIVE_INFINITY, - ) - let mean = - messageValues.reduce((acc, curr) => acc + curr, 0) / - messageValues.length + // 7. Expand BAT data into separate arrays based on instance. + const { + updatedMessages: finalMessages, + updatedFilters: finalFilters, + updatedFormats, + } = expandBATMessages( + messagesWithESC, + tempLoadedLogMessages, + filtersWithESC, + gpsOffset, + ) - means[`${key}/${messageKey}`] = { - mean: mean.toFixed(2), - max: max.toFixed(2), - min: min.toFixed(2), - } - }) - }) - updateMessageMeans(means) + // 8. Update Redux + dispatch(setLogMessages(finalMessages)) + dispatch(setFormatMessages(updatedFormats)) + dispatch(setMessageFilters(sortObjectByKeys(finalFilters))) + + // 9. Calculate and set means and set event logs for the event lines on graph + const means = calculateMeanValues(loadedLogMessages) + dispatch(setMessageMeans(means)) + if ("EV" in loadedLogMessages) { + dispatch( + setLogEvents( + loadedLogMessages["EV"].map((event) => ({ + time: + gpsOffset !== null + ? event.TimeUS / 1000 + gpsOffset + : event.TimeUS, + message: logEventIds[event.Id], + })), + ), + ) } } - // ==================================================== - // 4. Filter and Preset Management - // ==================================================== - - // Turn on/off all filters - function clearFilters() { - let newFilters = _.cloneDeep(messageFilters) - Object.keys(newFilters).forEach((categoryName) => { - const category = newFilters[categoryName] - Object.keys(category).forEach((fieldName) => { - newFilters[categoryName][fieldName] = false - }) - }) - updateMessageFilters(newFilters) - updateCustomColors({}) - updateColorIndex(0) - updateCanSavePreset(false) - } - - // Turn off only one filter at a time - function removeDataset(label) { - let [categoryName, fieldName] = label.split("/") - let newFilters = _.cloneDeep(messageFilters) - if ( - newFilters[categoryName] && - newFilters[categoryName][fieldName] !== undefined - ) { - newFilters[categoryName][fieldName] = false + /** + * Expands ESC messages into separate arrays based on Instance + */ + function expandESCMessages(logMessages, filterState) { + const escData = logMessages["ESC"] + if (!escData?.length) { + return { updatedMessages: logMessages, updatedFilters: filterState } } - let newColors = _.cloneDeep(customColors) - delete newColors[label] - updateCustomColors(newColors) - updateMessageFilters(newFilters) - if (Object.keys(newColors).length === 0) { - updateCanSavePreset(false) - } else { - updateCanSavePreset(true) - } - } - // Preset selection - function selectPreset(filter) { - let newFilters = _.cloneDeep(messageFilters) - Object.keys(newFilters).forEach((categoryName) => { - const category = newFilters[categoryName] - Object.keys(category).forEach((fieldName) => { - newFilters[categoryName][fieldName] = false - }) - }) - - let newColors = {} + const updatedMessages = { ...logMessages } + const updatedFilters = { ...filterState } - Object.keys(filter.filters).map((categoryName) => { - if (Object.keys(messageFilters).includes(categoryName)) { - filter.filters[categoryName].map((field) => { - if (!(field in messageFilters[categoryName])) { - showErrorNotification( - `Your log file does not include ${categoryName}/${field} data`, - ) - return - } - newFilters[categoryName][field] = true - - // Assign a color - if (!newColors[`${categoryName}/${field}`]) { - newColors[`${categoryName}/${field}`] = - colorPalette[Object.keys(newColors).length % colorPalette.length] - } + escData.forEach((escMessage) => { + const newEscData = { + ...escMessage, + name: `ESC${escMessage["Instance"] + 1}`, + } - // Update the color index - updateColorIndex(Object.keys(newColors).length) - }) - } else { - showErrorNotification(`Your log file does not include ${categoryName}`) + if (!updatedMessages[newEscData.name]) { + updatedMessages[newEscData.name] = [] + updatedFilters[newEscData.name] = { ...filterState["ESC"] } } + + updatedMessages[newEscData.name].push(newEscData) }) - // Update customColors with the newColors - updateCustomColors(newColors) - updateMessageFilters(newFilters) - // Don't allow saving if we just selected an existing preset - updateCanSavePreset(false) + delete updatedMessages["ESC"] + delete updatedFilters["ESC"] + + return { updatedMessages, updatedFilters } } - function selectMessageFilter(event, messageName, fieldName) { - let newFilters = _.cloneDeep(messageFilters) - newFilters[messageName][fieldName] = event.currentTarget.checked + /** + * Expands BAT messages into separate arrays based on Instance + */ + function expandBATMessages( + logMessages, + tempMessages, + filterState, + gpsOffset, + ) { + if (!logMessages["BAT"]) { + return { + updatedMessages: tempMessages, + updatedFilters: filterState, + updatedFormats: logMessages["format"], + } + } - // Create a deep copy of customColors - let newColors = _.cloneDeep(customColors) + const updatedMessages = { ...tempMessages } + const updatedFilters = { ...filterState } + const updatedFormats = { ...logMessages["format"] } - // if unchecked remove custom color - if (!newFilters[messageName][fieldName]) { - delete newColors[`${messageName}/${fieldName}`] + logMessages["BAT"].forEach((battData) => { + const instanceValue = battData["Instance"] ?? battData["Inst"] + const battName = `BAT${(instanceValue ?? 0) + 1}` - // Update customColors with the modified copy - updateCustomColors(newColors) - } - // Else assign a color - else { - if (!newColors[`${messageName}/${fieldName}`]) { - newColors[`${messageName}/${fieldName}`] = - colorPalette[colorIndex % colorPalette.length] - updateColorIndex((colorIndex + 1) % colorPalette.length) + if (!updatedMessages[battName]) { + updatedMessages[battName] = [] } - // Update customColors with the modified copy - updateCustomColors(newColors) - } - updateMessageFilters(newFilters) - - // Then check if we should allow saving preset - // Only enable save if there are selected filters - const hasSelectedFilters = Object.values(newFilters).some((category) => - Object.values(category).some((isSelected) => isSelected), - ) - updateCanSavePreset(hasSelectedFilters) - } - - // Function to handle saving a custom preset - function handleSaveCustomPreset(presetName) { - if (!presetName) return + const timeUS = + gpsOffset !== null + ? battData.TimeUS / 1000 + gpsOffset + : battData.TimeUS - if (presetName) { - const currentFilters = Object.entries(messageFilters).reduce( - (acc, [category, fields]) => { - acc[category] = Object.keys(fields).filter((field) => fields[field]) - return acc - }, - {}, - ) + updatedMessages[battName].push({ + ...battData, + name: battName, + TimeUS: timeUS, + }) - const newPreset = { - name: presetName, - filters: currentFilters, - aircraftType: aircraftType ? [aircraftType] : undefined, // Only save the aircraft type if it exists + if (!updatedFilters[battName]) { + updatedFilters[battName] = { ...filterState["BAT"] } } - const existingPreset = findExistingPreset(newPreset, logType) - - if (!existingPreset) { - saveCustomPreset(newPreset, logType) - showSuccessNotification( - `Custom preset "${presetName}" saved successfully`, - ) - close() - updateCanSavePreset(false) - } else { - if (existingPreset.name === presetName) { - showErrorNotification( - `The name "${presetName}" is in use. Please choose a different name.`, - ) - } else { - showErrorNotification( - `Custom preset "${presetName}" already exists as "${existingPreset.name}".`, - ) - close() - updateCanSavePreset(false) + if (!updatedFormats[battName]) { + updatedFormats[battName] = { + ...updatedFormats["BAT"], + name: battName, } } - } - } - - function handleDeleteCustomPreset(presetName) { - // Are there filters on screen? - const hasSelectedFilters = Object.values(messageFilters).some((category) => - Object.values(category).some((isSelected) => isSelected), - ) + }) - // If so, check if they match the filters of the preset to be deleted - if (hasSelectedFilters) { - const filtersOfPresetToBeDeleted = presetCategories[ - "custom_" + logType - ][0].filters.find((filter) => filter.name === presetName).filters + delete updatedMessages["BAT"] + delete updatedFormats["BAT"] + delete updatedFilters["BAT"] - const activeMessageFields = Object.entries(messageFilters).reduce( - (filteredCategories, [categoryName, fields]) => { - filteredCategories[categoryName] = Object.keys(fields).filter( - (fieldName) => fields[fieldName], - ) - return filteredCategories - }, - {}, - ) - const matchesSelectedPresets = _.isEqual( - filtersOfPresetToBeDeleted, - activeMessageFields, - ) + // Update logMessages["format"] too + updatedMessages["format"] = updatedFormats - if (matchesSelectedPresets) { - updateCanSavePreset(true) - } - } - - deleteCustomPreset(presetName, logType) - showSuccessNotification( - `Custom preset "${presetName}" deleted successfully`, - ) + return { updatedMessages, updatedFilters, updatedFormats } } - // ==================================================== - // 5. Color Management - // ==================================================== - - function changeColor(label, color) { - let newColors = _.cloneDeep(customColors) - newColors[label] = color - updateCustomColors(newColors) + // Close file + function closeLogFile() { + dispatch(setFile(null)) + dispatch(setLogMessages(null)) + setLocalChartData({ datasets: [] }) + dispatch(setMessageFilters(null)) + dispatch(setCustomColors({})) + dispatch(setUtcAvailable(false)) + dispatch(setColorIndex(0)) + dispatch(setLogEvents(null)) + dispatch(setLogType("dataflash")) + dispatch(setCanSavePreset(false)) + clearUnitCache() // Clear memoization cache } - // ==================================================== - // 6. Utility Functions - // ==================================================== + // Cache transformed data for each message type to avoid expensive re-processing + const transformedData = useMemo(() => { + if (!logMessages) return {} - function getUnit(messageName, fieldName) { - if (messageName.includes("ESC")) { - messageName = "ESC" - } + const cache = {} - if (messageName in formatMessages) { - const formatMessage = formatMessages[messageName] - const fieldIndex = formatMessage.fields.indexOf(fieldName) - if (fieldIndex !== -1 && formatMessage.units) { - const unitId = formatMessage.units[fieldIndex] - if (unitId in units) { - return units[unitId] - } - } - } - return "UNKNOWN" - } - - // ==================================================== - // 7. Effect Hooks - // ==================================================== - - // Ensure file is loaded when selected - useEffect(() => { - if (file !== null) { - loadFile() - } - }, [file]) + Object.keys(logMessages) + .filter( + (key) => + key !== "format" && + key !== "units" && + Array.isArray(logMessages[key]), + ) + .forEach((categoryName) => { + const messageData = logMessages[categoryName] + cache[categoryName] = {} + + // Get available fields for this message type + const fields = logMessages["format"]?.[categoryName]?.fields || [] + + fields.forEach((fieldName) => { + // Pre-transform data for each field + cache[categoryName][fieldName] = messageData.map((d) => ({ + x: d.TimeUS, + y: d[fieldName], + })) + }) + }) - // Set IPC renderer for log messages - useEffect(() => { - window.ipcRenderer.on("fla:log-parse-progress", function (evt, message) { - setLoadingFileProgress(message.percent) - }) - getFgcsLogs() + return cache + }, [logMessages]) - return () => { - window.ipcRenderer.removeAllListeners(["fla:log-parse-progress"]) - } - }, []) + // Create base datasets when filters change + const baseDatasets = useMemo(() => { + if (!messageFilters || !transformedData) return [] - // Update datasets based on the message filters constantly - useEffect(() => { - if (!messageFilters || !logMessages) return - // Sort the category and field names to maintain consistent order const datasets = Object.keys(messageFilters) .sort() .reduce((acc, categoryName) => { @@ -749,276 +304,49 @@ export default function FLA() { Object.keys(category) .sort() .forEach((fieldName) => { - if (category[fieldName]) { + if ( + category[fieldName] && + transformedData[categoryName]?.[fieldName] + ) { const label = `${categoryName}/${fieldName}` - const color = customColors[label] - const unit = getUnit(categoryName, fieldName) + const unit = getUnit( + categoryName, + fieldName, + formatMessages, + units, + ) acc.push({ label: label, yAxisID: unit, - data: logMessages[categoryName].map((d) => ({ - x: d.TimeUS, - y: d[fieldName], - })), - borderColor: color, - backgroundColor: hexToRgba(color, 0.5), // Use a more transparent shade for the background + unit: unit, + data: transformedData[categoryName][fieldName], // Use pre-cached data }) } }) return acc }, []) + return datasets + }, [messageFilters, transformedData, formatMessages, units]) - updateChartData({ datasets: datasets }) - }, [messageFilters, customColors]) - - // ====================================================== - // 8. Render - // ====================================================== + // Apply colors to datasets + useEffect(() => { + const datasetsWithColors = baseDatasets.map((dataset) => { + const color = customColors[dataset.label] || "#000000" + return { + ...dataset, + borderColor: color, + backgroundColor: hexToRgba(color, 0.5), + } + }) + setLocalChartData({ datasets: datasetsWithColors }) + }, [baseDatasets, customColors]) return ( {logMessages === null ? ( - // Open flight logs section -
-
-
- - {(props) => } - - -
- -
- -
-

Recent FGCS telemetry logs

- - {recentFgcsLogs !== null && - recentFgcsLogs.map((log, idx) => ( -
updateFile(log)} - > -

{log.name}

-
-

- {moment( - log.timestamp.toISOString(), - "YYYY-MM-DD_HH-mm-ss", - ).fromNow()} -

-

- {Math.round(log.size / 1024)}KB -

-
-
- ))} -
-
-
-
- - {loadingFile && ( - - )} -
+ ) : ( - // Graphs section - <> -
- {/* Message selection column */} -
-
-
- -
- File Name: - { - window.ipcRenderer.send( - "openFileInExplorer", - file.path, - ) - }} - > - {file.name} - -
-
- -
-
-
Aircraft Type:
-
- {aircraftType ? aircraftType : "No Aircraft Type"} -
-
-
- - - - {/* Presets */} - - - Presets - - - - {/* Custom Presets */} - {presetCategories["custom_" + logType]?.map( - (category) => { - return ( - - - - ) - }, - )} - {/* Default Presets */} - {presetCategories[logType]?.map((category) => { - // Filter out presets with unavailable keys or fields - const filteredCategory = { - ...category, - filters: category.filters.filter((filter) => - Object.keys(filter.filters).every((key) => { - // Check if the key exists in logMessages - if (!logMessages[key]) return false - - // Check if the required fields exist in logMessages["format"][key].fields - const requiredFields = filter.filters[key] - const availableFields = - logMessages["format"]?.[key]?.fields || [] - return requiredFields.every((field) => - availableFields.includes(field), - ) - }), - ), - } - - // Skip categories with no valid filters - if (filteredCategory.filters.length === 0) { - return null - } - - return ( - - - - ) - })} - - - - - {/* All messages */} - - - Messages - - - - {Object.keys(messageFilters).map((messageName, idx) => { - return ( - - - - ) - })} - - - - - -
- - {/* Graph column */} -
- - - {/* Plots Setup */} -
- {chartData.datasets.map((item) => ( - - - - ))} -
- - -
-
- + )}
) diff --git a/gcs/src/graphs.jsx b/gcs/src/graphs.jsx index b50d8d3bd..16d5eff49 100644 --- a/gcs/src/graphs.jsx +++ b/gcs/src/graphs.jsx @@ -8,21 +8,27 @@ import { useEffect, useRef } from "react" // 3rd Party Imports -import { useLocalStorage, usePrevious, useSessionStorage } from "@mantine/hooks" - -// Styling imports -import resolveConfig from "tailwindcss/resolveConfig" -import tailwindConfig from "../tailwind.config.js" +import { usePrevious } from "@mantine/hooks" // Custom components and helpers import GraphPanel from "./components/graphs/graphPanel.jsx" import MessageSelector from "./components/graphs/messageSelector.jsx" import Layout from "./components/layout" import NoDroneConnected from "./components/noDroneConnected.jsx" -import { dataFormatters } from "./helpers/dataFormatters.js" import { graphOptions } from "./helpers/realTimeGraphOptions.js" -import { socket } from "./helpers/socket" +// Redux +import { useDispatch, useSelector } from "react-redux" +import { selectConnectedToDrone } from "./redux/slices/droneConnectionSlice.js" +import { + selectGraphValues, + selectLastGraphMessage, + setGraphValues, +} from "./redux/slices/droneInfoSlice.js" + +// Styling imports +import resolveConfig from "tailwindcss/resolveConfig" +import tailwindConfig from "../tailwind.config.js" const tailwindColors = resolveConfig(tailwindConfig).theme.colors const graphLabelColors = { @@ -40,30 +46,10 @@ const graphColors = { } export default function Graphs() { - const [connected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: false, - }) - - const [selectValues, setSelectValues] = useLocalStorage({ - key: "graphSelectedValues", - defaultValue: { - graph_a: null, - graph_b: null, - graph_c: null, - graph_d: null, - }, - // modify the deserialization process to set values containing '/' to null - deserialize: (strValue) => { - const parsedValue = JSON.parse(strValue) - for (const key in parsedValue) { - if (parsedValue[key] && parsedValue[key].includes("/")) { - parsedValue[key] = null - } - } - return parsedValue - }, - }) + const dispatch = useDispatch() + const connected = useSelector(selectConnectedToDrone) + const selectValues = useSelector(selectGraphValues) + const lastGraphMessage = useSelector(selectLastGraphMessage) const previousSelectValues = usePrevious(selectValues) @@ -75,30 +61,15 @@ export default function Graphs() { } useEffect(() => { - if (!connected) { - return - } else { - socket.emit("set_state", { state: "graphs" }) - } - }, [connected]) - - useEffect(() => { - socket.on("incoming_msg", (msg) => { - const graphResults = getGraphDataFromMessage(msg, msg.mavpackettype) - if (graphResults !== false) { - graphResults.forEach((graphResult) => { - graphRefs[graphResult.graphKey]?.current.data.datasets[0].data.push( - graphResult.data, - ) - graphRefs[graphResult.graphKey]?.current.update("quiet") - }) - } - }) - - return () => { - socket.off("incoming_msg") + if (lastGraphMessage !== false) { + lastGraphMessage.forEach((graphResult) => { + graphRefs[graphResult.graphKey]?.current.data.datasets[0].data.push( + graphResult.data, + ) + graphRefs[graphResult.graphKey]?.current.update("quiet") + }) } - }, [selectValues]) + }, [lastGraphMessage]) useEffect(() => { if (!previousSelectValues) return @@ -115,36 +86,9 @@ export default function Graphs() { } }, [previousSelectValues]) - function getGraphDataFromMessage(msg, targetMessageKey) { - const returnDataArray = [] - for (let graphKey in selectValues) { - const messageKey = selectValues[graphKey] - if (messageKey && messageKey.includes(targetMessageKey)) { - const [, valueName] = messageKey.split(".") - - // Applying Data Formatters - let formatted_value = msg[valueName] - if (messageKey in dataFormatters) { - formatted_value = dataFormatters[messageKey]( - msg[valueName].toFixed(3), - ) - } - - returnDataArray.push({ - data: { x: Date.now(), y: formatted_value }, - graphKey: graphKey, - }) - } - } - if (returnDataArray.length) { - return returnDataArray - } - return false - } - function updateSelectValues(values) { const updatedSelectValues = { ...selectValues, ...values } - setSelectValues(updatedSelectValues) + dispatch(setGraphValues(updatedSelectValues)) } return ( diff --git a/gcs/src/helpers/dataFormatters.js b/gcs/src/helpers/dataFormatters.js index 252435115..d288829e8 100644 --- a/gcs/src/helpers/dataFormatters.js +++ b/gcs/src/helpers/dataFormatters.js @@ -1,3 +1,5 @@ +import { MAV_FRAME_LIST } from "./mavlinkConstants" + function radToDeg(val) { return (val * 180) / Math.PI } @@ -8,7 +10,7 @@ export function intToCoord(val) { } export function coordToInt(val) { - return val * 1e7 + return parseInt(val * 1e7) } export const dataFormatters = { @@ -16,3 +18,17 @@ export const dataFormatters = { "ATTITUDE.roll": radToDeg, "ATTITUDE.yaw": radToDeg, } + +export function getPositionFrameName(frameId) { + if (frameId === undefined || frameId === null) { + return "UNKNOWN" + } + + var frameName = MAV_FRAME_LIST[frameId] + + if (frameName.startsWith("MAV_FRAME_")) { + frameName = frameName.replace("MAV_FRAME_", "") + } + + return frameName || "UNKNOWN" +} diff --git a/gcs/src/helpers/filterMissions.js b/gcs/src/helpers/filterMissions.js index 1c21df4bd..4ad5894f2 100644 --- a/gcs/src/helpers/filterMissions.js +++ b/gcs/src/helpers/filterMissions.js @@ -1,25 +1,44 @@ -import { FILTER_MISSION_ITEM_COMMANDS_LIST } from "./mavlinkConstants" +import { MAV_FRAME_LIST } from "./mavlinkConstants" export function filterMissionItems(missionItems) { + if (!missionItems || !Array.isArray(missionItems)) { + return [] + } + const filteredMissionItems = [] + const missionItemsCopy = [...missionItems] - for (const missionItem of missionItems) { + if (missionItemsCopy !== undefined) { + // Check if first item is a home command if ( - !Object.values(FILTER_MISSION_ITEM_COMMANDS_LIST).includes( - missionItem.command, - ) && - !( - // If loiter command and no coordinates then filter out - ( - [17, 18, 19].includes(missionItem.command) && - missionItem.x === 0 && - missionItem.y === 0 - ) - ) + missionItemsCopy.length > 0 && + isGlobalFrameHomeCommand(missionItemsCopy[0]) ) { - filteredMissionItems.push(missionItem) + // Remove the first item if it is a home command + missionItemsCopy.shift() + } + + // Filter out items with x or y as 0 (no coordinates) + for (const missionItem of missionItemsCopy) { + if (missionItem.x !== 0 && missionItem.y !== 0) { + filteredMissionItems.push(missionItem) + } } } return filteredMissionItems } + +export function isGlobalFrameHomeCommand(waypoint) { + const globalFrameValue = parseInt( + Object.keys(MAV_FRAME_LIST).find( + (key) => MAV_FRAME_LIST[key] === "MAV_FRAME_GLOBAL", + ), + ) + return ( + waypoint.frame === globalFrameValue && + waypoint.x !== 0 && + waypoint.y !== 0 && + waypoint.command === 16 + ) +} diff --git a/gcs/src/helpers/mavlinkConstants.js b/gcs/src/helpers/mavlinkConstants.js index d26a19843..72c74fff3 100644 --- a/gcs/src/helpers/mavlinkConstants.js +++ b/gcs/src/helpers/mavlinkConstants.js @@ -76,6 +76,15 @@ export const COPTER_MODES_FLIGHT_MODE_MAP = { 27: "UNKNOWN", } +export function getFlightModeMap(aircraftType) { + if (aircraftType === "Plane") { + return PLANE_MODES_FLIGHT_MODE_MAP + } else if (aircraftType === "Copter") { + return COPTER_MODES_FLIGHT_MODE_MAP + } + return {} +} + export const GPS_FIX_TYPES = [ "NO GPS", "NO FIX", @@ -444,12 +453,11 @@ export const COPTER_MISSION_ITEM_COMMANDS_LIST = { 526: "MAV_CMD_STORAGE_FORMAT", } -// TODO: implement export const FENCE_ITEM_COMMANDS_LIST = { - // 5001: "MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION", - // 5002: "MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION", - // 5003: 'MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION', - // 5004: 'MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION', + 5001: "MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION", + 5002: "MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION", + 5003: "MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION", + 5004: "MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION", } export const MAV_FRAME_LIST = { diff --git a/gcs/src/helpers/notification.js b/gcs/src/helpers/notification.js index a383cebee..17722819b 100644 --- a/gcs/src/helpers/notification.js +++ b/gcs/src/helpers/notification.js @@ -1,5 +1,5 @@ /* - Notification system. This contains all the styles for each type of notification in an + Notification system. This contains all the styles for each type of notification in an easy to use wrapper. */ @@ -36,6 +36,15 @@ export function showSuccessNotification(message) { }) } +export function showInfoNotification(message) { + notifications.show({ + title: "Info", + message: message, + color: tailwindColors.blue[600], + ...notificationTheme, + }) +} + export function showNotification(title, message) { notifications.show({ title: title, @@ -44,3 +53,28 @@ export function showNotification(title, message) { ...notificationTheme, }) } + +export function showLoadingNotification(title, message) { + const id = notifications.show({ + title: title, + message: message, + loading: true, + autoClose: false, + withCloseButton: false, + ...notificationTheme, + }) + + return id +} + +export function closeLoadingNotification(id, title, message) { + notifications.update({ + id: id, + title: title, + message: message, + loading: false, + autoClose: 2000, + color: tailwindColors.green[600], + ...notificationTheme, + }) +} diff --git a/gcs/src/helpers/outsideVisibility.js b/gcs/src/helpers/outsideVisibility.js index dcdfa3b05..4b4d12bbe 100644 --- a/gcs/src/helpers/outsideVisibility.js +++ b/gcs/src/helpers/outsideVisibility.js @@ -2,25 +2,29 @@ outsideVisibility. Used to get the colour from one central place */ -// 3rd Party Imports -import { useLocalStorage } from "@mantine/hooks" +import { useMemo } from "react" + +// Redux +import { useSelector } from "react-redux" +import { selectOutsideVisibility } from "../redux/slices/droneConnectionSlice" // Tailwind styling import resolveConfig from "tailwindcss/resolveConfig" import tailwindConfig from "../../tailwind.config" + const tailwindColors = resolveConfig(tailwindConfig).theme.colors +const outsideVisibilityEnabledColor = tailwindColors.falcongrey["900"] +const outsideVisibilityDisabledColor = tailwindColors.falcongrey["TRANSLUCENT"] + export default function GetOutsideVisibilityColor() { - const [outsideVisibility] = useLocalStorage({ - key: "outsideVisibility", - defaultValue: false, - }) + const outsideVisibility = useSelector(selectOutsideVisibility) - return getOutsideVisibilityColorManually(outsideVisibility) -} + const color = useMemo(() => { + return outsideVisibility + ? outsideVisibilityEnabledColor + : outsideVisibilityDisabledColor + }, [outsideVisibility]) -export function getOutsideVisibilityColorManually(isOutside) { - return isOutside - ? tailwindColors.falcongrey["900"] - : tailwindColors.falcongrey["TRANSLUCENT"] + return color } diff --git a/gcs/src/helpers/socket.js b/gcs/src/helpers/socket.js index ddebf19fe..03423071b 100644 --- a/gcs/src/helpers/socket.js +++ b/gcs/src/helpers/socket.js @@ -1,11 +1,23 @@ +"use client" import { io } from "socket.io-client" -export const socket = io(import.meta.env.VITE_BACKEND_URL) +class SocketConnection { + socket + socketEndpoint = import.meta.env.VITE_BACKEND_URL -socket.on("connect", () => { - console.log(`Connected to socket, ${socket.id}`) -}) + constructor() { + this.socket = io(this.socketEndpoint) + } +} -socket.on("disconnect", () => { - console.log("Disconnected from socket") -}) +let socketConnection = undefined + +class SocketFactory { + static create() { + if (!socketConnection) { + socketConnection = new SocketConnection() + } + return socketConnection + } +} +export default SocketFactory diff --git a/gcs/src/linkStats.jsx b/gcs/src/linkStats.jsx new file mode 100644 index 000000000..cf0e73a8f --- /dev/null +++ b/gcs/src/linkStats.jsx @@ -0,0 +1,25 @@ +import "./css/index.css" // Needs to be at the top of the file +import "./css/resizable.css" + +// Style imports +import "@mantine/code-highlight/styles.css" +import "@mantine/core/styles.css" +import "@mantine/notifications/styles.css" +import "@mantine/spotlight/styles.css" +import "@mantine/tiptap/styles.css" + +import { MantineProvider } from "@mantine/core" +import React from "react" +import ReactDOM from "react-dom/client" +import { CustomMantineTheme } from "./components/customMantineTheme" +import LinkStatsWindow from "./components/linkStatsWindow/linkStatsWindow" + +ReactDOM.createRoot(document.getElementById("root")).render( + + + + + , +) + +postMessage({ payload: "removeLoading" }, "*") diff --git a/gcs/src/main.jsx b/gcs/src/main.jsx index 5dcd8da21..8ca07c744 100644 --- a/gcs/src/main.jsx +++ b/gcs/src/main.jsx @@ -2,29 +2,34 @@ import "./css/index.css" // Needs to be at the top of the file import "./css/resizable.css" // Style imports +import "@mantine/code-highlight/styles.css" import "@mantine/core/styles.css" import "@mantine/notifications/styles.css" import "@mantine/spotlight/styles.css" -import "@mantine/code-highlight/styles.css" import "@mantine/tiptap/styles.css" // React imports -import { HashRouter } from "react-router-dom" -import React from "react" import ReactDOM from "react-dom/client" +import { HashRouter } from "react-router-dom" // Mantine imports import { MantineProvider } from "@mantine/core" // Component imports -import AppContent from "./components/mainContent.jsx" import { CustomMantineTheme } from "./components/customMantineTheme.jsx" +import AppContent from "./components/mainContent.jsx" + +// Redux +import { Provider } from "react-redux" +import { store } from "./redux/store.js" ReactDOM.createRoot(document.getElementById("root")).render( // - - - + + + + + , ) diff --git a/gcs/src/missions.jsx b/gcs/src/missions.jsx index 052bb6be5..ea77b769d 100644 --- a/gcs/src/missions.jsx +++ b/gcs/src/missions.jsx @@ -1,205 +1,370 @@ /* - The missions screen. + The missions screen. */ // Base imports -import { useCallback, useEffect, useRef, useState } from "react" +import { useEffect, useRef, useState } from "react" // 3rd Party Imports -import { useLocalStorage, useSessionStorage } from "@mantine/hooks" +import { useSessionStorage } from "@mantine/hooks" import { ResizableBox } from "react-resizable" import { v4 as uuidv4 } from "uuid" // Custom component and helpers -import { Button, Divider, Tabs } from "@mantine/core" +import { + ActionIcon, + Button, + Divider, + FileButton, + Modal, + NumberInput, + Progress, + Tabs, + Tooltip, +} from "@mantine/core" +import { IconInfoCircle, IconX } from "@tabler/icons-react" import Layout from "./components/layout" +import FenceItemsTable from "./components/missions/fenceItemsTable" import MissionItemsTable from "./components/missions/missionItemsTable" +import MissionStatistics from "./components/missions/missionStatistics" import MissionsMapSection from "./components/missions/missionsMap" import RallyItemsTable from "./components/missions/rallyItemsTable" import NoDroneConnected from "./components/noDroneConnected" -import { intToCoord } from "./helpers/dataFormatters" +import { coordToInt, intToCoord } from "./helpers/dataFormatters" + +// Redux +import { useDispatch, useSelector } from "react-redux" import { - COPTER_MODES_FLIGHT_MODE_MAP, - MAV_AUTOPILOT_INVALID, - PLANE_MODES_FLIGHT_MODE_MAP, -} from "./helpers/mavlinkConstants" + selectConnectedToDrone, + selectCurrentPage, +} from "./redux/slices/droneConnectionSlice" + +// Tailwind styling +import resolveConfig from "tailwindcss/resolveConfig" +import tailwindConfig from "../tailwind.config" +import UpdatePlannedHomePositionModal from "./components/missions/updatePlannedHomePositionModal" +import { showErrorNotification } from "./helpers/notification" import { - showErrorNotification, - showSuccessNotification, -} from "./helpers/notification" -import { socket } from "./helpers/socket" + emitExportMissionToFile, + emitGetCurrentMission, + emitGetTargetInfo, + emitImportMissionFromFile, + emitWriteCurrentMission, + getFrameKey, + selectActiveTab, + selectDrawingFenceItems, + selectDrawingMissionItems, + selectDrawingRallyItems, + selectMissionProgressData, + selectMissionProgressModal, + selectPlannedHomePosition, + selectTargetInfo, + selectUnwrittenChanges, + setActiveTab, + setMissionProgressData, + setMissionProgressModal, + setPlannedHomePosition, +} from "./redux/slices/missionSlice" +const tailwindColors = resolveConfig(tailwindConfig).theme.colors const coordsFractionDigits = 7 +const resizeTableHeightPadding = 20 // To account for the handle height and some padding -export default function Missions() { - // Local Storage - const [connected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: false, - }) - const [aircraftType] = useLocalStorage({ - key: "aircraftType", - }) +function isInvalidInputNumber(value) { + return value === "" || value === null || isNaN(Number(value)) +} - const [activeTab, setActiveTab] = useState("mission") +function UnwrittenChangesWarning({ unwrittenChanges }) { + const firstUnwrittenTab = Object.entries(unwrittenChanges).find( + ([, changed]) => changed, + ) - // Mission - const [missionItems, setMissionItems] = useSessionStorage({ - key: "missionItems", - defaultValue: [], - }) - const [fenceItems, setFenceItems] = useSessionStorage({ - key: "fenceItems", - defaultValue: [], - }) - const [rallyItems, setRallyItems] = useSessionStorage({ - key: "rallyItems", - defaultValue: [], - }) - const [homePosition, setHomePosition] = useSessionStorage({ - key: "homePosition", - defaultValue: null, + return ( + <> + {firstUnwrittenTab && ( +

+ You have unwritten {firstUnwrittenTab[0]} changes. +

+ )} + + ) +} + +export default function Missions() { + // Redux + const dispatch = useDispatch() + const connected = useSelector(selectConnectedToDrone) + const targetInfo = useSelector(selectTargetInfo) + const plannedHomePosition = useSelector(selectPlannedHomePosition) + const activeTab = useSelector(selectActiveTab) + + // Mission items + const missionItems = useSelector(selectDrawingMissionItems) + const fenceItems = useSelector(selectDrawingFenceItems) + const rallyItems = useSelector(selectDrawingRallyItems) + const unwrittenChanges = useSelector(selectUnwrittenChanges) + const missionProgressModalOpened = useSelector(selectMissionProgressModal) + const missionProgressModalData = useSelector(selectMissionProgressData) + + // Other states + const [showWarningBanner, setShowWarningBanner] = useSessionStorage({ + key: "showWarningBanner", + defaultValue: true, }) - // Heartbeat data - const [heartbeatData, setHeartbeatData] = useState({ system_status: 0 }) + // Need to keep a reference to the active tab to avoid stale closures + const activeTabRef = useRef(activeTab) + const tabsListRef = useRef(null) + const [tableSectionHeight, setTableSectionHeight] = useState(300) - // GPS and Telemetry - const [gpsData, setGpsData] = useState({}) + // File import handling + const [importFile, setImportFile] = useState(null) + const importFileResetRef = useRef(null) - // Map and messages + // Modal for mission progress + const [missionProgressModalTitle, setMissionProgressModalTitle] = useState( + "Mission progress update", + ) + const currentPage = useSelector(selectCurrentPage) const mapRef = useRef() - // System data - const [navControllerOutputData, setNavControllerOutputData] = useState({}) - - const incomingMessageHandler = useCallback( - () => ({ - GLOBAL_POSITION_INT: (msg) => setGpsData(msg), - NAV_CONTROLLER_OUTPUT: (msg) => setNavControllerOutputData(msg), - HEARTBEAT: (msg) => { - if (msg.autopilot !== MAV_AUTOPILOT_INVALID) { - setHeartbeatData(msg) - } - }, - }), - [], + const [plannedHomeLatInput, setPlannedHomeLatInput] = useState( + intToCoord(plannedHomePosition?.lat ?? 0).toFixed(coordsFractionDigits), + ) + const [plannedHomeLonInput, setPlannedHomeLonInput] = useState( + intToCoord(plannedHomePosition?.lon ?? 0).toFixed(coordsFractionDigits), + ) + const [plannedHomeAltInput, setPlannedHomeAltInput] = useState( + plannedHomePosition?.alt ?? 0.1, ) useEffect(() => { - if (!connected) { - return - } else { - socket.emit("set_state", { state: "missions" }) - socket.emit("get_home_position") + if (tabsListRef.current) { + // Set initial height of the table section when component mounts + setTableSectionHeight( + 300 - tabsListRef.current.clientHeight - resizeTableHeightPadding, + ) } + }, [tabsListRef.current]) - socket.on("incoming_msg", (msg) => { - if (incomingMessageHandler()[msg.mavpackettype] !== undefined) { - incomingMessageHandler()[msg.mavpackettype](msg) - } - }) + // Send some messages when file is loaded + useEffect(() => { + dispatch(emitGetTargetInfo()) + }, [currentPage]) - socket.on("home_position_result", (data) => { - if (data.success) { - setHomePosition(data.data) - } else { - showErrorNotification(data.message) - } - }) + useEffect(() => { + if (importFile) { + importMissionFromFile(importFile.path) + } + }, [importFile]) - socket.on("current_mission", (data) => { - if (!data.success) { - showErrorNotification(data.message) - return - } + useEffect(() => { + activeTabRef.current = activeTab + }, [activeTab]) - console.log(data) + useEffect(() => { + setPlannedHomeLatInput( + intToCoord(plannedHomePosition?.lat).toFixed(coordsFractionDigits), + ) + }, [plannedHomePosition?.lat]) - if (data.mission_type === "mission") { - const missionItemsWithIds = [] - for (let missionItem of data.items) { - missionItemsWithIds.push(addIdToItem(missionItem)) - } - setMissionItems(missionItemsWithIds) - } else if (data.mission_type === "fence") { - setFenceItems(data.items) - } else if (data.mission_type === "rally") { - const rallyItemsWithIds = [] - for (let rallyItem of data.items) { - rallyItemsWithIds.push(addIdToItem(rallyItem)) - } - setRallyItems(rallyItemsWithIds) - } + useEffect(() => { + setPlannedHomeLonInput( + intToCoord(plannedHomePosition?.lon).toFixed(coordsFractionDigits), + ) + }, [plannedHomePosition?.lon]) - showSuccessNotification(`${data.mission_type} read successfully`) - }) + useEffect(() => { + setPlannedHomeAltInput(plannedHomePosition?.alt) + }, [plannedHomePosition?.alt]) + + function resetMissionProgressModalData() { + dispatch( + setMissionProgressData({ + message: "", + progress: null, + }), + ) + } - return () => { - socket.off("incoming_msg") - socket.off("home_position_result") - socket.off("current_mission") + function createPlannedHomePositionItem() { + if (!plannedHomePosition) { + showErrorNotification("Planned home position is not set") + return } - }, [connected]) - function getFlightMode() { - if (aircraftType === 1) { - return PLANE_MODES_FLIGHT_MODE_MAP[heartbeatData.custom_mode] - } else if (aircraftType === 2) { - return COPTER_MODES_FLIGHT_MODE_MAP[heartbeatData.custom_mode] + const newHomeItem = { + id: uuidv4(), + seq: 0, // Home position is always the first item + x: plannedHomePosition.lat, + y: plannedHomePosition.lon, + z: plannedHomePosition.alt || 0, + frame: getFrameKey("MAV_FRAME_GLOBAL"), + command: 16, // MAV_CMD_NAV_WAYPOINT + param1: 0, + param2: 0, + param3: 0, + param4: 0, + current: 1, // Set as current waypoint + autocontinue: 1, + target_component: targetInfo.target_component, + target_system: targetInfo.target_system, + mission_type: + activeTabRef.current === "mission" + ? 0 + : activeTabRef.current === "fence" + ? 1 + : activeTabRef.current === "rally" + ? 2 + : 0, // Default to 0 (Mission type) if activeTab is unrecognized, + mavpackettype: "MISSION_ITEM_INT", } - return "UNKNOWN" + return newHomeItem } - function addIdToItem(missionItem) { - if (!missionItem.id) { - missionItem.id = uuidv4() - } - return missionItem + function readMissionFromDrone() { + dispatch(emitGetCurrentMission()) + setMissionProgressModalTitle(`Reading ${activeTabRef.current} from drone`) + resetMissionProgressModalData() + dispatch(setMissionProgressModal(true)) } - function updateMissionItem(updatedMissionItem) { - setMissionItems((prevItems) => - prevItems.map((item) => - item.id === updatedMissionItem.id - ? { ...item, ...updatedMissionItem } - : item, - ), - ) + function writeMissionToDrone() { + if (activeTabRef.current === "mission") { + dispatch( + emitWriteCurrentMission({ type: "mission", items: missionItems }), + ) + } else if (activeTabRef.current === "fence") { + dispatch(emitWriteCurrentMission({ type: "fence", items: fenceItems })) + } else if (activeTabRef.current === "rally") { + dispatch(emitWriteCurrentMission({ type: "rally", items: rallyItems })) + } + setMissionProgressModalTitle(`Writing ${activeTabRef.current} to drone`) + resetMissionProgressModalData() + dispatch(setMissionProgressModal(true)) } - function updateRallyItem(updatedRallyItem) { - setRallyItems((prevItems) => - prevItems.map((item) => - item.id === updatedRallyItem.id - ? { ...item, ...updatedRallyItem } - : item, - ), + + function importMissionFromFile(filePath) { + dispatch( + emitImportMissionFromFile({ + type: activeTabRef.current, + file_path: filePath, + }), ) - } - function readMissionFromDrone() { - socket.emit("get_current_mission", { type: activeTab }) + // Reset the import file after sending + setImportFile(null) + importFileResetRef.current?.() } - function writeMissionToDrone() { - return - } + async function saveMissionToFile() { + // The options for the save dialog + const options = { + title: "Save the mission to a file", + filters: [ + { name: "Waypoint Files", extensions: ["waypoints"] }, + { name: "All Files", extensions: ["*"] }, + ], + } - function importMissionFromFile() { - return - } + const result = await window.ipcRenderer.getSaveMissionFilePath(options) + + if (!result.canceled) { + let items = [] + if (activeTabRef.current === "mission") { + items = [...missionItems] + } else if (activeTabRef.current === "fence") { + items = [...fenceItems] - function saveMissionToFile() { - return + const newPlannedHomeItem = createPlannedHomePositionItem() + if (newPlannedHomeItem) { + items.unshift(newPlannedHomeItem) // Add planned home item at the beginning + } + + // Ensure all sequence values are updated + items = items.map((item, index) => ({ + ...item, + seq: index, + })) + } else if (activeTabRef.current === "rally") { + items = [...rallyItems] + + const newPlannedHomeItem = createPlannedHomePositionItem() + if (newPlannedHomeItem) { + items.unshift(newPlannedHomeItem) // Add planned home item at the beginning + } + + // Ensure all sequence values are updated + items = items.map((item, index) => ({ + ...item, + seq: index, + })) + } + + dispatch( + emitExportMissionToFile({ + type: activeTabRef.current, + file_path: result.filePath, + items: items, + }), + ) + } } return ( + dispatch(setMissionProgressModal(false))} + title={missionProgressModalTitle} + closeOnClickOutside={false} + closeOnEscape={false} + withCloseButton={false} + centered + overlayProps={{ + backgroundOpacity: 0.55, + blur: 3, + }} + > +
+ {missionProgressModalData.message && ( +

+ {missionProgressModalData.message} +

+ )} + + {missionProgressModalData.progress !== null && + missionProgressModalData.progress !== undefined && ( + + )} +
+
+ + + {/* Banner to let people know that things are still under development */} -
- Missions is still under development so some features are still missing. -
+ {showWarningBanner && ( +
+

+ Missions is still under development so some features are still + missing. If you find any bugs please report them to us. +

+ setShowWarningBanner(false)} + variant="transparent" + className="mr-2" + > + + +
+ )} {connected ? (
@@ -217,8 +382,12 @@ export default function Missions() { } className="relative bg-falcongrey-800 overflow-y-auto" > -
+
+ + + {(props) => } + +
+ + + +
+

Mission statistics

+
@@ -286,20 +532,9 @@ export default function Missions() {
@@ -315,31 +550,44 @@ export default function Missions() {
} className="relative bg-falcongrey-800 overflow-y-auto" + onResizeStop={(_, { size }) => { + setTableSectionHeight( + size.height - + tabsListRef.current.clientHeight - + resizeTableHeightPadding, + ) + }} > dispatch(setActiveTab(value))} className="mt-2" > - - Mission - Fence - Rally + + + Mission + + + Fence + + + Rally + - + + + - + diff --git a/gcs/src/params.jsx b/gcs/src/params.jsx index a5071044c..024b5a9bf 100644 --- a/gcs/src/params.jsx +++ b/gcs/src/params.jsx @@ -5,17 +5,11 @@ */ // Base imports -import { useEffect, useState } from "react" +import { useEffect } from "react" // 3rd Party Imports -import { Progress } from "@mantine/core" -import { - useDebouncedValue, - useDisclosure, - useListState, - useSessionStorage, - useToggle, -} from "@mantine/hooks" +import { Button, Progress } from "@mantine/core" +import { useDebouncedValue } from "@mantine/hooks" import AutoSizer from "react-virtualized-auto-sizer" import { FixedSizeList } from "react-window" @@ -25,173 +19,61 @@ import NoDroneConnected from "./components/noDroneConnected.jsx" import AutopilotRebootModal from "./components/params/autopilotRebootModal.jsx" import ParamsToolbar from "./components/params/paramsToolbar.jsx" import { Row } from "./components/params/row.jsx" + +// Redux +import { useDispatch, useSelector } from "react-redux" +import { selectConnectedToDrone } from "./redux/slices/droneConnectionSlice.js" import { - showErrorNotification, - showSuccessNotification, -} from "./helpers/notification.js" -import { socket } from "./helpers/socket.js" + emitRefreshParams, + resetParamState, + selectFetchingVars, + selectFetchingVarsProgress, + selectHasFetchedOnce, + selectModifiedParams, + selectParams, + selectParamSearchValue, + selectShowModifiedParams, + selectShownParams, + setFetchingVars, + setHasFetchedOnce, + setShownParams, +} from "./redux/slices/paramsSlice.js" export default function Params() { - const [connected] = useSessionStorage({ - key: "connectedToDrone", - defaultValue: true, - }) + const dispatch = useDispatch() + const connected = useSelector(selectConnectedToDrone) // Parameter states - const [params, paramsHandler] = useListState([]) - const [shownParams, shownParamsHandler] = useListState([]) - const [modifiedParams, modifiedParamsHandler] = useListState([]) - const [showModifiedParams, showModifiedParamsToggle] = useToggle() - - // Autopilot reboot states - const [rebootData, setRebootData] = useState({}) - const [opened, { open, close }] = useDisclosure(false) + const hasFetchedOnce = useSelector(selectHasFetchedOnce) + const params = useSelector(selectParams) + const shownParams = useSelector(selectShownParams) + const modifiedParams = useSelector(selectModifiedParams) + const showModifiedParams = useSelector(selectShowModifiedParams) // Searchbar states - const [searchValue, setSearchValue] = useState("") + const searchValue = useSelector(selectParamSearchValue) const [debouncedSearchValue] = useDebouncedValue(searchValue, 150) // Fetch progress states - const [fetchingVars, setFetchingVars] = useState(false) - const [fetchingVarsProgress, setFetchingVarsProgress] = useState(0) - - /** - * Resets the state of the parameters page to the initial states - */ - function resetState() { - setFetchingVars(false) - setFetchingVarsProgress(0) - paramsHandler.setState([]) - shownParamsHandler.setState([]) - modifiedParamsHandler.setState([]) - setSearchValue("") - setRebootData({}) - } - - /** - * Sends a request to the drone to reboot the autopilot - */ - function rebootAutopilot() { - socket.emit("reboot_autopilot") - open() - resetState() - } - - /** - * Refreshes the params on the drone then fetches them - */ - function refreshParams() { - paramsHandler.setState([]) - shownParamsHandler.setState([]) - socket.emit("refresh_params") - setFetchingVars(true) - } - - /** - * Checks if a paramter has been modified since the last save - * @param {*} param the parameter to check - * @returns true if the given parameter is in modifiedParams, otherwise false - */ - function isModified(param) { - return modifiedParams.find((obj) => { - return obj.param_id === param.param_id - }) - } + const fetchingVars = useSelector(selectFetchingVars) + const fetchingVarsProgress = useSelector(selectFetchingVarsProgress) - /** - * Updates the parameter value in the given useListState handler - * - * @param {*} handler - * @param {*} param - * @param {*} value - */ - function updateParamValue(handler, param, value) { - handler.applyWhere( - (item) => item.param_id === param.param_id, - (item) => ({ ...item, param_value: value }), - ) - } - - /** - * Adds a parameter to the list of parameters that have been modified since the - * last save - * - * @param {*} value - * @param {*} param - * @returns - */ - function addToModifiedParams(value, param) { - if (value === "") return - - // If param has already been modified since last save then update it - if (isModified(param)) updateParamValue(modifiedParamsHandler, param, value) - else { - // Otherwise add it to modified params - param.param_value = value - modifiedParamsHandler.append(param) - } - - updateParamValue(paramsHandler, param, value) + function fetchParams() { + dispatch(setFetchingVars(true)) + dispatch(emitRefreshParams()) + dispatch(setHasFetchedOnce(true)) } + // Reset state if we loose connection useEffect(() => { - // Updates the autopilot modal depending on the success of the reboot - socket.on("reboot_autopilot", (msg) => { - setRebootData(msg) - if (msg.success) { - close() - } - }) - - // Drone has lost connection if (!connected) { - resetState() - return - } - - // Fetch params on connection to drone - if (connected && Object.keys(params).length === 0 && !fetchingVars) { - socket.emit("set_state", { state: "params" }) - setFetchingVars(true) + dispatch(resetParamState()) } - // Update parameter states when params are receieved from drone - socket.on("params", (params) => { - paramsHandler.setState(params) - shownParamsHandler.setState(params) - setFetchingVars(false) - setFetchingVarsProgress(0) - setSearchValue("") - }) - - // Set fetch progress on update from drone - socket.on("param_request_update", (msg) => { - setFetchingVarsProgress( - (msg.current_param_index / msg.total_number_of_params) * 100, - ) - }) - - // Show success on saving modified params - socket.on("param_set_success", (msg) => { - showSuccessNotification(msg.message) - modifiedParamsHandler.setState([]) - }) - - // Show error message on drone error - socket.on("params_error", (err) => { - showErrorNotification(err.message) - setFetchingVars(false) - }) - - // - return () => { - socket.off("params") - socket.off("param_request_update") - socket.off("param_set_success") - socket.off("params_error") - socket.off("reboot_autopilot") + if (connected && !hasFetchedOnce && !fetchingVars) { + fetchParams() } - }, [connected]) // useEffect + }, [connected]) useEffect(() => { if (!params) return @@ -204,38 +86,33 @@ export default function Params() { ) // Show the filtered parameters - shownParamsHandler.setState(filteredParams) - }, [debouncedSearchValue, showModifiedParams]) + dispatch(setShownParams(filteredParams)) + }, [debouncedSearchValue, showModifiedParams, params, modifiedParams]) return ( + + {connected ? ( <> - - {fetchingVars && ( - +
+ {fetchingVarsProgress.param_id && ( +

+ Fetched {fetchingVarsProgress.param_id} +

+ )} + +
)} - {Object.keys(params).length !== 0 && ( + {Object.keys(params).length > 0 && !fetchingVars && (
- +
@@ -245,10 +122,6 @@ export default function Params() { width={width} itemSize={120} itemCount={shownParams.length} - itemData={{ - params: shownParams, - onChange: addToModifiedParams, - }} > {Row} @@ -257,6 +130,14 @@ export default function Params() {
)} + {Object.keys(params).length === 0 && !fetchingVars && ( +
+

+ No parameters found, try fetching them again. +

+ +
+ )} ) : ( diff --git a/gcs/src/redux/middleware/emitters.js b/gcs/src/redux/middleware/emitters.js new file mode 100644 index 000000000..aa4c9bdc3 --- /dev/null +++ b/gcs/src/redux/middleware/emitters.js @@ -0,0 +1,289 @@ +import { + emitGetFlightModeConfig, + emitGetFrameConfig, + emitGetGripperEnabled, + emitGetRcConfig, + emitRefreshFlightModeData, + emitSetFlightMode, + emitSetGripper, + emitTestAllMotors, + emitTestMotorSequence, + emitTestOneMotor, +} from "../slices/configSlice" +import { + emitArmDisarm, + emitConnectToDrone, + emitDisconnectFromDrone, + emitGetComPorts, + emitGetCurrentMissionAll, + emitGetHomePosition, + emitGetLoiterRadius, + emitIsConnectedToDrone, + emitLand, + emitReposition, + emitSetCurrentFlightMode, + emitSetLoiterRadius, + emitSetState, + emitTakeoff, + setCurrentPage, +} from "../slices/droneConnectionSlice" +import { + emitControlMission, + emitExportMissionToFile, + emitGetCurrentMission, + emitGetTargetInfo, + emitImportMissionFromFile, + emitWriteCurrentMission, + setShouldFetchAllMissionsOnDashboard, + showDashboardMissionFetchingNotificationThunk, +} from "../slices/missionSlice" +import { + emitRebootAutopilot, + emitRefreshParams, + emitSetMultipleParams, +} from "../slices/paramsSlice" + +export function handleEmitters(socket, store, action) { + if (!socket) return + const emitHandlers = [ + /* + ==================== + = DRONE CONNECTION = + ==================== + */ + { + emitter: emitIsConnectedToDrone, + callback: () => socket.socket.emit("is_connected_to_drone"), + }, + { + emitter: emitGetComPorts, + callback: () => socket.socket.emit("get_com_ports"), + }, + { + emitter: emitDisconnectFromDrone, + callback: () => socket.socket.emit("disconnect_from_drone"), + }, + { + emitter: emitConnectToDrone, + callback: () => socket.socket.emit("connect_to_drone", action.payload), + }, + { + emitter: emitSetState, + callback: () => { + store.dispatch(setCurrentPage(action.payload)) + const storeState = store.getState() + const isDroneConnected = storeState.droneConnection.connected + if (isDroneConnected) { + socket.socket.emit("set_state", { state: action.payload }) + } + }, + }, + { + emitter: emitGetHomePosition, + callback: () => socket.socket.emit("get_home_position"), + }, + { + emitter: emitGetCurrentMissionAll, + callback: () => { + socket.socket.emit("get_current_mission_all") + store.dispatch(showDashboardMissionFetchingNotificationThunk()) + }, + }, + { + emitter: emitSetLoiterRadius, + callback: () => + socket.socket.emit("set_loiter_radius", { + radius: action.payload, + }), + }, + { + emitter: emitGetLoiterRadius, + callback: () => socket.socket.emit("get_loiter_radius"), + }, + { + emitter: emitReposition, + callback: () => + socket.socket.emit("reposition", { + lat: action.payload.lat, + lon: action.payload.lon, + alt: action.payload.alt, + }), + }, + { + emitter: emitArmDisarm, + callback: () => + socket.socket.emit("arm_disarm", { + arm: action.payload.arm, + force: action.payload.force, + }), + }, + { + emitter: emitTakeoff, + callback: () => + socket.socket.emit("takeoff", { alt: action.payload.alt }), + }, + { + emitter: emitLand, + callback: () => socket.socket.emit("land"), + }, + { + emitter: emitSetCurrentFlightMode, + callback: () => + socket.socket.emit("set_current_flight_mode", { + newFlightMode: action.payload.newFlightMode, + }), + }, + + /* + ============ + = MISSIONS = + ============ + */ + { + emitter: emitGetTargetInfo, + callback: () => socket.socket.emit("get_target_info"), + }, + { + emitter: emitGetCurrentMission, + callback: () => { + const storeState = store.getState() + socket.socket.emit("get_current_mission", { + type: storeState.missionInfo.activeTab, + }) + }, + }, + { + emitter: emitWriteCurrentMission, + callback: () => { + socket.socket.emit("write_current_mission", { + type: action.payload.type, + items: action.payload.items, + }) + store.dispatch(setShouldFetchAllMissionsOnDashboard(true)) + }, + }, + { + emitter: emitImportMissionFromFile, + callback: () => { + socket.socket.emit("import_mission_from_file", { + type: action.payload.type, + file_path: action.payload.file_path, + }) + }, + }, + { + emitter: emitExportMissionToFile, + callback: () => { + socket.socket.emit("export_mission_to_file", { + type: action.payload.type, + file_path: action.payload.file_path, + items: action.payload.items, + }) + }, + }, + { + emitter: emitControlMission, + callback: () => { + const controlAction = action.payload.action + if (!["start", "restart"].includes(controlAction)) + return console.error( + `Invalid control mission action, got ${controlAction}`, + ) + + socket.socket.emit("control_mission", { + action: controlAction, + }) + }, + }, + + /* + ========== + = PARAMS = + ========== + */ + { + emitter: emitRebootAutopilot, + callback: () => socket.socket.emit("reboot_autopilot"), + }, + { + emitter: emitRefreshParams, + callback: () => socket.socket.emit("refresh_params"), + }, + { + emitter: emitSetMultipleParams, + callback: () => socket.socket.emit("set_multiple_params", action.payload), + }, + + /* + ========== + = CONFIG = + ========== + */ + { + emitter: emitGetGripperEnabled, + callback: () => socket.socket.emit("get_gripper_enabled"), + }, + { + emitter: emitGetFlightModeConfig, + callback: () => socket.socket.emit("get_flight_mode_config"), + }, + { + emitter: emitSetFlightMode, + callback: () => + socket.socket.emit("set_flight_mode", { + mode_number: action.payload.mode_number, + flight_mode: action.payload.flight_mode, + }), + }, + { + emitter: emitRefreshFlightModeData, + callback: () => socket.socket.emit("refresh_flight_mode_data"), + }, + { + emitter: emitSetGripper, + callback: () => socket.socket.emit("set_gripper", action.payload), + }, + { + emitter: emitGetFrameConfig, + callback: () => socket.socket.emit("get_frame_config"), + }, + { + emitter: emitTestOneMotor, + callback: () => + socket.socket.emit("test_one_motor", { + motorInstance: action.payload.motorInstance, + throttle: action.payload.throttle, + duration: action.payload.duration, + }), + }, + { + emitter: emitTestMotorSequence, + callback: () => + socket.socket.emit("test_motor_sequence", { + throttle: action.payload.throttle, + duration: action.payload.duration, + number_of_motors: action.payload.numberOfMotors, + }), + }, + { + emitter: emitTestAllMotors, + callback: () => + socket.socket.emit("test_all_motors", { + throttle: action.payload.throttle, + duration: action.payload.duration, + number_of_motors: action.payload.numberOfMotors, + }), + }, + { + emitter: emitGetRcConfig, + callback: () => socket.socket.emit("get_rc_config"), + }, + ] + + for (const { emitter, callback } of emitHandlers) { + if (emitter.match(action)) { + callback() + break + } + } +} diff --git a/gcs/src/redux/middleware/socketMiddleware.js b/gcs/src/redux/middleware/socketMiddleware.js new file mode 100644 index 000000000..6565a3e17 --- /dev/null +++ b/gcs/src/redux/middleware/socketMiddleware.js @@ -0,0 +1,882 @@ +// this redux middleware intercepts all actions from the + +// socket actions +import { + initSocket, + socketConnected, + socketDisconnected, +} from "../slices/socketSlice" + +// drone actions +import { + emitGetComPorts, + emitIsConnectedToDrone, + setComPorts, + setConnected, + setConnecting, + setConnectionModal, + setConnectionStatus, + setFetchingComPorts, + setSelectedComPorts, +} from "../slices/droneConnectionSlice" + +// socket factory +import { dataFormatters } from "../../helpers/dataFormatters.js" +import { isGlobalFrameHomeCommand } from "../../helpers/filterMissions.js" +import { FRAME_CLASS_MAP } from "../../helpers/mavlinkConstants.js" +import { + showErrorNotification, + showSuccessNotification, +} from "../../helpers/notification.js" +import SocketFactory from "../../helpers/socket" +import { + emitGetFlightModeConfig, + setChannelsConfig, + setCurrentPwmValue, + setFlightModeChannel, + setFlightModesList, + setFrameClass, + setFrameTypeDirection, + setFrameTypeName, + setFrameTypeOrder, + setGetGripperEnabled, + setNumberOfMotors, + setRadioChannels, + setRefreshingFlightModeData, + setShowMotorTestWarningModal, +} from "../slices/configSlice.js" +import { + setAttitudeData, + setBatteryData, + setDroneAircraftType, + setExtraData, + setGpsData, + setGpsRawIntData, + setGuidedModePinData, + setHeartbeatData, + setHomePosition, + setLastGraphMessage, + setLoiterRadius, + setNavControllerOutput, + setOnboardControlSensorsEnabled, + setRSSIData, + setTelemetryData, +} from "../slices/droneInfoSlice" +import { + addIdToItem, + closeDashboardMissionFetchingNotificationNoSuccessThunk, + closeDashboardMissionFetchingNotificationThunk, + setCurrentMission, + setCurrentMissionItems, + setDrawingFenceItems, + setDrawingMissionItems, + setDrawingRallyItems, + setMissionProgressData, + setMissionProgressModal, + setShouldFetchAllMissionsOnDashboard, + setTargetInfo, + setUnwrittenChanges, + setUpdatePlannedHomePositionFromLoadData, + setUpdatePlannedHomePositionFromLoadModal, +} from "../slices/missionSlice" +import { + setAutoPilotRebootModalOpen, + setFetchingVars, + setFetchingVarsProgress, + setHasFetchedOnce, + setModifiedParams, + setParams, + setParamSearchValue, + setRebootData, + setShownParams, + updateParamValue, +} from "../slices/paramsSlice.js" +import { pushMessage } from "../slices/statusTextSlice.js" +import { handleEmitters } from "./emitters.js" + +const SocketEvents = Object.freeze({ + // socket.on events + Connect: "connect", + Disconnect: "disconnect", + + // droneConnectionSlice + // getComPorts: "get_com_ports", + isConnectedToDrone: "is_connected_to_drone", + listComPorts: "list_com_ports", + linkDebugStats: "link_debug_stats", +}) + +const DroneSpecificSocketEvents = Object.freeze({ + onDroneError: "drone_error", + onArmDisarm: "arm_disarm", + onSetCurrentFlightMode: "set_current_flight_mode_result", + onNavResult: "nav_result", + onHomePositionResult: "home_position_result", + onIncomingMsg: "incoming_msg", + onNavRepositionResult: "nav_reposition_result", + onGetLoiterRadiusResult: "nav_get_loiter_radius_result", + onSetLoiterRadiusResult: "nav_set_loiter_radius_result", +}) + +const ParamSpecificSocketEvents = Object.freeze({ + onRebootAutopilot: "reboot_autopilot", + onParamsMessage: "params", + onParamRequestUpdate: "param_request_update", + onParamSetSuccess: "param_set_success", + onParamError: "params_error", +}) + +const MissionSpecificSocketEvents = Object.freeze({ + onMissionControlResult: "mission_control_result", + onWriteMissionResult: "write_mission_result", + onImportMissionResult: "import_mission_result", + onExportMissionResult: "export_mission_result", + onCurrentMissionAll: "current_mission_all", + onCurrentMission: "current_mission", + onTargetInfo: "target_info", + onCurrentMissionProgress: "current_mission_progress", +}) + +const ConfigSpecificSocketEvents = Object.freeze({ + onGripperEnabled: "is_gripper_enabled", + onSetGripperResult: "set_gripper_result", + onMotorTestResult: "motor_test_result", + onFlightModeConfig: "flight_mode_config", + onSetFlightModeResult: "set_flight_mode_result", + onFrameTypeConfig: "frame_type_config", + onRcConfig: "rc_config", +}) + +const socketMiddleware = (store) => { + let socket + + function handleRcChannels(msg) { + let chans = {} + const chanCount = msg.chancount || 16 // default to 16 channels if chancount is 0 + for (let i = 1; i < chanCount + 1; i++) { + chans[i] = msg[`chan${i}_raw`] + } + + store.dispatch(setRadioChannels(chans)) + } + + const incomingMessageHandler = (msg) => { + switch (msg.mavpackettype) { + case "VFR_HUD": + store.dispatch(setTelemetryData(msg)) + break + case "ATTITUDE": + store.dispatch(setAttitudeData(msg)) + break + case "GLOBAL_POSITION_INT": + store.dispatch(setGpsData(msg)) + break + case "NAV_CONTROLLER_OUTPUT": + store.dispatch(setNavControllerOutput(msg)) + break + case "HEARTBEAT": + store.dispatch(setHeartbeatData(msg)) + break + case "STATUSTEXT": + store.dispatch(pushMessage(msg)) + break + case "SYS_STATUS": + store.dispatch( + setOnboardControlSensorsEnabled(msg.onboard_control_sensors_enabled), + ) + break + case "GPS_RAW_INT": + store.dispatch(setGpsRawIntData(msg)) + break + case "RC_CHANNELS": + // NOTE: UNABLE TO TEST IN SIMULATOR! + store.dispatch(setRSSIData(msg.rssi)) + handleRcChannels(msg) + break + case "MISSION_CURRENT": + store.dispatch(setCurrentMission(msg)) + break + case "BATTERY_STATUS": + store.dispatch(setBatteryData(msg)) + break + } + } + + return (next) => (action) => { + if (initSocket.match(action)) { + // client side execution + if (!socket && typeof window !== "undefined") { + socket = SocketFactory.create() + + /* + ======================== + = UNDERLYING CONNECTION = + ======================== + */ + + // handle socket connection events + // EXAMPLE SOCKET.ON EVENT + socket.socket.on(SocketEvents.Connect, () => { + // DISPATCH ALL ACTIONS HERE + // SINCE IT'S MIDDLEWARE, OTHER FUNCTIONS CAN ALSO BE CALLED + console.log(`Connected to socket from redux, ${socket.socket.id}`) + store.dispatch(socketConnected()) + store.dispatch(emitIsConnectedToDrone()) + }) + + socket.socket.on(SocketEvents.Disconnect, () => { + console.log(`Disconnected from socket via redux, ${socket.socket.id}`) + store.dispatch(socketDisconnected()) + }) + + /* + ==================== + = DRONE CONNECTIONS = + ==================== + */ + + socket.socket.on("connected", () => { + store.dispatch(setConnected(true)) + }) + + socket.socket.on("disconnect", () => { + store.dispatch(setConnected(false)) + store.dispatch(setConnecting(false)) + }) + + socket.socket.on("is_connected_to_drone", (msg) => { + if (msg) { + store.dispatch(setConnected(true)) + } else { + store.dispatch(setConnected(false)) + store.dispatch(setConnecting(false)) + store.dispatch(emitGetComPorts()) + store.dispatch( + closeDashboardMissionFetchingNotificationNoSuccessThunk(), + ) + } + }) + + // Fetch com ports and list them + socket.socket.on("list_com_ports", (msg) => { + store.dispatch(setFetchingComPorts(false)) + store.dispatch(setComPorts(msg)) + const possibleComPort = msg.find( + (port) => + port.toLowerCase().includes("mavlink") || + port.toLowerCase().includes("ardupilot"), + ) + if (!store.getState().droneConnection.selected_com_ports) { + // If no com port is selected, select a possible mavlink/ardupilot port if it exists, otherwise select the first port + if (possibleComPort !== undefined) { + store.dispatch(setSelectedComPorts(possibleComPort)) + } else if (msg.length > 0) { + store.dispatch(setSelectedComPorts(msg[0])) + } + } + }) + + // Flags that the drone is disconnected + socket.socket.on("disconnected_from_drone", () => { + store.dispatch(setConnected(false)) + }) + + // Flags an error with the com port + socket.socket.on("connection_error", (msg) => { + console.error("Connection error: " + msg.message) + showErrorNotification(msg.message) + store.dispatch(setConnecting(false)) + store.dispatch(setConnected(false)) + }) + + // Setting connection status + socket.socket.on("drone_connect_status", (msg) => { + store.dispatch( + setConnectionStatus({ + message: msg.message, + progress: msg.progress, + }), + ) + }) + + // Flags that the drone is connected + socket.socket.on("connected_to_drone", (msg) => { + store.dispatch(setDroneAircraftType(msg.aircraft_type)) // There are two aircraftTypes, make sure to not use FLA one haha :D + if (msg.aircraft_type !== 1 && msg.aircraft_type !== 2) { + showErrorNotification("Aircraft not of type quadcopter or plane") + } + store.dispatch(setConnected(true)) + store.dispatch(setConnecting(false)) + store.dispatch(setConnectionModal(false)) + + store.dispatch(setHasFetchedOnce(false)) + store.dispatch(setGuidedModePinData({ lat: 0, lon: 0, alt: 0 })) + store.dispatch(setRebootData({})) + store.dispatch(setAutoPilotRebootModalOpen(false)) + store.dispatch(setShouldFetchAllMissionsOnDashboard(true)) + store.dispatch(setShowMotorTestWarningModal(true)) + }) + + // Link stats + socket.socket.on(SocketEvents.linkDebugStats, (msg) => { + window.ipcRenderer.updateLinkStats(msg) + }) + } + } + + if (setConnected.match(action)) { + // Setup socket listeners on drone connection + if (action.payload) { + socket.socket.on(DroneSpecificSocketEvents.onDroneError, (msg) => { + showErrorNotification(msg.message) + }) + + socket.socket.on(DroneSpecificSocketEvents.onArmDisarm, (msg) => { + if (!msg.success) showErrorNotification(msg.message) + }) + + socket.socket.on( + DroneSpecificSocketEvents.onSetCurrentFlightMode, + (msg) => { + msg.success + ? showSuccessNotification(msg.message) + : showErrorNotification(msg.message) + }, + ) + + socket.socket.on(DroneSpecificSocketEvents.onNavResult, (msg) => { + msg.success + ? showSuccessNotification(msg.message) + : showErrorNotification(msg.message) + }) + + socket.socket.on( + DroneSpecificSocketEvents.onHomePositionResult, + (msg) => { + if (msg.success) { + store.dispatch(setHomePosition(msg.data)) // use actual home position + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on(ParamSpecificSocketEvents.onRebootAutopilot, (msg) => { + store.dispatch(setRebootData(msg)) + if (msg.success) { + store.dispatch(setAutoPilotRebootModalOpen(false)) + showSuccessNotification(msg.message) + store.dispatch(setRebootData({})) + } + }) + + socket.socket.on(ParamSpecificSocketEvents.onParamsMessage, (msg) => { + store.dispatch(setParams(msg)) + store.dispatch(setShownParams(msg)) + store.dispatch(setFetchingVars(false)) + store.dispatch(setFetchingVarsProgress({ progress: 0, param_id: "" })) + store.dispatch(setParamSearchValue("")) + }) + + socket.socket.on( + ParamSpecificSocketEvents.onParamRequestUpdate, + (msg) => { + store.dispatch( + setFetchingVarsProgress({ + progress: + (msg.current_param_index / msg.total_number_of_params) * 100, + param_id: msg.current_param_id, + }), + ) + }, + ) + + socket.socket.on(ParamSpecificSocketEvents.onParamSetSuccess, (msg) => { + showSuccessNotification(msg.message) + store.dispatch(setModifiedParams([])) + // Update the param in the params list also + for (let param of msg.data) { + store.dispatch(updateParamValue(param)) + } + }) + + socket.socket.on(ParamSpecificSocketEvents.onParamError, (msg) => { + showErrorNotification(msg.message) + store.dispatch(setFetchingVars(false)) + }) + + socket.socket.on( + DroneSpecificSocketEvents.onNavRepositionResult, + (msg) => { + if (msg.success) { + showSuccessNotification(msg.message) + store.dispatch(setGuidedModePinData(msg.data)) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + DroneSpecificSocketEvents.onGetLoiterRadiusResult, + (msg) => { + if (msg.success) { + store.dispatch(setLoiterRadius(msg.data)) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + DroneSpecificSocketEvents.onSetLoiterRadiusResult, + (msg) => { + msg.success + ? showSuccessNotification(msg.message) + : showErrorNotification(msg.message) + }, + ) + + /* + Missions + */ + socket.socket.on( + MissionSpecificSocketEvents.onCurrentMissionAll, + (msg) => { + if (!msg.success) { + showErrorNotification(msg.message) + } else { + store.dispatch( + setCurrentMissionItems({ + missionItems: msg.mission_items, + fenceItems: msg.fence_items, + rallyItems: msg.rally_items, + }), + ) + store.dispatch(setShouldFetchAllMissionsOnDashboard(false)) + } + store.dispatch(closeDashboardMissionFetchingNotificationThunk()) + }, + ) + + socket.socket.on( + MissionSpecificSocketEvents.onCurrentMission, + (msg) => { + // Close modal + store.dispatch(setMissionProgressModal(false)) + + if (msg.success) { + // Handle each mission item + const storeState = store.getState() + if (msg.mission_type === "mission") { + const missionItemsWithIds = [] + for (let missionItem of msg.items) { + missionItemsWithIds.push(addIdToItem(missionItem)) + } + + // Check if first item is a home location, then open modal to + // select whether to update planned home position + if (missionItemsWithIds.length > 0) { + const potentialHomeLocation = missionItemsWithIds[0] + const currentPlannedHomeLocation = + storeState.missionInfo.plannedHomePosition + + // Check if the potential home location is different from the current planned home location + if ( + isGlobalFrameHomeCommand(potentialHomeLocation) && + (potentialHomeLocation.x !== + currentPlannedHomeLocation.lat || + potentialHomeLocation.y !== + currentPlannedHomeLocation.lon || + potentialHomeLocation.z !== + currentPlannedHomeLocation.alt) + ) { + store.dispatch( + setUpdatePlannedHomePositionFromLoadData({ + lat: potentialHomeLocation.x, + lon: potentialHomeLocation.y, + alt: potentialHomeLocation.z, + from: "drone", + }), + ) + store.dispatch( + setUpdatePlannedHomePositionFromLoadModal(true), + ) + } + } + store.dispatch(setDrawingMissionItems(missionItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + mission: false, + }), + ) + } else if (msg.mission_type === "fence") { + const fenceItemsWithIds = [] + for (let fence of msg.items) { + fenceItemsWithIds.push(addIdToItem(fence)) + } + store.dispatch(setDrawingFenceItems(fenceItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + fence: false, + }), + ) + } else if (msg.mission_type === "rally") { + const rallyItemsWithIds = [] + for (let rallyItem of msg.items) { + rallyItemsWithIds.push(addIdToItem(rallyItem)) + } + store.dispatch(setDrawingRallyItems(rallyItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + rally: false, + }), + ) + } + + showSuccessNotification(`${msg.mission_type} read successfully`) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + MissionSpecificSocketEvents.onWriteMissionResult, + (msg) => { + store.dispatch(setMissionProgressModal(false)) + + const storeState = store.getState() + if (msg.success) { + showSuccessNotification(msg.message) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + [storeState.missionInfo.activeTab]: false, + }), + ) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + MissionSpecificSocketEvents.onImportMissionResult, + (msg) => { + if (msg.success) { + const storeState = store.getState() + + if (msg.mission_type === "mission") { + const missionItemsWithIds = [] + for (let missionItem of msg.items) { + missionItemsWithIds.push(addIdToItem(missionItem)) + } + + // Check if first item is a home location, then open modal to + // select whether to update planned home position + if (missionItemsWithIds.length > 0) { + const potentialHomeLocation = missionItemsWithIds[0] + const currentPlannedHomeLocation = + storeState.missionInfo.plannedHomePosition + + // Check if the potential home location is different from the current planned home location + if ( + isGlobalFrameHomeCommand(potentialHomeLocation) && + (potentialHomeLocation.x !== + currentPlannedHomeLocation.lat || + potentialHomeLocation.y !== + currentPlannedHomeLocation.lon || + potentialHomeLocation.z !== + currentPlannedHomeLocation.alt) + ) { + store.dispatch( + setUpdatePlannedHomePositionFromLoadData({ + lat: potentialHomeLocation.x, + lon: potentialHomeLocation.y, + alt: potentialHomeLocation.z, + from: "file", + }), + ) + store.dispatch( + setUpdatePlannedHomePositionFromLoadModal(true), + ) + } + } + store.dispatch(setDrawingMissionItems(missionItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + mission: true, + }), + ) + } else if (msg.mission_type === "fence") { + const fenceItemsWithIds = [] + for (let fence of msg.items) { + fenceItemsWithIds.push(addIdToItem(fence)) + } + store.dispatch(setDrawingFenceItems(fenceItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + fence: true, + }), + ) + } else if (msg.mission_type === "rally") { + const rallyItemsWithIds = [] + for (let rallyItem of msg.items) { + rallyItemsWithIds.push(addIdToItem(rallyItem)) + } + + store.dispatch(setDrawingRallyItems(rallyItemsWithIds)) + store.dispatch( + setUnwrittenChanges({ + ...storeState.missionInfo.unwrittenChanges, + rally: true, + }), + ) + } + + showSuccessNotification(msg.message) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + MissionSpecificSocketEvents.onMissionControlResult, + (msg) => { + msg.success + ? showSuccessNotification(msg.message) + : showErrorNotification(msg.message) + }, + ) + + socket.socket.on(MissionSpecificSocketEvents.onTargetInfo, (msg) => { + store.dispatch(setTargetInfo(msg)) + }) + + socket.socket.on( + MissionSpecificSocketEvents.onExportMissionResult, + (msg) => { + msg.success + ? showSuccessNotification(msg.message) + : showErrorNotification(msg.message) + }, + ) + + socket.socket.on( + MissionSpecificSocketEvents.onCurrentMissionProgress, + (msg) => { + store.dispatch(setMissionProgressData(msg)) + }, + ) + + /* + ========== + = CONFIG = + ========== + */ + socket.socket.on( + ConfigSpecificSocketEvents.onGripperEnabled, + (enabled) => { + store.dispatch(setGetGripperEnabled(enabled)) + }, + ) + + socket.socket.on( + ConfigSpecificSocketEvents.onSetGripperResult, + (msg) => { + if (msg.success) { + showSuccessNotification(msg.message) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + ConfigSpecificSocketEvents.onMotorTestResult, + (msg) => { + if (msg.success) { + showSuccessNotification(msg.message) + } else { + showErrorNotification(msg.message) + } + }, + ) + + socket.socket.on( + ConfigSpecificSocketEvents.onFlightModeConfig, + (msg) => { + store.dispatch(setFlightModesList(msg.flight_modes)) + store.dispatch(setFlightModeChannel(msg.flight_mode_channel)) + store.dispatch(setRefreshingFlightModeData(false)) + }, + ) + + socket.socket.on( + ConfigSpecificSocketEvents.onSetFlightModeResult, + (msg) => { + if (msg.success) { + showSuccessNotification(msg.message) + } else { + showErrorNotification(msg.message) + } + + store.dispatch(emitGetFlightModeConfig()) + }, + ) + + socket.socket.on( + ConfigSpecificSocketEvents.onFrameTypeConfig, + (msg) => { + const currentFrameType = msg.frame_type + const currentFrameClass = msg.frame_class + + // Checks if the frame class has any compatible frame types and if the current frame type param is compatible + if (FRAME_CLASS_MAP[currentFrameClass].frametype) { + if ( + Object.keys( + FRAME_CLASS_MAP[currentFrameClass].frametype, + ).includes(currentFrameType.toString()) + ) { + const frameInfo = + FRAME_CLASS_MAP[currentFrameClass].frametype[currentFrameType] + store.dispatch(setFrameTypeDirection(frameInfo.direction)) + store.dispatch(setFrameTypeOrder(frameInfo.motorOrder)) + store.dispatch(setFrameTypeName(frameInfo.frametypename)) + } + } else { + store.dispatch(setFrameTypeDirection(null)) + store.dispatch(setFrameTypeOrder(null)) + store.dispatch(setFrameTypeName(currentFrameType)) + } + store.dispatch( + setFrameClass(FRAME_CLASS_MAP[currentFrameClass].name), + ) + store.dispatch( + setNumberOfMotors( + FRAME_CLASS_MAP[currentFrameClass].numberOfMotors, + ), + ) + }, + ) + + socket.socket.on(ConfigSpecificSocketEvents.onRcConfig, (msg) => { + const config = {} + + for (let i = 1; i < 17; i++) { + config[i] = msg[`RC_${i}`] + } + config[`${msg.pitch}`].map = "Pitch" + config[`${msg.roll}`].map = "Roll" + config[`${msg.throttle}`].map = "Throttle" + config[`${msg.yaw}`].map = "Yaw" + config[`${msg.flight_modes}`].map = "Flight modes" + + store.dispatch(setChannelsConfig(config)) + }) + + /* + Generic Drone Data + */ + socket.socket.on(DroneSpecificSocketEvents.onIncomingMsg, (msg) => { + incomingMessageHandler(msg) + + // Data points on dashboard, the below code updates the value in the store when a new message + // comes in in the type of specificData. + const packetType = msg.mavpackettype + const storeState = store.getState() + if (storeState !== undefined) { + const extraDroneData = storeState.droneInfo.extraDroneData + const updatedExtraDroneData = extraDroneData.map((dataItem) => { + if (dataItem.currently_selected.startsWith(packetType)) { + const specificData = dataItem.currently_selected.split(".")[1] + if (Object.prototype.hasOwnProperty.call(msg, specificData)) { + return { ...dataItem, value: msg[specificData] } + } + } + return dataItem + }) + + store.dispatch(setExtraData(updatedExtraDroneData)) + } + + // Handle graph messages + // Function to get the graph data from a message + function getGraphDataFromMessage(msg, targetMessageKey) { + const returnDataArray = [] + for (let graphKey in storeState.droneInfo.graphs.selectedGraphs) { + const messageKey = + storeState.droneInfo.graphs.selectedGraphs[graphKey] + if (messageKey && messageKey.includes(targetMessageKey)) { + const [, valueName] = messageKey.split(".") + + // Applying Data Formatters + let formatted_value = msg[valueName] + if (messageKey in dataFormatters) { + formatted_value = dataFormatters[messageKey]( + msg[valueName].toFixed(3), + ) + } + + returnDataArray.push({ + data: { x: Date.now(), y: formatted_value }, + graphKey: graphKey, + }) + } + } + if (returnDataArray.length) { + return returnDataArray + } + return false + } + store.dispatch( + setLastGraphMessage( + getGraphDataFromMessage(msg, msg.mavpackettype), + ), + ) + + // Handle Flight Mode incoming data + if ( + msg.mavpackettype === "RC_CHANNELS" && + storeState.config.flightModeChannel !== "UNKNOWN" + ) { + store.dispatch( + setCurrentPwmValue( + msg[`chan${storeState.config.flightModeChannel}_raw`], + ), + ) + } + }) + } else { + // Turn off socket events + Object.values(DroneSpecificSocketEvents).map((event) => + socket.socket.off(event), + ) + Object.values(ParamSpecificSocketEvents).map((event) => + socket.socket.off(event), + ) + Object.values(MissionSpecificSocketEvents).map((event) => + socket.socket.off(event), + ) + Object.values(ConfigSpecificSocketEvents).map((event) => + socket.socket.off(event), + ) + } + } + + // these actions handle emitting based on UI events + // for each action type, emit socket and pass onto reducer + handleEmitters(socket, store, action) + + next(action) + } +} + +export default socketMiddleware diff --git a/gcs/src/redux/slices/configSlice.js b/gcs/src/redux/slices/configSlice.js new file mode 100644 index 000000000..876d4b1d5 --- /dev/null +++ b/gcs/src/redux/slices/configSlice.js @@ -0,0 +1,171 @@ +import { createSlice } from "@reduxjs/toolkit" + +const configSlice = createSlice({ + name: "config", + initialState: { + getGripperEnabled: false, + flightModes: [ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + ], + flightModeChannel: "UNKNOWN", + refreshingFlightModeData: false, + pwmValue: 0, + frameTypeOrder: null, + frameTypeDirection: null, + frameTypeName: null, + frameClass: null, + numberOfMotors: 4, + showMotorTestWarningModal: true, + radioChannels: { + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + 6: 0, + 7: 0, + 8: 0, + 9: 0, + 10: 0, + 11: 0, + 12: 0, + 13: 0, + 14: 0, + 15: 0, + 16: 0, + }, + radioChannelsConfig: {}, + }, + reducers: { + setGetGripperEnabled: (state, action) => { + if (action.payload === state.getGripperEnabled) return + state.getGripperEnabled = action.payload + }, + setFlightModesList: (state, action) => { + if (action.payload === state.flightModes) return + state.flightModes = action.payload + }, + setFlightModeChannel: (state, action) => { + if (action.payload === state.flightModeChannel) return + state.flightModeChannel = action.payload + }, + setRefreshingFlightModeData: (state, action) => { + if (action.payload === state.refreshingFlightModeData) return + state.refreshingFlightModeData = action.payload + }, + setCurrentPwmValue: (state, action) => { + if (action.payload === state.pwmValue) return + state.pwmValue = action.payload + }, + setFrameTypeOrder: (state, action) => { + if (action.payload === state.frameTypeOrder) return + state.frameTypeOrder = action.payload + }, + setFrameTypeDirection: (state, action) => { + if (action.payload === state.frameTypeDirection) return + state.frameTypeDirection = action.payload + }, + setFrameTypeName: (state, action) => { + if (action.payload === state.frameTypeName) return + state.frameTypeName = action.payload + }, + setFrameClass: (state, action) => { + if (action.payload === state.frameClass) return + state.frameClass = action.payload + }, + setNumberOfMotors: (state, action) => { + if (action.payload === state.numberOfMotors) return + state.numberOfMotors = action.payload + }, + setShowMotorTestWarningModal: (state, action) => { + if (action.payload === state.showMotorTestWarningModal) return + state.showMotorTestWarningModal = action.payload + }, + setRadioChannels: (state, action) => { + if (action.payload === state.radioChannels) return + state.radioChannels = action.payload + }, + setChannelsConfig: (state, action) => { + if (action.payload === state.radioChannelsConfig) return + state.radioChannelsConfig = action.payload + }, + + // Emits + emitGetGripperEnabled: () => {}, + emitGetFlightModeConfig: () => {}, + emitSetFlightMode: () => {}, + emitRefreshFlightModeData: () => {}, + emitSetGripper: () => {}, + emitGetFrameConfig: () => {}, + emitTestOneMotor: () => {}, + emitTestMotorSequence: () => {}, + emitTestAllMotors: () => {}, + emitGetRcConfig: () => {}, + }, + selectors: { + selectGetGripperEnabled: (state) => state.getGripperEnabled, + selectFlightModesList: (state) => state.flightModes, + selectFlightModeChannel: (state) => state.flightModeChannel, + selectRefreshingFlightModeData: (state) => state.refreshingFlightModeData, + selectPwmValue: (state) => state.pwmValue, + selectFrameTypeOrder: (state) => state.frameTypeOrder, + selectFrameTypeDirection: (state) => state.frameTypeDirection, + selectFrameTypeName: (state) => state.frameTypeName, + selectFrameClass: (state) => state.frameClass, + selectNumberOfMotors: (state) => state.numberOfMotors, + selectShowMotorTestWarningModal: (state) => state.showMotorTestWarningModal, + selectRadioChannels: (state) => state.radioChannels, + selectRadioChannelsConfig: (state) => state.radioChannelsConfig, + }, +}) + +export const { + setGetGripperEnabled, + setFlightModesList, + setFlightModeChannel, + setRefreshingFlightModeData, + setCurrentPwmValue, + setFrameTypeOrder, + setFrameTypeDirection, + setFrameTypeName, + setFrameClass, + setNumberOfMotors, + setShowMotorTestWarningModal, + setRadioChannels, + setChannelsConfig, + + // Emitters + emitGetGripperEnabled, + emitGetFlightModeConfig, + emitSetFlightMode, + emitRefreshFlightModeData, + emitSetGripper, + emitGetFrameConfig, + emitTestOneMotor, + emitTestMotorSequence, + emitTestAllMotors, + emitGetRcConfig, +} = configSlice.actions + +export const { + selectGetGripperEnabled, + selectFlightModesList, + selectFlightModeChannel, + selectRefreshingFlightModeData, + selectPwmValue, + selectFrameTypeOrder, + selectFrameTypeDirection, + selectFrameTypeName, + selectFrameClass, + selectNumberOfMotors, + selectShowMotorTestWarningModal, + selectRadioChannels, + selectRadioChannelsConfig, +} = configSlice.selectors + +export default configSlice diff --git a/gcs/src/redux/slices/droneConnectionSlice.js b/gcs/src/redux/slices/droneConnectionSlice.js new file mode 100644 index 000000000..a423a6651 --- /dev/null +++ b/gcs/src/redux/slices/droneConnectionSlice.js @@ -0,0 +1,210 @@ +import { createSlice } from "@reduxjs/toolkit" + +export const ConnectionType = { + Serial: "serial", + Network: "network", +} + +const initialState = { + // drone connection status + connecting: false, + connected: false, + connection_modal: false, + connection_status: { + message: "", + progress: 0, + }, + + // aircraft type + aircraft_type: 0, + + // drone connection parameters + wireless: true, // local + baudrate: "9600", // local + connection_type: ConnectionType.Serial, // local + + // com ports + fetching_com_ports: false, + com_ports: [], + selected_com_ports: null, + + // network parameters + network_type: "tcp", // local + ip: "127.0.0.1", // local + port: "5760", // local + + currentPage: "dashboard", + outsideVisibility: false, // local +} + +const droneConnectionSlice = createSlice({ + name: "droneConnection", + initialState, + reducers: { + // Setters + setConnecting: (state, action) => { + if (action.payload !== state.connecting) { + state.connecting = action.payload + } + }, + setConnected: (state, action) => { + if (action.payload !== state.connected) { + state.connected = action.payload + } + }, + setBaudrate: (state, action) => { + if (action.payload !== state.baudrate) { + state.baudrate = action.payload + } + }, + setConnectionType: (state, action) => { + if (action.payload !== state.connection_type) { + state.connection_type = action.payload + } + }, + setFetchingComPorts: (state, action) => { + if (action.payload !== state.fetching_com_ports) { + state.fetching_com_ports = action.payload + } + }, + setComPorts: (state, action) => { + if (action.payload !== state.com_ports) { + state.com_ports = action.payload + } + }, + setSelectedComPorts: (state, action) => { + if (action.payload !== state.selected_com_ports) { + state.selected_com_ports = action.payload + } + }, + setNetworkType: (state, action) => { + if (action.payload !== state.network_type) { + state.network_type = action.payload + } + }, + setIp: (state, action) => { + if (action.payload !== state.ip) { + state.ip = action.payload + } + }, + setPort: (state, action) => { + if (action.payload !== state.port) { + state.port = action.payload + } + }, + setConnectionModal: (state, action) => { + if (action.payload !== state.connection_modal) { + state.connection_modal = action.payload + } + }, + setConnectionStatus: (state, action) => { + if (action.payload !== state.connection_status) { + state.connection_status = action.payload + } + }, + setWireless: (state, action) => { + if (action.payload !== state.wireless) { + state.wireless = action.payload + } + }, + setCurrentPage: (state, action) => { + if (action.payload !== state.currentPage) { + state.currentPage = action.payload + } + }, + setOutsideVisibility: (state, action) => { + if (action.payload !== state.outsideVisibility) { + state.outsideVisibility = action.payload + } + }, + + // Emits + emitIsConnectedToDrone: () => {}, + emitGetComPorts: (state) => { + state.fetching_com_ports = true + }, + emitDisconnectFromDrone: () => {}, + emitConnectToDrone: () => {}, + emitSetState: () => {}, + emitGetHomePosition: () => {}, + emitGetCurrentMissionAll: () => {}, + emitSetLoiterRadius: () => {}, + emitGetLoiterRadius: () => {}, + emitReposition: () => {}, + emitArmDisarm: () => {}, + emitTakeoff: () => {}, + emitLand: () => {}, + emitSetCurrentFlightMode: () => {}, + }, + selectors: { + selectConnecting: (state) => state.connecting, + selectConnectedToDrone: (state) => state.connected, + selectBaudrate: (state) => state.baudrate, + selectConnectionType: (state) => state.connection_type, + selectFetchingComPorts: (state) => state.fetching_com_ports, + selectComPorts: (state) => state.com_ports, + selectSelectedComPorts: (state) => state.selected_com_ports, + selectNetworkType: (state) => state.network_type, + selectIp: (state) => state.ip, + selectPort: (state) => state.port, + selectConnectionModal: (state) => state.connection_modal, + selectConnectionStatus: (state) => state.connection_status, + selectWireless: (state) => state.wireless, + selectCurrentPage: (state) => state.currentPage, + selectOutsideVisibility: (state) => state.outsideVisibility, + }, +}) + +export const { + // Setters + setConnecting, + setConnected, + setBaudrate, + setConnectionType, + setFetchingComPorts, + setComPorts, + setSelectedComPorts, + setNetworkType, + setIp, + setPort, + setConnectionModal, + setConnectionStatus, + setWireless, + setCurrentPage, + setOutsideVisibility, + + // Emitters + emitIsConnectedToDrone, + emitGetComPorts, + emitDisconnectFromDrone, + emitConnectToDrone, + emitSetState, + emitGetHomePosition, + emitGetCurrentMissionAll, + emitSetLoiterRadius, + emitGetLoiterRadius, + emitReposition, + emitArmDisarm, + emitTakeoff, + emitLand, + emitSetCurrentFlightMode, +} = droneConnectionSlice.actions +export const { + selectConnecting, + selectConnectedToDrone, + selectBaudrate, + selectConnectionType, + selectFetchingComPorts, + selectComPorts, + selectSelectedComPorts, + selectNetworkType, + selectIp, + selectPort, + selectConnectionModal, + selectConnectionStatus, + selectWireless, + selectCurrentPage, + selectOutsideVisibility, +} = droneConnectionSlice.selectors + +export default droneConnectionSlice diff --git a/gcs/src/redux/slices/droneInfoSlice.js b/gcs/src/redux/slices/droneInfoSlice.js new file mode 100644 index 000000000..aa9888cb5 --- /dev/null +++ b/gcs/src/redux/slices/droneInfoSlice.js @@ -0,0 +1,303 @@ +import { createSelector, createSlice } from "@reduxjs/toolkit" +import { defaultDataMessages } from "../../helpers/dashboardDefaultDataMessages" +import { getFlightModeMap, MAV_STATE } from "../../helpers/mavlinkConstants" + +const droneInfoSlice = createSlice({ + name: "droneInfo", + initialState: { + attitudeData: { + roll: 0.0, + pitch: 0.0, + yaw: 0.0, + }, + telemetryData: { + airspeed: 0.0, + groundspeed: 0.0, + }, + gpsData: { + lat: 0.0, + lon: 0.0, + hdg: 0.0, + alt: 0.0, + relativeAlt: 0.0, + }, + homePosition: { + lat: 0, + lon: 0, + alt: 0, + }, + navControllerData: { + navBearing: 0.0, + wpDist: 0.0, + loiterRadius: 80.0, + }, + heartbeatData: { + baseMode: 0, + customMode: 0, + systemStatus: 0, + }, + onboardControlSensorsEnabled: 0, + gpsRawIntData: { + fixType: 0, + satellitesVisible: 0, + }, + rssi: 0.0, + notificationSound: "", + aircraftType: 0, // TODO: This should be in local storage but I have no idea how :D, + batteryData: [], + extraDroneData: [ + ...defaultDataMessages, // TODO: Should also be stored in local storage, values set to 0 on launch but actual messages stored + ], + guidedModePinData: { + lat: 0, // Stored in coords not int + lon: 0, // Stored in coords not int + alt: 0, + }, + graphs: { + selectedGraphs: { + graph_a: null, + graph_b: null, + graph_c: null, + graph_d: null, + }, + lastGraphResultsMessage: false, + }, + }, + reducers: { + setHeartbeatData: (state, action) => { + if ( + action.payload.base_mode & 128 && + !(state.heartbeatData.baseMode & 128) + ) { + state.notificationSound = "armed" + } else if ( + !(action.payload.base_mode & 128) && + state.heartbeatData.baseMode & 128 + ) { + state.notificationSound = "disarmed" + } + state.heartbeatData.baseMode = action.payload.base_mode + state.heartbeatData.customMode = action.payload.custom_mode + state.heartbeatData.systemStatus = action.payload.system_status + }, + setBatteryData: (state, action) => { + const battery = state.batteryData.filter( + (battery) => battery.id == action.payload.id, + )[0] + if (battery) { + Object.assign(battery, action.payload) + } else { + state.batteryData.push(action.payload) + } + }, + soundPlayed: (state) => { + state.notificationSound = "" + }, + changeExtraData: (state, action) => { + state.extraDroneData[action.payload.index] = { + ...state.extraDroneData[action.payload.index], + ...action.payload.data, + } + }, + setExtraData: (state, action) => { + if (action.payload !== state.extraDroneData) { + state.extraDroneData = action.payload + } + }, + setDroneAircraftType: (state, action) => { + if (action.payload !== state.aircraftType) { + state.aircraftType = action.payload + } + }, + setTelemetryData: (state, action) => { + if (action.payload !== state.telemetryData) { + state.telemetryData = action.payload + } + }, + setGpsData: (state, action) => { + if (action.payload !== state.gpsData) { + state.gpsData = action.payload + } + }, + setHomePosition: (state, action) => { + if (action.payload !== state.homePosition) { + state.homePosition = action.payload + } + }, + setAttitudeData: (state, action) => { + if (action.payload !== state.attitudeData) { + state.attitudeData = action.payload + } + }, + setNavControllerOutput: (state, action) => { + if (action.payload !== state.navControllerData) { + state.navControllerData.wpDist = action.payload.wp_dist + state.navControllerData.navBearing = action.payload.nav_bearing + } + }, + setGpsRawIntData: (state, action) => { + if (action.payload !== state.gpsRawIntData) { + state.gpsRawIntData.satellitesVisible = + action.payload.satellites_visible + state.gpsRawIntData.fixType = action.payload.fix_type + } + }, + setOnboardControlSensorsEnabled: (state, action) => { + if (action.payload !== state.onboardControlSensorsEnabled) { + state.onboardControlSensorsEnabled = action.payload + } + }, + setRSSIData: (state, action) => { + if (action.payload !== state.rssi) { + state.rssi = action.payload + } + }, + setGraphValues: (state, action) => { + if (action.payload !== state.graphs.selectedGraphs) { + state.graphs.selectedGraphs = action.payload + } + }, + setLastGraphMessage: (state, action) => { + if (action.payload !== state.graphs.lastGraphResultsMessage) { + state.graphs.lastGraphResultsMessage = action.payload + } + }, + setLoiterRadius: (state, action) => { + if (action.payload !== state.navControllerData.loiterRadius) { + state.navControllerData.loiterRadius = action.payload + } + }, + setGuidedModePinData: (state, action) => { + state.guidedModePinData = action.payload + }, + }, + selectors: { + selectAttitude: (state) => state.attitudeData, + selectTelemetry: (state) => state.telemetryData, + + selectGPS: (state) => state.gpsData, + selectHeading: (state) => (state.gpsData.hdg ? state.gpsData.hdg / 100 : 0), + + selectHomePosition: (state) => state.homePosition, + + selectNavController: (state) => state.navControllerData, + selectDesiredBearing: (state) => state.navControllerData.navBearing, + + selectHeartbeat: (state) => state.heartbeatData, + selectArmed: (state) => state.heartbeatData.baseMode & 128, + selectNotificationSound: (state) => state.notificationSound, + selectFlightMode: (state) => state.heartbeatData.customMode, + selectSystemStatus: (state) => MAV_STATE[state.heartbeatData.systemStatus], + + selectPrearmEnabled: (state) => + state.onboardControlSensorsEnabled & 268435456, + + selectGPSRawInt: (state) => state.gpsRawIntData, + selectRSSI: (state) => state.rssi, + selectAircraftType: (state) => state.aircraftType, + selectBatteryData: (state) => + state.batteryData.sort((b1, b2) => b1.id - b2.id), + + selectGuidedModePinData: (state) => state.guidedModePinData, + selectExtraDroneData: (state) => state.extraDroneData, + selectStatusText: (state) => state.statusText, + selectGraphValues: (state) => state.graphs.selectedGraphs, + selectLastGraphMessage: (state) => state.graphs.lastGraphResultsMessage, + }, +}) + +export const { + setHeartbeatData, + soundPlayed, + changeExtraData, + setExtraData, + setDroneAircraftType, + setTelemetryData, + setGpsData, + setHomePosition, + setAttitudeData, + setNavControllerOutput, + setGpsRawIntData, + setBatteryData, + setOnboardControlSensorsEnabled, + setRSSIData, + setGraphValues, + setLastGraphMessage, + setLoiterRadius, + setGuidedModePinData, +} = droneInfoSlice.actions + +// Memoized selectors because redux is a bitch +export const selectDroneCoords = createSelector( + [droneInfoSlice.selectors.selectGPS], + ({ lat, lon }) => { + return { lat: lat * 1e-7, lon: lon * 1e-7 } + }, +) + +export const selectAttitudeDeg = createSelector( + [droneInfoSlice.selectors.selectAttitude], + ({ roll, pitch, yaw }) => { + return { + roll: roll * (180 / Math.PI), + pitch: pitch * (180 / Math.PI), + yaw: yaw * (180 / Math.PI), + } + }, +) + +export const selectAlt = createSelector( + [droneInfoSlice.selectors.selectGPS], + ({ alt, relativeAlt }) => { + return { alt: alt / 1000, relativeAlt: relativeAlt / 1000 } + }, +) + +export const selectAircraftTypeString = createSelector( + [droneInfoSlice.selectors.selectAircraftType], + (aircraftType) => { + switch (aircraftType) { + case 1: + return "Plane" + case 2: + return "Copter" + default: + return "Unknown" + } + }, +) + +export const selectFlightModeString = createSelector( + [droneInfoSlice.selectors.selectFlightMode, selectAircraftTypeString], + (flightMode, aircraftType) => { + //TODO: aircraftType should be in local storage apparently (for some reason?) + const flightModeMap = getFlightModeMap(aircraftType) + return flightModeMap[flightMode] || "UNKNOWN" + }, +) + +export const { + selectAttitude, + selectTelemetry, + selectGPS, + selectHomePosition, + selectNavController, + selectDesiredBearing, + selectHeartbeat, + selectArmed, + selectPrearmEnabled, + selectGPSRawInt, + selectRSSI, + selectHeading, + selectSystemStatus, + selectNotificationSound, + selectFlightMode, + selectAircraftType, + selectBatteryData, + selectGuidedModePinData, + selectExtraDroneData, + selectGraphValues, + selectLastGraphMessage, +} = droneInfoSlice.selectors + +export default droneInfoSlice diff --git a/gcs/src/redux/logAnalyserSlice.js b/gcs/src/redux/slices/logAnalyserSlice.js similarity index 64% rename from gcs/src/redux/logAnalyserSlice.js rename to gcs/src/redux/slices/logAnalyserSlice.js index 404fcdbba..5bd19f7c4 100644 --- a/gcs/src/redux/logAnalyserSlice.js +++ b/gcs/src/redux/slices/logAnalyserSlice.js @@ -50,9 +50,6 @@ const logAnalyserSlice = createSlice({ setMessageMeans: (state, action) => { state.messageMeans = action.payload }, - setChartData: (state, action) => { - state.chartData = action.payload - }, setCustomColors: (state, action) => { state.customColors = action.payload }, @@ -66,6 +63,22 @@ const logAnalyserSlice = createSlice({ state.canSavePreset = action.payload }, }, + selectors: { + selectFile: (state) => state.file, + selectUnits: (state) => state.units, + selectFormatMessages: (state) => state.formatMessages, + selectLogMessages: (state) => state.logMessages, + selectLogEvents: (state) => state.logEvents, + selectFlightModeMessages: (state) => state.flightModeMessages, + selectLogType: (state) => state.logType, + selectUtcAvailable: (state) => state.utcAvailable, + selectMessageFilters: (state) => state.messageFilters, + selectMessageMeans: (state) => state.messageMeans, + selectCustomColors: (state) => state.customColors, + selectColorIndex: (state) => state.colorIndex, + selectAircraftType: (state) => state.aircraftType, + selectCanSavePreset: (state) => state.canSavePreset, + }, }) export const { @@ -79,11 +92,27 @@ export const { setLogType, setMessageFilters, setMessageMeans, - setChartData, setCustomColors, setColorIndex, setAircraftType, setCanSavePreset, } = logAnalyserSlice.actions -export default logAnalyserSlice.reducer +export const { + selectFile, + selectUnits, + selectFormatMessages, + selectLogMessages, + selectLogEvents, + selectFlightModeMessages, + selectLogType, + selectUtcAvailable, + selectMessageFilters, + selectMessageMeans, + selectCustomColors, + selectColorIndex, + selectAircraftType, + selectCanSavePreset, +} = logAnalyserSlice.selectors + +export default logAnalyserSlice diff --git a/gcs/src/redux/slices/missionSlice.js b/gcs/src/redux/slices/missionSlice.js new file mode 100644 index 000000000..852d62e96 --- /dev/null +++ b/gcs/src/redux/slices/missionSlice.js @@ -0,0 +1,627 @@ +import { createSelector, createSlice } from "@reduxjs/toolkit" +import { v4 as uuidv4 } from "uuid" +import { coordToInt } from "../../helpers/dataFormatters" +import { isGlobalFrameHomeCommand } from "../../helpers/filterMissions" +import { MAV_FRAME_LIST } from "../../helpers/mavlinkConstants" +import { + closeLoadingNotification, + showLoadingNotification, +} from "../../helpers/notification" + +const missionInfoSlice = createSlice({ + name: "missionInfo", + initialState: { + currentMission: { + mission_state: 0, + total: 0, + seq: 0, + }, + currentMissionItems: { + missionItems: [], + fenceItems: [], + rallyItems: [], + }, + drawingItems: { + // This is for the missions page, used locally and then will update currentMissionItems on save + missionItems: [], + fenceItems: [], + rallyItems: [], + }, + unwrittenChanges: { + mission: false, + fence: false, + rally: false, + }, + missionProgressData: { + message: "", + progress: null, + }, + updatePlannedHomePositionFromLoadData: { + lat: null, + lon: null, + alt: null, + from: "", // "file" or "drone" + }, + modals: { + missionProgressModal: false, + updatePlannedHomePositionFromLoadModal: false, + }, + plannedHomePosition: { + lat: 0, + lon: 0, + alt: 0, + }, + targetInfo: { + target_component: 0, + target_system: 255, + }, + activeTab: "mission", + contextMenu: { + isOpen: false, + position: { x: 0, y: 0 }, + menuSize: { width: 0, height: 0 }, + canvasSize: { width: 0, height: 0 }, + gpsCoords: { lat: 0, lng: 0 }, + markerId: null, + }, + shouldFetchAllMissionsOnDashboard: true, // bool so that the dashboard can refresh its data when switched to if needed + dashboardMissionFetchingNotificationId: null, + }, + reducers: { + setCurrentMission: (state, action) => { + if (action.payload === state.currentMission) return + state.currentMission = action.payload + }, + setCurrentMissionItems: (state, action) => { + if ( + action.payload === state.currentMissionItems || + action.payload === undefined + ) + return + state.currentMissionItems = action.payload + }, + setPlannedHomePosition: (state, action) => { + if (action.payload === state.plannedHomePosition) return + + // Ensure that lat, lon, and alt (if provided) are numbers + if ( + ("lat" in action.payload && typeof action.payload.lat !== "number") || + ("lon" in action.payload && typeof action.payload.lon !== "number") || + ("alt" in action.payload && typeof action.payload.alt !== "number") + ) { + console.error( + "Latitude, Longitude, and Altitude must be numbers. Got: ", + action.payload, + ) + return + } + + if ( + ("lat" in action.payload && + (action.payload.lat < coordToInt(-90) || + action.payload.lat > coordToInt(90))) || + ("lon" in action.payload && + (action.payload.lon < coordToInt(-180) || + action.payload.lon > coordToInt(180))) + ) { + console.error( + "Latitude must be between -90 and 90, Longitude must be between -180 and 180. Got: ", + action.payload, + ) + return + } + + state.plannedHomePosition = { + ...state.plannedHomePosition, + ...action.payload, + } + + if ( + state.drawingItems.missionItems.length > 0 && + isGlobalFrameHomeCommand(state.drawingItems.missionItems[0]) + ) { + state.drawingItems.missionItems[0] = { + ...state.drawingItems.missionItems[0], + x: state.plannedHomePosition.lat, + y: state.plannedHomePosition.lon, + z: state.plannedHomePosition.alt || 0, + } + } else { + const newHomeItem = { + id: uuidv4(), + seq: 0, // Home position is always the first item + x: state.plannedHomePosition.lat, + y: state.plannedHomePosition.lon, + z: state.plannedHomePosition.alt || 0, + frame: getFrameKey("MAV_FRAME_GLOBAL"), + command: 16, // MAV_CMD_NAV_WAYPOINT + param1: 0, + param2: 0, + param3: 0, + param4: 0, + current: 1, // Set as current waypoint + autocontinue: 1, + target_component: state.targetInfo.target_component, + target_system: state.targetInfo.target_system, + mission_type: 0, + mavpackettype: "MISSION_ITEM_INT", + } + + state.drawingItems.missionItems = [ + newHomeItem, + ...state.drawingItems.missionItems, + ] + } + }, + setTargetInfo: (state, action) => { + if (action.payload === state.targetInfo) return + state.targetInfo = action.payload + }, + updateDrawingItem: (state, action) => { + const payload = action.payload + const _type = `${state.activeTab}Items` + + const index = state.drawingItems[_type].findIndex( + (i) => i.id === payload.id, + ) + if (index === -1) return + + const currentItem = state.drawingItems[_type][index] + + if (currentItem === payload) return + + state.drawingItems[_type][index] = { ...currentItem, ...payload } + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + removeDrawingItem: (state, action) => { + const id = action.payload + const _type = `${state.activeTab}Items` + + const index = state.drawingItems[_type].findIndex((i) => i.id === id) + if (index === -1) return + + state.drawingItems[_type] = state.drawingItems[_type] + .filter((s) => s.id !== id) + .map((item, index) => { + return { ...item, seq: index } + }) + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + reorderDrawingItem: (state, action) => { + const { id, increment } = action.payload + const _type = `${state.activeTab}Items` + const index = state.drawingItems[_type].findIndex((i) => i.id === id) + + if ( + index === -1 || + (increment === -1 && index === 0) || + (increment === 1 && index === state.drawingItems[_type].length - 1) + ) { + return // Prevents reordering if index is out of bounds or at the edge of the list + } + + ;[ + state.drawingItems[_type][index], + state.drawingItems[_type][index + increment], + ] = [ + { ...state.drawingItems[_type][index + increment], seq: index }, + { ...state.drawingItems[_type][index], seq: index + increment }, + ] + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + createNewDefaultDrawingItem: (state, action) => { + const { x, y } = action.payload + const drawingItem = newMissionItem(x, y, state.targetInfo) + + const _type = `${state.activeTab}Items` + + drawingItem.seq = state.drawingItems[_type].length + drawingItem.command = { mission: 16, fence: 5004, rally: 5100 }[ + state.activeTab + ] + drawingItem.mission_type = { mission: 0, fence: 1, rally: 2 }[ + state.activeTab + ] + + if (state.activeTab == "fence") { + drawingItem.param1 = 5 + drawingItem.frame = getFrameKey("MAV_FRAME_GLOBAL") + } + + state.drawingItems[_type].push(drawingItem) + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + createNewSpecificMissionItem: (state, action) => { + const { x, y, z, command } = action.payload + + if (!command) { + console.error("Invalid command for new mission item:", action.payload) + return + } + + const drawingItem = newMissionItem(x, y, state.targetInfo) + const _type = `${state.activeTab}Items` + + drawingItem.seq = state.drawingItems[_type].length + drawingItem.z = z + drawingItem.command = command + drawingItem.mission_type = { mission: 0, fence: 1, rally: 2 }[ + state.activeTab + ] + if (action.payload.frame) { + drawingItem.frame = getFrameKey(action.payload.frame) + } + if (action.payload.params) { + Object.keys(action.payload.params).forEach((key) => { + drawingItem[key] = action.payload.params[key] + }) + } + + state.drawingItems[_type].push(drawingItem) + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + clearDrawingItems: (state) => { + const _type = `${state.activeTab}Items` + + if (state.drawingItems[_type].length === 0) return + + if ( + state.activeTab == "mission" && + state.drawingItems.missionItems.length > 0 && + isGlobalFrameHomeCommand(state.drawingItems.missionItems[0]) + ) { + state.drawingItems.missionItems = [state.drawingItems.missionItems[0]] + } else { + state.drawingItems[_type] = [] + } + state.unwrittenChanges = { + ...state.unwrittenChanges, + [state.activeTab]: true, + } + }, + createFencePolygon: (state, action) => { + const items = action.payload + + state.drawingItems.fenceItems = [ + ...state.drawingItems.fenceItems, + ...items.map((item, index) => ({ + ...newMissionItem(item.x, item.y, state.targetInfo), + ...item, + seq: state.drawingItems.fenceItems.length + index, + })), + ] + state.unwrittenChanges.fence = true + }, + setDrawingMissionItems: (state, action) => { + if (action.payload === state.drawingItems.missionItems) return + state.drawingItems.missionItems = action.payload + }, + setDrawingFenceItems: (state, action) => { + if (action.payload === state.drawingItems.fenceItems) return + state.drawingItems.fenceItems = action.payload + }, + setDrawingRallyItems: (state, action) => { + if (action.payload === state.drawingItems.rallyItems) return + state.drawingItems.rallyItems = action.payload + }, + setUnwrittenChanges: (state, action) => { + if (action.payload === state.unwrittenChanges) return + state.unwrittenChanges = action.payload + }, + setMissionProgressModal: (state, action) => { + if (action.payload === state.modals.missionProgressModal) return + state.modals.missionProgressModal = action.payload + }, + setActiveTab: (state, action) => { + if (action.payload === state.activeTab) return + state.activeTab = action.payload + }, + setMissionProgressData: (state, action) => { + if (action.payload === state.missionProgressData) return + state.missionProgressData = action.payload + }, + resetMissionProgressData: (state) => { + if ( + !state.missionProgressData.message && + !state.missionProgressData.progress + ) + return + state.missionProgressData = { message: "", progress: null } + }, + setUpdatePlannedHomePositionFromLoadModal: (state, action) => { + if ( + action.payload === state.modals.updatePlannedHomePositionFromLoadModal + ) + return + state.modals.updatePlannedHomePositionFromLoadModal = action.payload + }, + setUpdatePlannedHomePositionFromLoadData: (state, action) => { + if ( + JSON.stringify(action.payload) === + JSON.stringify(state.updatePlannedHomePositionFromLoadData) + ) + return + state.updatePlannedHomePositionFromLoadData = action.payload + }, + resetUpdatePlannedHomePositionFromLoadData: (state) => { + state.updatePlannedHomePositionFromLoadData = { + lat: null, + lon: null, + alt: null, + from: "", // "file" or "drone" + } + }, + updateContextMenuState: (state, action) => { + if (action.payload === state.contextMenu) return + + // Update the position of the context menu to ensure it fits within the canvas + + const updatedState = { + ...state.contextMenu, + ...action.payload, + } + + const contextMenuWidth = updatedState.menuSize.width + const contextMenuHeight = updatedState.menuSize.height + let x = updatedState.position.x + let y = updatedState.position.y + + if ( + contextMenuWidth + updatedState.position.x > + updatedState.canvasSize.width + ) { + x = updatedState.position.x - contextMenuWidth + } + if ( + contextMenuHeight + updatedState.position.y > + updatedState.canvasSize.height + ) { + y = updatedState.position.y - contextMenuHeight + } + + state.contextMenu = { + ...updatedState, + position: { x: x, y: y }, + } + }, + setShouldFetchAllMissionsOnDashboard: (state, action) => { + if (action.payload === state.shouldFetchAllMissionsOnDashboard) return + state.shouldFetchAllMissionsOnDashboard = action.payload + }, + setDashboardMissionFetchingNotificationId: (state, action) => { + if (action.payload === state.dashboardMissionFetchingNotificationId) + return + state.dashboardMissionFetchingNotificationId = action.payload + }, + + // Emits + emitGetTargetInfo: () => {}, + emitGetCurrentMission: () => {}, + emitWriteCurrentMission: () => {}, + emitImportMissionFromFile: () => {}, + emitExportMissionToFile: () => {}, + emitControlMission: () => {}, + }, + selectors: { + selectCurrentMission: (state) => state.currentMission, + selectCurrentMissionItems: (state) => state.currentMissionItems, + selectPlannedHomePosition: (state) => state.plannedHomePosition, + selectUpdatePlannedHomePositionFromLoadModal: (state) => + state.modals.updatePlannedHomePositionFromLoadModal, + selectUpdatePlannedHomePositionFromLoadData: (state) => + state.updatePlannedHomePositionFromLoadData, + selectTargetInfo: (state) => state.targetInfo, + selectDrawingMissionItems: (state) => state.drawingItems.missionItems, + selectDrawingFenceItems: (state) => state.drawingItems.fenceItems, + selectDrawingRallyItems: (state) => state.drawingItems.rallyItems, + selectUnwrittenChanges: (state) => state.unwrittenChanges, + selectFirstUnwrittenTab: (state) => + Object.entries(state.unwrittenChanges).find(([, changed]) => changed), + selectMissionProgressModal: (state) => state.modals.missionProgressModal, + selectMissionProgressData: (state) => state.missionProgressData, + selectActiveTab: (state) => state.activeTab, + selectContextMenu: (state) => state.contextMenu, + selectShouldFetchAllMissionsOnDashboard: (state) => + state.shouldFetchAllMissionsOnDashboard, + selectDashboardMissionFetchingNotificationId: (state) => + state.dashboardMissionFetchingNotificationId, + }, +}) + +export const selectDrawingMissionItemByIdx = (index) => + createSelector( + [missionInfoSlice.selectors.selectDrawingMissionItems], + + (missionItems) => missionItems.at(index), + ) + +export const selectDrawingFenceItemByIdx = (index) => + createSelector( + [missionInfoSlice.selectors.selectDrawingFenceItems], + + (fenceItems) => fenceItems.at(index), + ) + +export const selectDrawingRallyItemByIdx = (index) => + createSelector( + [missionInfoSlice.selectors.selectDrawingRallyItems], + + (rallyItems) => rallyItems.at(index), + ) + +export const addIdToItem = (missionItem) => { + if (!missionItem.id) { + missionItem.id = uuidv4() + } + return missionItem +} + +export const updatePlannedHomePositionBasedOnLoadedWaypointsThunk = + () => (dispatch, getState) => { + const { updatePlannedHomePositionFromLoadData } = getState().missionInfo + dispatch( + setPlannedHomePosition({ + lat: updatePlannedHomePositionFromLoadData.lat, + lon: updatePlannedHomePositionFromLoadData.lon, + alt: updatePlannedHomePositionFromLoadData.alt, + }), + ) + dispatch(resetUpdatePlannedHomePositionFromLoadData()) + dispatch(setUpdatePlannedHomePositionFromLoadModal(false)) + } + +export const setPlannedHomePositionToDronesHomePositionThunk = + () => (dispatch, getState) => { + const droneHomePosition = getState().droneInfo.homePosition + if ( + droneHomePosition && + typeof droneHomePosition.lat === "number" && + typeof droneHomePosition.lon === "number" && + typeof droneHomePosition.alt === "number" + ) { + dispatch( + setPlannedHomePosition({ + lat: droneHomePosition.lat, + lon: droneHomePosition.lon, + alt: droneHomePosition.alt, + }), + ) + } else { + console.error( + "Drone home position is not available or invalid. Got: ", + droneHomePosition, + ) + } + } + +export const showDashboardMissionFetchingNotificationThunk = + () => (dispatch) => { + const notificationId = showLoadingNotification( + "Fetching the mission", + "Fetching the mission from the drone", + ) + dispatch(setDashboardMissionFetchingNotificationId(notificationId)) + } + +export const closeDashboardMissionFetchingNotificationThunk = + () => (dispatch, getState) => { + const { dashboardMissionFetchingNotificationId } = getState().missionInfo + if (dashboardMissionFetchingNotificationId) { + closeLoadingNotification( + dashboardMissionFetchingNotificationId, + "Mission fetched", + "Successfully fetched the mission from the drone", + ) + } + dispatch(setDashboardMissionFetchingNotificationId(null)) + } +export const closeDashboardMissionFetchingNotificationNoSuccessThunk = + () => (dispatch, getState) => { + const { dashboardMissionFetchingNotificationId } = getState().missionInfo + if (dashboardMissionFetchingNotificationId) { + closeLoadingNotification( + dashboardMissionFetchingNotificationId, + "", + "", + ) + } + dispatch(setDashboardMissionFetchingNotificationId(null)) + } + +export const getFrameKey = (frame) => + parseInt( + Object.keys(MAV_FRAME_LIST).find((key) => MAV_FRAME_LIST[key] == frame), + ) + +export const newMissionItem = (x, y, targetInfo) => { + return { + id: uuidv4(), + seq: null, + x: x, + y: y, + z: 30, + frame: getFrameKey("MAV_FRAME_GLOBAL_RELATIVE_ALT"), + command: null, + param1: 0, + param2: 0, + param3: 0, + param4: 0, + current: 0, + autocontinue: 1, + target_component: targetInfo.target_component, + target_system: targetInfo.target_system, + mission_type: null, + mavpackettype: "MISSION_ITEM_INT", + } +} + +export const { + selectCurrentMission, + selectCurrentMissionItems, + selectPlannedHomePosition, + selectUpdatePlannedHomePositionFromLoadModal, + selectUpdatePlannedHomePositionFromLoadData, + selectTargetInfo, + selectDrawingMissionItems, + selectDrawingFenceItems, + selectDrawingRallyItems, + selectUnwrittenChanges, + selectFirstUnwrittenTab, + selectMissionProgressModal, + selectMissionProgressData, + selectActiveTab, + selectContextMenu, + selectShouldFetchAllMissionsOnDashboard, + selectDashboardMissionFetchingNotificationId, +} = missionInfoSlice.selectors + +export const { + setCurrentMission, + setCurrentMissionItems, + setPlannedHomePosition, + setUpdatePlannedHomePositionFromLoadModal, + setUpdatePlannedHomePositionFromLoadData, + resetUpdatePlannedHomePositionFromLoadData, + setTargetInfo, + updateDrawingItem, + removeDrawingItem, + reorderDrawingItem, + createNewDefaultDrawingItem, + createNewSpecificMissionItem, + clearDrawingItems, + createFencePolygon, + setDrawingMissionItems, + setDrawingFenceItems, + setDrawingRallyItems, + setUnwrittenChanges, + setMissionProgressModal, + setActiveTab, + setMissionProgressData, + resetMissionProgressData, + updateContextMenuState, + emitGetTargetInfo, + emitGetCurrentMission, + emitWriteCurrentMission, + emitImportMissionFromFile, + emitExportMissionToFile, + setShouldFetchAllMissionsOnDashboard, + setDashboardMissionFetchingNotificationId, + emitControlMission, +} = missionInfoSlice.actions + +export default missionInfoSlice diff --git a/gcs/src/redux/slices/paramsSlice.js b/gcs/src/redux/slices/paramsSlice.js new file mode 100644 index 000000000..eca4c5397 --- /dev/null +++ b/gcs/src/redux/slices/paramsSlice.js @@ -0,0 +1,156 @@ +import { createSlice } from "@reduxjs/toolkit" + +const paramsSlice = createSlice({ + name: "paramsSlice", + initialState: { + rebootData: {}, + autoPilotRebootModalOpen: false, + params: [], + shownParams: [], + modifiedParams: [], + showModifiedParams: false, + fetchingVars: false, + fetchingVarsProgress: { progress: 0, param_id: "" }, + searchValue: "", + hasFetchedOnce: false, + }, + reducers: { + setRebootData: (state, action) => { + if (action.payload === state.rebootData) return + state.rebootData = action.payload + }, + setAutoPilotRebootModalOpen: (state, action) => { + if (action.payload === state.autoPilotRebootModalOpen) return + state.autoPilotRebootModalOpen = action.payload + }, + setParams: (state, action) => { + if (action.payload === state.params) return + state.params = action.payload + }, + setShownParams: (state, action) => { + if (action.payload === state.shownParams) return + state.shownParams = action.payload + }, + setModifiedParams: (state, action) => { + if (action.payload === state.modifiedParams) return + state.modifiedParams = action.payload + }, + setFetchingVars: (state, action) => { + if (action.payload === state.fetchingVars) return + state.fetchingVars = action.payload + }, + setFetchingVarsProgress: (state, action) => { + if (action.payload === state.fetchingVarsProgress) return + state.fetchingVarsProgress = action.payload + }, + setParamSearchValue: (state, action) => { + if (action.payload === state.searchValue) return + state.searchValue = action.payload + }, + toggleShowModifiedParams: (state) => { + state.showModifiedParams = !state.showModifiedParams + }, + appendModifiedParams: (state, action) => { + state.modifiedParams = state.modifiedParams.concat(action.payload) + + // Delete where initial_value and param_value are the same, this is the case when someone deletes the input and puts it in again + // as the same - very niche case but can happen + state.modifiedParams = state.modifiedParams.filter( + (item) => item.initial_value !== item.param_value, + ) + }, + updateParamValue: (state, action) => { + state.params = state.params.map((item) => + item.param_id === action.payload.param_id + ? { ...item, param_value: action.payload.param_value } + : item, + ) + }, + updateModifiedParamValue: (state, action) => { + // Update param_value + state.modifiedParams = state.modifiedParams.map((item) => + item.param_id === action.payload.param_id + ? { ...item, param_value: action.payload.param_value } + : item, + ) + + // Delete where initial_value and param_value are the same + state.modifiedParams = state.modifiedParams.filter( + (item) => item.initial_value !== item.param_value, + ) + }, + deleteModifiedParam: (state, action) => { + state.modifiedParams = state.modifiedParams.filter( + (item) => item.param_id !== action.payload.param_id, + ) + }, + resetParamState: (state) => { + state.fetchingVars = false + state.fetchingVarsProgress = { progress: 0, param_id: "" } + state.params = [] + state.shownParams = [] + state.modifiedParams = [] + state.rebootData = {} + state.searchValue = "" + }, + setHasFetchedOnce: (state, action) => { + state.hasFetchedOnce = action.payload + }, + + // Emitters (empty objects to be captured in the middleware) + emitRebootAutopilot: () => {}, + emitRefreshParams: () => {}, + emitSetMultipleParams: () => {}, + }, + selectors: { + selectRebootData: (state) => state.rebootData, + selectAutoPilotRebootModalOpen: (state) => state.autoPilotRebootModalOpen, + selectParams: (state) => state.params, + selectSingleParam(state, param_id) { + return state.params.find((param) => param.param_id === param_id) + }, + selectShownParams: (state) => state.shownParams, + selectModifiedParams: (state) => state.modifiedParams, + selectShowModifiedParams: (state) => state.showModifiedParams, + selectFetchingVars: (state) => state.fetchingVars, + selectFetchingVarsProgress: (state) => state.fetchingVarsProgress, + selectParamSearchValue: (state) => state.searchValue, + selectHasFetchedOnce: (state) => state.hasFetchedOnce, + }, +}) + +export const { + setRebootData, + setAutoPilotRebootModalOpen, + setParams, + setShownParams, + setModifiedParams, + setFetchingVars, + setFetchingVarsProgress, + setParamSearchValue, + toggleShowModifiedParams, + appendModifiedParams, + updateParamValue, + updateModifiedParamValue, + deleteModifiedParam, + resetParamState, + emitRebootAutopilot, + emitRefreshParams, + emitSetMultipleParams, + setHasFetchedOnce, +} = paramsSlice.actions +export const { + selectRebootData, + selectAutoPilotRebootModalOpen, + selectParams, + selectSingleParam, + selectShownParams, + selectModifiedParams, + selectFetchingVars, + selectFetchingVarsProgress, + selectShowModifiedParams, + selectParamSearchValue, + selectHasFetchedOnce, +} = paramsSlice.selectors + +export default paramsSlice diff --git a/gcs/src/redux/slices/socketSlice.js b/gcs/src/redux/slices/socketSlice.js new file mode 100644 index 000000000..a7f351bb3 --- /dev/null +++ b/gcs/src/redux/slices/socketSlice.js @@ -0,0 +1,25 @@ +import { createSlice } from "@reduxjs/toolkit" + +const socketSlice = createSlice({ + name: "socketConnection", + initialState: { + isConnected: false, + }, + reducers: { + initSocket: (state) => state, + socketConnected: (state) => { + state.isConnected = true + }, + socketDisconnected: (state) => { + state.isConnected = false + }, + }, + selectors: { + selectIsConnectedToSocket: (state) => state.isConnected, + }, +}) + +export const { selectIsConnectedToSocket } = socketSlice.selectors +export const { initSocket, socketConnected, socketDisconnected } = + socketSlice.actions +export default socketSlice diff --git a/gcs/src/redux/slices/statusTextSlice.js b/gcs/src/redux/slices/statusTextSlice.js new file mode 100644 index 000000000..d916906b8 --- /dev/null +++ b/gcs/src/redux/slices/statusTextSlice.js @@ -0,0 +1,21 @@ +import { createSlice } from "@reduxjs/toolkit" + +const statusTextSlice = createSlice({ + name: "statustext", + initialState: { messages: [] }, + reducers: { + pushMessage: (state, action) => { + state.messages.unshift(action.payload) + }, + }, + selectors: { + selectMessages: (state) => { + return state.messages + }, + }, +}) + +export const { pushMessage } = statusTextSlice.actions +export const { selectMessages } = statusTextSlice.selectors + +export default statusTextSlice diff --git a/gcs/src/redux/store.js b/gcs/src/redux/store.js index e73518589..a9496a613 100644 --- a/gcs/src/redux/store.js +++ b/gcs/src/redux/store.js @@ -1,13 +1,233 @@ -import { configureStore } from "@reduxjs/toolkit" -import logAnalyserReducer from "./logAnalyserSlice" +import { combineSlices, configureStore } from "@reduxjs/toolkit" +import droneInfoSlice, { setGraphValues } from "./slices/droneInfoSlice" +import logAnalyserSlice from "./slices/logAnalyserSlice" +import socketSlice from "./slices/socketSlice" + +import socketMiddleware from "./middleware/socketMiddleware" +import configSlice from "./slices/configSlice" +import droneConnectionSlice, { + setBaudrate, + setConnectionType, + setIp, + setNetworkType, + setOutsideVisibility, + setPort, + setSelectedComPorts, + setWireless, +} from "./slices/droneConnectionSlice" +import missionInfoSlice, { setPlannedHomePosition } from "./slices/missionSlice" +import paramsSlice from "./slices/paramsSlice" +import statusTextSlice from "./slices/statusTextSlice" + +const rootReducer = combineSlices( + logAnalyserSlice, + socketSlice, + droneConnectionSlice, + droneInfoSlice, + missionInfoSlice, + statusTextSlice, + paramsSlice, + configSlice, +) export const store = configureStore({ - reducer: { - logAnalyser: logAnalyserReducer, - }, - middleware: (getDefaultMiddleware) => - getDefaultMiddleware({ + reducer: rootReducer, + middleware: (getDefaultMiddleware) => { + return getDefaultMiddleware({ immutableCheck: false, serializableCheck: false, - }), + }).concat([socketMiddleware]) + }, +}) + +// Load individual persisted values from localStorage +const wireless = localStorage.getItem("wirelessConnection") +if (wireless !== null) { + store.dispatch(setWireless(wireless === "true")) +} + +const selected_com_port = localStorage.getItem("selected_com_port") +if (selected_com_port !== null) { + store.dispatch(setSelectedComPorts(selected_com_port)) +} + +const baudrate = localStorage.getItem("baudrate") +if (baudrate !== null) { + store.dispatch(setBaudrate(baudrate)) +} + +const connectionType = localStorage.getItem("connectionType") +if (connectionType !== null) { + store.dispatch(setConnectionType(connectionType)) +} + +const networkType = localStorage.getItem("networkType") +if (networkType !== null) { + store.dispatch(setNetworkType(networkType)) +} + +const ip = localStorage.getItem("ip") +if (ip !== null) { + store.dispatch(setIp(ip)) +} + +const port = localStorage.getItem("port") +if (port !== null) { + store.dispatch(setPort(port)) +} + +const outsideVisibility = localStorage.getItem("outsideVisibility") +if (outsideVisibility !== null) { + store.dispatch(setOutsideVisibility(outsideVisibility === "true")) +} + +const selectedRealtimeGraphs = localStorage.getItem("selectedRealtimeGraphs") +if (selectedRealtimeGraphs !== null) { + try { + const parsedGraphs = JSON.parse(selectedRealtimeGraphs) + store.dispatch(setGraphValues(parsedGraphs)) + } catch (error) { + store.dispatch( + setGraphValues({ + graph_a: null, + graph_b: null, + graph_c: null, + graph_d: null, + }), + ) + } +} + +const plannedHomePosition = localStorage.getItem("plannedHomePosition") +if (plannedHomePosition !== null) { + try { + const homePos = JSON.parse(plannedHomePosition) + // Validate the loaded planned home position, if invalid reset to 0,0,0 + if ( + !("lat" in homePos) || + typeof homePos.lat !== "number" || + !("lon" in homePos) || + typeof homePos.lon !== "number" || + !("alt" in homePos) || + typeof homePos.alt !== "number" + ) { + store.dispatch(setPlannedHomePosition({ lat: 0, lon: 0, alt: 0 })) + } else { + store.dispatch(setPlannedHomePosition(homePos)) + } + } catch (error) { + store.dispatch(setPlannedHomePosition({ lat: 0, lon: 0, alt: 0 })) + } +} + +const updateLocalStorageIfChanged = (key, newValue) => { + if (newValue !== null && newValue !== undefined) { + const currentValue = localStorage.getItem(key) + const stringValue = String(newValue) + if (currentValue !== stringValue) { + localStorage.setItem(key, stringValue) + } + } +} + +const updateSessionStorageIfChanged = (key, newValue) => { + if (newValue !== null && newValue !== undefined) { + const currentValue = sessionStorage.getItem(key) + const stringValue = String(newValue) + if (currentValue !== stringValue) { + sessionStorage.setItem(key, stringValue) + } + } +} + +const updateJSONLocalStorageIfChanged = (key, newValue) => { + if (newValue !== null && newValue !== undefined) { + const currentValue = localStorage.getItem(key) + const stringValue = JSON.stringify(newValue) + if (currentValue !== stringValue) { + localStorage.setItem(key, stringValue) + } + } +} + +// Update states when a new message comes in +store.subscribe(() => { + // Temporary: Skip store subscription for FLA route to avoid delaying UI updates + if (window.location.hash === "#/fla") { + return + } + + const store_mut = store.getState() + + if (typeof store_mut.droneConnection.wireless === "boolean") { + updateLocalStorageIfChanged( + "wirelessConnection", + store_mut.droneConnection.wireless, + ) + } + + if (typeof store_mut.droneConnection.selected_com_ports === "string") { + updateLocalStorageIfChanged( + "selected_com_port", + store_mut.droneConnection.selected_com_ports, + ) + } + + if (typeof store_mut.droneConnection.baudrate === "string") { + updateLocalStorageIfChanged("baudrate", store_mut.droneConnection.baudrate) + } + + if (typeof store_mut.droneConnection.connection_type === "string") { + updateLocalStorageIfChanged( + "connectionType", + store_mut.droneConnection.connection_type, + ) + } + + if (typeof store_mut.droneConnection.network_type === "string") { + updateLocalStorageIfChanged( + "networkType", + store_mut.droneConnection.network_type, + ) + } + + if (typeof store_mut.droneConnection.ip === "string") { + updateLocalStorageIfChanged("ip", store_mut.droneConnection.ip) + } + + if (typeof store_mut.droneConnection.port === "string") { + updateLocalStorageIfChanged("port", store_mut.droneConnection.port) + } + + if (typeof store_mut.droneConnection.outsideVisibility === "boolean") { + updateLocalStorageIfChanged( + "outsideVisibility", + store_mut.droneConnection.outsideVisibility, + ) + } + + if (typeof store_mut.droneInfo.graphs.selectedGraphs === "object") { + updateJSONLocalStorageIfChanged( + "selectedRealtimeGraphs", + store_mut.droneInfo.graphs.selectedGraphs, + ) + } + + if (typeof store_mut.droneConnection.connected === "boolean") { + updateSessionStorageIfChanged( + "connectedToDrone", + store_mut.droneConnection.connected, + ) + } + + // Store the planned home position for use in the map when no drone is connected + if ( + store_mut.missionInfo.plannedHomePosition && + typeof store_mut.missionInfo.plannedHomePosition === "object" + ) { + updateJSONLocalStorageIfChanged( + "plannedHomePosition", + store_mut.missionInfo.plannedHomePosition, + ) + } }) diff --git a/gcs/src/webcam.jsx b/gcs/src/webcam.jsx new file mode 100644 index 000000000..e5b60ea89 --- /dev/null +++ b/gcs/src/webcam.jsx @@ -0,0 +1,21 @@ +import "./css/index.css" // Needs to be at the top of the file +import "./css/resizable.css" + +// Style imports +import "@mantine/core/styles.css" +import "@mantine/notifications/styles.css" +import "@mantine/spotlight/styles.css" +import "@mantine/code-highlight/styles.css" +import "@mantine/tiptap/styles.css" + +import React from "react" +import ReactDOM from "react-dom/client" +import CameraWindow from "./components/dashboard/webcam/webcam" + +ReactDOM.createRoot(document.getElementById("root")).render( + + + , +) + +postMessage({ payload: "removeLoading" }, "*") diff --git a/gcs/tailwind.config.js b/gcs/tailwind.config.js index 67bcfadab..65dcceb5b 100644 --- a/gcs/tailwind.config.js +++ b/gcs/tailwind.config.js @@ -1,10 +1,12 @@ /** @type {import('tailwindcss').Config} */ -import containerQueries from '@tailwindcss/container-queries' +import containerQueries from "@tailwindcss/container-queries" export default { content: [ - './index.html', - './src/**/*.{js,ts,jsx,tsx}', - './node_modules/@tremor/**/*.{js,ts,jsx,tsx}', + "./index.html", + "./webcam.html", + "./aboutWindow.html", + "./src/**/*.{js,ts,jsx,tsx}", + "./node_modules/@tremor/**/*.{js,ts,jsx,tsx}", ], theme: { extend: { @@ -21,7 +23,7 @@ export default { 200: "#F4B6B0", 100: "#F2D2CF", 50: "#F2E9E8", - DEFAULT: '#E74C3C', // falconred-700 + DEFAULT: "#E74C3C", // falconred-700 }, falcongrey: { 950: "#111313", @@ -35,13 +37,11 @@ export default { 200: "#A1ABAD", 100: "#BCC5C7", 50: "#DEE8EA", - TRANSLUCENT: "#171a1bcc", // falcongrey-900 at 80% transparency - DEFAULT: '#1C2021', // falcongrey-800 + TRANSLUCENT: "#171a1bcc", // falcongrey-900 at 80% transparency + DEFAULT: "#1C2021", // falcongrey-800 }, }, }, }, - plugins: [ - containerQueries, - ], + plugins: [containerQueries], } diff --git a/gcs/tsconfig.node.json b/gcs/tsconfig.node.json index 42872c59f..a8583534f 100644 --- a/gcs/tsconfig.node.json +++ b/gcs/tsconfig.node.json @@ -6,5 +6,5 @@ "moduleResolution": "bundler", "allowSyntheticDefaultImports": true }, - "include": ["vite.config.ts"] + "include": ["vite.config.mts"] } diff --git a/gcs/vite.config.ts b/gcs/vite.config.mts similarity index 50% rename from gcs/vite.config.ts rename to gcs/vite.config.mts index 77b1bff59..1a76d22e4 100644 --- a/gcs/vite.config.ts +++ b/gcs/vite.config.mts @@ -1,7 +1,7 @@ -import react from '@vitejs/plugin-react' -import path from 'node:path' -import { defineConfig } from 'vite' -import electron from 'vite-plugin-electron/simple' +import react from "@vitejs/plugin-react" +import path, { resolve } from "node:path" +import { defineConfig } from "vite" +import electron from "vite-plugin-electron/simple" // https://vitejs.dev/config/ export default defineConfig({ @@ -10,16 +10,26 @@ export default defineConfig({ electron({ main: { // Shortcut of `build.lib.entry`. - entry: 'electron/main.ts', + entry: "electron/main.ts", }, preload: { // Shortcut of `build.rollupOptions.input`. // Preload scripts may contain Web assets, so use the `build.rollupOptions.input` instead `build.lib.entry`. - input: path.join(__dirname, 'electron/preload.js'), + input: path.join(__dirname, "electron/preload.js"), }, // Ployfill the Electron and Node.js built-in modules for Renderer process. // See πŸ‘‰ https://github.com/electron-vite/vite-plugin-electron-renderer renderer: {}, }), ], + build: { + rollupOptions: { + input: { + main: resolve(__dirname, "index.html"), + linkStats: resolve(__dirname, "linkStats.html"), + aboutWindow: resolve(__dirname, "aboutWindow.html"), + webcam: resolve(__dirname, "webcam.html"), + }, + }, + }, }) diff --git a/gcs/webcam.html b/gcs/webcam.html new file mode 100644 index 000000000..28b2762e8 --- /dev/null +++ b/gcs/webcam.html @@ -0,0 +1,13 @@ + + + + + + + FGCS Webcam + + +
+ + + \ No newline at end of file diff --git a/radio/app.py b/radio/app.py index 218c895d7..3a145b079 100644 --- a/radio/app.py +++ b/radio/app.py @@ -1,9 +1,12 @@ import os +from pathlib import Path + import app.droneStatus as droneStatus from app import create_app, socketio -from pathlib import Path from dotenv import load_dotenv +os.environ["MAVLINK20"] = "1" + app = create_app(debug=True) if __name__ == "__main__": @@ -20,7 +23,6 @@ host = "127.0.0.1" print("Starting backend.") - print(host) socketio.run(app, allow_unsafe_werkzeug=True, host=host, port=port) if droneStatus.drone: droneStatus.drone.close() diff --git a/radio/app/controllers/armController.py b/radio/app/controllers/armController.py index 62a9e58e6..b01f71e9a 100644 --- a/radio/app/controllers/armController.py +++ b/radio/app/controllers/armController.py @@ -4,7 +4,7 @@ from typing import TYPE_CHECKING from app.customTypes import Response -from app.utils import commandAccepted +from app.utils import commandAccepted, sendingCommandLock from pymavlink import mavutil if TYPE_CHECKING: @@ -21,6 +21,7 @@ def __init__(self, drone: Drone) -> None: """ self.drone = drone + @sendingCommandLock def arm(self, force: bool = False) -> Response: """ Arm the drone. @@ -63,6 +64,7 @@ def arm(self, force: bool = False) -> Response: return {"success": False, "message": "Could not arm, serial exception"} return {"success": False, "message": "Could not arm, command not accepted"} + @sendingCommandLock def disarm(self, force: bool = False) -> Response: """ Disarm the drone. diff --git a/radio/app/controllers/flightModesController.py b/radio/app/controllers/flightModesController.py index 1ab678bf6..9dd6b7a82 100644 --- a/radio/app/controllers/flightModesController.py +++ b/radio/app/controllers/flightModesController.py @@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, List, Union import serial -from app.customTypes import Response -from app.utils import commandAccepted +from app.customTypes import Number, Response +from app.utils import commandAccepted, sendingCommandLock from pymavlink import mavutil if TYPE_CHECKING: @@ -34,6 +34,7 @@ def __init__(self, drone: Drone) -> None: self.drone = drone self.flight_modes: List[Union[str, float]] = [] + self.flight_mode_channel: Union[Number, str] = "UNKNOWN" self.getFlightModes() self.getFlightModeChannel() @@ -41,6 +42,7 @@ def __init__(self, drone: Drone) -> None: def getFlightModes(self) -> None: """ Get the current flight modes of the drone.""" + self.drone.logger.debug("Fetching flight modes") self.flight_modes = [] for mode in FLIGHT_MODES: flight_mode = self.drone.paramsController.getSingleParam(mode) @@ -55,7 +57,7 @@ def getFlightModes(self) -> None: def getFlightModeChannel(self) -> None: """ Get the flight mode channel of the drone.""" - self.flight_mode_channel = "UNKNOWN" + self.drone.logger.debug("Fetching flight mode channel") flight_mode_channel = self.drone.paramsController.getSingleParam("FLTMODE_CH") if flight_mode_channel.get("success"): @@ -126,6 +128,7 @@ def setFlightMode(self, mode_number: int, flight_mode: int) -> Response: "message": f"Failed to set flight mode {mode_number} to {mode_name}", } + @sendingCommandLock def setCurrentFlightMode(self, flightMode: int) -> Response: """ Sends a Mavlink message to the drone for setting its current flight mode @@ -183,3 +186,26 @@ def setGuidedMode(self) -> Response: mode = mavutil.mavlink.PLANE_MODE_GUIDED return self.setCurrentFlightMode(mode) + + def getConfig(self) -> dict: + """ + Get the current flight modes and flight mode channel from cached parameters. + + Returns: + dict: The flight modes and flight mode channel of the drone + """ + self.flight_mode_channel = self.drone.paramsController.getCachedParam( + "FLTMODE_CH" + ).get("param_value", "UNKNOWN") + self.flight_modes = [] + for mode in FLIGHT_MODES: + self.flight_modes.append( + self.drone.paramsController.getCachedParam(mode).get( + "param_value", "UNKNOWN" + ) + ) + + return { + "flight_modes": self.flight_modes, + "flight_mode_channel": self.flight_mode_channel, + } diff --git a/radio/app/controllers/frameController.py b/radio/app/controllers/frameController.py index 4f16c2535..181d36351 100644 --- a/radio/app/controllers/frameController.py +++ b/radio/app/controllers/frameController.py @@ -1,6 +1,8 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Union + +from app.customTypes import Number if TYPE_CHECKING: from app.drone import Drone @@ -15,8 +17,8 @@ def __init__(self, drone: Drone) -> None: """ self.drone = drone - self.frame_type = "UNKNOWN" - self.frame_class = 0 + self.frame_type: Union[Number, str] = "UNKNOWN" + self.frame_class: Number = 0 # Plane type doesn't have a frame type or class if self.drone.aircraft_type != 1: @@ -26,6 +28,7 @@ def __init__(self, drone: Drone) -> None: def getFrameType(self) -> None: """ Gets the current frame type of the drone.""" + self.drone.logger.debug("Fetching frame type") frame_type_result = self.drone.paramsController.getSingleParam("FRAME_TYPE") if frame_type_result.get("success"): @@ -38,6 +41,7 @@ def getFrameType(self) -> None: def getFrameClass(self) -> None: """ Gets the current frame class of the drone.""" + self.drone.logger.debug("Fetching frame class") frame_class_result = self.drone.paramsController.getSingleParam("FRAME_CLASS") if frame_class_result.get("success"): @@ -46,3 +50,22 @@ def getFrameClass(self) -> None: self.frame_class = frame_class_data.param_value else: self.drone.logger.error(frame_class_result.get("message")) + + def getConfig(self) -> dict: + """ + Get the current frame config from cached parameters. + + Returns: + dict: The frame config of the drone + """ + self.frame_type = self.drone.paramsController.getCachedParam("FRAME_TYPE").get( + "param_value", "UNKNOWN" + ) + self.frame_class = self.drone.paramsController.getCachedParam( + "FRAME_CLASS" + ).get("param_value", 0) + + return { + "frame_type": self.frame_type, + "frame_class": self.frame_class, + } diff --git a/radio/app/controllers/gripperController.py b/radio/app/controllers/gripperController.py index 4685dd1be..df3175225 100644 --- a/radio/app/controllers/gripperController.py +++ b/radio/app/controllers/gripperController.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING import serial from app.customTypes import Response @@ -22,10 +22,8 @@ def __init__(self, drone: Drone) -> None: self.drone = drone self.params = {} - if (gripperEnabled := self.getEnabled()) is None: - self.drone.logger.warning("Could not get gripper state from drone.") - elif gripperEnabled is False: - self.drone.logger.warning("Gripper is not enabled.") + if not self.getEnabledFromDrone(): + self.drone.logger.info("Gripper is not enabled.") else: self.params = { "gripAutoclose": self.drone.paramsController.getSingleParam( @@ -51,13 +49,14 @@ def __init__(self, drone: Drone) -> None: ), } - def getEnabled(self) -> Optional[bool]: + def getEnabledFromDrone(self) -> bool: """ Gets the enabled status of the gripper by checking the value of the GRIP_ENABLE param Returns: Optional[bool] """ + self.drone.logger.debug("Fetching gripper enabled state") gripper_enabled_response = self.drone.paramsController.getSingleParam( param_name="GRIP_ENABLE" ) @@ -65,7 +64,7 @@ def getEnabled(self) -> Optional[bool]: self.drone.logger.warning( f"Gripper state could not be fetched from drone: {gripper_enabled_response.get('message')}" ) - return None + return False gripper_enabled_response_data = gripper_enabled_response.get("data") if gripper_enabled_response_data: @@ -73,6 +72,24 @@ def getEnabled(self) -> Optional[bool]: return False + def getEnabled(self) -> bool: + """ + Gets the cached enabled status of the gripper by checking the value of the GRIP_ENABLE param + + Returns: + Optional[bool] + """ + gripper_enabled_param = self.drone.paramsController.getCachedParam( + "GRIP_ENABLE" + ) + if not gripper_enabled_param: + self.drone.logger.warning( + "Gripper state could not be fetched from cache, fetching from drone" + ) + return self.getEnabledFromDrone() + + return bool(gripper_enabled_param.get("param_value")) + def setGripper(self, action: str) -> Response: """ Sets the gripper to either release or grab. @@ -83,13 +100,7 @@ def setGripper(self, action: str) -> Response: Returns: Response """ - if (gripperEnabled := self.getEnabled()) is None: - self.drone.logger.warning("Could not get gripper state from drone.") - return { - "success": False, - "message": "Could not get gripper state from drone.", - } - elif gripperEnabled is False: + if not self.getEnabled(): self.drone.logger.error("Gripper is not enabled") return { "success": False, @@ -103,6 +114,7 @@ def setGripper(self, action: str) -> Response: } self.drone.is_listening = False + self.drone.sending_command_lock.acquire() self.drone.sendCommand( mavutil.mavlink.MAV_CMD_DO_GRIPPER, @@ -119,6 +131,7 @@ def setGripper(self, action: str) -> Response: response = self.drone.master.recv_match(type="COMMAND_ACK", blocking=True) self.drone.is_listening = True + self.drone.sending_command_lock.release() if commandAccepted(response, mavutil.mavlink.MAV_CMD_DO_GRIPPER): return { @@ -132,6 +145,7 @@ def setGripper(self, action: str) -> Response: } except serial.serialutil.SerialException: self.drone.is_listening = True + self.drone.sending_command_lock.release() return { "success": False, "message": "Setting gripper failed, serial exception", diff --git a/radio/app/controllers/missionController.py b/radio/app/controllers/missionController.py index 0dcb28a26..cca6f642b 100644 --- a/radio/app/controllers/missionController.py +++ b/radio/app/controllers/missionController.py @@ -1,11 +1,11 @@ from __future__ import annotations import os -from typing import TYPE_CHECKING, Any, List +from typing import TYPE_CHECKING, Any, Callable, List, Optional import serial -from app.customTypes import Response -from app.utils import commandAccepted, wpToMissionItemInt +from app.customTypes import Number, Response +from app.utils import commandAccepted, sendingCommandLock from pymavlink import mavutil, mavwp if TYPE_CHECKING: @@ -28,6 +28,9 @@ def __init__(self, drone: Drone) -> None: self.drone = drone + # Loaders are only used to manage the mission items that are currently loaded in the drone. + # Importing and exporting mission items to/from files do not use loaders as these waypoints + # are not then loaded into the drone's mission items. self.missionLoader = mavwp.MAVWPLoader( target_system=drone.target_system, target_component=drone.target_component ) @@ -46,9 +49,58 @@ def _checkMissionType(self, mission_type: int) -> Response: } return {"success": True} - def getCurrentMission(self, mission_type: int) -> Response: + def _convertCoordinate(self, coordinate) -> Number: + gps_coordinate_scale = 1e7 + + if isinstance(coordinate, float): + return int(coordinate * gps_coordinate_scale) + elif isinstance(coordinate, int): + return coordinate / gps_coordinate_scale + + raise ValueError( + f"Invalid coordinate type {type(coordinate)}. Must be int or float." + ) + + def _getMissionName(self, mission_type: int) -> str: + """ + Get the name of the mission type. + + Args: + mission_type (int): The type of mission to get the name for. + """ + if mission_type == TYPE_MISSION: + return "mission" + elif mission_type == TYPE_FENCE: + return "fence" + elif mission_type == TYPE_RALLY: + return "rally" + else: + raise ValueError(f"Invalid mission type {mission_type}") + + def _getCommandName(self, command: int) -> str: + """ + Get the name of the command type. + + Args: + command (int): The command to get the name for. + """ + try: + return mavutil.mavlink.enums["MAV_CMD"][command].name + except KeyError: + return f"Unknown command {command}" + + def getCurrentMission( + self, + mission_type: int, + progressUpdateCallback: Optional[Callable[[str, float], None]] = None, + ) -> Response: """ Get the current mission of a specific type from the drone. + + Args: + mission_type (int): The type of mission to get. 0=Mission,1=Fence,2=Rally. + progressUpdateCallback (Optional[Callable]): A callback function to update the progress of the mission fetch. + The callback should accept a string message and a float progress value. """ mission_type_check = self._checkMissionType(mission_type) if not mission_type_check.get("success"): @@ -57,7 +109,7 @@ def getCurrentMission(self, mission_type: int) -> Response: failure_message = "Could not get current mission" try: - mission_items = self.getMissionItems(mission_type=mission_type) + mission_items = self.getMissionItems(mission_type, progressUpdateCallback) if not mission_items.get("success"): return { "success": False, @@ -83,22 +135,22 @@ def getCurrentMissionAll(self) -> Response: rally_items: List[Any] = [] _mission_items = self.getMissionItems(mission_type=TYPE_MISSION) - if not _mission_items.get("success"): - self.drone.logger.warning(_mission_items.get("message")) - else: + if _mission_items.get("success"): mission_items = _mission_items.get("data", []) + else: + return _mission_items _fence_items = self.getMissionItems(mission_type=TYPE_FENCE) - if not _fence_items.get("success"): - self.drone.logger.warning(_fence_items.get("message")) - else: + if _fence_items.get("success"): fence_items = _fence_items.get("data", []) + else: + return _fence_items _rally_items = self.getMissionItems(mission_type=TYPE_RALLY) - if not _rally_items.get("success"): - self.drone.logger.warning(_rally_items.get("message")) - else: + if _rally_items.get("success"): rally_items = _rally_items.get("data", []) + else: + return _rally_items return { "success": True, @@ -109,12 +161,19 @@ def getCurrentMissionAll(self) -> Response: }, } - def getMissionItems(self, mission_type: int) -> Response: + @sendingCommandLock + def getMissionItems( + self, + mission_type: int, + progressUpdateCallback: Optional[Callable[[str, float], None]] = None, + ) -> Response: """ Get all mission items of a specific type from the drone. Args: mission_type (int): The type of mission to get. 0=Mission,1=Fence,2=Rally. + progressUpdateCallback (Optional[Callable]): A callback function to update the progress of the mission fetch. + The callback should accept a string message and a float progress value. """ mission_type_check = self._checkMissionType(mission_type) if not mission_type_check.get("success"): @@ -142,11 +201,11 @@ def getMissionItems(self, mission_type: int) -> Response: # TypeError is raised if mavlink V1 is used where the mission_request_list_send # function does not have a mission_type parameter self.drone.logger.error( - "Failed to request mission list from autopilot, got type error" + "Failed to request mission list from autopilot, got type error. Trying again without mission type." ) return { "success": False, - "message": "Failed to request mission list from autopilot, got type error", + "message": "Failed to request mission list from autopilot, got type error. Try reconnecting to the drone.", } try: @@ -157,6 +216,8 @@ def getMissionItems(self, mission_type: int) -> Response: blocking=True, timeout=2, ) + self.drone.is_listening = True + if response: if response.mission_type != mission_type: self.drone.logger.error( @@ -170,7 +231,12 @@ def getMissionItems(self, mission_type: int) -> Response: f"Got response for mission count of {response.count} for mission type {response.mission_type}" ) loader.clear() - self.drone.is_listening = True + + if progressUpdateCallback: + progressUpdateCallback( + f"Received count of {response.count} waypoints", 0.0 + ) + for i in range(0, response.count): retry_count = 0 while retry_count < 3: @@ -188,6 +254,12 @@ def getMissionItems(self, mission_type: int) -> Response: if item_response_data: loader.add(item_response_data) + + if progressUpdateCallback and response.count != 0: + progressUpdateCallback( + f"Received waypoint {i+1}", (i + 1) / response.count + ) + break else: self.drone.logger.warning( @@ -204,7 +276,6 @@ def getMissionItems(self, mission_type: int) -> Response: "data": loader.wpoints, } else: - self.drone.is_listening = True self.drone.logger.error( f"No response received for mission count for mission type {mission_type}." ) @@ -212,7 +283,6 @@ def getMissionItems(self, mission_type: int) -> Response: "success": False, "message": failure_message, } - except serial.serialutil.SerialException: self.drone.is_listening = True return { @@ -238,9 +308,10 @@ def getItemDetails( if not mission_type_check.get("success"): return mission_type_check - failure_message = f"Failed to get mission item {item_number}/{mission_count} for mission type {mission_type}" + failure_message = f"Failed to get mission item {item_number + 1}/{mission_count} for mission type {mission_type}" self.drone.is_listening = False + # The sending_command_lock is held by the caller function getMissionItems self.drone.master.mav.mission_request_int_send( self.drone.target_system, @@ -260,7 +331,7 @@ def getItemDetails( if response: self.drone.logger.debug( - f"Got response for mission item {item_number}/{mission_count} for mission type {mission_type}" + f"Got response for mission item {item_number + 1}/{mission_count} for mission type {mission_type}" ) return { "success": True, @@ -269,7 +340,7 @@ def getItemDetails( else: self.drone.logger.error( - f"Got no response for mission item {item_number}/{mission_count} for mission type {mission_type}" + f"Got no response for mission item {item_number + 1}/{mission_count} for mission type {mission_type}" ) return { "success": False, @@ -279,13 +350,14 @@ def getItemDetails( except serial.serialutil.SerialException: self.drone.is_listening = True self.drone.logger.error( - f"Got no response for mission item {item_number}/{mission_count}, serial exception" + f"Got no response for mission item {item_number + 1}/{mission_count}, serial exception" ) return { "success": False, "message": f"{failure_message}, serial exception", } + @sendingCommandLock def startMission(self) -> Response: """ Start the mission on the drone. @@ -321,6 +393,7 @@ def startMission(self) -> Response: "message": "Failed to start mission, serial exception", } + @sendingCommandLock def restartMission(self) -> Response: """ Restarts the mission on the drone. @@ -356,6 +429,7 @@ def restartMission(self) -> Response: "message": "Failed to restart mission, serial exception", } + @sendingCommandLock def clearMission(self, mission_type: int) -> Response: """ Clears the specified mission type from the drone. @@ -368,6 +442,7 @@ def clearMission(self, mission_type: int) -> Response: return mission_type_check self.drone.is_listening = False + self.drone.master.mav.mission_clear_all_send( self.drone.target_system, self.drone.target_component, @@ -412,82 +487,105 @@ def clearMission(self, mission_type: int) -> Response: "message": "Could not clear mission, serial exception", } - def loadWaypointFile(self, file_path: str, mission_type: int) -> Response: + def _parseWaypointsListIntoLoader( + self, waypoints: List[dict], mission_type: int + ) -> mavwp.MAVWPLoader: """ - Loads waypoints from a file into the specified mission type. - - Args: - file_path (str): The path to the waypoint file - mission_type (int): The type of mission to load the waypoints into. 0=Mission,1=Fence,2=Rally. + Parses a list of waypoints into a MAVWPLoader object. """ - mission_type_check = self._checkMissionType(mission_type) - if not mission_type_check.get("success"): - return mission_type_check - - if not os.path.exists(file_path): - self.drone.logger.error(f"Waypoint file not found at {file_path}") - return { - "success": False, - "message": f"Waypoint file not found at {file_path}", - } if mission_type == TYPE_MISSION: - loader = self.missionLoader + loader = mavwp.MAVWPLoader( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) elif mission_type == TYPE_FENCE: - loader = self.fenceLoader - else: - loader = self.rallyLoader - - loader.load(file_path) + loader = mavwp.MissionItemProtocol_Fence( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) + elif mission_type == TYPE_RALLY: + loader = mavwp.MissionItemProtocol_Rally( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) - # Remove the first point if it's a command 16 as this is usually a home point or placeholder. - if mission_type in [TYPE_FENCE, TYPE_RALLY]: - first_wp = loader.item(0) - if first_wp.command == 16: - loader.remove(first_wp) + for wp in waypoints: + if isinstance(wp, mavutil.mavlink.MAVLink_mission_item_int_message): + loader.add(wp) + elif isinstance(wp, dict): + # Convert dict to MAVLink mission item int message + p = mavutil.mavlink.MAVLink_mission_item_int_message( + self.drone.target_system, + self.drone.target_component, + wp["seq"], + wp["frame"], + wp["command"], + wp["current"], + wp["autocontinue"], + wp["param1"], + wp["param2"], + wp["param3"], + wp["param4"], + int(wp["x"]), + int(wp["y"]), + wp["z"], + wp["mission_type"], + ) + loader.add(p) + else: + self.drone.logger.error( + f"Invalid waypoint type {type(wp)} in waypoints list" + ) + raise ValueError(f"Invalid waypoint type {type(wp)} in waypoints list") - self.drone.logger.info( - f"Loaded waypoint file with {loader.count()} points successfully" + self.drone.logger.debug( + f"Parsed {loader.count()} waypoints into loader for mission type {mission_type}" ) - return { - "success": True, - "message": f"Waypoint file loaded {loader.count()} points successfully", - } + return loader - def uploadMission(self, mission_type: int) -> Response: + def uploadMission( + self, + mission_type: int, + waypoints: List[dict], + progressUpdateCallback: Optional[Callable[[str, float], None]] = None, + ) -> Response: """ - Uploads the current mission to the drone. + Uploads the current mission to the drone. This method overwrites the current loader if the upload is successful. Args: mission_type (int): The type of mission to upload. 0=Mission,1=Fence,2=Rally. + waypoints (List[dict]): The list of waypoints to upload. Each waypoint should be a dict with the required fields. + progressUpdateCallback (Optional[Callable]): A callback function to update the progress of the mission writing. + The callback should accept a string message and a float progress value. """ mission_type_check = self._checkMissionType(mission_type) if not mission_type_check.get("success"): return mission_type_check - if mission_type == TYPE_MISSION: - loader = self.missionLoader - elif mission_type == TYPE_FENCE: - loader = self.fenceLoader - else: - loader = self.rallyLoader - - if loader.count() == 0: - return { - "success": False, - "message": f"No waypoints loaded for the mission type of {mission_type}", - } + new_loader = self._parseWaypointsListIntoLoader(waypoints, mission_type) clear_mission_response = self.clearMission(mission_type) if not clear_mission_response.get("success"): return clear_mission_response + # If the loader is empty, we don't need to upload anything. + if new_loader.count() == 0: + self.drone.logger.info( + f"Cleared mission type {mission_type}, no waypoints to upload" + ) + return { + "success": True, + "message": f"Cleared mission type {mission_type}, no waypoints to upload", + } + self.drone.is_listening = False + self.drone.sending_command_lock.acquire() self.drone.master.mav.mission_count_send( self.drone.target_system, self.drone.target_component, - loader.count(), + new_loader.count(), mission_type=mission_type, ) @@ -500,6 +598,7 @@ def uploadMission(self, mission_type: int) -> Response: ) if not response: self.drone.is_listening = True + self.drone.sending_command_lock.release() return { "success": False, @@ -509,19 +608,27 @@ def uploadMission(self, mission_type: int) -> Response: self.drone.logger.error( f"Error uploading mission, mission ack response: {response.type}" ) + self.drone.is_listening = True + self.drone.sending_command_lock.release() return { "success": False, "message": "Could not upload mission, received mission acknowledgement error", } + elif response.msgname == "MISSION_ACK" and response.type == 0: + continue # Continue to next iteration if we received a MISSION_ACK elif response.mission_type == mission_type: self.drone.logger.debug( - f"Sending mission item {response.seq} out of {loader.count()}" - ) - self.drone.master.mav.send( - wpToMissionItemInt(loader.item(response.seq)) + f"Sending mission item {response.seq + 1} out of {new_loader.count()}" ) + self.drone.master.mav.send(new_loader.item(response.seq)) - if response.seq == loader.count() - 1: + if progressUpdateCallback and new_loader.count() != 0: + progressUpdateCallback( + f"Sending waypoint {response.seq + 1}", + (response.seq + 1) / (new_loader.count()), + ) + + if response.seq == new_loader.count() - 1: mission_ack_response = self.drone.master.recv_match( type=[ "MISSION_ACK", @@ -530,6 +637,7 @@ def uploadMission(self, mission_type: int) -> Response: timeout=2, ) self.drone.is_listening = True + self.drone.sending_command_lock.release() if ( mission_ack_response @@ -537,6 +645,13 @@ def uploadMission(self, mission_type: int) -> Response: and mission_ack_response.mission_type == mission_type ): self.drone.logger.info("Uploaded mission successfully") + if mission_type == TYPE_MISSION: + self.missionLoader = new_loader + elif mission_type == TYPE_FENCE: + self.fenceLoader = new_loader + else: + self.rallyLoader = new_loader + return { "success": True, "message": "Mission uploaded successfully", @@ -551,7 +666,171 @@ def uploadMission(self, mission_type: int) -> Response: } except serial.serialutil.SerialException: self.drone.is_listening = True + self.drone.sending_command_lock.release() return { "success": False, "message": "Could not upload mission, serial exception", } + + def importMissionFromFile(self, mission_type: int, file_path: str) -> Response: + """ + Imports a mission from a file, return the waypoints loaded. + + Args: + mission_type (int): The type of mission to import. 0=Mission,1=Fence,2=Rally. + file_path (str): The path to the waypoint file to import. + """ + mission_type_check = self._checkMissionType(mission_type) + if not mission_type_check.get("success"): + return mission_type_check + + if not file_path or not os.path.exists(file_path): + self.drone.logger.error(f"Waypoint file not found at {file_path}") + return { + "success": False, + "message": f"Waypoint file not found at {file_path}", + } + + self.drone.logger.debug( + f"Importing waypoint file from {file_path} for mission type {mission_type}" + ) + + if mission_type == TYPE_MISSION: + loader = mavwp.MAVWPLoader( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) + elif mission_type == TYPE_FENCE: + loader = mavwp.MissionItemProtocol_Fence( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) + else: + loader = mavwp.MissionItemProtocol_Rally( + target_system=self.drone.target_system, + target_component=self.drone.target_component, + ) + + try: + loader.load(file_path) + except Exception as e: + self.drone.logger.error(f"Failed to load waypoint file: {e}") + return { + "success": False, + "message": f"Failed to load waypoint file: {e}", + } + + # Remove the first point if it's a command 16 as this is usually a home point or placeholder. + if mission_type in [TYPE_FENCE, TYPE_RALLY]: + if loader.count() > 0: + first_wp = loader.item(0) + if first_wp.command == 16: + loader.remove(first_wp) + else: + self.drone.logger.error("Loader is empty; no waypoints to process.") + return { + "success": False, + "message": "Loader is empty; no waypoints to process.", + } + + for wp in loader.wpoints: + # Check if mission type correlates to correct command + if ( + ( + mission_type == TYPE_RALLY + and wp.command != mavutil.mavlink.MAV_CMD_NAV_RALLY_POINT + ) + or ( + mission_type == TYPE_FENCE + and wp.command + not in [ + mavutil.mavlink.MAV_CMD_NAV_FENCE_RETURN_POINT, + mavutil.mavlink.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION, + ] + ) + or ( + mission_type == TYPE_MISSION + and wp.command + in [ + mavutil.mavlink.MAV_CMD_NAV_RALLY_POINT, + mavutil.mavlink.MAV_CMD_NAV_FENCE_RETURN_POINT, + mavutil.mavlink.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION, + mavutil.mavlink.MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION, + ] + ) + ): + self.drone.logger.error( + f"Waypoint command {self._getCommandName(wp.command)} does not match mission type {self._getMissionName(mission_type)}" + ) + return { + "success": False, + "message": f"Could not load the waypoint file. Waypoint command {self._getCommandName(wp.command)} does not match mission type {self._getMissionName(mission_type)}", + } + + # Convert coordinates to the correct format + if hasattr(wp, "x") and hasattr(wp, "y"): + wp.x = self._convertCoordinate(wp.x) + wp.y = self._convertCoordinate(wp.y) + + self.drone.logger.info( + f"Loaded waypoint file with {loader.count()} points successfully" + ) + return { + "success": True, + "message": f"Waypoint file loaded {loader.count()} points successfully", + "data": [wp.to_dict() for wp in loader.wpoints], + } + + def exportMissionToFile( + self, mission_type: int, file_path: str, waypoints: List[dict] + ) -> Response: + """ + Exports a mission to a file from a given list of waypoints. + + Args: + mission_type (int): The type of mission to export. 0=Mission,1=Fence,2=Rally. + file_path (str): The path to the waypoint file to export. + waypoints (List[dict]): The list of waypoints to upload. Each waypoint should be a dict with the required fields. + """ + mission_type_check = self._checkMissionType(mission_type) + if not mission_type_check.get("success"): + return mission_type_check + + loader = self._parseWaypointsListIntoLoader(waypoints, mission_type) + + for wp in loader.wpoints: + if hasattr(wp, "x") and hasattr(wp, "y"): + wp.x = self._convertCoordinate(wp.x) + wp.y = self._convertCoordinate(wp.y) + + if loader.count() == 0: + return { + "success": False, + "message": f"No waypoints loaded for the mission type of {self._getMissionName(mission_type)}", + } + + self.drone.logger.debug( + f"Exporting waypoint file to {file_path} for mission type {self._getMissionName(mission_type)}" + ) + + try: + loader.save(file_path) + except Exception as e: + self.drone.logger.error(f"Failed to save waypoint file: {e}") + return { + "success": False, + "message": f"Failed to save waypoint file: {e}", + } + + self.drone.logger.info( + f"Saved waypoint file with {loader.count()} points successfully to {file_path}" + ) + return { + "success": True, + "message": f"Waypoint file saved {loader.count()} points successfully to {file_path}", + } diff --git a/radio/app/controllers/motorTestController.py b/radio/app/controllers/motorTestController.py index 50bbe5ef7..2652ae0d8 100644 --- a/radio/app/controllers/motorTestController.py +++ b/radio/app/controllers/motorTestController.py @@ -9,7 +9,7 @@ MotorTestThrottleDurationAndNumber, Response, ) -from app.utils import commandAccepted +from app.utils import commandAccepted, sendingCommandLock from pymavlink import mavutil if TYPE_CHECKING: @@ -55,6 +55,7 @@ def checkMotorTestValues( return throttle, duration, None + @sendingCommandLock def testOneMotor(self, data: MotorTestAllValues) -> Response: """ Test a single motor. @@ -121,6 +122,7 @@ def testOneMotor(self, data: MotorTestAllValues) -> Response: "message": f"Motor test for motor {motor_letter} not started, serial exception", } + @sendingCommandLock def testMotorSequence(self, data: MotorTestThrottleDurationAndNumber) -> Response: """ Test a sequence of motors. @@ -174,6 +176,7 @@ def testMotorSequence(self, data: MotorTestThrottleDurationAndNumber) -> Respons "message": "Motor sequence test not started, serial exception", } + @sendingCommandLock def testAllMotors(self, data: MotorTestThrottleDurationAndNumber) -> Response: """ Test all motors. diff --git a/radio/app/controllers/navController.py b/radio/app/controllers/navController.py index 9cd3d2eeb..20120d3ed 100644 --- a/radio/app/controllers/navController.py +++ b/radio/app/controllers/navController.py @@ -4,7 +4,7 @@ import serial from app.customTypes import Response -from app.utils import commandAccepted +from app.utils import commandAccepted, sendingCommandLock from pymavlink import mavutil if TYPE_CHECKING: @@ -21,6 +21,14 @@ def __init__(self, drone: Drone) -> None: """ self.drone = drone + self.loiter_radius_param_type = mavutil.mavlink.MAV_PARAM_TYPE_INT16 + self.loiter_radius = 80.0 # Default loiter radius + if ( + self.drone.aircraft_type == 1 + ): # Copter doesn't have loiter radius, only Plane + self.getLoiterRadiusFromDrone() + + @sendingCommandLock def getHomePosition(self) -> Response: """ Request the current home position from the drone. @@ -33,12 +41,12 @@ def getHomePosition(self) -> Response: try: response = self.drone.master.recv_match( - type="HOME_POSITION", blocking=True, timeout=3 + type="HOME_POSITION", blocking=True, timeout=1.5 ) self.drone.is_listening = True if response: - self.drone.logger.info(f"Home position received, {response}") + self.drone.logger.info("Home position received") home_position = { "lat": response.latitude, @@ -65,6 +73,7 @@ def getHomePosition(self) -> Response: "message": "Could not get home position, serial exception", } + @sendingCommandLock def setHomePosition(self, lat: float, lon: float, alt: float) -> Response: """ Set the home point of the drone. @@ -130,12 +139,14 @@ def takeoff(self, alt: float) -> Response: return guidedModeSetResult self.drone.is_listening = False + self.drone.sending_command_lock.acquire() self.drone.sendCommand(mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, param7=alt) try: response = self.drone.master.recv_match(type="COMMAND_ACK", blocking=True) self.drone.is_listening = True + self.drone.sending_command_lock.release() if commandAccepted(response, mavutil.mavlink.MAV_CMD_NAV_TAKEOFF): self.drone.is_listening = True @@ -154,6 +165,7 @@ def takeoff(self, alt: float) -> Response: "message": "Could not takeoff, serial exception", } + @sendingCommandLock def land(self) -> Response: """ Tells the drone to land. @@ -202,24 +214,25 @@ def reposition(self, lat: float, lon: float, alt: float) -> Response: self.drone.is_listening = False - self.drone.master.mav.set_position_target_global_int_send( - 0, - self.drone.target_system, - self.drone.target_component, - mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, - 65016, # Bitmask to ignore all values except for x, y and z - int(lat * 1e7), - int(lon * 1e7), - alt, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ) + with self.drone.sending_command_lock: + self.drone.master.mav.set_position_target_global_int_send( + 0, + self.drone.target_system, + self.drone.target_component, + mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, + 65016, # Bitmask to ignore all values except for x, y and z + int(lat * 1e7), + int(lon * 1e7), + alt, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + ) self.drone.logger.info(f"Reposition command sent to {lat}, {lon}, {alt}m") @@ -242,3 +255,84 @@ def reposition(self, lat: float, lon: float, alt: float) -> Response: "success": False, "message": "Could not reposition, serial exception", } + + def getLoiterRadiusFromDrone(self) -> Response: + """ + Get the loiter radius of the drone. + """ + self.drone.logger.debug("Fetching loiter radius") + loiter_radius_data = self.drone.paramsController.getSingleParam( + "WP_LOITER_RAD", timeout=1.5 + ) + + if loiter_radius_data.get("success"): + loiter_radius_param = loiter_radius_data.get("data") + if loiter_radius_param is not None: + self.loiter_radius = loiter_radius_param.param_value + return { + "success": True, + "data": self.loiter_radius, + } + else: + self.drone.logger.error( + "Loiter radius parameter found, but parameter value not found" + ) + return { + "success": False, + "message": "Loiter radius parameter found, but parameter value not found", + } + else: + self.drone.logger.error(loiter_radius_data.get("message")) + return { + "success": False, + "message": loiter_radius_data.get("message", ""), + } + + def getLoiterRadius(self) -> Response: + """ + Get the loiter radius of the drone from the cached parameters. + + Returns: + Response: The response from the get loiter radius command + """ + + loiter_radius_data = self.drone.paramsController.getCachedParam("WP_LOITER_RAD") + + if loiter_radius_data.get("param_value") is None: + self.drone.logger.warning( + "Loiter radius parameter not found in cache, fetching from drone" + ) + return self.getLoiterRadiusFromDrone() + + self.loiter_radius = loiter_radius_data.get("param_value", self.loiter_radius) + + return { + "success": True, + "data": self.loiter_radius, + } + + def setLoiterRadius(self, radius: float) -> Response: + """ + Set the loiter radius of the drone. + + Args: + radius (float): The loiter radius in meters + """ + + param_set_success = self.drone.paramsController.setParam( + "WP_LOITER_RAD", radius, self.loiter_radius_param_type + ) + + if param_set_success: + self.drone.logger.info(f"Loiter radius set to {radius}m") + self.loiter_radius = radius + + return { + "success": True, + "message": f"Loiter radius set to {radius}m", + } + else: + return { + "success": False, + "message": f"Failed to set loiter radius set to {radius}m", + } diff --git a/radio/app/controllers/paramsController.py b/radio/app/controllers/paramsController.py index 5c6635e78..5b4b2597e 100644 --- a/radio/app/controllers/paramsController.py +++ b/radio/app/controllers/paramsController.py @@ -3,16 +3,24 @@ import struct import time from threading import Thread -from typing import TYPE_CHECKING, Any, List, Optional +from typing import TYPE_CHECKING, Any, List, Optional, Union import serial from app.customTypes import IncomingParam, Number, Response +from app.utils import sendingCommandLock from pymavlink import mavutil +from typing_extensions import TypedDict if TYPE_CHECKING: from app.drone import Drone +class CachedParam(TypedDict): + param_name: str + param_value: Number + param_type: int + + class ParamsController: def __init__(self, drone: Drone) -> None: """ @@ -24,11 +32,13 @@ def __init__(self, drone: Drone) -> None: self.drone = drone self.params: List[Any] = [] self.current_param_index = 0 + self.current_param_id = "" self.total_number_of_params = 0 self.is_requesting_params = False self.getAllParamsThread: Optional[Thread] = None - def getSingleParam(self, param_name: str, timeout: Optional[float] = 5) -> Response: + @sendingCommandLock + def getSingleParam(self, param_name: str, timeout: float = 3) -> Response: """ Gets a specific parameter value. @@ -40,6 +50,7 @@ def getSingleParam(self, param_name: str, timeout: Optional[float] = 5) -> Respo Response: The response from the retrieval of the specific parameter """ self.drone.is_listening = False + time.sleep(0.05) # Give some time to stop listening failure_message = f"Failed to get parameter {param_name}" self.drone.master.mav.param_request_read_send( @@ -50,18 +61,32 @@ def getSingleParam(self, param_name: str, timeout: Optional[float] = 5) -> Respo ) try: - response = self.drone.master.recv_match( - type="PARAM_VALUE", blocking=True, timeout=timeout - ) + start_time = time.time() + response = None + while time.time() - start_time < timeout: + # timeout of 0.2 to recv_match to allow checking the overall timeout and not block forever + msg = self.drone.master.recv_match( + type="PARAM_VALUE", blocking=True, timeout=0.2 + ) + + if msg is None: + continue - if response and response.param_id == param_name: - self.drone.is_listening = True + if msg.param_id == param_name: + response = msg + break + + self.drone.is_listening = True + if response: + self.saveParam( + response.param_id, response.param_value, response.param_type + ) return { "success": True, "data": response, } else: - self.drone.is_listening = True + self.drone.logger.error(f"Did not receive {param_name} within timeout") return { "success": False, "message": f"{failure_message}, timed out", @@ -79,6 +104,7 @@ def getAllParams(self) -> None: """ self.drone.stopAllDataStreams() self.drone.is_listening = False + self.is_requesting_params = True self.getAllParamsThread = Thread( target=self.getAllParamsThreadFunc, daemon=True @@ -86,20 +112,20 @@ def getAllParams(self) -> None: self.getAllParamsThread.start() self.drone.master.param_fetch_all() - self.is_requesting_params = True def getAllParamsThreadFunc(self) -> None: """ The thread function to get all parameters from the drone. """ - timeout = time.time() + 20 # 20 seconds from now + timeout = time.time() + 120 # 120 seconds from now - while True: + while self.is_requesting_params: try: if time.time() > timeout: - self.drone.logger.warning("Get all params thread timed out") + self.drone.logger.error("Get all params thread timed out") self.is_requesting_params = False self.current_param_index = 0 + self.current_param_id = "" self.total_number_of_params = 0 self.params = [] self.drone.is_listening = True @@ -110,6 +136,7 @@ def getAllParamsThreadFunc(self) -> None: self.saveParam(msg.param_id, msg.param_value, msg.param_type) self.current_param_index = msg.param_index + self.current_param_id = msg.param_id if self.total_number_of_params != msg.param_count: self.total_number_of_params = msg.param_count @@ -117,6 +144,7 @@ def getAllParamsThreadFunc(self) -> None: if msg.param_index == msg.param_count - 1: self.is_requesting_params = False self.current_param_index = 0 + self.current_param_id = "" self.total_number_of_params = 0 self.params = sorted(self.params, key=lambda k: k["param_id"]) self.drone.is_listening = True @@ -125,13 +153,14 @@ def getAllParamsThreadFunc(self) -> None: except serial.serialutil.SerialException: self.is_requesting_params = False self.current_param_index = 0 + self.current_param_id = "" self.total_number_of_params = 0 self.params = [] self.drone.is_listening = True self.drone.logger.error("Serial exception while getting all params") return - def setMultipleParams(self, params_list: list[IncomingParam]) -> bool: + def setMultipleParams(self, params_list: list[IncomingParam]) -> Response: """ Sets multiple parameters on the drone. @@ -142,21 +171,36 @@ def setMultipleParams(self, params_list: list[IncomingParam]) -> bool: bool: True if all parameters were set, False if any failed """ if not params_list: - return False + return {"success": False, "message": "No parameters to set"} + + params_set_successfully = [] for param in params_list: - param_id = param.get("param_id") - param_value = param.get("param_value") - param_type = param.get("param_type") - if not param_id or not param_value or not param_type: + param_id = param.get("param_id", None) + param_value = param.get("param_value", None) + param_type = param.get("param_type", None) + param.pop("initial_value", None) # Remove initial value if it exists + + if param_id is None or param_value is None or param_type is None: + self.drone.logger.error(f"Invalid parameter data: {param}, skipping") continue done = self.setParam(param_id, param_value, param_type) if not done: - return False + return { + "success": False, + "message": f"Failed to set parameter {param_id}", + } + else: + params_set_successfully.append(param) - return True + return { + "success": True, + "message": "All parameters set successfully", + "data": params_set_successfully, + } + @sendingCommandLock def setParam( self, param_name: str, @@ -266,3 +310,20 @@ def saveParam(self, param_name: str, param_value: Number, param_type: int) -> No "param_type": param_type, } ) + + def getCachedParam(self, params: str) -> Union[CachedParam, dict]: + """ + Get a single parameter from the cached params. + + Args: + params (Optional[str]): The name of the parameter to get + """ + if isinstance(params, str): + try: + return next((x for x in self.params if x["param_id"] == params)) + except StopIteration: + self.drone.logger.error(f"Param {params} not found in cached params") + return {} + else: + self.drone.logger.error(f"Invalid params type, got {type(params)}") + return {} diff --git a/radio/app/controllers/rcController.py b/radio/app/controllers/rcController.py index 05de6345c..221610479 100644 --- a/radio/app/controllers/rcController.py +++ b/radio/app/controllers/rcController.py @@ -17,24 +17,11 @@ def __init__(self, drone: Drone) -> None: self.drone = drone self.params: dict = {} - self.getAndSetParam(self.params, "pitch", "RCMAP_PITCH") - self.getAndSetParam(self.params, "roll", "RCMAP_ROLL") - self.getAndSetParam(self.params, "throttle", "RCMAP_THROTTLE") - self.getAndSetParam(self.params, "yaw", "RCMAP_YAW") + self.fetchParams() - for channel_number in range(1, 17): - channel_params: dict = {} - - self.getAndSetParam(channel_params, "min", f"RC{channel_number}_MIN") - self.getAndSetParam(channel_params, "max", f"RC{channel_number}_MAX") - self.getAndSetParam( - channel_params, "reversed", f"RC{channel_number}_REVERSED" - ) - self.getAndSetParam(channel_params, "option", f"RC{channel_number}_OPTION") - - self.params[f"RC_{channel_number}"] = channel_params - - def getAndSetParam(self, params_dict: dict, param_key: str, param_name: str): + def _getAndSetParam( + self, params_dict: dict, param_key: str, param_name: str + ) -> None: """ Gets and set the value of a parameter inside a dictionary. @@ -46,3 +33,77 @@ def getAndSetParam(self, params_dict: dict, param_key: str, param_name: str): param = self.drone.paramsController.getSingleParam(param_name).get("data") if param: params_dict[param_key] = param.param_value + + def _getAndSetCachedParam( + self, params_dict: dict, param_key: str, param_name: str + ) -> None: + """ + Gets and set the value of a cached parameter inside a dictionary. + + Args: + params_dict (dict): The dictionary to store the parameters + param_key (str): The key for the parameter within the dictionary + param_name (str): The name of the parameter + """ + cached_param = self.drone.paramsController.getCachedParam(param_name) + if cached_param: + params_dict[param_key] = cached_param.get("param_value") + else: + self.drone.logger.warning( + f"Param {param_name} not found in cache, fetching from drone" + ) + fetched_param = self.drone.paramsController.getSingleParam(param_name).get( + "data" + ) + if fetched_param: + params_dict[param_key] = fetched_param.param_value + + def fetchParams(self) -> None: + """ + Fetches the RC parameters from the drone. + """ + self.drone.logger.debug("Fetching RC parameters") + self._getAndSetParam(self.params, "pitch", "RCMAP_PITCH") + self._getAndSetParam(self.params, "roll", "RCMAP_ROLL") + self._getAndSetParam(self.params, "throttle", "RCMAP_THROTTLE") + self._getAndSetParam(self.params, "yaw", "RCMAP_YAW") + + for channel_number in range(1, 17): + channel_params = self.params.get(f"RC_{channel_number}", {}) + + self._getAndSetParam(channel_params, "min", f"RC{channel_number}_MIN") + self._getAndSetParam(channel_params, "max", f"RC{channel_number}_MAX") + self._getAndSetParam( + channel_params, "reversed", f"RC{channel_number}_REVERSED" + ) + self._getAndSetParam(channel_params, "option", f"RC{channel_number}_OPTION") + + self.params[f"RC_{channel_number}"] = channel_params + + def getConfig(self) -> dict: + """ + Returns the RC configuration with the cached parameters. + + Returns: + dict: The RC configuration + """ + self._getAndSetCachedParam(self.params, "pitch", "RCMAP_PITCH") + self._getAndSetCachedParam(self.params, "roll", "RCMAP_ROLL") + self._getAndSetCachedParam(self.params, "throttle", "RCMAP_THROTTLE") + self._getAndSetCachedParam(self.params, "yaw", "RCMAP_YAW") + + for channel_number in range(1, 17): + channel_params = self.params.get(f"RC_{channel_number}", {}) + + self._getAndSetCachedParam(channel_params, "min", f"RC{channel_number}_MIN") + self._getAndSetCachedParam(channel_params, "max", f"RC{channel_number}_MAX") + self._getAndSetCachedParam( + channel_params, "reversed", f"RC{channel_number}_REVERSED" + ) + self._getAndSetCachedParam( + channel_params, "option", f"RC{channel_number}_OPTION" + ) + + self.params[f"RC_{channel_number}"] = channel_params + + return self.params diff --git a/radio/app/customTypes.py b/radio/app/customTypes.py index b47db3ad5..b05b08789 100644 --- a/radio/app/customTypes.py +++ b/radio/app/customTypes.py @@ -10,6 +10,7 @@ class IncomingParam(TypedDict): param_id: str param_value: Number param_type: NotRequired[int] + initial_value: NotRequired[Number] class Response(TypedDict): diff --git a/radio/app/drone.py b/radio/app/drone.py index 93ce3b643..8ff6b7f27 100644 --- a/radio/app/drone.py +++ b/radio/app/drone.py @@ -4,9 +4,9 @@ import traceback from logging import Logger, getLogger from pathlib import Path -from queue import Queue +from queue import Empty, Queue from secrets import token_hex -from threading import Thread +from threading import Event, Lock, Thread, current_thread from typing import Callable, Dict, List, Optional import serial @@ -23,7 +23,7 @@ from app.controllers.paramsController import ParamsController from app.controllers.rcController import RcController from app.customTypes import Number, Response, VehicleType -from app.utils import commandAccepted, getVehicleType +from app.utils import commandAccepted, getVehicleType, sendingCommandLock # Constants @@ -75,6 +75,7 @@ def __init__( droneErrorCb: Optional[Callable] = None, droneDisconnectCb: Optional[Callable] = None, droneConnectStatusCb: Optional[Callable] = None, + linkDebugStatsCb: Optional[Callable] = None, ) -> None: """ The drone class interfaces with the UAS via MavLink. @@ -91,14 +92,30 @@ def __init__( self.baud = baud self.wireless = wireless self.logger = logger - self.connectionType = "TCP" if self.port.startswith("tcp") else "SERIAL" self.droneErrorCb = droneErrorCb self.droneDisconnectCb = droneDisconnectCb self.droneConnectStatusCb = droneConnectStatusCb + self.linkDebugStatsCb = linkDebugStatsCb self.connectionError: Optional[str] = None - self.logger.debug("Trying to setup master") + self.connection_phases = [ + "Connecting to drone", + "Received heartbeat", + "Cleaned temp logs", + "Setting up the parameters controller", + "Setting up the arm controller", + "Setting up the flight modes controller", + "Setting up the motor controller", + "Setting up the gripper controller", + "Setting up the mission controller", + "Setting up the frame controller", + "Setting up the RC controller", + "Setting up the nav controller", + "Connection complete", + ] + + self.logger.debug(f"Trying to setup master with port {port} and baud {baud}") if not Drone.checkBaudrateValid(baud): self.connectionError = ( @@ -107,7 +124,7 @@ def __init__( return try: - self.sendConnectionStatusUpdate("Connecting to drone") + self.sendConnectionStatusUpdate(0) self.master: mavutil.mavserial = mavutil.mavlink_connection(port, baud=baud) except Exception as e: self.logger.exception(traceback.format_exc()) @@ -130,7 +147,7 @@ def __init__( self.connectionError = "Could not connect to the drone." return - self.sendConnectionStatusUpdate("Received heartbeat") + self.sendConnectionStatusUpdate(1) self.aircraft_type = getVehicleType(initial_heartbeat.type) if self.aircraft_type not in ( @@ -162,40 +179,46 @@ def __init__( self.log_file_names: List[Path] = [] self.cleanTempLogs() - self.sendConnectionStatusUpdate("Cleaned temp logs") + self.sendConnectionStatusUpdate(2) + + self.is_active = Event() + self.is_active.set() + self.is_listening = False - self.is_active = True + # To ensure that only one command is sent at a time and we wait for a + # response before sending another command, a thread-safe lock is used + self.sending_command_lock = Lock() self.number_of_motors = 4 # Is there a way to get this from the drone? self.armed = False + self.sendConnectionStatusUpdate(3) self.paramsController = ParamsController(self) - self.sendConnectionStatusUpdate("Setup parameters controller") + self.sendConnectionStatusUpdate(4) self.armController = ArmController(self) - self.sendConnectionStatusUpdate("Setup arm controller") + self.sendConnectionStatusUpdate(5) self.flightModesController = FlightModesController(self) - self.sendConnectionStatusUpdate("Setup flight modes controller") + self.sendConnectionStatusUpdate(6) self.motorTestController = MotorTestController(self) - self.sendConnectionStatusUpdate("Setup motor controller") + self.sendConnectionStatusUpdate(7) self.gripperController = GripperController(self) - self.sendConnectionStatusUpdate("Setup gripper controller") + self.sendConnectionStatusUpdate(8) self.missionController = MissionController(self) - self.sendConnectionStatusUpdate("Setup mission controller") + self.sendConnectionStatusUpdate(9) self.frameController = FrameController(self) - self.sendConnectionStatusUpdate("Setup frame controller") + self.sendConnectionStatusUpdate(10) self.rcController = RcController(self) - self.sendConnectionStatusUpdate("Setup RC controller") + self.sendConnectionStatusUpdate(11) self.navController = NavController(self) - self.sendConnectionStatusUpdate("Setup nav controller") self.stopAllDataStreams() @@ -203,15 +226,26 @@ def __init__( self.startThread() + self.sendConnectionStatusUpdate(12) + def __getNextLogFilePath(self, line: str) -> str: return line.split("==NEXT_FILE==")[-1].split("==END==")[0] def __getCurrentDateTimeStr(self) -> str: return time.strftime("%Y-%m-%d_%H-%M-%S", time.localtime()) - def sendConnectionStatusUpdate(self, msg): + def sendConnectionStatusUpdate(self, msg_index): + total_msgs = len(self.connection_phases) + if msg_index < 0 or msg_index >= total_msgs: + self.logger.error(f"Invalid connection status index {msg_index}") + return + + msg = self.connection_phases[msg_index] + if self.droneConnectStatusCb: - self.droneConnectStatusCb(msg) + self.droneConnectStatusCb( + {"message": msg, "progress": int((msg_index / (total_msgs - 1)) * 100)} + ) @staticmethod def checkBaudrateValid(baud: int) -> bool: @@ -370,6 +404,7 @@ def setupSingleDataStream(self, stream: int) -> None: else: self.sendDataStreamRequestMessage(stream, DATASTREAM_RATES_WIRED[stream]) + @sendingCommandLock def sendDataStreamRequestMessage(self, stream: int, rate: int) -> None: """Send a request for a specific data stream. @@ -385,6 +420,7 @@ def sendDataStreamRequestMessage(self, stream: int, rate: int) -> None: 1, ) + @sendingCommandLock def stopAllDataStreams(self) -> None: """Stop all data streams""" self.master.mav.request_data_stream_send( @@ -426,7 +462,7 @@ def removeMessageListener(self, message_id: str) -> bool: def checkForMessages(self) -> None: """Check for messages from the drone and add them to the message queue.""" - while self.is_active: + while self.is_active.is_set(): if not self.is_listening: time.sleep(0.05) # Sleep a bit to not clog up processing usage continue @@ -447,8 +483,7 @@ def checkForMessages(self) -> None: self.logger.error(e, exc_info=True) if self.droneDisconnectCb: self.droneDisconnectCb() - self.is_listening = False - self.is_active = False + self.close() break except Exception as e: # Log any other unexpected exception @@ -490,10 +525,12 @@ def checkForMessages(self) -> None: def executeMessages(self) -> None: """Executes message listeners based on messages from the message queue.""" - while self.is_active: + while self.is_active.is_set(): try: - q = self.message_queue.get() + q = self.message_queue.get(timeout=1) self.message_listeners[q[0]](q[1]) + except Empty: + continue except KeyError as e: self.logger.error( f"Could not execute message (likely due to backend abruptly stopping): {e}" @@ -503,61 +540,192 @@ def logMessages(self) -> None: """A thread to log messages into a temp FTLog file from the log queue.""" current_line_number = 0 - while self.is_active: - log_msg = self.log_message_queue.get() - if log_msg: - # Check if a temp log file has been created yet, if not create one - if self.current_log_file is None: - self.current_log_file = self.log_directory.joinpath( - f"tmp_first_{token_hex(8)}.ftlog" - ) - self.log_file_names.append(self.current_log_file) - with open(self.current_log_file, "w") as f: - f.write( - f"==START_TIME=={self.__getCurrentDateTimeStr()}==END==\n" + while self.is_active.is_set(): + try: + log_msg = self.log_message_queue.get(timeout=1) + if log_msg: + # Check if a temp log file has been created yet, if not create one + if self.current_log_file is None: + self.current_log_file = self.log_directory.joinpath( + f"tmp_first_{token_hex(8)}.ftlog" ) + self.log_file_names.append(self.current_log_file) + with open(self.current_log_file, "w") as f: + f.write( + f"==START_TIME=={self.__getCurrentDateTimeStr()}==END==\n" + ) - # Write the incoming telemetry message to the temp log file - if current_line_number < LOG_LINE_LIMIT: - with open(self.current_log_file, "a") as current_log_file_handler: - current_log_file_handler.write(log_msg + "\n") - current_line_number += 1 - else: - # If the current log file has reached the line limit, create a new temp log file - next_log_file_name = self.log_directory.joinpath( - f"tmp_{token_hex(8)}.ftlog" - ) - with open(self.current_log_file, "a") as current_log_file_handler: - # Write the next file name to the current log file - current_log_file_handler.write( - f"==NEXT_FILE=={str(next_log_file_name)}==END==\n" + # Write the incoming telemetry message to the temp log file + if current_line_number < LOG_LINE_LIMIT: + with open( + self.current_log_file, "a" + ) as current_log_file_handler: + current_log_file_handler.write(log_msg + "\n") + current_line_number += 1 + else: + # If the current log file has reached the line limit, create a new temp log file + next_log_file_name = self.log_directory.joinpath( + f"tmp_{token_hex(8)}.ftlog" ) + with open( + self.current_log_file, "a" + ) as current_log_file_handler: + # Write the next file name to the current log file + current_log_file_handler.write( + f"==NEXT_FILE=={str(next_log_file_name)}==END==\n" + ) - self.current_log_file = next_log_file_name - self.log_file_names.append(self.current_log_file) + self.current_log_file = next_log_file_name + self.log_file_names.append(self.current_log_file) - with open(self.current_log_file, "w") as f: - f.write( - f"==START_TIME=={self.__getCurrentDateTimeStr()}==END==\n" - ) - f.write(log_msg + "\n") - current_line_number = 1 + with open(self.current_log_file, "w") as f: + f.write( + f"==START_TIME=={self.__getCurrentDateTimeStr()}==END==\n" + ) + f.write(log_msg + "\n") + current_line_number = 1 + except Empty: + continue + + def getLinkDebugData(self) -> None: + """While active, get link debug data""" + refresh_rate_hz = 2 + + if not hasattr(self, "_sliding_window"): + self._sliding_window: dict[str, list] = { + "packets_sent": [], + "bytes_sent": [], + "packets_received": [], + "bytes_received": [], + } + + if not hasattr(self, "_last_link_stats"): + self._last_link_stats: dict[str, Number] = { + "total_packets_sent": 0, + "total_bytes_sent": 0, + "total_packets_received": 0, + "total_bytes_received": 0, + "total_receive_errors": 0, + "uptime": 0, + } + + while self.is_active.is_set(): + if self.linkDebugStatsCb: + try: + link_stats = { + "total_packets_sent": self.master.mav.total_packets_sent, + "total_bytes_sent": self.master.mav.total_bytes_sent, + "total_packets_received": self.master.mav.total_packets_received, + "total_bytes_received": self.master.mav.total_bytes_received, + "total_receive_errors": self.master.mav.total_receive_errors, + "uptime": self.master.uptime, + } + + # Update sliding window + self._sliding_window["packets_sent"].append( + link_stats["total_packets_sent"] + - self._last_link_stats["total_packets_sent"] + ) + self._sliding_window["bytes_sent"].append( + link_stats["total_bytes_sent"] + - self._last_link_stats["total_bytes_sent"] + ) + self._sliding_window["packets_received"].append( + link_stats["total_packets_received"] + - self._last_link_stats["total_packets_received"] + ) + self._sliding_window["bytes_received"].append( + link_stats["total_bytes_received"] + - self._last_link_stats["total_bytes_received"] + ) + + # Keep only the last x readings + for key in self._sliding_window: + if len(self._sliding_window[key]) > refresh_rate_hz: + self._sliding_window[key].pop(0) + + # Calculate averages over the last x readings + link_stats["avg_packets_sent_per_sec"] = sum( + self._sliding_window["packets_sent"] + ) / len(self._sliding_window["packets_sent"]) + link_stats["avg_bytes_sent_per_sec"] = sum( + self._sliding_window["bytes_sent"] + ) / len(self._sliding_window["bytes_sent"]) + link_stats["avg_packets_received_per_sec"] = sum( + self._sliding_window["packets_received"] + ) / len(self._sliding_window["packets_received"]) + link_stats["avg_bytes_received_per_sec"] = sum( + self._sliding_window["bytes_received"] + ) / len(self._sliding_window["bytes_received"]) + + self._last_link_stats = copy.deepcopy(link_stats) + + self.linkDebugStatsCb(link_stats) + except Exception as e: + self.logger.error(e, exc_info=True) + + time.sleep(1 / refresh_rate_hz) + + def sendHeartbeatMessage(self) -> None: + """Sends a heartbeat message to the drone every second.""" + while self.is_active.is_set(): + try: + self.master.mav.heartbeat_send( + mavutil.mavlink.MAV_TYPE_GCS, + mavutil.mavlink.MAV_AUTOPILOT_INVALID, + 0, + 0, + 0, + ) + except Exception as e: + self.logger.error(f"Failed to send heartbeat: {e}", exc_info=True) + time.sleep(1) def startThread(self) -> None: """Starts the listener and sender threads.""" self.listener_thread = Thread(target=self.checkForMessages, daemon=True) self.sender_thread = Thread(target=self.executeMessages, daemon=True) self.log_thread = Thread(target=self.logMessages, daemon=True) + self.link_debug_data_thread = Thread(target=self.getLinkDebugData, daemon=True) + self.heartbeat_thread = Thread(target=self.sendHeartbeatMessage, daemon=True) self.listener_thread.start() self.sender_thread.start() self.log_thread.start() + self.link_debug_data_thread.start() + self.heartbeat_thread.start() + + def stopAllThreads(self) -> None: + """Stops all threads.""" + self.is_active.clear() + self.is_listening = False + + this_thread = current_thread() + + self.paramsController.is_requesting_params = False + if ( + hasattr(self.paramsController, "getAllParamsThread") + and self.paramsController.getAllParamsThread is not None + ): + self.paramsController.getAllParamsThread.join(timeout=3) + + for thread in [ + getattr(self, "listener_thread", None), + getattr(self, "sender_thread", None), + getattr(self, "log_thread", None), + getattr(self, "link_debug_data_thread", None), + getattr(self, "heartbeat_thread", None), + ]: + if thread is not None and thread.is_alive() and thread is not this_thread: + thread.join(timeout=3) def rebootAutopilot(self) -> None: """Reboot the autopilot.""" self.is_listening = False + self.sending_command_lock.acquire() + self.sendCommand( mavutil.mavlink.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, - param1=1, # Autpilot + param1=1, # Autopilot param2=0, # Companion param3=0, # Component action param4=0, # Component ID @@ -565,6 +733,7 @@ def rebootAutopilot(self) -> None: try: response = self.master.recv_match(type="COMMAND_ACK", blocking=True) + self.sending_command_lock.release() if commandAccepted( response, mavutil.mavlink.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN @@ -578,6 +747,7 @@ def rebootAutopilot(self) -> None: self.logger.debug("Rebooting") self.close() + @sendingCommandLock def setServo(self, servo_instance: int, pwm_value: int) -> Response: """Set a servo to a specific PWM value. @@ -598,14 +768,21 @@ def setServo(self, servo_instance: int, pwm_value: int) -> Response: try: response = self.master.recv_match(type="COMMAND_ACK", blocking=True) + self.is_listening = True if commandAccepted(response, mavutil.mavlink.MAV_CMD_DO_SET_SERVO): return {"success": True, "message": f"Setting servo to {pwm_value}"} - else: - return {"success": False, "message": "Setting servo failed"} + self.logger.error( + f"Failed to set servo {servo_instance} to {pwm_value}" + ) + return { + "success": False, + "message": f"Failed to set servo {servo_instance} to {pwm_value}", + } except serial.serialutil.SerialException: + self.is_listening = True return { "success": False, "message": "Setting servo failed, serial exception", @@ -715,7 +892,7 @@ def close(self) -> None: self.removeMessageListener(message_id) self.stopAllDataStreams() - self.is_active = False + self.stopAllThreads() self.master.close() if len(self.log_file_names) == 0: diff --git a/radio/app/endpoints/autopilot.py b/radio/app/endpoints/autopilot.py index 8f574a443..6641c8ef6 100644 --- a/radio/app/endpoints/autopilot.py +++ b/radio/app/endpoints/autopilot.py @@ -8,8 +8,10 @@ @socketio.on("reboot_autopilot") def rebootAutopilot() -> None: """ - Attempt to reboot the autopilot, this will try to reconnect to the drone 3 times before stopping. This will also stop if the port - is not open for 10 seconds. + Attempt to reboot the autopilot, this will try to reconnect to the drone 3 times before stopping. + + Note: If SITL is running and you are connected via TCP 5763 then rebooting does not work as expected. + Use TCP 5760 instead. """ if not droneStatus.drone: return @@ -20,12 +22,20 @@ def rebootAutopilot() -> None: droneErrorCb = droneStatus.drone.droneErrorCb droneDisconnectCb = droneStatus.drone.droneDisconnectCb droneConnectStatusCb = droneStatus.drone.droneConnectStatusCb + linkDebugStatsCb = droneStatus.drone.linkDebugStatsCb + socketio.emit("disconnected_from_drone") + droneStatus.drone.rebootAutopilot() - while droneStatus.drone is not None and droneStatus.drone.is_active: + while droneStatus.drone.is_active.is_set(): + print("Waiting for drone to disconnect...") time.sleep(0.05) + droneStatus.drone = None + + time.sleep(1.5) # Wait for the port to be released and let the autopilot reboot + tries = 0 while tries < 3: droneStatus.drone = Drone( @@ -35,6 +45,7 @@ def rebootAutopilot() -> None: droneErrorCb=droneErrorCb, droneDisconnectCb=droneDisconnectCb, droneConnectStatusCb=droneConnectStatusCb, + linkDebugStatsCb=linkDebugStatsCb, ) if droneStatus.drone.connectionError: tries += 1 @@ -42,6 +53,7 @@ def rebootAutopilot() -> None: else: break else: + droneStatus.drone = None logger.error("Could not reconnect to drone after 3 attempts.") socketio.emit( "reboot_autopilot", @@ -53,7 +65,9 @@ def rebootAutopilot() -> None: return time.sleep(1) - socketio.emit("connected_to_drone") + socketio.emit( + "connected_to_drone", {"aircraft_type": droneStatus.drone.aircraft_type} + ) logger.info("Rebooted autopilot successfully.") socketio.emit( "reboot_autopilot", diff --git a/radio/app/endpoints/comPorts.py b/radio/app/endpoints/comPorts.py index b1cde21d1..daf359cd6 100644 --- a/radio/app/endpoints/comPorts.py +++ b/radio/app/endpoints/comPorts.py @@ -17,6 +17,19 @@ class ConnectionDataType(TypedDict): connectionType: str +class LinkStatsType(TypedDict): + total_packets_sent: int + total_bytes_sent: int + total_packets_received: int + total_bytes_received: int + total_receive_errors: int + uptime: float + avg_packets_sent_per_sec: float + avg_bytes_sent_per_sec: float + avg_packets_received_per_sec: float + avg_bytes_received_per_sec: float + + @socketio.on("get_com_ports") def getComPort() -> None: """ @@ -42,6 +55,13 @@ def getComPort() -> None: socketio.emit("list_com_ports", droneStatus.correct_ports) +def sendLinkDebugStats(link_stats: LinkStatsType) -> None: + """ + A callback function to send link debug stats + """ + socketio.emit("link_debug_stats", link_stats) + + @socketio.on("connect_to_drone") def connectToDrone(data: ConnectionDataType) -> None: """ @@ -102,6 +122,7 @@ def connectToDrone(data: ConnectionDataType) -> None: droneErrorCb=droneErrorCb, droneDisconnectCb=disconnectFromDrone, droneConnectStatusCb=droneConnectStatusCb, + linkDebugStatsCb=sendLinkDebugStats, ) if drone.connectionError is not None: diff --git a/radio/app/endpoints/connections.py b/radio/app/endpoints/connections.py index a3ff891bd..9b3fa7b89 100644 --- a/radio/app/endpoints/connections.py +++ b/radio/app/endpoints/connections.py @@ -28,3 +28,20 @@ def isConnectedToDrone() -> None: Handle client asking if we're connected to the drone or not """ socketio.emit("is_connected_to_drone", bool(droneStatus.drone)) + + +@socketio.on("get_target_info") +def getTargetInfo() -> None: + """ + Return the target component and target system + """ + if droneStatus.drone: + socketio.emit( + "target_info", + { + "target_component": droneStatus.drone.target_component, + "target_system": droneStatus.drone.target_system, + }, + ) + else: + socketio.emit("target_info", None) diff --git a/radio/app/endpoints/flightMode.py b/radio/app/endpoints/flightMode.py index 5779fd758..2845c450f 100644 --- a/radio/app/endpoints/flightMode.py +++ b/radio/app/endpoints/flightMode.py @@ -26,12 +26,11 @@ def getFlightModeConfig() -> None: if not droneStatus.drone: return notConnectedError(action="get the flight mode config") - flight_modes = droneStatus.drone.flightModesController.flight_modes - flight_mode_channel = droneStatus.drone.flightModesController.flight_mode_channel + flight_modes_config = droneStatus.drone.flightModesController.getConfig() socketio.emit( "flight_mode_config", - {"flight_modes": flight_modes, "flight_mode_channel": flight_mode_channel}, + flight_modes_config, ) diff --git a/radio/app/endpoints/frames.py b/radio/app/endpoints/frames.py index 950babe73..68ed5651e 100644 --- a/radio/app/endpoints/frames.py +++ b/radio/app/endpoints/frames.py @@ -1,5 +1,5 @@ -from app import logger, socketio import app.droneStatus as droneStatus +from app import logger, socketio from app.utils import notConnectedError @@ -22,9 +22,9 @@ def getFrameDetails() -> None: if not droneStatus.drone: return notConnectedError(action="get frame config") - frame_type = droneStatus.drone.frameController.frame_type - frame_class = droneStatus.drone.frameController.frame_class + framesConfig = droneStatus.drone.frameController.getConfig() + socketio.emit( "frame_type_config", - {"frame_type": frame_type, "frame_class": frame_class}, + framesConfig, ) diff --git a/radio/app/endpoints/gripper.py b/radio/app/endpoints/gripper.py index 27d0b4d8b..8265fc3b2 100644 --- a/radio/app/endpoints/gripper.py +++ b/radio/app/endpoints/gripper.py @@ -3,8 +3,8 @@ from app.utils import droneErrorCb -@socketio.on("gripper_enabled") -def gripperEnabled() -> None: +@socketio.on("get_gripper_enabled") +def getGripperEnabled() -> None: """ Tells the frontend whether or not the gripper is enabled, this only works on the config page. """ @@ -20,10 +20,9 @@ def gripperEnabled() -> None: droneErrorCb("You must be connected to the drone to access the gripper.") logger.warning("Attempted to get gripper state when drone is None.") return + enabled = droneStatus.drone.gripperController.getEnabled() - droneErrorCb( - "Could not get gripper state from drone." - ) if enabled is None else socketio.emit("gripper_enabled", enabled) + socketio.emit("is_gripper_enabled", enabled) @socketio.on("set_gripper") diff --git a/radio/app/endpoints/mission.py b/radio/app/endpoints/mission.py index b2c01f849..ef549d099 100644 --- a/radio/app/endpoints/mission.py +++ b/radio/app/endpoints/mission.py @@ -1,3 +1,5 @@ +from typing import Any + from typing_extensions import TypedDict import app.droneStatus as droneStatus @@ -9,10 +11,35 @@ class CurrentMissionType(TypedDict): type: str +class WriteCurrentMissionType(TypedDict): + type: str + items: list[dict] + + +class ImportMissionFileType(TypedDict): + type: str + file_path: str + + +class ExportMissionFileType(TypedDict): + type: str + file_path: str + items: list[dict] + + class ControlMissionType(TypedDict): action: str +def progressUpdateCallback(message: str, progress: float) -> None: + """ + Callback that is used to update the frontend with the current mission function progress. + """ + socketio.emit( + "current_mission_progress", {"message": message, "progress": progress} + ) + + @socketio.on("get_current_mission") def getCurrentMission(data: CurrentMissionType) -> None: """ @@ -46,7 +73,7 @@ def getCurrentMission(data: CurrentMissionType) -> None: return result = droneStatus.drone.missionController.getCurrentMission( - mission_type_array.index(mission_type) + mission_type_array.index(mission_type), progressUpdateCallback ) if not result.get("success"): @@ -80,16 +107,166 @@ def getCurrentMissionAll() -> None: result = droneStatus.drone.missionController.getCurrentMissionAll() + if not result.get("success"): + socketio.emit("current_mission_all", result) + return + + data: dict[str, Any] = result.get("data", {}) + if not isinstance(data, dict): + data = {} + socketio.emit( "current_mission_all", { - "mission_items": result.get("data", {}).get("mission_items", []), - "fence_items": result.get("data", {}).get("fence_items", []), - "rally_items": result.get("data", {}).get("rally_items", []), + "success": True, + "mission_items": data.get("mission_items", []), + "fence_items": data.get("fence_items", []), + "rally_items": data.get("rally_items", []), }, ) +@socketio.on("write_current_mission") +def writeCurrentMission(data: WriteCurrentMissionType) -> None: + """ + Writes the current mission to the drone, only works if missions screen is loaded. + """ + if droneStatus.state != "missions": + socketio.emit( + "params_error", + { + "message": "You must be on the missions screen to write the current mission." + }, + ) + logger.debug(f"Current state: {droneStatus.state}") + return + + if not droneStatus.drone: + return notConnectedError(action="write current mission") + + mission_type = data.get("type") + mission_type_array = ["mission", "fence", "rally"] + + if mission_type not in mission_type_array: + socketio.emit( + "write_mission_result", + { + "success": False, + "message": f"Invalid mission type. Must be 'mission', 'fence', or 'rally', got {mission_type}.", + }, + ) + logger.error( + f"Invalid mission type: {mission_type}. Must be 'mission', 'fence', or 'rally'." + ) + return + + items = data.get("items", []) + + result = droneStatus.drone.missionController.uploadMission( + mission_type_array.index(mission_type), items, progressUpdateCallback + ) + if not result.get("success"): + logger.error(result.get("message")) + + socketio.emit("write_mission_result", result) + + +@socketio.on("import_mission_from_file") +def importMissionFromFile(data: ImportMissionFileType) -> None: + if droneStatus.state != "missions": + socketio.emit( + "params_error", + { + "message": "You must be on the missions screen to import a mission from a file." + }, + ) + logger.debug(f"Current state: {droneStatus.state}") + return + + if not droneStatus.drone: + return notConnectedError(action="import mission from file") + + mission_type = data.get("type") + mission_type_array = ["mission", "fence", "rally"] + + if mission_type not in mission_type_array: + socketio.emit( + "import_mission_result", + { + "success": False, + "message": f"Invalid mission type. Must be 'mission', 'fence', or 'rally', got {mission_type}.", + }, + ) + logger.error( + f"Invalid mission type: {mission_type}. Must be 'mission', 'fence', or 'rally'." + ) + return + + file_path = data.get("file_path", "") + + result = droneStatus.drone.missionController.importMissionFromFile( + mission_type_array.index(mission_type), file_path + ) + + if not result.get("success"): + logger.error(result.get("message")) + socketio.emit("import_mission_result", result) + else: + socketio.emit( + "import_mission_result", + { + "success": True, + "message": result.get("message", ""), + "items": result.get("data", []), + "mission_type": mission_type, + }, + ) + + +@socketio.on("export_mission_to_file") +def exportMissionToFile(data: ExportMissionFileType) -> None: + if droneStatus.state != "missions": + socketio.emit( + "params_error", + { + "message": "You must be on the missions screen to export a mission to a file." + }, + ) + logger.debug(f"Current state: {droneStatus.state}") + return + + if not droneStatus.drone: + return notConnectedError(action="export mission to file") + + mission_type = data.get("type") + mission_type_array = ["mission", "fence", "rally"] + + if mission_type not in mission_type_array: + socketio.emit( + "export_mission_result", + { + "success": False, + "message": f"Invalid mission type. Must be 'mission', 'fence', or 'rally', got {mission_type}.", + }, + ) + logger.error( + f"Invalid mission type: {mission_type}. Must be 'mission', 'fence', or 'rally'." + ) + return + + file_path = data.get("file_path", "") + items = data.get("items", []) + + result = droneStatus.drone.missionController.exportMissionToFile( + mission_type_array.index(mission_type), file_path, items + ) + + if not result.get("success"): + logger.error(result.get("message")) + + socketio.emit("export_mission_result", result) + + @socketio.on("control_mission") def controlMission(data: ControlMissionType) -> None: """ diff --git a/radio/app/endpoints/nav.py b/radio/app/endpoints/nav.py index da98383af..b4cc97b4c 100644 --- a/radio/app/endpoints/nav.py +++ b/radio/app/endpoints/nav.py @@ -15,6 +15,10 @@ class RepositionDataType(TypedDict): alt: int +class LoiterRadiusDataType(TypedDict): + radius: float + + @socketio.on("get_home_position") def getHomePosition() -> None: """ @@ -125,3 +129,57 @@ def reposition(data: RepositionDataType) -> None: result = droneStatus.drone.navController.reposition(lat, lon, alt) socketio.emit("nav_reposition_result", result) + + +@socketio.on("get_loiter_radius") +def getLoiterRadius() -> None: + """ + Gets the loiter radius of the drone, only works when the dashboard page is loaded. + """ + if droneStatus.state not in ["dashboard"]: + socketio.emit( + "params_error", + { + "message": "You must be on the dashboard screen to get the loiter radius." + }, + ) + logger.debug(f"Current state: {droneStatus.state}") + return + + if not droneStatus.drone: + return notConnectedError(action="get loiter radius") + + result = droneStatus.drone.navController.getLoiterRadius() + + socketio.emit("nav_get_loiter_radius_result", result) + + +@socketio.on("set_loiter_radius") +def setLoiterRadius(data: LoiterRadiusDataType) -> None: + """ + Sets the loiter radius of the drone, only works when the dashboard page is loaded. + """ + if droneStatus.state != "dashboard": + socketio.emit( + "params_error", + { + "message": "You must be on the dashboard screen to set the loiter radius." + }, + ) + logger.debug(f"Current state: {droneStatus.state}") + return + + if not droneStatus.drone: + return notConnectedError(action="set loiter radius") + + radius = data.get("radius", None) + if radius is None or radius < 0: + socketio.emit( + "params_error", + {"message": f"Loiter radius must be a positive number, got {radius}."}, + ) + return + + result = droneStatus.drone.navController.setLoiterRadius(radius) + + socketio.emit("nav_set_loiter_radius_result", result) diff --git a/radio/app/endpoints/params.py b/radio/app/endpoints/params.py index 8eca26645..2ffbd81f5 100644 --- a/radio/app/endpoints/params.py +++ b/radio/app/endpoints/params.py @@ -25,13 +25,11 @@ def set_multiple_params(params_list: List[Any]) -> None: if not droneStatus.drone: return - success = droneStatus.drone.paramsController.setMultipleParams(params_list) - if success: - socketio.emit( - "param_set_success", {"message": "Parameters saved successfully."} - ) + response = droneStatus.drone.paramsController.setMultipleParams(params_list) + if response.get("success"): + socketio.emit("param_set_success", response) else: - socketio.emit("params_error", {"message": "Failed to save parameters."}) + socketio.emit("params_error", response) @socketio.on("refresh_params") @@ -52,14 +50,18 @@ def refresh_params() -> None: droneStatus.drone.paramsController.getAllParams() - timeout = time.time() + 20 # 20 seconds from now yipee + timeout_secs = 120 + + timeout = time.time() + timeout_secs last_index_sent = -1 while droneStatus.drone and droneStatus.drone.paramsController.is_requesting_params: if time.time() > timeout: socketio.emit( "params_error", - {"message": "Parameter request timed out after 3 minutes."}, + { + "message": f"Parameter request timed out after {timeout_secs} seconds." + }, ) return @@ -71,6 +73,7 @@ def refresh_params() -> None: "param_request_update", { "current_param_index": droneStatus.drone.paramsController.current_param_index, + "current_param_id": droneStatus.drone.paramsController.current_param_id, "total_number_of_params": droneStatus.drone.paramsController.total_number_of_params, }, ) @@ -78,5 +81,4 @@ def refresh_params() -> None: time.sleep(0.2) - if droneStatus.drone: - socketio.emit("params", droneStatus.drone.paramsController.params) + socketio.emit("params", droneStatus.drone.paramsController.params) diff --git a/radio/app/endpoints/rc.py b/radio/app/endpoints/rc.py index e4f8d9d58..9d7956f3f 100644 --- a/radio/app/endpoints/rc.py +++ b/radio/app/endpoints/rc.py @@ -19,7 +19,7 @@ def getRcConfig() -> None: if not droneStatus.drone: return notConnectedError(action="get the RC config") - rc_params = droneStatus.drone.rcController.params + rc_params = droneStatus.drone.rcController.getConfig() rc_params[ "flight_modes" ] = droneStatus.drone.flightModesController.flight_mode_channel diff --git a/radio/app/endpoints/states.py b/radio/app/endpoints/states.py index b94e1992d..0eccecb95 100644 --- a/radio/app/endpoints/states.py +++ b/radio/app/endpoints/states.py @@ -1,5 +1,3 @@ -import time - from pymavlink import mavutil from typing_extensions import TypedDict @@ -54,6 +52,8 @@ def set_state(data: SetStateType) -> None: "config.flight_modes": ["RC_CHANNELS", "HEARTBEAT"], } + droneStatus.drone.logger.info(f"Changing state to {droneStatus.state}") + if droneStatus.state == "dashboard": droneStatus.drone.setupDataStreams() for message in message_listeners["dashboard"]: @@ -81,46 +81,6 @@ def set_state(data: SetStateType) -> None: droneStatus.drone.addMessageListener(message, sendMessage) elif droneStatus.state == "params": droneStatus.drone.stopAllDataStreams() - - if len(droneStatus.drone.paramsController.params): - socketio.emit("params", droneStatus.drone.paramsController.params) - return - - droneStatus.drone.paramsController.getAllParams() - - timeout = time.time() + 20 - last_index_sent = -1 - - while ( - droneStatus.drone - and droneStatus.drone.paramsController.is_requesting_params - ): - if time.time() > timeout: - socketio.emit( - "params_error", - {"message": "Parameter request timed out after 3 minutes."}, - ) - return - - if ( - last_index_sent - != droneStatus.drone.paramsController.current_param_index - and droneStatus.drone.paramsController.current_param_index - > last_index_sent - ): - socketio.emit( - "param_request_update", - { - "current_param_index": droneStatus.drone.paramsController.current_param_index, - "total_number_of_params": droneStatus.drone.paramsController.total_number_of_params, - }, - ) - last_index_sent = droneStatus.drone.paramsController.current_param_index - - time.sleep(0.2) - - if droneStatus.drone: - socketio.emit("params", droneStatus.drone.paramsController.params) elif droneStatus.state == "config": droneStatus.drone.stopAllDataStreams() elif droneStatus.state == "config.flight_modes": diff --git a/radio/app/utils.py b/radio/app/utils.py index da7522d8f..428f67aea 100644 --- a/radio/app/utils.py +++ b/radio/app/utils.py @@ -3,8 +3,9 @@ from pymavlink import mavutil from serial.tools import list_ports +from typing_extensions import TypedDict -from app.customTypes import VehicleType +from app.customTypes import Number, VehicleType from . import socketio @@ -130,14 +131,19 @@ def droneErrorCb(msg: Any) -> None: socketio.emit("drone_error", {"message": msg}) -def droneConnectStatusCb(msg: Any) -> None: +class ConnectionDataType(TypedDict): + message: str + progress: Number + + +def droneConnectStatusCb(msg: ConnectionDataType) -> None: """ Send drone connect status updates to the socket Args: msg: The connect message to send to the client """ - socketio.emit("drone_connect_status", {"message": msg}) + socketio.emit("drone_connect_status", msg) def notConnectedError(action: str | None = None) -> None: @@ -185,32 +191,6 @@ def sendMessage(msg: Any) -> None: socketio.emit("incoming_msg", data) -def wpToMissionItemInt( - wp: mavutil.mavlink.MAVLink_message, -) -> mavutil.mavlink.MAVLink_message: - if wp.get_type() == "MISSION_ITEM_INT": - return wp - - wp_int = mavutil.mavlink.MAVLink_mission_item_int_message( - wp.target_system, - wp.target_component, - wp.seq, - wp.frame, - wp.command, - wp.current, - wp.autocontinue, - wp.param1, - wp.param2, - wp.param3, - wp.param4, - int(wp.x * 1e7), - int(wp.y * 1e7), - wp.z, - wp.mission_type, - ) - return wp_int - - FIXED_WING_TYPES = [ mavutil.mavlink.MAV_TYPE_FIXED_WING, mavutil.mavlink.MAV_TYPE_VTOL_DUOROTOR, @@ -241,3 +221,17 @@ def getVehicleType(typeId: int) -> int: return VehicleType.MULTIROTOR.value else: return VehicleType.UNKNOWN.value + + +def sendingCommandLock(func): + """A decorator to ensure that only one command is sent at a time.""" + + def wrapper(self, *args, **kwargs): + lock = getattr(self, "drone", self).sending_command_lock + lock.acquire() + try: + return func(self, *args, **kwargs) + finally: + lock.release() + + return wrapper diff --git a/radio/tests/helpers.py b/radio/tests/helpers.py index dc00c69c9..db0f571dd 100644 --- a/radio/tests/helpers.py +++ b/radio/tests/helpers.py @@ -1,8 +1,9 @@ -import pytest from typing import Optional, Union -from serial.serialutil import SerialException +import pytest from app import droneStatus, logger +from serial.serialutil import SerialException + from . import socketio_client @@ -121,17 +122,17 @@ def __exit__(self, type, value, traceback) -> None: droneStatus.drone.master.recv_match = self.old_recv -class RecvMsgReturnsFalse: +class RecvMsgReturnsNone: @staticmethod def recv_match_false( condition=None, type=None, blocking=False, timeout=None - ) -> bool: - return False + ) -> None: + return None def __enter__(self) -> None: if droneStatus.drone is not None: self.old_recv = droneStatus.drone.master.recv_match - droneStatus.drone.master.recv_match = RecvMsgReturnsFalse.recv_match_false + droneStatus.drone.master.recv_match = RecvMsgReturnsNone.recv_match_false def __exit__(self, type, value, traceback) -> None: if droneStatus.drone is not None: @@ -167,8 +168,10 @@ def send_and_recieve(endpoint: str, args: Optional[Union[dict, str]] = None) -> dict The data recieved from the client """ - socketio_client.emit(endpoint, args) if args is not None else socketio_client.emit( - endpoint + ( + socketio_client.emit(endpoint, args) + if args is not None + else socketio_client.emit(endpoint) ) return socketio_client.get_received()[0]["args"][0] diff --git a/radio/tests/mission_test_files/default_fence.txt b/radio/tests/mission_test_files/default_fence.txt new file mode 100644 index 000000000..1453a7ff9 --- /dev/null +++ b/radio/tests/mission_test_files/default_fence.txt @@ -0,0 +1,15 @@ +QGC WPL 110 +0 1 0 16 0 0 0 0 52.7806539 -0.7083070 136.350000 1 +1 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78146190 -0.71057081 0.000000 1 +2 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78105306 -0.71029186 1.000000 1 +3 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78003421 -0.71083903 2.000000 1 +4 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78185126 -0.70354342 3.000000 1 +5 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78305826 -0.70601106 4.000000 1 +6 0 3 5001 6.00000000 0.00000000 0.00000000 0.00000000 52.78254562 -0.70815682 5.000000 1 +7 0 3 5004 25.00000000 0.00000000 0.00000000 0.00000000 52.77965780 -0.70921630 0.000000 1 +8 0 3 5003 50.00000000 0.00000000 0.00000000 0.00000000 52.78019000 -0.70440170 0.000000 1 +9 0 3 5002 5.00000000 0.00000000 0.00000000 0.00000000 52.78282465 -0.70610762 0.000000 1 +10 0 3 5002 5.00000000 0.00000000 0.00000000 0.00000000 52.78187073 -0.70415497 1.000000 1 +11 0 3 5002 5.00000000 0.00000000 0.00000000 0.00000000 52.78144892 -0.70581794 2.000000 1 +12 0 3 5002 5.00000000 0.00000000 0.00000000 0.00000000 52.78218871 -0.70580721 3.000000 1 +13 0 3 5002 5.00000000 0.00000000 0.00000000 0.00000000 52.78263647 -0.70689082 4.000000 1 diff --git a/radio/tests/mission_test_files/default_mission.txt b/radio/tests/mission_test_files/default_mission.txt new file mode 100644 index 000000000..8eb0fdd45 --- /dev/null +++ b/radio/tests/mission_test_files/default_mission.txt @@ -0,0 +1,9 @@ +QGC WPL 110 +0 1 0 16 0 0 0 0 52.7806539 -0.7083070 136.350000 1 +1 0 3 22 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 30.000000 1 +2 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 52.78031970 -0.70979300 30.000000 1 +3 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 52.78122830 -0.70989490 30.000000 1 +4 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 52.78169880 -0.70795300 30.000000 1 +5 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 52.78144240 -0.70571600 30.000000 1 +6 0 3 16 0.00000000 0.00000000 0.00000000 0.00000000 52.78079670 -0.70659580 30.000000 1 +7 0 3 21 0.00000000 0.00000000 0.00000000 0.00000000 52.78043980 -0.70819970 0.000000 1 diff --git a/radio/tests/mission_test_files/default_rally.txt b/radio/tests/mission_test_files/default_rally.txt new file mode 100644 index 000000000..fd7023fa2 --- /dev/null +++ b/radio/tests/mission_test_files/default_rally.txt @@ -0,0 +1,4 @@ +QGC WPL 110 +0 1 0 16 0 0 0 0 52.7806539 -0.7083070 136.350000 1 +1 0 3 5100 0.00000000 0.00000000 0.00000000 0.00000000 52.78100110 -0.70948720 10.000000 1 +2 0 3 5100 0.00000000 0.00000000 0.00000000 0.00000000 52.78211080 -0.70567850 10.000000 1 diff --git a/radio/tests/mission_test_files/exported_fence_check.txt b/radio/tests/mission_test_files/exported_fence_check.txt new file mode 100644 index 000000000..4d560b6b2 --- /dev/null +++ b/radio/tests/mission_test_files/exported_fence_check.txt @@ -0,0 +1,14 @@ +QGC WPL 110 +0 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.781462 -0.710571 0.000000 0 +1 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.781053 -0.710292 0.000000 0 +2 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.780034 -0.710839 0.000000 0 +3 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.781851 -0.703543 0.000000 0 +4 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.783058 -0.706011 0.000000 0 +5 0 0 5001 6.000000 0.000000 0.000000 0.000000 52.782546 -0.708157 0.000000 0 +6 0 0 5004 25.000000 0.000000 0.000000 0.000000 52.779658 -0.709216 0.000000 0 +7 0 0 5003 50.000000 0.000000 0.000000 0.000000 52.780190 -0.704402 0.000000 0 +8 0 0 5002 5.000000 0.000000 0.000000 0.000000 52.782825 -0.706108 0.000000 0 +9 0 0 5002 5.000000 0.000000 0.000000 0.000000 52.781871 -0.704155 0.000000 0 +10 0 0 5002 5.000000 0.000000 0.000000 0.000000 52.781449 -0.705818 0.000000 0 +11 0 0 5002 5.000000 0.000000 0.000000 0.000000 52.782189 -0.705807 0.000000 0 +12 0 0 5002 5.000000 0.000000 0.000000 0.000000 52.782636 -0.706891 0.000000 0 diff --git a/radio/tests/mission_test_files/exported_mission_check.txt b/radio/tests/mission_test_files/exported_mission_check.txt new file mode 100644 index 000000000..1b5bb8de9 --- /dev/null +++ b/radio/tests/mission_test_files/exported_mission_check.txt @@ -0,0 +1,9 @@ +QGC WPL 110 +0 0 0 16 0.000000 0.000000 0.000000 0.000000 52.780569 -0.707924 0.100000 1 +1 0 3 22 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 30.000000 1 +2 0 3 16 0.000000 0.000000 0.000000 0.000000 52.780320 -0.709793 30.000000 1 +3 0 3 16 0.000000 0.000000 0.000000 0.000000 52.781228 -0.709895 30.000000 1 +4 0 3 16 0.000000 0.000000 0.000000 0.000000 52.781699 -0.707953 30.000000 1 +5 0 3 16 0.000000 0.000000 0.000000 0.000000 52.781442 -0.705716 30.000000 1 +6 0 3 16 0.000000 0.000000 0.000000 0.000000 52.780797 -0.706596 30.000000 1 +7 0 3 21 0.000000 0.000000 0.000000 1.000000 52.780440 -0.708200 0.000000 1 diff --git a/radio/tests/mission_test_files/exported_rally_check.txt b/radio/tests/mission_test_files/exported_rally_check.txt new file mode 100644 index 000000000..1e8bd17d3 --- /dev/null +++ b/radio/tests/mission_test_files/exported_rally_check.txt @@ -0,0 +1,3 @@ +QGC WPL 110 +0 0 3 5100 0.000000 0.000000 0.000000 0.000000 52.781001 -0.709487 10.000000 0 +1 0 3 5100 0.000000 0.000000 0.000000 0.000000 52.782111 -0.705678 10.000000 0 diff --git a/radio/tests/mission_test_files/test_getCurrentMission_correctFence_result.json b/radio/tests/mission_test_files/test_getCurrentMission_correctFence_result.json new file mode 100644 index 000000000..519cba6d4 --- /dev/null +++ b/radio/tests/mission_test_files/test_getCurrentMission_correctFence_result.json @@ -0,0 +1,240 @@ +{ + "success": true, + "mission_type": "fence", + "items": [ + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527814618, + "y": -7105708, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527810530, + "y": -7102918, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 2, + "target_component": 0, + "target_system": 255, + "x": 527800342, + "y": -7108390, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 3, + "target_component": 0, + "target_system": 255, + "x": 527818512, + "y": -7035434, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 4, + "target_component": 0, + "target_system": 255, + "x": 527830582, + "y": -7060110, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 5, + "target_component": 0, + "target_system": 255, + "x": 527825456, + "y": -7081568, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5004, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 25.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 6, + "target_component": 0, + "target_system": 255, + "x": 527796578, + "y": -7092163, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5003, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 50.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 7, + "target_component": 0, + "target_system": 255, + "x": 527801900, + "y": -7044017, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 8, + "target_component": 0, + "target_system": 255, + "x": 527828246, + "y": -7061076, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 9, + "target_component": 0, + "target_system": 255, + "x": 527818707, + "y": -7041549, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 10, + "target_component": 0, + "target_system": 255, + "x": 527814489, + "y": -7058179, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 11, + "target_component": 0, + "target_system": 255, + "x": 527821887, + "y": -7058072, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 12, + "target_component": 0, + "target_system": 255, + "x": 527826364, + "y": -7068908, + "z": 0.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_getCurrentMission_correctMission_result.json b/radio/tests/mission_test_files/test_getCurrentMission_correctMission_result.json new file mode 100644 index 000000000..0e860cbab --- /dev/null +++ b/radio/tests/mission_test_files/test_getCurrentMission_correctMission_result.json @@ -0,0 +1,150 @@ +{ + "success": true, + "mission_type": "mission", + "items": [ + { + "autocontinue": 1, + "command": 16, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 0, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527805690, + "y": -7079236, + "z": 0.09999999403953552 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 1, + "frame": 3, + "command": 22, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 0, + "y": 0, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 2, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527803197, + "y": -7097930, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 3, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527812283, + "y": -7098949, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 4, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527816988, + "y": -7079530, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 5, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527814424, + "y": -7057160, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 6, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527807967, + "y": -7065958, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 7, + "frame": 3, + "command": 21, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 1.0, + "x": 527804398, + "y": -7081997, + "z": 0.0, + "mission_type": 0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_getCurrentMission_correctRally_result.json b/radio/tests/mission_test_files/test_getCurrentMission_correctRally_result.json new file mode 100644 index 000000000..0fcfa133a --- /dev/null +++ b/radio/tests/mission_test_files/test_getCurrentMission_correctRally_result.json @@ -0,0 +1,42 @@ +{ + "success": true, + "mission_type": "rally", + "items": [ + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527810011, + "y": -7094872, + "z": 10.0 + }, + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527821108, + "y": -7056785, + "z": 10.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_getCurrentMission_correctState_result.json b/radio/tests/mission_test_files/test_getCurrentMission_correctState_result.json new file mode 100644 index 000000000..d0ef6a991 --- /dev/null +++ b/radio/tests/mission_test_files/test_getCurrentMission_correctState_result.json @@ -0,0 +1,423 @@ +{ + "success": true, + "mission_items": [ + { + "autocontinue": 1, + "command": 16, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 0, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527805690, + "y": -7079236, + "z": 0.09999999403953552 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 1, + "frame": 3, + "command": 22, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 0, + "y": 0, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 2, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527803197, + "y": -7097930, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 3, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527812283, + "y": -7098949, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 4, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527816988, + "y": -7079530, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 5, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527814424, + "y": -7057160, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 6, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527807967, + "y": -7065958, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 7, + "frame": 3, + "command": 21, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 1.0, + "x": 527804398, + "y": -7081997, + "z": 0.0, + "mission_type": 0 + } + ], + "fence_items": [ + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527814618, + "y": -7105708, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527810530, + "y": -7102918, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 2, + "target_component": 0, + "target_system": 255, + "x": 527800342, + "y": -7108390, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 3, + "target_component": 0, + "target_system": 255, + "x": 527818512, + "y": -7035434, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 4, + "target_component": 0, + "target_system": 255, + "x": 527830582, + "y": -7060110, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 5, + "target_component": 0, + "target_system": 255, + "x": 527825456, + "y": -7081568, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5004, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 25.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 6, + "target_component": 0, + "target_system": 255, + "x": 527796578, + "y": -7092163, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5003, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 50.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 7, + "target_component": 0, + "target_system": 255, + "x": 527801900, + "y": -7044017, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 8, + "target_component": 0, + "target_system": 255, + "x": 527828246, + "y": -7061076, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 9, + "target_component": 0, + "target_system": 255, + "x": 527818707, + "y": -7041549, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 10, + "target_component": 0, + "target_system": 255, + "x": 527814489, + "y": -7058179, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 11, + "target_component": 0, + "target_system": 255, + "x": 527821887, + "y": -7058072, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 12, + "target_component": 0, + "target_system": 255, + "x": 527826364, + "y": -7068908, + "z": 0.0 + } + ], + "rally_items": [ + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527810011, + "y": -7094872, + "z": 10.0 + }, + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527821108, + "y": -7056785, + "z": 10.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_importMissionFromFile_fenceImportSuccess_result.json b/radio/tests/mission_test_files/test_importMissionFromFile_fenceImportSuccess_result.json new file mode 100644 index 000000000..9949e2fc8 --- /dev/null +++ b/radio/tests/mission_test_files/test_importMissionFromFile_fenceImportSuccess_result.json @@ -0,0 +1,241 @@ +{ + "success": true, + "message": "Waypoint file loaded 13 points successfully", + "mission_type": "fence", + "items": [ + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 1, + "x": 527814618, + "y": -7105708, + "z": 0.0 + }, + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 1, + "x": 527810530, + "y": -7102918, + "z": 1.0 + }, + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 2, + "target_component": 0, + "target_system": 1, + "x": 527800342, + "y": -7108390, + "z": 2.0 + }, + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 3, + "target_component": 0, + "target_system": 1, + "x": 527818512, + "y": -7035434, + "z": 3.0 + }, + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 4, + "target_component": 0, + "target_system": 1, + "x": 527830582, + "y": -7060110, + "z": 4.0 + }, + { + "autocontinue": 1, + "command": 5001, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 5, + "target_component": 0, + "target_system": 1, + "x": 527825456, + "y": -7081568, + "z": 5.0 + }, + { + "autocontinue": 1, + "command": 5004, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 25.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 6, + "target_component": 0, + "target_system": 1, + "x": 527796578, + "y": -7092163, + "z": 0.0 + }, + { + "autocontinue": 1, + "command": 5003, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 50.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 7, + "target_component": 0, + "target_system": 1, + "x": 527801900, + "y": -7044017, + "z": 0.0 + }, + { + "autocontinue": 1, + "command": 5002, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 8, + "target_component": 0, + "target_system": 1, + "x": 527828246, + "y": -7061076, + "z": 0.0 + }, + { + "autocontinue": 1, + "command": 5002, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 9, + "target_component": 0, + "target_system": 1, + "x": 527818707, + "y": -7041549, + "z": 1.0 + }, + { + "autocontinue": 1, + "command": 5002, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 10, + "target_component": 0, + "target_system": 1, + "x": 527814489, + "y": -7058179, + "z": 2.0 + }, + { + "autocontinue": 1, + "command": 5002, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 11, + "target_component": 0, + "target_system": 1, + "x": 527821887, + "y": -7058072, + "z": 3.0 + }, + { + "autocontinue": 1, + "command": 5002, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 12, + "target_component": 0, + "target_system": 1, + "x": 527826364, + "y": -7068908, + "z": 4.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_importMissionFromFile_missionImportSuccess_result.json b/radio/tests/mission_test_files/test_importMissionFromFile_missionImportSuccess_result.json new file mode 100644 index 000000000..e683dbd64 --- /dev/null +++ b/radio/tests/mission_test_files/test_importMissionFromFile_missionImportSuccess_result.json @@ -0,0 +1,151 @@ +{ + "success": true, + "message": "Waypoint file loaded 8 points successfully", + "mission_type": "mission", + "items": [ + { + "autocontinue": 1, + "command": 16, + "current": 1, + "frame": 0, + "mavpackettype": "MISSION_ITEM", + "mission_type": 0, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 1, + "x": 527806539, + "y": -7083070, + "z": 136.35 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 1, + "frame": 3, + "command": 22, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 0, + "y": 0, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 2, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527803197, + "y": -7097930, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 3, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527812283, + "y": -7098949, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 4, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527816988, + "y": -7079530, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 5, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527814424, + "y": -7057160, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 6, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527807967, + "y": -7065958, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM", + "target_system": 1, + "target_component": 0, + "seq": 7, + "frame": 3, + "command": 21, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527804398, + "y": -7081997, + "z": 0.0, + "mission_type": 0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_importMissionFromFile_rallyImportSuccess_result.json b/radio/tests/mission_test_files/test_importMissionFromFile_rallyImportSuccess_result.json new file mode 100644 index 000000000..7dc5e385b --- /dev/null +++ b/radio/tests/mission_test_files/test_importMissionFromFile_rallyImportSuccess_result.json @@ -0,0 +1,43 @@ +{ + "success": true, + "message": "Waypoint file loaded 2 points successfully", + "mission_type": "rally", + "items": [ + { + "autocontinue": 1, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 1, + "x": 527810011, + "y": -7094872, + "z": 10.0 + }, + { + "autocontinue": 1, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 1, + "x": 527821108, + "y": -7056785, + "z": 10.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_writeCurrentMission_uploadFenceSuccess_data.json b/radio/tests/mission_test_files/test_writeCurrentMission_uploadFenceSuccess_data.json new file mode 100644 index 000000000..460a0305f --- /dev/null +++ b/radio/tests/mission_test_files/test_writeCurrentMission_uploadFenceSuccess_data.json @@ -0,0 +1,239 @@ +{ + "type": "fence", + "items": [ + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527814618, + "y": -7105708, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527810530, + "y": -7102918, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 2, + "target_component": 0, + "target_system": 255, + "x": 527800342, + "y": -7108390, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 3, + "target_component": 0, + "target_system": 255, + "x": 527818512, + "y": -7035434, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 4, + "target_component": 0, + "target_system": 255, + "x": 527830582, + "y": -7060110, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5001, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 6.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 5, + "target_component": 0, + "target_system": 255, + "x": 527825456, + "y": -7081568, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5004, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 25.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 6, + "target_component": 0, + "target_system": 255, + "x": 527796578, + "y": -7092163, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5003, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 50.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 7, + "target_component": 0, + "target_system": 255, + "x": 527801900, + "y": -7044017, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 8, + "target_component": 0, + "target_system": 255, + "x": 527828246, + "y": -7061076, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 9, + "target_component": 0, + "target_system": 255, + "x": 527818707, + "y": -7041549, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 10, + "target_component": 0, + "target_system": 255, + "x": 527814489, + "y": -7058179, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 11, + "target_component": 0, + "target_system": 255, + "x": 527821887, + "y": -7058072, + "z": 0.0 + }, + { + "autocontinue": 0, + "command": 5002, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 1, + "param1": 5.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 12, + "target_component": 0, + "target_system": 255, + "x": 527826364, + "y": -7068908, + "z": 0.0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_writeCurrentMission_uploadMissionSuccess_data.json b/radio/tests/mission_test_files/test_writeCurrentMission_uploadMissionSuccess_data.json new file mode 100644 index 000000000..1070d0f12 --- /dev/null +++ b/radio/tests/mission_test_files/test_writeCurrentMission_uploadMissionSuccess_data.json @@ -0,0 +1,149 @@ +{ + "type": "mission", + "items": [ + { + "autocontinue": 1, + "command": 16, + "current": 0, + "frame": 0, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 0, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527805690, + "y": -7079236, + "z": 0.09999999403953552 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 1, + "frame": 3, + "command": 22, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 0, + "y": 0, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 2, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527803200, + "y": -7097929, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 3, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527812256, + "y": -7098949, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 4, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527816992, + "y": -7079530, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 5, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527814400, + "y": -7057160, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 6, + "frame": 3, + "command": 16, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "x": 527807968, + "y": -7065958, + "z": 30.0, + "mission_type": 0 + }, + { + "mavpackettype": "MISSION_ITEM_INT", + "target_system": 255, + "target_component": 0, + "seq": 7, + "frame": 3, + "command": 21, + "current": 0, + "autocontinue": 1, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 1.0, + "x": 527804416, + "y": -7081997, + "z": 0.0, + "mission_type": 0 + } + ] +} diff --git a/radio/tests/mission_test_files/test_writeCurrentMission_uploadRallySuccess_data.json b/radio/tests/mission_test_files/test_writeCurrentMission_uploadRallySuccess_data.json new file mode 100644 index 000000000..53f2143b8 --- /dev/null +++ b/radio/tests/mission_test_files/test_writeCurrentMission_uploadRallySuccess_data.json @@ -0,0 +1,41 @@ +{ + "type": "rally", + "items": [ + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 0, + "target_component": 0, + "target_system": 255, + "x": 527810011, + "y": -7094872, + "z": 10.0 + }, + { + "autocontinue": 0, + "command": 5100, + "current": 0, + "frame": 3, + "mavpackettype": "MISSION_ITEM_INT", + "mission_type": 2, + "param1": 0.0, + "param2": 0.0, + "param3": 0.0, + "param4": 0.0, + "seq": 1, + "target_component": 0, + "target_system": 255, + "x": 527821108, + "y": -7056785, + "z": 10.0 + } + ] +} diff --git a/radio/tests/mission_test_files/upload_mission_helper.py b/radio/tests/mission_test_files/upload_mission_helper.py new file mode 100644 index 000000000..f81fd4f7f --- /dev/null +++ b/radio/tests/mission_test_files/upload_mission_helper.py @@ -0,0 +1,77 @@ +from pymavlink import mavutil, mavwp + + +def uploadMission(file_name, mission_type, master): + with open(file_name, "r") as f: + lines = f.readlines() + + if not lines[0].startswith("QGC WPL 110"): + raise Exception("File is not supported WP version") + + if mission_type == "mission": + loader = mavwp.MAVWPLoader() + mission_type_int = 0 + elif mission_type == "fence": + loader = mavwp.MissionItemProtocol_Fence() + mission_type_int = 1 + elif mission_type == "rally": + loader = mavwp.MissionItemProtocol_Rally() + mission_type_int = 2 + else: + raise ValueError(f"Invalid mission type: {mission_type}") + + for i, line in enumerate(lines[1:]): + linearray = line.split("\t") + if len(linearray) < 12 or line.startswith("#"): + continue # Skip lines that do not have enough data or are comments + ln_seq = int(linearray[0]) + ln_current = int(linearray[1]) + ln_frame = int(linearray[2]) + ln_command = int(linearray[3]) + ln_param1 = float(linearray[4]) + ln_param2 = float(linearray[5]) + ln_param3 = float(linearray[6]) + ln_param4 = float(linearray[7]) + ln_x = float(linearray[8]) + ln_y = float(linearray[9]) + ln_z = float(linearray[10]) + ln_autocontinue = int(float(linearray[11].strip())) + + # For fence/rally, the first line is a home location so don't add it + if mission_type != "mission" and i == 0: + continue + + wp_item = mavutil.mavlink.MAVLink_mission_item_int_message( + master.target_system, + master.target_component, + ln_seq, + ln_frame, + ln_command, + ln_current, + ln_autocontinue, + ln_param1, + ln_param2, + ln_param3, + ln_param4, + int(ln_x * 1e7), + int(ln_y * 1e7), + ln_z, + mission_type_int, + ) + loader.add(wp_item) + + master.mav.mission_count_send( + master.target_system, + master.target_component, + loader.count(), + mission_type=mission_type_int, + ) + + for i in range(loader.count()): + msg = master.recv_match(type=["MISSION_REQUEST"], blocking=True, timeout=3) + if msg is None: + raise TimeoutError("Did not receive MISSION_REQUEST message within timeout") + + master.mav.send(loader.wp(msg.seq)) + + print(f"Uploaded {mission_type} with {loader.count()} items") diff --git a/radio/tests/test_FlightModesController.py b/radio/tests/test_FlightModesController.py index 5e6d43c60..f24cdf760 100644 --- a/radio/tests/test_FlightModesController.py +++ b/radio/tests/test_FlightModesController.py @@ -4,7 +4,7 @@ from flask_socketio.test_client import SocketIOTestClient from . import falcon_test -from .helpers import FakeTCP, ParamSetTimeout, RecvMsgReturnsFalse, SetAircraftType +from .helpers import FakeTCP, ParamSetTimeout, RecvMsgReturnsNone, SetAircraftType @pytest.fixture(scope="module", autouse=True) @@ -41,7 +41,7 @@ def test_getFlightModes_success(client: SocketIOTestClient, droneStatus): @falcon_test(pass_drone_status=True) def test_getFlightModes_failure(client: SocketIOTestClient, droneStatus): - with RecvMsgReturnsFalse(): + with RecvMsgReturnsNone(): droneStatus.drone.flightModesController.getFlightModes() assert len(droneStatus.drone.flightModesController.flight_modes) == 6 for items in droneStatus.drone.flightModesController.flight_modes: @@ -50,9 +50,16 @@ def test_getFlightModes_failure(client: SocketIOTestClient, droneStatus): @falcon_test(pass_drone_status=True) def test_getFlightModeChannel_failure(client: SocketIOTestClient, droneStatus): - with RecvMsgReturnsFalse(): + with RecvMsgReturnsNone(): + original_flight_mode_channel = ( + droneStatus.drone.flightModesController.flight_mode_channel + ) + droneStatus.drone.flightModesController.flight_mode_channel = "UNKNOWN" droneStatus.drone.flightModesController.getFlightModeChannel() assert droneStatus.drone.flightModesController.flight_mode_channel == "UNKNOWN" + droneStatus.drone.flightModesController.flight_mode_channel = ( + original_flight_mode_channel + ) @falcon_test(pass_drone_status=True) @@ -68,7 +75,7 @@ def test_setCurrentFlightMode(client: SocketIOTestClient, droneStatus): assert response.get("success") is False assert response.get("message") == "Could not set flight mode, serial exception" - with RecvMsgReturnsFalse(): + with RecvMsgReturnsNone(): response = droneStatus.drone.flightModesController.setCurrentFlightMode(1) assert response.get("success") is False assert response.get("message") == "Could not set flight mode" diff --git a/radio/tests/test_MissionController.py b/radio/tests/test_MissionController.py new file mode 100644 index 000000000..259ff53f2 --- /dev/null +++ b/radio/tests/test_MissionController.py @@ -0,0 +1,87 @@ +import pytest +from app.controllers.missionController import MissionController + + +class DummyDrone: + target_system = 1 + target_component = 1 + + +@pytest.fixture +def controller(): + return MissionController(DummyDrone()) + + +def test_checkMissionType_valid_mission(controller): + resp = controller._checkMissionType(0) + assert resp["success"] is True + + +def test_checkMissionType_valid_fence(controller): + resp = controller._checkMissionType(1) + assert resp["success"] is True + + +def test_checkMissionType_valid_rally(controller): + resp = controller._checkMissionType(2) + assert resp["success"] is True + + +def test_checkMissionType_invalid_type(controller): + resp = controller._checkMissionType(9999) + assert resp["success"] is False + + +def test_convertCoordinate_float_to_int(controller): + result = controller._convertCoordinate(52.7814618) + assert isinstance(result, (int, float)) + assert result == 527814618 + + +def test_convertCoordinate_int_to_float(controller): + result = controller._convertCoordinate(527814618) + assert isinstance(result, (int, float)) + assert result == 52.7814618 + + +def test_convertCoordinate_invalid_type_raises(controller): + with pytest.raises(ValueError) as excinfo: + controller._convertCoordinate("not_a_number") + + assert ( + str(excinfo.value) + == "Invalid coordinate type . Must be int or float." + ) + + +def test_getMissionName_mission(controller): + name = controller._getMissionName(0) + assert name == "mission" + + +def test_getMissionName_fence(controller): + name = controller._getMissionName(1) + assert name == "fence" + + +def test_getMissionName_rally(controller): + name = controller._getMissionName(2) + assert name == "rally" + + +def test_getMissionName_invalid_type_raises(controller): + with pytest.raises(ValueError) as excinfo: + controller._getMissionName(9999) + + assert str(excinfo.value) == "Invalid mission type 9999" + + +def test_getCommandName_known_command(controller): + name = controller._getCommandName(16) # Example known command + assert isinstance(name, str) + assert name == "MAV_CMD_NAV_WAYPOINT" + + +def test_getCommandName_unknown_command(controller): + name = controller._getCommandName(9999999) # Example unknown command + assert name == "Unknown command 9999999" diff --git a/radio/tests/test_comPorts.py b/radio/tests/test_comPorts.py index 8fd8e7e9d..e925e756e 100644 --- a/radio/tests/test_comPorts.py +++ b/radio/tests/test_comPorts.py @@ -1,17 +1,15 @@ import sys -import pytest -from typing import Union - -from serial.tools import list_ports -from serial.tools.list_ports_common import ListPortInfo +import pytest from app import droneStatus from app.drone import Drone +from serial.tools import list_ports + from . import socketio_client from .conftest import setupDrone from .helpers import send_and_recieve -VALID_DRONE_PORT: Union[str, ListPortInfo] +VALID_DRONE_PORT: str @pytest.fixture(scope="module", autouse=True) @@ -23,9 +21,6 @@ def run_once_after_all_tests(): global VALID_DRONE_PORT VALID_DRONE_PORT = droneStatus.drone.port - # Get the connection string - if isinstance(VALID_DRONE_PORT, ListPortInfo): - VALID_DRONE_PORT = VALID_DRONE_PORT.device droneStatus.drone.logger.info(f"Found drone running on port {VALID_DRONE_PORT}") yield diff --git a/radio/tests/test_connections.py b/radio/tests/test_connections.py index 6ae6aab89..b308d69b2 100644 --- a/radio/tests/test_connections.py +++ b/radio/tests/test_connections.py @@ -1,6 +1,4 @@ import pytest -from serial.tools.list_ports_common import ListPortInfo - from flask_socketio.test_client import SocketIOTestClient from . import falcon_test @@ -12,15 +10,12 @@ def run_once_after_all_tests(): Saves the valid connection string then ensures that the drone connection is established again after the tests have run """ from app import droneStatus + from .conftest import setupDrone assert droneStatus.drone is not None VALID_DRONE_PORT = droneStatus.drone.port - # Get the connection string - if isinstance(VALID_DRONE_PORT, ListPortInfo): - VALID_DRONE_PORT = VALID_DRONE_PORT.device - droneStatus.drone.logger.info(f"Found drone running on port {VALID_DRONE_PORT}") yield @@ -49,6 +44,20 @@ def test_isConnectedToDrone_with_drone( assert socketio_result[0]["name"] == "is_connected_to_drone" # Correct name emitted +@falcon_test(pass_drone_status=True) +def test_getTargetInfo(socketio_client: SocketIOTestClient, droneStatus): + socketio_client.emit("get_target_info") + socketio_result = socketio_client.get_received() + + assert len(socketio_result) == 1 + assert socketio_result[0]["name"] == "target_info" + assert socketio_result[0]["args"][0] == { + "target_component": 0, + "target_system": 1, + } + + +# Has to be the final test otherwise the socket disconnects @falcon_test(pass_drone_status=True) def test_disconnect(socketio_client: SocketIOTestClient, droneStatus): """Test disconnecting from socket""" diff --git a/radio/tests/test_gripper.py b/radio/tests/test_gripper.py index 58abd7c92..649071631 100644 --- a/radio/tests/test_gripper.py +++ b/radio/tests/test_gripper.py @@ -1,11 +1,11 @@ import time -import pytest -from . import falcon_test +import pytest from flask_socketio import SocketIOTestClient from pymavlink import mavutil -from .helpers import send_and_recieve, NoDrone, FakeTCP +from . import falcon_test +from .helpers import FakeTCP, NoDrone, send_and_recieve @pytest.fixture(scope="module", autouse=True) @@ -16,7 +16,7 @@ def run_once_after_all_tests(): from app import droneStatus droneStatus.drone.paramsController.getAllParams() - time.sleep(1) + time.sleep(0.5) while droneStatus.drone.paramsController.is_requesting_params: pass yield @@ -25,32 +25,26 @@ def run_once_after_all_tests(): droneStatus.drone.paramsController.setParam( "GRIP_ENABLE", 1, mavutil.mavlink.MAV_PARAM_TYPE_REAL32 ) - time.sleep(1) + time.sleep(0.5) @falcon_test(pass_drone_status=True) def test_gripperEnabled(socketio_client: SocketIOTestClient, droneStatus): # Failure on wrong drone state droneStatus.state = "params" - assert send_and_recieve("gripper_enabled") == { + assert send_and_recieve("get_gripper_enabled") == { "message": "You must be on the config screen to access the gripper." } # Failure with no drone connected droneStatus.state = "config" with NoDrone(): - assert send_and_recieve("gripper_enabled") == { + assert send_and_recieve("get_gripper_enabled") == { "message": "You must be connected to the drone to access the gripper." } # Correct result on config page - assert send_and_recieve("gripper_enabled") is True - - # Failure with serial exception - with FakeTCP(): - assert send_and_recieve("gripper_enabled") == { - "message": "Could not get gripper state from drone." - } + assert send_and_recieve("get_gripper_enabled") is True @falcon_test(pass_drone_status=True) @@ -89,7 +83,7 @@ def test_setGripper(socketio_client: SocketIOTestClient, droneStatus): with FakeTCP(): assert send_and_recieve("set_gripper", "grab") == { "success": False, - "message": "Could not get gripper state from drone.", + "message": "Setting gripper failed, serial exception", } @@ -99,19 +93,10 @@ def test_gripperDisabled(socketio_client: SocketIOTestClient, droneStatus) -> No "GRIP_ENABLE", 0, mavutil.mavlink.MAV_PARAM_TYPE_REAL32 ) # Allow time for gripper to be updated - time.sleep(1.5) + time.sleep(0.5) - assert send_and_recieve("gripper_enabled") is False + assert send_and_recieve("get_gripper_enabled") is False assert send_and_recieve("set_gripper", "release") == { "success": False, "message": "Gripper is not enabled", } - - with FakeTCP(): - assert send_and_recieve("gripper_enabled") == { - "message": "Could not get gripper state from drone." - } - assert send_and_recieve("set_gripper", "release") == { - "success": False, - "message": "Could not get gripper state from drone.", - } diff --git a/radio/tests/test_mission.py b/radio/tests/test_mission.py index 571310c5d..d0a75c44f 100644 --- a/radio/tests/test_mission.py +++ b/radio/tests/test_mission.py @@ -1,11 +1,80 @@ +import json +import os + +import pytest from flask_socketio.test_client import SocketIOTestClient from . import falcon_test from .helpers import NoDrone +from .mission_test_files.upload_mission_helper import uploadMission + +MISSION_FILES_PATH = os.path.join( + os.path.dirname(__file__), + "mission_test_files", +) + + +@pytest.fixture() +def upload_default_mission(): + """ + Uploads the default mission, fence, and rally files to the drone before running a test. + """ + # Setup + + # Should be imported after the fixture to ensure the droneStatus is fresh + import app.droneStatus as droneStatus + + assert droneStatus.drone is not None, "Drone must be connected before running tests" + + droneStatus.drone.is_listening = False + + uploadMission( + os.path.join(MISSION_FILES_PATH, "default_mission.txt"), + "mission", + droneStatus.drone.master, + ) + uploadMission( + os.path.join(MISSION_FILES_PATH, "default_fence.txt"), + "fence", + droneStatus.drone.master, + ) + uploadMission( + os.path.join(MISSION_FILES_PATH, "default_rally.txt"), + "rally", + droneStatus.drone.master, + ) + + droneStatus.drone.is_listening = True + + yield # this is where the testing happens + + # Teardown + + +@pytest.fixture() +def delete_export_files(): + """ + Deletes the exported mission files after running a test. + """ + yield # this is where the testing happens + + # Teardown + export_files = [ + "exported_mission.txt", + "exported_fence.txt", + "exported_rally.txt", + ] + + for file_name in export_files: + file_path = os.path.join(MISSION_FILES_PATH, file_name) + if os.path.exists(file_path): + os.remove(file_path) @falcon_test(pass_drone_status=True) -def test_getCurrentMission_wrongState(socketio_client: SocketIOTestClient, droneStatus): +def test_getCurrentMissionAll_wrongState( + socketio_client: SocketIOTestClient, droneStatus +): droneStatus.state = "params" socketio_client.emit("get_current_mission_all") socketio_result = socketio_client.get_received()[0] @@ -16,8 +85,9 @@ def test_getCurrentMission_wrongState(socketio_client: SocketIOTestClient, drone } +@pytest.mark.usefixtures("upload_default_mission") @falcon_test(pass_drone_status=True) -def test_getCurrentMission_correctState( +def test_getCurrentMissionAll_correctState( socketio_client: SocketIOTestClient, droneStatus ): droneStatus.state = "dashboard" @@ -26,161 +96,19 @@ def test_getCurrentMission_correctState( assert socketio_result["name"] == "current_mission_all" # Correct name emitted - # pytest.skip(reason="Sending mission to simulator is currently bugged and fails sometimes") - assert socketio_result["args"][0] == { - "mission_items": [ - { - "autocontinue": 1, - "command": 16, - "current": 0, - "frame": 0, - "mavpackettype": "MISSION_ITEM_INT", - "mission_type": 0, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "seq": 0, - "target_component": 0, - "target_system": 255, - "x": 527805690, - "y": -7079236, - "z": 0.09999999403953552, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 1, - "frame": 3, - "command": 22, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 0, - "y": 0, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 2, - "frame": 3, - "command": 16, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 527803200, - "y": -7097929, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 3, - "frame": 3, - "command": 16, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 527812256, - "y": -7098949, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 4, - "frame": 3, - "command": 16, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 527816992, - "y": -7079530, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 5, - "frame": 3, - "command": 16, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 527814400, - "y": -7057160, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 6, - "frame": 3, - "command": 16, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 0.0, - "x": 527807968, - "y": -7065958, - "z": 30.0, - "mission_type": 0, - }, - { - "mavpackettype": "MISSION_ITEM_INT", - "target_system": 255, - "target_component": 0, - "seq": 7, - "frame": 3, - "command": 21, - "current": 0, - "autocontinue": 1, - "param1": 0.0, - "param2": 0.0, - "param3": 0.0, - "param4": 1.0, - "x": 527804416, - "y": -7081997, - "z": 0.0, - "mission_type": 0, - }, - ], - "fence_items": [], - "rally_items": [], - } - - -@falcon_test(pass_drone_status=True) -def test_getCurrentMission_noDroneConnection( + with open( + os.path.join( + MISSION_FILES_PATH, "test_getCurrentMission_correctState_result.json" + ), + "r", + ) as f: + result_data = json.load(f) + + assert socketio_result["args"][0] == result_data + + +@falcon_test(pass_drone_status=True) +def test_getCurrentMissionAll_noDroneConnection( socketio_client: SocketIOTestClient, droneStatus ): droneStatus.state = "dashboard" @@ -193,3 +121,521 @@ def test_getCurrentMission_noDroneConnection( assert socketio_result["args"][0] == { "message": "Must be connected to the drone to get current mission." } + + +@falcon_test(pass_drone_status=True) +def test_getCurrentMission_wrongState(socketio_client: SocketIOTestClient, droneStatus): + droneStatus.state = "params" + socketio_client.emit("get_current_mission", {"type": "mission"}) + socketio_result = socketio_client.get_received()[0] + + assert socketio_result["name"] == "params_error" # Correct name emitted + assert socketio_result["args"][0] == { + "message": "You must be on the dashboard or missions screen to get the current mission." + } + + +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_getCurrentMission_correctMission( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + socketio_client.emit("get_current_mission", {"type": "mission"}) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "current_mission" + + with open( + os.path.join( + MISSION_FILES_PATH, "test_getCurrentMission_correctMission_result.json" + ), + "r", + ) as f: + result_data = json.load(f) + + assert socketio_result["args"][0] == result_data + + +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_getCurrentMission_correctFence( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + socketio_client.emit("get_current_mission", {"type": "fence"}) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "current_mission" + + with open( + os.path.join( + MISSION_FILES_PATH, "test_getCurrentMission_correctFence_result.json" + ), + "r", + ) as f: + result_data = json.load(f) + + assert socketio_result["args"][0] == result_data + + +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_getCurrentMission_correctRally( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + socketio_client.emit("get_current_mission", {"type": "rally"}) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "current_mission" + + with open( + os.path.join( + MISSION_FILES_PATH, "test_getCurrentMission_correctRally_result.json" + ), + "r", + ) as f: + result_data = json.load(f) + + assert socketio_result["args"][0] == result_data + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_wrongState( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "params" + socketio_client.emit("write_current_mission", {}) + socketio_result = socketio_client.get_received()[0] + + assert socketio_result["name"] == "params_error" # Correct name emitted + assert socketio_result["args"][0] == { + "message": "You must be on the missions screen to write the current mission." + } + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_uploadMissionSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + with open( + os.path.join( + MISSION_FILES_PATH, + "test_writeCurrentMission_uploadMissionSuccess_data.json", + ), + "r", + ) as f: + data = json.load(f) + + socketio_client.emit("write_current_mission", data) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "write_mission_result" + assert socketio_result["args"][0] == { + "success": True, + "message": "Mission uploaded successfully", + } + + # Read back the mission + socketio_client.emit("get_current_mission", {"type": "mission"}) + read_result = socketio_client.get_received()[-1] + assert read_result["name"] == "current_mission" + + # Compare items + written_items = data["items"] + returned_items = read_result["args"][0]["items"] + assert written_items == returned_items + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_uploadFenceSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + with open( + os.path.join( + MISSION_FILES_PATH, "test_writeCurrentMission_uploadFenceSuccess_data.json" + ), + "r", + ) as f: + data = json.load(f) + + socketio_client.emit("write_current_mission", data) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "write_mission_result" + assert socketio_result["args"][0] == { + "success": True, + "message": "Mission uploaded successfully", + } + + # Read back the mission + socketio_client.emit("get_current_mission", {"type": "fence"}) + read_result = socketio_client.get_received()[-1] + assert read_result["name"] == "current_mission" + + # Compare items + written_items = data["items"] + returned_items = read_result["args"][0]["items"] + assert written_items == returned_items + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_uploadRallySuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + with open( + os.path.join( + MISSION_FILES_PATH, "test_writeCurrentMission_uploadRallySuccess_data.json" + ), + "r", + ) as f: + data = json.load(f) + + socketio_client.emit("write_current_mission", data) + socketio_result = socketio_client.get_received()[-1] + + assert socketio_result["name"] == "write_mission_result" + assert socketio_result["args"][0] == { + "success": True, + "message": "Mission uploaded successfully", + } + + # Read back the mission + socketio_client.emit("get_current_mission", {"type": "rally"}) + read_result = socketio_client.get_received()[-1] + assert read_result["name"] == "current_mission" + + # Compare items + written_items = data["items"] + returned_items = read_result["args"][0]["items"] + assert written_items == returned_items + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_incorrectMissionType( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + data = { + "type": "unknown", + "items": [], + } + + socketio_client.emit("write_current_mission", data) + socketio_result = socketio_client.get_received()[0] + + assert socketio_result["name"] == "write_mission_result" + assert socketio_result["args"][0] == { + "success": False, + "message": "Invalid mission type. Must be 'mission', 'fence', or 'rally', got unknown.", + } + + +@falcon_test(pass_drone_status=True) +def test_writeCurrentMission_noWaypoints( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + data = { + "type": "mission", + "items": [], + } + + socketio_client.emit("write_current_mission", data) + socketio_result = socketio_client.get_received()[0] + + assert socketio_result["name"] == "write_mission_result" + assert socketio_result["args"][0] == { + "success": True, + "message": "Cleared mission type 0, no waypoints to upload", + } + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_missionImportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + import_file_path = os.path.join(MISSION_FILES_PATH, "default_mission.txt") + with open( + os.path.join( + MISSION_FILES_PATH, + "test_importMissionFromFile_missionImportSuccess_result.json", + ), + "r", + ) as f: + result_data = json.load(f) + + socketio_client.emit( + "import_mission_from_file", {"type": "mission", "file_path": import_file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == result_data + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_fenceImportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + import_file_path = os.path.join(MISSION_FILES_PATH, "default_fence.txt") + with open( + os.path.join( + MISSION_FILES_PATH, + "test_importMissionFromFile_fenceImportSuccess_result.json", + ), + "r", + ) as f: + result_data = json.load(f) + + socketio_client.emit( + "import_mission_from_file", {"type": "fence", "file_path": import_file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == result_data + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_rallyImportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + import_file_path = os.path.join(MISSION_FILES_PATH, "default_rally.txt") + with open( + os.path.join( + MISSION_FILES_PATH, + "test_importMissionFromFile_rallyImportSuccess_result.json", + ), + "r", + ) as f: + result_data = json.load(f) + + socketio_client.emit( + "import_mission_from_file", {"type": "rally", "file_path": import_file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == result_data + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_fileNotFound( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "nonexistent.txt") + + socketio_client.emit( + "import_mission_from_file", {"type": "mission", "file_path": file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == { + "success": False, + "message": f"Waypoint file not found at {file_path}", + } + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_incorrectMissionType_rallyWithMission( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "default_mission.txt") + + socketio_client.emit( + "import_mission_from_file", {"type": "rally", "file_path": file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == { + "success": False, + "message": "Could not load the waypoint file. Waypoint command MAV_CMD_NAV_TAKEOFF does not match mission type rally", + } + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_incorrectMissionType_fenceWithMission( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "default_mission.txt") + + socketio_client.emit( + "import_mission_from_file", {"type": "fence", "file_path": file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == { + "success": False, + "message": "Could not load the waypoint file. Waypoint command MAV_CMD_NAV_TAKEOFF does not match mission type fence", + } + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_incorrectMissionType_rallyWithFence( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "default_fence.txt") + + socketio_client.emit( + "import_mission_from_file", {"type": "rally", "file_path": file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == { + "success": False, + "message": "Could not load the waypoint file. Waypoint command MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION does not match mission type rally", + } + + +@falcon_test(pass_drone_status=True) +def test_importMissionFromFile_incorrectMissionType_fenceWithRally( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "default_rally.txt") + + socketio_client.emit( + "import_mission_from_file", {"type": "fence", "file_path": file_path} + ) + result = socketio_client.get_received()[-1] + + assert result["name"] == "import_mission_result" + assert result["args"][0] == { + "success": False, + "message": "Could not load the waypoint file. Waypoint command MAV_CMD_NAV_RALLY_POINT does not match mission type fence", + } + + +@pytest.mark.usefixtures("delete_export_files") +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_exportMissionToFile_missionExportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + export_file_path = os.path.join(MISSION_FILES_PATH, "exported_mission.txt") + + # Get current mission items + socketio_client.emit("get_current_mission", {"type": "mission"}) + result = socketio_client.get_received()[-1] + items = result["args"][0]["items"] + + socketio_client.emit( + "export_mission_to_file", + {"type": "mission", "file_path": export_file_path, "items": items}, + ) + export_result = socketio_client.get_received()[-1] + + assert export_result["name"] == "export_mission_result" + assert export_result["args"][0] == { + "success": True, + "message": f"Waypoint file saved 8 points successfully to {export_file_path}", + } + assert os.path.exists(export_file_path) + with open(export_file_path, "r") as f, open( + os.path.join(MISSION_FILES_PATH, "exported_mission_check.txt"), + "r", + ) as f_expected: + assert f.read() == f_expected.read() + + +@pytest.mark.usefixtures("delete_export_files") +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_exportMissionToFile_fenceExportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + export_file_path = os.path.join(MISSION_FILES_PATH, "exported_fence.txt") + + # Get current mission items + socketio_client.emit("get_current_mission", {"type": "fence"}) + result = socketio_client.get_received()[-1] + items = result["args"][0]["items"] + + socketio_client.emit( + "export_mission_to_file", + {"type": "fence", "file_path": export_file_path, "items": items}, + ) + export_result = socketio_client.get_received()[-1] + + assert export_result["name"] == "export_mission_result" + assert export_result["args"][0] == { + "success": True, + "message": f"Waypoint file saved 13 points successfully to {export_file_path}", + } + assert os.path.exists(export_file_path) + with open(export_file_path, "r") as f, open( + os.path.join(MISSION_FILES_PATH, "exported_fence_check.txt"), + "r", + ) as f_expected: + assert f.read() == f_expected.read() + + +@pytest.mark.usefixtures("delete_export_files") +@pytest.mark.usefixtures("upload_default_mission") +@falcon_test(pass_drone_status=True) +def test_exportMissionToFile_rallyExportSuccess( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + export_file_path = os.path.join(MISSION_FILES_PATH, "exported_rally.txt") + + # Get current mission items + socketio_client.emit("get_current_mission", {"type": "rally"}) + result = socketio_client.get_received()[-1] + items = result["args"][0]["items"] + + socketio_client.emit( + "export_mission_to_file", + {"type": "rally", "file_path": export_file_path, "items": items}, + ) + export_result = socketio_client.get_received()[-1] + + assert export_result["name"] == "export_mission_result" + assert export_result["args"][0] == { + "success": True, + "message": f"Waypoint file saved 2 points successfully to {export_file_path}", + } + assert os.path.exists(export_file_path) + with open(export_file_path, "r") as f, open( + os.path.join(MISSION_FILES_PATH, "exported_rally_check.txt"), + "r", + ) as f_expected: + assert f.read() == f_expected.read() + + +@falcon_test(pass_drone_status=True) +def test_exportMissionToFile_noWaypoints( + socketio_client: SocketIOTestClient, droneStatus +): + droneStatus.state = "missions" + file_path = os.path.join(MISSION_FILES_PATH, "exported_empty.txt") + + socketio_client.emit( + "export_mission_to_file", + {"type": "mission", "file_path": file_path, "items": []}, + ) + export_result = socketio_client.get_received()[-1] + + assert export_result["name"] == "export_mission_result" + assert export_result["args"][0] == { + "success": False, + "message": "No waypoints loaded for the mission type of mission", + } diff --git a/radio/tests/test_params.py b/radio/tests/test_params.py index 8e2d4292b..b6350cd82 100644 --- a/radio/tests/test_params.py +++ b/radio/tests/test_params.py @@ -1,10 +1,10 @@ +from typing import Any, List, Optional, Union + import pytest -from typing import Optional, Union from flask_socketio.test_client import SocketIOTestClient from . import falcon_test -from .helpers import ParamSetTimeout, ParamRefreshTimeout -from typing import List, Any +from .helpers import ParamRefreshTimeout, ParamSetTimeout def send_and_receive_params( @@ -27,19 +27,6 @@ def send_and_receive_params( return client.get_received()[0] -def assert_test_params(data: dict, message: dict, name: str) -> None: - """ - Take the data from socketio test client and assert that it matches the asserted values - - Args: - data (dict): The data received from the .get_received() - message (dict): The expected message - name (str): The name of the socket.emit - """ - assert data["name"] == name - assert data["args"][0] == message - - @falcon_test(pass_drone_status=True) def test_setMultipleParams_wrongState( socketio_client: SocketIOTestClient, droneStatus @@ -49,11 +36,10 @@ def test_setMultipleParams_wrongState( socketio_client, "set_multiple_params", [] ) - assert_test_params( - socketio_result, - {"message": "You must be on the params screen to save parameters."}, - "params_error", - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "message": "You must be on the params screen to save parameters.", + } @falcon_test(pass_drone_status=True) @@ -65,9 +51,11 @@ def test_setMultipleParams_missingData( socketio_client, "set_multiple_params", [] ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "No parameters to set", + } @falcon_test(pass_drone_status=True) @@ -83,7 +71,10 @@ def test_setMultipleParams_invalidData( ) assert socketio_result["name"] == "params_error" - assert socketio_result["args"][0] == {"message": "Failed to save parameters."} + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter RC_11MAX", + } # Param Value too big to fit into param_type data type structure socketio_result = send_and_receive_params( @@ -91,54 +82,66 @@ def test_setMultipleParams_invalidData( "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 256, "param_type": 1}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 128, "param_type": 2}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 65536, "param_type": 3}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 32770, "param_type": 4}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 4294967296, "param_type": 5}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 2147483648, "param_type": 6}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } # Param Value too small to fit into param_type data type structure socketio_result = send_and_receive_params( @@ -146,54 +149,66 @@ def test_setMultipleParams_invalidData( "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -1, "param_type": 1}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -129, "param_type": 2}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -1, "param_type": 3}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -32770, "param_type": 4}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -1, "param_type": 5}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } socketio_result = send_and_receive_params( socketio_client, "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": -2147483686, "param_type": 6}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } @falcon_test(pass_drone_status=True) @@ -207,9 +222,11 @@ def test_setMultipleParams_paramSetTimeout( "set_multiple_params", [{"param_id": "ACRO_BAL_ROLL", "param_value": 2, "param_type": 9}], ) - assert_test_params( - socketio_result, {"message": "Failed to save parameters."}, "params_error" - ) + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "success": False, + "message": "Failed to set parameter ACRO_BAL_ROLL", + } @falcon_test(pass_drone_status=True) @@ -223,11 +240,12 @@ def test_setMultipleParams_successfullySet_paramsState( [{"param_id": "ACRO_BAL_ROLL", "param_value": 2, "param_type": 9}], ) - assert_test_params( - socketio_result, - {"message": "Parameters saved successfully."}, - "param_set_success", - ) + assert socketio_result["name"] == "param_set_success" + assert socketio_result["args"][0] == { + "success": True, + "message": "All parameters set successfully", + "data": [{"param_id": "ACRO_BAL_ROLL", "param_value": 2, "param_type": 9}], + } @falcon_test(pass_drone_status=True) @@ -241,11 +259,12 @@ def test_setMultipleParams_successfullySet_configState( [{"param_id": "ACRO_BAL_ROLL", "param_value": 2, "param_type": 9}], ) - assert_test_params( - socketio_result, - {"message": "Parameters saved successfully."}, - "param_set_success", - ) + assert socketio_result["name"] == "param_set_success" + assert socketio_result["args"][0] == { + "success": True, + "message": "All parameters set successfully", + "data": [{"param_id": "ACRO_BAL_ROLL", "param_value": 2, "param_type": 9}], + } @falcon_test(pass_drone_status=True) @@ -254,11 +273,11 @@ def test_refreshParams_wrongState( ) -> None: droneStatus.state = "dashboard" socketio_result = send_and_receive_params(socketio_client, "refresh_params") - assert_test_params( - socketio_result, - {"message": "You must be on the params screen to refresh the parameters."}, - "params_error", - ) + + assert socketio_result["name"] == "params_error" + assert socketio_result["args"][0] == { + "message": "You must be on the params screen to refresh the parameters.", + } @falcon_test(pass_drone_status=True) @@ -294,6 +313,7 @@ def test_refreshParams_successfullyRefreshed( or socketio_result["name"] == "params" ) + # TODO: Fix flaky test pytest.skip(reason="Flaky test, needs fixing in alpha 0.1.8") if socketio_result["name"] == "param_request_update": assert len(socketio_result["args"][0]) == 2