diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index ddbd0d8..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,50 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', - project: './tsconfig.eslint.json', - }, - env: { - browser: false, - node: true, - es6: true, - }, - settings: { - 'import/resolver': { - node: { - extensions: ['.ts'], - }, - }, - }, - plugins: ['@typescript-eslint', 'eslint-plugin-tsdoc'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'airbnb-base', - 'airbnb-typescript/base', - 'prettier', - 'plugin:prettier/recommended', - ], - rules: { - '@typescript-eslint/switch-exhaustiveness-check': 'error', - '@typescript-eslint/no-unused-vars': 'error', - '@typescript-eslint/no-explicit-any': 'error', - 'import/extensions': [ - 'error', - 'ignorePackages', - { - js: 'never', - ts: 'never', - }, - ], - 'import/prefer-default-export': 'off', - 'no-plusplus': 'off', - 'import/no-import-module-exports': 'off', - '@typescript-eslint/no-use-before-define': 'off', - 'no-bitwise': 'off', - 'no-underscore-dangle': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'no-inline-comments': 'off', - 'default-case': 'warn', - }, -}; diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 53af8e4..12a5832 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -9,17 +9,17 @@ Official MSFS docs home: ## Encoding conventions -- **All strings** (both reading and writing) use **`latin1`** encoding — the same encoding used by `RawBuffer.readString()` / `writeString()`. Never use `utf8`. -- Fixed-length string field lengths vary per field — always check the SDK documentation for the exact size. -- Numbers are little-endian — handled automatically by `RawBuffer` helpers. -- Variable-length text payloads sent as bytes: `Buffer.from(str, 'latin1')`. -- Variable-length text payloads received as bytes: `data.readBytes(n).toString('latin1')`. +- **All strings** (both reading and writing) use **`latin1`** encoding — the same encoding used by `RawBuffer.readString()` / `writeString()`. Never use `utf8`. +- Fixed-length string field lengths vary per field — always check the SDK documentation for the exact size. +- Numbers are little-endian — handled automatically by `RawBuffer` helpers. +- Variable-length text payloads sent as bytes: `Buffer.from(str, 'latin1')`. +- Variable-length text payloads received as bytes: `data.readBytes(n).toString('latin1')`. ## Enum conventions -- File names: `PascalCase.ts` (e.g. `CommBusBroadcastTo.ts`), exported from `src/enums/index.ts`. -- Member names: `SCREAMING_SNAKE_CASE` stripping the repetitive C++ prefix (e.g. `SIMCONNECT_COMM_BUS_BROADCAST_TO_JS` → `JS`, `SIMCONNECT_CAMERA_AVAILABILITY_NOT_ACQUIRED` → `NOT_ACQUIRED`). -- Values must exactly match the SDK C++ definitions — use bit-shift literals (`1 << 0`) for flags and composite expressions for combined values. +- File names: `PascalCase.ts` (e.g. `CommBusBroadcastTo.ts`), exported from `src/enums/index.ts`. +- Member names: `SCREAMING_SNAKE_CASE` stripping the repetitive C++ prefix (e.g. `SIMCONNECT_COMM_BUS_BROADCAST_TO_JS` → `JS`, `SIMCONNECT_CAMERA_AVAILABILITY_NOT_ACQUIRED` → `NOT_ACQUIRED`). +- Values must exactly match the SDK C++ definitions — use bit-shift literals (`1 << 0`) for flags and composite expressions for combined values. ## Build & test @@ -30,7 +30,7 @@ npm test # run Jest tests npm run lint # ESLint + Prettier ``` -- Pre-commit hook runs `lint-staged` (ESLint fix → Prettier → `tsc --noEmit`). +- Pre-commit hook runs `lint-staged` (ESLint fix → Prettier → `tsc --noEmit`). ## Skills diff --git a/.github/skills/add-api-method.skill.md b/.github/skills/add-api-method.skill.md index f343e1b..b86d36f 100644 --- a/.github/skills/add-api-method.skill.md +++ b/.github/skills/add-api-method.skill.md @@ -26,10 +26,10 @@ Example: `SimConnect_CameraGet` maps to `SIMCONNECT_RECV_ID_CAMERA_DATA`. ### 0. Request → Recv mapping (always) -- Identify the request function in `SimConnect.h` and verify whether it has a corresponding `SIMCONNECT_RECV_ID_*` response. -- Use the online SDK API docs to verify whether the function produces recv messages, while keeping `SimConnect.h` as the authoritative source if docs and header disagree. -- If a response exists, implement both request and receive paths in the same change. -- Do not stop after adding only the request method when the SDK defines a recv packet for it. +- Identify the request function in `SimConnect.h` and verify whether it has a corresponding `SIMCONNECT_RECV_ID_*` response. +- Use the online SDK API docs to verify whether the function produces recv messages, while keeping `SimConnect.h` as the authoritative source if docs and header disagree. +- If a response exists, implement both request and receive paths in the same change. +- Do not stop after adding only the request method when the SDK defines a recv packet for it. ### 1. Recv struct (only if the server sends a response packet) @@ -51,13 +51,13 @@ export class RecvXxx { Rules: -- Constructor takes a single `RawBuffer` argument. -- **Check if the SDK struct inherits from a base struct** (e.g., `SIMCONNECT_RECV_LIST_TEMPLATE`). If it does, extend the corresponding TypeScript base class (e.g., `RecvListTemplate`) and call `super(data)` first. -- Read fields in the exact order they appear in the C++ struct. -- Fixed-length string fields: `data.readString(N)` where **N is the exact byte length from the SDK struct**. -- Variable-length text payloads declared with the `SIMCONNECT_STRINGV(name)` macro (expands to `char name[1]`): use `data.readStringV()` typed as `string`. -- Variable-length raw byte blobs that are not text: `data.readBytes(data.remaining())` typed as `Buffer`. -- **Verify every field name and type against the SDK struct** — do not rename fields or change types based on assumptions. +- Constructor takes a single `RawBuffer` argument. +- **Check if the SDK struct inherits from a base struct** (e.g., `SIMCONNECT_RECV_LIST_TEMPLATE`). If it does, extend the corresponding TypeScript base class (e.g., `RecvListTemplate`) and call `super(data)` first. +- Read fields in the exact order they appear in the C++ struct. +- Fixed-length string fields: `data.readString(N)` where **N is the exact byte length from the SDK struct**. +- Variable-length text payloads declared with the `SIMCONNECT_STRINGV(name)` macro (expands to `char name[1]`): use `data.readStringV()` typed as `string`. +- Variable-length raw byte blobs that are not text: `data.readBytes(data.remaining())` typed as `Buffer`. +- **Verify every field name and type against the SDK struct** — do not rename fields or change types based on assumptions. Then export the new class from `src/recv/index.ts`: @@ -71,8 +71,8 @@ Read the `SIMCONNECT_RECV_ID` enum directly from `SimConnect.h` and add the new **Critical rules:** -- Never assign explicit integer values to enum members (e.g. `ID_FOO = 40`) — rely on TypeScript's sequential auto-increment. Explicit values cause the entire subsequent sequence to shift if any entry is inserted before it. -- Before adding entries, find the full `SIMCONNECT_RECV_ID` enum in `SimConnect.h` and verify the complete ordering. Pay attention to entries that may have been inserted between existing ones. +- Never assign explicit integer values to enum members (e.g. `ID_FOO = 40`) — rely on TypeScript's sequential auto-increment. Explicit values cause the entire subsequent sequence to shift if any entry is inserted before it. +- Before adding entries, find the full `SIMCONNECT_RECV_ID` enum in `SimConnect.h` and verify the complete ordering. Pay attention to entries that may have been inserted between existing ones. ```ts ID_XXX, // position must match SDK enum order, no explicit value @@ -92,9 +92,9 @@ export enum XxxEnum { Rules: -- File name: `PascalCase.ts`. -- Member names: short `PascalCase` stripping the repetitive C++ prefix. -- Values must exactly match the SDK definitions. +- File name: `PascalCase.ts`. +- Member names: short `PascalCase` stripping the repetitive C++ prefix. +- Values must exactly match the SDK definitions. Then export from `src/enums/index.ts`: @@ -108,12 +108,12 @@ Add the public method to `src/SimConnectConnection.ts`. **Before writing the method, determine:** -- The exact packet opcode (hex ID) — **do not guess**. Opcodes are sequential based on the order functions appear in `SimConnect.h`. To find the correct opcode: +- The exact packet opcode (hex ID) — **do not guess**. Opcodes are sequential based on the order functions appear in `SimConnect.h`. To find the correct opcode: 1. Find the last implemented method in `src/SimConnectConnection.ts` and note its opcode. 2. Locate that same function in `SimConnect.h` and count forward to the target function. 3. Increment the last known opcode by the number of steps between them. -- The exact parameter order as declared in the SDK function signature in `SimConnect.h` -- The exact string field sizes +- The exact parameter order as declared in the SDK function signature in `SimConnect.h` +- The exact string field sizes ```ts /** @@ -134,11 +134,11 @@ methodName(foo: string): number { Payload encoding rules: -- All strings use **`latin1`**. Never use `utf8`. -- **String field sizes**: use the correct `putStringN` helper matching the byte length in `SimConnect.h` (e.g. `.putString256(value)` for 256-byte fields). Always check the struct definition. -- If `SimConnect.h` or the function's documentation comment explicitly states the payload carries **JSON**, accept `string | object`; objects are serialized with `JSON.stringify` before encoding. Otherwise the parameter type is plain `string`. -- Variable-length string fields declared with `SIMCONNECT_STRINGV` in the SDK struct: `.putUint32(str.length).putString(str)` (no fixed-size argument to `putString`). -- Variable-length byte blobs: `.putUint32(buf.length).putBytes(buf)`. +- All strings use **`latin1`**. Never use `utf8`. +- **String field sizes**: use the correct `putStringN` helper matching the byte length in `SimConnect.h` (e.g. `.putString256(value)` for 256-byte fields). Always check the struct definition. +- If `SimConnect.h` or the function's documentation comment explicitly states the payload carries **JSON**, accept `string | object`; objects are serialized with `JSON.stringify` before encoding. Otherwise the parameter type is plain `string`. +- Variable-length string fields declared with `SIMCONNECT_STRINGV` in the SDK struct: `.putUint32(str.length).putString(str)` (no fixed-size argument to `putString`). +- Variable-length byte blobs: `.putUint32(buf.length).putBytes(buf)`. ### 5. Event handler (only if step 1 applies) diff --git a/eslint.config.mts b/eslint.config.mts index e7d35b0..d906aea 100644 --- a/eslint.config.mts +++ b/eslint.config.mts @@ -27,7 +27,7 @@ export default defineConfig([ }, }, rules: { - "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/switch-exhaustiveness-check": "warn", "@typescript-eslint/no-unused-vars": "error", "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-use-before-define": "off", diff --git a/package-lock.json b/package-lock.json index a5e46dc..c3eedaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@types/ini": "^1.3.30", "@types/jest": "^29.2.4", "@types/node": "^25.6.2", + "cheerio": "^1.2.0", "eslint": "^10.3.0", "eslint-plugin-prettier": "^5.5.5", "globals": "^17.6.0", @@ -26,9 +27,11 @@ "jest": "^29.3.1", "jiti": "latest", "lint-staged": "^16.4.0", + "outdent": "^0.8.0", "prettier": "^3.8.3", "pretty-quick": "^3.1.0", "ts-jest": "^29.4.1", + "tsx": "^4.21.0", "typedoc": "^0.28.13", "typescript": "^6.0.3", "typescript-eslint": "^8.59.2" @@ -519,6 +522,422 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -1868,6 +2287,12 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", @@ -2005,6 +2430,48 @@ "node": ">=10" } }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/ci-info": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", @@ -2212,6 +2679,34 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2258,6 +2753,61 @@ "node": ">=8" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -2282,6 +2832,19 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2334,6 +2897,47 @@ "node": ">= 0.4" } }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2834,9 +3438,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -2908,6 +3512,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -3006,6 +3622,37 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -3031,6 +3678,18 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/if-async": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/if-async/-/if-async-3.7.4.tgz", @@ -4463,6 +5122,18 @@ "node": ">=8" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4504,6 +5175,12 @@ "node": ">= 0.8.0" } }, + "node_modules/outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", + "dev": true + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4558,6 +5235,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4887,6 +5613,15 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", @@ -4949,6 +5684,12 @@ "dev": true, "license": "MIT" }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5383,6 +6124,25 @@ "node": ">=10" } }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5530,6 +6290,15 @@ "node": ">=0.8.0" } }, + "node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true, + "engines": { + "node": ">=20.18.1" + } + }, "node_modules/undici-types": { "version": "7.19.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", @@ -5600,6 +6369,28 @@ "makeerror": "1.0.12" } }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6169,6 +6960,188 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "dev": true, + "optional": true + }, + "@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "dev": true, + "optional": true + }, "@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -7185,6 +8158,12 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "brace-expansion": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", @@ -7274,6 +8253,39 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, "ci-info": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", @@ -7423,6 +8435,25 @@ "which": "^2.0.1" } }, + "css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true + }, "debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -7455,6 +8486,43 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -7473,6 +8541,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -7509,6 +8587,40 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true }, + "esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -7854,9 +8966,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -7896,6 +9008,15 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -7965,6 +9086,26 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + }, + "dependencies": { + "entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true + } + } + }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -7977,6 +9118,15 @@ "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "if-async": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/if-async/-/if-async-3.7.4.tgz", @@ -9055,6 +10205,15 @@ "path-key": "^3.0.0" } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -9087,6 +10246,12 @@ "word-wrap": "^1.2.5" } }, + "outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -9123,6 +10288,42 @@ "lines-and-columns": "^1.1.6" } }, + "parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "requires": { + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, + "requires": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + } + }, + "parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "dev": true, + "requires": { + "parse5": "^7.0.0" + } + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9359,6 +10560,12 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, "resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", @@ -9398,6 +10605,12 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -9681,6 +10894,17 @@ } } }, + "tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "requires": { + "esbuild": "~0.27.0", + "fsevents": "~2.3.3", + "get-tsconfig": "^4.7.5" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9772,6 +10996,12 @@ "dev": true, "optional": true }, + "undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true + }, "undici-types": { "version": "7.19.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", @@ -9825,6 +11055,21 @@ "makeerror": "1.0.12" } }, + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index ab1e6bb..9a59ca0 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "scripts": { "build": "npx rimraf dist && tsc -p tsconfig.build.json", "build:watch": "tsc --watch", + "scrape": "tsx utils/scrapeSimvars.ts", "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", @@ -55,16 +56,19 @@ "@types/ini": "^1.3.30", "@types/jest": "^29.2.4", "@types/node": "^25.6.2", + "cheerio": "^1.2.0", "eslint": "^10.3.0", "eslint-plugin-prettier": "^5.5.5", - "jiti": "latest", "globals": "^17.6.0", "husky": "^9.1.7", "jest": "^29.3.1", + "jiti": "latest", "lint-staged": "^16.4.0", + "outdent": "^0.8.0", "prettier": "^3.8.3", "pretty-quick": "^3.1.0", "ts-jest": "^29.4.1", + "tsx": "^4.21.0", "typedoc": "^0.28.13", "typescript": "^6.0.3", "typescript-eslint": "^8.59.2" diff --git a/samples/typescript/apiHelper.ts b/samples/typescript/apiHelper.ts new file mode 100644 index 0000000..9309e61 --- /dev/null +++ b/samples/typescript/apiHelper.ts @@ -0,0 +1,73 @@ +import { FlightSimulatorApi } from '../../dist/ApiHelper'; +import { open, Protocol, SimConnectDataType } from '../../dist'; + +open('API-helper example', Protocol.SunRise) + .then(async ({ recvOpen, handle }) => { + console.log('Yay, connected!', recvOpen); + await doStuff(new FlightSimulatorApi(handle)); + }) + .catch(e => { + console.log('Unhandled error', e.code); + }); + +async function doStuff(apiHelper: FlightSimulatorApi) { + const { systemEvents, simulationVariables, facilities } = apiHelper; + + /** Subscribe to a system event */ + systemEvents.on('Pause', data => { + console.log(data === 0 ? 'UnPaused' : 'Paused'); + }); + + /** Get a set of simulation variables once */ + const aircraftTitle = await simulationVariables.get('TITLE'); + const atcMdel = await simulationVariables.get('ATC MODEL'); + const fuelOnBoard = await simulationVariables.get('FUEL TOTAL QUANTITY'); + const fuelOnBoardKgs = await simulationVariables.get({ + name: 'FUEL TOTAL QUANTITY', + units: 'kilograms', + dataType: SimConnectDataType.FLOAT64, + }); + + console.log( + `Current aircraft is '${aircraftTitle}' (${atcMdel}). It has ${fuelOnBoard} gallons (${fuelOnBoardKgs} kgs) of fuel on board` + ); + + /** Get simulation variables whenever they change */ + simulationVariables.watch( + [ + 'AIRSPEED INDICATED', + 'GENERAL ENG THROTTLE LEVER POSITION:1', + 'GENERAL ENG THROTTLE LEVER POSITION:2', + { name: 'PLANE LATITUDE', units: 'Degrees', dataType: SimConnectDataType.FLOAT64 }, + { name: 'PLANE LONGITUDE', units: 'Degrees', dataType: SimConnectDataType.FLOAT64 }, + ], + simvars => { + console.log(simvars); + }, + { onlyOnChange: true } + ); + + /** Set throttles to 50% */ + simulationVariables.set( + { + 'GENERAL ENG THROTTLE LEVER POSITION:1': 0.5, + }, + err => console.log(err) + ); + + /** + * The property names and corresponding data types are defined here: + * https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/API_Reference/Facilities/SimConnect_AddToFacilityDefinition.htm + */ + /* const airportInfo = await facilities.getAirport('ENKJ', { + ICAO: SimConnectDataType.STRING8, + NAME: SimConnectDataType.STRING32, + RUNWAY: { + // TODO: fix return type. This should be a list in the returned type definition + PRIMARY_NUMBER: SimConnectDataType.INT32, + HEADING: SimConnectDataType.FLOAT32, + LENGTH: SimConnectDataType.FLOAT32, + }, + }); + console.log('Got airport', airportInfo);*/ +} diff --git a/src/ApiHelper/BaseHelper.ts b/src/ApiHelper/BaseHelper.ts new file mode 100644 index 0000000..72591a3 --- /dev/null +++ b/src/ApiHelper/BaseHelper.ts @@ -0,0 +1,36 @@ +import { SimConnectConnection } from '../SimConnectConnection'; +import { SimConnectException } from '../enums/SimConnectException'; + +export class SimConnectHelperBase { + protected readonly _handle: SimConnectConnection; + + private _exceptionHandlers: { [sendId: number]: (ex: SimConnectException) => void } = {}; + + constructor(handle: SimConnectConnection) { + this._handle = handle; + + this._handle.on('exception', recvException => { + const handler = this._exceptionHandlers[recvException.sendId]; + if (handler !== undefined) { + handler(recvException.exception); + } + }); + } + + /** + * Should be called immediately after sending a simconnect packet + * @param sendId the ID of the newly sent packet + * @param handler function to be called in case of an exception + * @private + */ + protected _checkForException( + sendId: number, + handler: (exception: SimConnectException) => void + ) { + this._exceptionHandlers[sendId] = handler; + setTimeout(() => { + // Give SimConnect server some time to throw the exception, then remove the listener + delete this._exceptionHandlers[sendId]; + }, 1000); + } +} diff --git a/src/ApiHelper/FacilitiesHelper.ts b/src/ApiHelper/FacilitiesHelper.ts new file mode 100644 index 0000000..5172e42 --- /dev/null +++ b/src/ApiHelper/FacilitiesHelper.ts @@ -0,0 +1,359 @@ +import { SimConnectHelperBase } from './BaseHelper'; +import { SimConnectConnection } from '../SimConnectConnection'; +import { SimConnectDataType } from '../enums/SimConnectDataType'; +import { FacilityReturnType, JavascriptDataType, readSimConnectValue } from './utils'; +import { FacilityDataType } from '../enums/FacilityDataType'; +import { RawBuffer } from '../RawBuffer'; +import { IcaoType } from '../dto'; +import { SimConnectError } from './SimulationVariablesHelper'; +import { SimConnectException } from '../enums/SimConnectException'; +import { FacilityListType } from '../enums'; +import { + RecvAirportList, + RecvFacilityData, + RecvFacilityDataEnd, + RecvNDBList, + RecvVORList, + RecvWaypointList, +} from '../recv'; + +export class FacilitiesHelper extends SimConnectHelperBase { + private _nextFacilityDefinition: number; + + private _nextRequestId: number; + + constructor(handle: SimConnectConnection) { + super(handle); + this._nextFacilityDefinition = 0; + this._nextRequestId = 0; + } + + public async listAll( + facilityListType: T, + closestOnly: boolean = true + ): Promise { + return new Promise((resolve, reject) => { + const requestId = this._nextRequestId++; + const result: FacilityReturnType[T][] = []; + + const removeListener = this._handle.off; + + const sendId = closestOnly + ? this._handle.requestFacilitiesListEx1(facilityListType, requestId) + : this._handle.requestFacilitiesList(facilityListType, requestId); + + this._checkForException(sendId, err => { + reject( + Error( + `Failed to get facility list for type ${FacilityListType[facilityListType]}: ${SimConnectException[err]}` + ) + ); + }); + + function processAirportListChunk({ + requestID, + airports, + entryNumber, + outOf, + }: RecvAirportList) { + if (requestID === requestId) { + result.push(...(airports as FacilityReturnType[T][])); + if (entryNumber === outOf - 1) { + removeListener('airportList', processAirportListChunk); + resolve(result); + } + } + } + + function processVorListChunk({ requestID, vors, entryNumber, outOf }: RecvVORList) { + if (requestID === requestId) { + result.push(...(vors as FacilityReturnType[T][])); + if (entryNumber === outOf - 1) { + removeListener('vorList', processVorListChunk); + resolve(result); + } + } + } + + function processNdbListChunk({ requestID, ndbs, entryNumber, outOf }: RecvNDBList) { + if (requestID === requestId) { + result.push(...(ndbs as FacilityReturnType[T][])); + if (entryNumber === outOf - 1) { + removeListener('ndbList', processNdbListChunk); + resolve(result); + } + } + } + + function processWaypointListChunk({ + requestID, + waypoints, + entryNumber, + outOf, + }: RecvWaypointList) { + if (requestID === requestId) { + result.push(...(waypoints as FacilityReturnType[T][])); + if (entryNumber === outOf - 1) { + removeListener('waypointList', processWaypointListChunk); + resolve(result); + } + } + } + + if (facilityListType === FacilityListType.AIRPORT) { + this._handle.on('airportList', processAirportListChunk); + } + if (facilityListType === FacilityListType.VOR) { + this._handle.on('vorList', processVorListChunk); + } + if (facilityListType === FacilityListType.NDB) { + this._handle.on('ndbList', processNdbListChunk); + } + if (facilityListType === FacilityListType.WAYPOINT) { + this._handle.on('waypointList', processWaypointListChunk); + } + }); + } + + /** + * @param icao + * @param facilityDefinition + */ + public async getAirport(icao: string, facilityDefinition: T) { + return this._requestFacilityByEntryPoint('AIRPORT', icao, facilityDefinition); + } + + /** + * @param icao + * @param facilityDefinition + * @param options + */ + public async getWaypoint( + icao: string, + facilityDefinition: T, + options?: { region?: string; type?: IcaoType } + ) { + return this._requestFacilityByEntryPoint( + 'WAYPOINT', + icao, + facilityDefinition, + options?.region, + options?.type + ); + } + + /** + * + * @param icao + * @param facilityDefinition + * @param options + */ + public async getNDB( + icao: string, + facilityDefinition: T, + options?: { region?: string; type?: IcaoType } + ) { + return this._requestFacilityByEntryPoint( + 'NDB', + icao, + facilityDefinition, + options?.region, + options?.type + ); + } + + /** + * + * @param icao + * @param facilityDefinition + * @param options + */ + public async getVOR( + icao: string, + facilityDefinition: T, + options?: { region?: string; type?: IcaoType } + ) { + return this._requestFacilityByEntryPoint( + 'VOR', + icao, + facilityDefinition, + options?.region, + options?.type + ); + } + + private _requestFacilityByEntryPoint( + entryPoint: 'AIRPORT' | 'WAYPOINT' | 'NDB' | 'VOR', + icao: string, + facilityDefinition: T, + region?: string, + type?: IcaoType + ) { + return new Promise>((resolve, reject) => { + const defineId = this._nextFacilityDefinition++; + const requestId = this._nextRequestId++; + const removeListener = this._handle.off; + + this._registerFacilityDefinitionRecursively( + defineId, + { + [entryPoint]: facilityDefinition, + }, + err => { + reject(err); + } + ); + const sendId = this._handle.requestFacilityData( + defineId, + requestId, + icao, + region, + type + ); + this._checkForException(sendId, ex => + reject( + new Error( + `${ + SimConnectException[ex] + }: Facility data request for '${icao}' (${entryPoint}) failed. ${ + explainRequestFacilityDataError(ex) || '' + }` + ) + ) + ); + + let output = {} as FacilityOutput; + + function handleFacilityData(recvFacilityData: RecvFacilityData) { + if (recvFacilityData.userRequestId === requestId) { + const propName = FacilityDataType[recvFacilityData.type]; + + if (propName === entryPoint) { + const airportData = readObject(facilityDefinition, recvFacilityData.data); + output = { ...output, ...airportData }; + } else { + const object = readObject( + // @ts-ignore + facilityDefinition[propName], + recvFacilityData.data + ); + output = { + ...output, + [propName]: + // @ts-ignore + propName in output ? [...output[propName], object] : [object], + }; + } + } + } + + function handleEndOfFacilityData(recvFacilityDataEnd: RecvFacilityDataEnd) { + if (recvFacilityDataEnd.userRequestId === requestId) { + removeListener('facilityData', handleFacilityData); + resolve(output); + } + } + + this._handle.on('facilityData', handleFacilityData); + this._handle.once('facilityDataEnd', handleEndOfFacilityData); + }); + } + + private _registerFacilityDefinitionRecursively( + defineId: number, + definition: { [key: string]: FacilityRequest } | FacilityRequest, + exceptionHandler: (err: SimConnectError) => void, + objectName?: string + ) { + const names = Object.keys(definition); + names.forEach((propName, index) => { + let hasFailed = false; + function handleException(ex: SimConnectException) { + const explanation = explainAddToFacilityDefinitionError(ex); + hasFailed = true; + exceptionHandler({ + message: `${ + SimConnectException[ex] + }: Failed to add field name '${propName}' to the facility definition. ${ + explanation || '' + }`, + exception: ex, + }); + } + + const value = definition[propName]; + if (typeof value === 'object' && !hasFailed) { + const sendId = this._handle.addToFacilityDefinition(defineId, `OPEN ${propName}`); + this._checkForException(sendId, handleException); + this._registerFacilityDefinitionRecursively( + defineId, + value, + exceptionHandler, + propName + ); + } else if (!hasFailed) { + const sendId = this._handle.addToFacilityDefinition(defineId, propName); + this._checkForException(sendId, handleException); + } + if (index === names.length - 1 && objectName && !hasFailed) { + const sendId = this._handle.addToFacilityDefinition( + defineId, + `CLOSE ${objectName}` + ); + this._checkForException(sendId, handleException); + } + }); + } +} + +/** + * Reads the facility data recursively based on the user defined structure + */ +function readObject( + facilityDefinition: T, + rawBuffer: RawBuffer +): FacilityOutput { + let output = {}; + Object.keys(facilityDefinition).forEach((propName: keyof T) => { + const valueType = facilityDefinition[propName]; + if (valueType && typeof valueType !== 'object') { + output = { + ...output, + [propName]: readSimConnectValue(rawBuffer, valueType), + }; + } + }); + return output as FacilityOutput; +} + +type FacilityOutput = { + [EntryPoint in keyof Def]: { + [Child in keyof Def[EntryPoint]]: Def[EntryPoint][Child] extends SimConnectDataType + ? JavascriptDataType[Def[EntryPoint][Child]] + : Def[EntryPoint][Child][]; + }; +}; + +type FacilityRequest = { + [propName: string]: SimConnectDataType | { [propName: string]: SimConnectDataType }; +}; + +// https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/API_Reference/Facilities/SimConnect_RequestFacilityData.htm +function explainRequestFacilityDataError(ex: SimConnectException): string | undefined { + switch (ex) { + case SimConnectException.ERROR: + return 'Invalid ICAO and/or region parameter.'; + default: + return undefined; + } +} + +// https://docs.flightsimulator.com/html/Programming_Tools/SimConnect/API_Reference/Facilities/SimConnect_AddToFacilityDefinition.htm +function explainAddToFacilityDefinitionError(ex: SimConnectException) { + switch (ex) { + case SimConnectException.DATA_ERROR: + return 'This field name is not supported by this facility type.'; + default: + return undefined; + } +} diff --git a/src/ApiHelper/SimConnectApi.ts b/src/ApiHelper/SimConnectApi.ts new file mode 100644 index 0000000..80fd2b5 --- /dev/null +++ b/src/ApiHelper/SimConnectApi.ts @@ -0,0 +1,17 @@ +import { ConnectionOptions, FlightSimulatorApi, open, Protocol } from '..'; + +export class SimConnectApi { + appName: string; + + minimumCompatability: Protocol; + + constructor(appName: string, minimumCompatability: Protocol) { + this.appName = appName; + this.minimumCompatability = minimumCompatability; + } + + connect = async (connectionOptions?: ConnectionOptions) => { + const res = await open(this.appName, this.minimumCompatability, connectionOptions); + return new FlightSimulatorApi(res.handle); + }; +} diff --git a/src/ApiHelper/SimulationVariablesHelper.ts b/src/ApiHelper/SimulationVariablesHelper.ts new file mode 100644 index 0000000..cf1509f --- /dev/null +++ b/src/ApiHelper/SimulationVariablesHelper.ts @@ -0,0 +1,497 @@ +import { SimConnectConstants } from '../SimConnectConstants'; +import { SimConnectDataType } from '../enums/SimConnectDataType'; +import { SimConnectPeriod } from '../enums/SimConnectPeriod'; +import { DataRequestFlag } from '../flags/DataRequestFlag'; +import { SimConnectConnection } from '../SimConnectConnection'; +import { RawBuffer } from '../RawBuffer'; +import { SimObjectType } from '../enums/SimObjectType'; +import { SimConnectException } from '../enums/SimConnectException'; +import { SimConnectHelperBase } from './BaseHelper'; +import { JavascriptDataType, readSimConnectValue, writeSimConnectValue } from './utils'; +import { simvarPredefinitions, SimvarPredefinitions } from '../generated/simvars'; + +export type SimConnectError = { + message: string; + exception: SimConnectException; +}; + +type RequestedSimulationVariable = + | CustomSimulationVariableRequest + | keyof SimvarPredefinitions + | `${string}:${number}`; + +/** + * Used for requesting a simulation variable that is not predefined, or for requesting a predefined variable with different units. + */ +type CustomSimulationVariableRequest = { + name: string; + units: string | null; + dataType: SimConnectDataType; + epsilon?: number; +}; + +/** + * The output object structure when requesting multiple simulation variables + */ +type VariablesResponse = { + [U in T as SimulationVariableName]: SimulationVariableType; +}; + +/** + * The output type of the requested simulation variable + */ +type SimulationVariableType = + Var extends keyof SimvarPredefinitions + ? JavascriptDataType[SimvarPredefinitions[Var] extends { + dataType: infer D extends keyof JavascriptDataType; + } + ? D + : never] + : Var extends `${infer Base}:${number}` + ? Base extends keyof SimvarPredefinitions + ? JavascriptDataType[SimvarPredefinitions[Base] extends { + dataType: infer D extends keyof JavascriptDataType; + } + ? D + : never] + : never + : Var extends CustomSimulationVariableRequest + ? Var['dataType'] extends infer D extends keyof JavascriptDataType + ? JavascriptDataType[D] + : unknown + : never; + +/** + * The name of the requested simulation variable + */ +type SimulationVariableName = + T extends keyof SimvarPredefinitions + ? T + : T extends `${string}:${number}` + ? T + : T extends CustomSimulationVariableRequest + ? T['name'] + : never; + +type SimvarValue = + JavascriptDataType[(typeof simvarPredefinitions)[propName]['dataType']]; + +type IndexedSimvarKey = keyof { + [K in keyof SimvarPredefinitions as (typeof simvarPredefinitions)[K]['supportsIndex'] extends true + ? K + : never]: K; +}; + +type NonIndexedSimvarKey = keyof { + [K in keyof SimvarPredefinitions as (typeof simvarPredefinitions)[K]['supportsIndex'] extends true + ? never + : K]: K; +}; + +type SetKey = `${IndexedSimvarKey}:${number}` | NonIndexedSimvarKey; + +type SetValue = K extends `${infer Base}:${number}` + ? Base extends keyof SimvarPredefinitions + ? SimvarValue + : never + : K extends NonIndexedSimvarKey + ? SimvarValue + : never; + +type VariablesToSet = { [K in T]: SetValue }; + +type ValidateSimvars< + T extends readonly RequestedSimulationVariable[], + SeenNames extends string = never, +> = T extends readonly [ + infer Head extends RequestedSimulationVariable, + ...infer Rest extends readonly RequestedSimulationVariable[], +] + ? Head extends `${infer Base}:${number}` + ? Base extends IndexedSimvarKey + ? SimulationVariableName extends SeenNames + ? [ + { error: `Duplicate simulation variable: '${SimulationVariableName}'` }, + ...ValidateSimvars, + ] + : [Head, ...ValidateSimvars>] + : [ + { error: `'${Base}' does not support indexing` }, + ...ValidateSimvars, + ] + : SimulationVariableName extends SeenNames + ? [ + { error: `Duplicate simulation variable: '${SimulationVariableName}'` }, + ...ValidateSimvars, + ] + : [Head, ...ValidateSimvars>] + : []; + +class SimulationVariablesHelper extends SimConnectHelperBase { + private _nextDataDefinitionId: number; + + private _nextDataRequestId: number; + + constructor(handle: SimConnectConnection) { + super(handle); + this._nextDataDefinitionId = 0; + this._nextDataRequestId = 0; + } + + /** + * Read a simulation variable once + * @param simulationVariable The variable to retrieve + * @param simObjectId Defaults to the user's aircraft + */ + async get( + simulationVariable: T, + simObjectId: number = SimConnectConstants.OBJECT_ID_USER + ) { + // Single element can never be a duplicate; cast bypasses the tuple constraint + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return (this.getAll as (...args: any[]) => Promise>)( + [simulationVariable], + simObjectId + ).then(data => Object.values(data)[0] as SimulationVariableType); + } + + /** + * Read a set of simulation variables once + * @param simulationVariables The variables to retrieve + * @param simObjectId Defaults to the user's aircraft + */ + async getAll( + simulationVariables: T & [...ValidateSimvars], + simObjectId: number = SimConnectConstants.OBJECT_ID_USER + ): Promise> { + return new Promise((resolve, reject) => { + let hasFailed = false; + const simulationVariableRequests = simulationVariables.map( + toStandardizedSimulationVariableRequest + ); + + const sub = this._makeSubscription({ + simulationVariableRequests, + simObjectId, + period: SimConnectPeriod.ONCE, + errorHandler: error => { + hasFailed = true; + this._handle.off('simObjectData', onSimObjectData); + reject(error); + this._handle.clearDataDefinition(sub.defineId); + }, + }); + + const onSimObjectData = (recvSimObjectData: { + requestID: number; + defineID: number; + data: RawBuffer; + }) => { + if ( + sub.requestId === recvSimObjectData.requestID && + sub.defineId === recvSimObjectData.defineID + ) { + this._handle.off('simObjectData', onSimObjectData); + if (!hasFailed) { + resolve( + extractVariablesFromBuffer( + simulationVariables as RequestedSimulationVariable[], + recvSimObjectData.data + ) as VariablesResponse + ); + this._handle.clearDataDefinition(sub.defineId); + } + } + }; + this._handle.on('simObjectData', onSimObjectData); + }); + } + + /** + * Updates a set of simulation variables + * @param variablesToSet The variables to update + * @param errorHandler Called in case of an error + * @param simObjectId Defaults to the user's aircraft + */ + set( + variablesToSet: VariablesToSet, + errorHandler?: (err: SimConnectError) => void, + simObjectId = SimConnectConstants.OBJECT_ID_USER + ) { + const entries = Object.entries(variablesToSet) as [T, SetValue][]; + + const requests: CustomSimulationVariableRequest[] = entries.map(([key]) => { + const colonIndex = key.lastIndexOf(':'); + const isColonSyntax = colonIndex !== -1 && /^\d+$/.test(key.slice(colonIndex + 1)); + const baseName = ( + isColonSyntax ? key.slice(0, colonIndex) : key + ) as keyof SimvarPredefinitions; + const predefined = simvarPredefinitions[baseName]; + return { name: key, units: predefined.units, dataType: predefined.dataType }; + }); + + const rawValues = entries.map(([, val]) => val); + + const defineId = this._createDataDefinition( + requests, + error => errorHandler && errorHandler(error) + ); + const rawBuffer = new RawBuffer(0); + + requests.forEach((request, i) => { + if (rawValues[i] == undefined) { + throw new Error(`Value for simvar '${request.name}' is undefined`); + } + writeSimConnectValue( + rawBuffer, + rawValues[i] as JavascriptDataType[SimConnectDataType], + request.dataType! + ); + }); + + const sendId = this._handle.setDataOnSimObject(defineId, simObjectId, { + buffer: rawBuffer, + arrayCount: 0, + tagged: false, + }); + + this._checkForException(sendId, ex => { + if (errorHandler) { + errorHandler({ + message: `Failed to set data on sim object: ${SimConnectException[ex]}`, + exception: ex, + }); + } + }); + + this._handle.clearDataDefinition(defineId); + } + + /** + * Continuously read a set of simulation variables + * @param simulationVariables The variables to watch + * @param onData Called when the variables change + * @param options Additional options + * @param options.onlyOnChange If the callback should trigger only when a variable changes + * @param options.simObjectId Defaults to the user's aircraft + * @param options.period Defaults to SimConnectPeriod.SIM_FRAME + */ + watch( + simulationVariables: T & [...ValidateSimvars], + onData: (simulationVariables: VariablesResponse) => void, + options?: { + onlyOnChange?: boolean; + simObjectId?: number; + period?: SimConnectPeriod; + } + ) { + const simulationVariableRequests = simulationVariables.map( + toStandardizedSimulationVariableRequest + ); + + let hasFailed = false; + + const sub = this._makeSubscription({ + simulationVariableRequests, + simObjectId: options?.simObjectId || SimConnectConstants.OBJECT_ID_USER, + period: options?.period || SimConnectPeriod.SIM_FRAME, + flags: options?.onlyOnChange ? DataRequestFlag.DATA_REQUEST_FLAG_CHANGED : 0, + errorHandler: err => { + hasFailed = true; + this._handle.clearDataDefinition(sub.defineId); + + const simvarNames = simulationVariableRequests.map(varReq => varReq.name); + + throw new Error( + `SimConnect exception (${SimConnectException[err.exception]}) was thrown when trying to watch the following simvars: ${simvarNames}` + ); + }, + }); + + this._handle.on('simObjectData', recvSimObjectData => { + if ( + !hasFailed && + sub.requestId === recvSimObjectData.requestID && + sub.defineId === recvSimObjectData.defineID + ) { + onData( + extractVariablesFromBuffer( + simulationVariableRequests, + recvSimObjectData.data + ) as VariablesResponse + ); + } + }); + } + + /** + * Read simulation variables for a certain object type + * @param simobjectType The type of object to watch + * @param radiusMeters Radius from user's aircraft + * @param simulationVariables The variables to watch + * @param onData Called when the variables change + */ + watchObjects( + simobjectType: SimObjectType, + radiusMeters: number, + simulationVariables: T & [...ValidateSimvars], + onData: (simulationVariables: VariablesResponse) => void + ) { + const simulationVariableRequests = simulationVariables.map( + toStandardizedSimulationVariableRequest + ); + const sub = this._makeSubscriptionByType({ + simulationVariableRequests, + radiusMeters, + simobjectType, + errorHandler: err => { + const simvarNames = simulationVariableRequests.map(varReq => varReq.name); + throw new Error( + `SimConnect exception (${SimConnectException[err.exception]}) was thrown when trying to watch the following simvars for object type ${SimObjectType[simobjectType]}: ${simvarNames}` + ); + }, + }); + + this._handle.on('simObjectDataByType', recvSimObjectData => { + if ( + sub.requestId === recvSimObjectData.requestID && + sub.defineId === recvSimObjectData.defineID + ) { + onData( + extractVariablesFromBuffer( + simulationVariables as RequestedSimulationVariable[], + recvSimObjectData.data + ) as VariablesResponse + ); + // this._handle.clearDataDefinition(sub.defineId); + } + }); + } + + private _makeSubscription(params: { + simulationVariableRequests: CustomSimulationVariableRequest[]; + period: SimConnectPeriod; + simObjectId: number; + flags?: number; + errorHandler: (error: SimConnectError) => void; + }): { defineId: number; requestId: number } { + const defineId = this._createDataDefinition( + params.simulationVariableRequests, + params.errorHandler + ); + const requestId = this._nextDataRequestId++; + + const sendId = this._handle.requestDataOnSimObject( + requestId, + defineId, + params.simObjectId, + params.period, + DataRequestFlag.DATA_REQUEST_FLAG_DEFAULT | (params.flags || 0) + ); + + this._checkForException(sendId, ex => + params.errorHandler({ + message: `Failed to request data for sim object: ${SimConnectException[ex]}`, + exception: ex, + }) + ); + + return { requestId, defineId }; + } + + private _makeSubscriptionByType(params: { + simulationVariableRequests: CustomSimulationVariableRequest[]; + radiusMeters: number; + simobjectType: SimObjectType; + errorHandler: (error: SimConnectError) => void; + }): { defineId: number; requestId: number } { + const requestId = this._nextDataRequestId++; + + const defineId = this._createDataDefinition( + params.simulationVariableRequests, + params.errorHandler + ); + + const sendId = this._handle.requestDataOnSimObjectType( + requestId, + defineId, + params.radiusMeters, + params.simobjectType + ); + + this._checkForException(sendId, ex => + params.errorHandler({ + message: `Failed to request data for sim object type: ${SimConnectException[ex]}`, + exception: ex, + }) + ); + + return { requestId, defineId }; + } + + private _createDataDefinition( + requestedSimvars: T[], + errorHandler: (error: SimConnectError) => void + ): number { + const defineId = this._nextDataDefinitionId++; + + /** + * We register the simulation variables in reverse order, so we receive them + * in the same order that they were defined in the requestedSimvars list. + */ + requestedSimvars.reverse().forEach(requestedValue => { + const sendId = this._handle.addToDataDefinition( + defineId, + requestedValue.name, + requestedValue.units, + requestedValue.dataType, + requestedValue.epsilon + ); + this._checkForException(sendId, ex => + errorHandler({ + message: `Something is wrong with the definition of '${requestedValue.name}': ${SimConnectException[ex]}`, + exception: ex, + }) + ); + }); + + return defineId; + } +} + +function extractVariablesFromBuffer( + requestedSimvars: T[], + rawBuffer: RawBuffer +): VariablesResponse { + return requestedSimvars.map(toStandardizedSimulationVariableRequest).reduce( + (result, simvar) => ({ + [simvar.name]: readSimConnectValue(rawBuffer, simvar.dataType), + ...result, + }), + {} as VariablesResponse + ); +} + +function toStandardizedSimulationVariableRequest( + simvar: RequestedSimulationVariable +): CustomSimulationVariableRequest { + if (typeof simvar === 'string') { + const colonIndex = simvar.lastIndexOf(':'); + const isColonSyntax = colonIndex !== -1 && /^\d+$/.test(simvar.slice(colonIndex + 1)); + const baseName = ( + isColonSyntax ? simvar.slice(0, colonIndex) : simvar + ) as keyof SimvarPredefinitions; + const predefinition = simvarPredefinitions[baseName]; + return { + name: simvar, + units: predefinition.units, + dataType: predefinition.dataType, + }; + } + if (simvar.name !== undefined && simvar.units !== undefined && simvar.dataType !== undefined) { + return simvar; + } + throw new Error('Invalid simvar request'); +} + +export { SimulationVariablesHelper }; diff --git a/src/ApiHelper/SystemEventsHelper.ts b/src/ApiHelper/SystemEventsHelper.ts new file mode 100644 index 0000000..f1d8d68 --- /dev/null +++ b/src/ApiHelper/SystemEventsHelper.ts @@ -0,0 +1,76 @@ +import { SimConnectConnection } from '../SimConnectConnection'; +import { SimConnectHelperBase } from './BaseHelper'; + +export type SystemEventHandler = (data: number) => void; + +type Subscription = { + id: number; + listeners: SystemEventHandler[]; +}; + +export class SystemEventsHelper extends SimConnectHelperBase { + private _nextClientEventId = 0; + private readonly _subscriptions = new Map(); + + constructor(handle: SimConnectConnection) { + super(handle); + handle.on('event', event => { + for (const [, sub] of this._subscriptions) { + if (event.clientEventId === sub.id) { + sub.listeners.forEach(l => l(event.data)); + break; + } + } + }); + } + + on(eventName: string, listener: SystemEventHandler): this { + const sub = this._subscriptions.get(eventName); + if (sub) { + sub.listeners.push(listener); + } else { + const id = this._nextClientEventId++; + this._subscriptions.set(eventName, { id, listeners: [listener] }); + const sendId = this._handle.subscribeToSystemEvent(id, eventName); + this._checkForException(sendId, ex => { + throw Error(`Subscription for system event '${eventName}' failed: ${ex}`); + }); + } + return this; + } + + off(eventName: string, listener: SystemEventHandler): this { + const sub = this._subscriptions.get(eventName); + if (!sub) return this; + sub.listeners = sub.listeners.filter(l => l !== listener); + if (sub.listeners.length === 0) { + this._unsubscribe(eventName, sub.id); + } + return this; + } + + once(eventName: string, listener: SystemEventHandler): this { + const wrapped: SystemEventHandler = data => { + listener(data); + this.off(eventName, wrapped); + }; + return this.on(eventName, wrapped); + } + + removeAllListeners(eventName?: string): this { + const names = eventName ? [eventName] : [...this._subscriptions.keys()]; + for (const name of names) { + const sub = this._subscriptions.get(name); + if (sub) this._unsubscribe(name, sub.id); + } + return this; + } + + private _unsubscribe(eventName: string, id: number) { + const sendId = this._handle.unsubscribeFromSystemEvent(id); + this._subscriptions.delete(eventName); + this._checkForException(sendId, ex => { + throw Error(`Unsubscription for system event '${eventName}' failed: ${ex}`); + }); + } +} diff --git a/src/ApiHelper/index.ts b/src/ApiHelper/index.ts new file mode 100644 index 0000000..25a6e3b --- /dev/null +++ b/src/ApiHelper/index.ts @@ -0,0 +1,18 @@ +import { SimConnectConnection } from '../SimConnectConnection'; +import { SimulationVariablesHelper } from './SimulationVariablesHelper'; +import { SystemEventsHelper } from './SystemEventsHelper'; +import { FacilitiesHelper } from './FacilitiesHelper'; + +export class FlightSimulatorApi { + simulationVariables: SimulationVariablesHelper; + + systemEvents: SystemEventsHelper; + + facilities: FacilitiesHelper; + + constructor(handle: SimConnectConnection) { + this.simulationVariables = new SimulationVariablesHelper(handle); + this.systemEvents = new SystemEventsHelper(handle); + this.facilities = new FacilitiesHelper(handle); + } +} diff --git a/src/ApiHelper/utils.ts b/src/ApiHelper/utils.ts new file mode 100644 index 0000000..ebb71f7 --- /dev/null +++ b/src/ApiHelper/utils.ts @@ -0,0 +1,143 @@ +import { SimConnectDataType } from '../enums/SimConnectDataType'; +import { RawBuffer } from '../RawBuffer'; +import { + InitPosition, + LatLonAlt, + MarkerState, + readInitPosition, + readLatLonAlt, + readMarkerState, + readWaypoint, + readXYZ, + Waypoint, + XYZ, +} from '../dto'; +import { FacilityListType } from '../enums'; +import { FacilityAirport, FacilityNDB, FacilityVOR, FacilityWaypoint } from '../datastructures'; + +export function readSimConnectValue( + rawBuffer: RawBuffer, + dataType: T +): JavascriptDataType[T] { + switch (dataType) { + case SimConnectDataType.INVALID: + return undefined as JavascriptDataType[T]; + case SimConnectDataType.INT32: + return rawBuffer.readInt32() as JavascriptDataType[T]; + case SimConnectDataType.INT64: + return rawBuffer.readInt64() as JavascriptDataType[T]; + case SimConnectDataType.FLOAT32: + return rawBuffer.readFloat32() as JavascriptDataType[T]; + case SimConnectDataType.FLOAT64: + return rawBuffer.readFloat64() as JavascriptDataType[T]; + case SimConnectDataType.STRING8: + return rawBuffer.readString8() as JavascriptDataType[T]; + case SimConnectDataType.STRING32: + return rawBuffer.readString32() as JavascriptDataType[T]; + case SimConnectDataType.STRING64: + return rawBuffer.readString64() as JavascriptDataType[T]; + case SimConnectDataType.STRING128: + return rawBuffer.readString128() as JavascriptDataType[T]; + case SimConnectDataType.STRING256: + return rawBuffer.readString256() as JavascriptDataType[T]; + case SimConnectDataType.STRING260: + return rawBuffer.readString260() as JavascriptDataType[T]; + case SimConnectDataType.STRINGV: + return rawBuffer.readStringV() as JavascriptDataType[T]; + case SimConnectDataType.INITPOSITION: + return readInitPosition(rawBuffer) as JavascriptDataType[T]; + case SimConnectDataType.MARKERSTATE: + return readMarkerState(rawBuffer) as JavascriptDataType[T]; + case SimConnectDataType.WAYPOINT: + return readWaypoint(rawBuffer) as JavascriptDataType[T]; + case SimConnectDataType.LATLONALT: + return readLatLonAlt(rawBuffer) as JavascriptDataType[T]; + case SimConnectDataType.XYZ: + return readXYZ(rawBuffer) as JavascriptDataType[T]; + case SimConnectDataType.MAX: + return undefined as JavascriptDataType[T]; + default: + return undefined as JavascriptDataType[T]; + } +} + +export function writeSimConnectValue( + rawBuffer: RawBuffer, + value: JavascriptDataType[T], + dataType: T +) { + switch (dataType) { + case SimConnectDataType.INVALID: + break; + case SimConnectDataType.INT32: + rawBuffer.writeInt32(value as number); + break; + case SimConnectDataType.INT64: + rawBuffer.writeInt64(value as number); + break; + case SimConnectDataType.FLOAT32: + rawBuffer.writeFloat32(value as number); + break; + case SimConnectDataType.FLOAT64: + rawBuffer.writeFloat64(value as number); + break; + case SimConnectDataType.STRING8: + rawBuffer.writeString8(value as string); + break; + case SimConnectDataType.STRING32: + rawBuffer.writeString32(value as string); + break; + case SimConnectDataType.STRING64: + rawBuffer.writeString64(value as string); + break; + case SimConnectDataType.STRING128: + rawBuffer.writeString128(value as string); + break; + case SimConnectDataType.STRING256: + rawBuffer.writeString256(value as string); + break; + case SimConnectDataType.STRING260: + rawBuffer.writeString260(value as string); + break; + case SimConnectDataType.STRINGV: + rawBuffer.writeString(value as string); + break; + default: + // TODO: implement writing of the struct types + throw Error(`Unhandled data type: ${dataType} (${SimConnectDataType[dataType]})`); + } +} + +/** Maps the SimConnect data types to JS data types */ +export type JavascriptDataType = { + [T in SimConnectDataType]: { + [SimConnectDataType.INVALID]: undefined; + [SimConnectDataType.INT32]: number; + [SimConnectDataType.INT64]: number; + [SimConnectDataType.FLOAT32]: number; + [SimConnectDataType.FLOAT64]: number; + [SimConnectDataType.STRING8]: string; + [SimConnectDataType.STRING32]: string; + [SimConnectDataType.STRING64]: string; + [SimConnectDataType.STRING128]: string; + [SimConnectDataType.STRING256]: string; + [SimConnectDataType.STRING260]: string; + [SimConnectDataType.STRINGV]: string; + [SimConnectDataType.INITPOSITION]: InitPosition; + [SimConnectDataType.MARKERSTATE]: MarkerState; + [SimConnectDataType.WAYPOINT]: Waypoint; + [SimConnectDataType.LATLONALT]: LatLonAlt; + [SimConnectDataType.XYZ]: XYZ; + [SimConnectDataType.MAX]: undefined; + }[T]; +}; + +export type FacilityReturnType = { + [T in FacilityListType]: { + [FacilityListType.NDB]: FacilityNDB; + [FacilityListType.VOR]: FacilityVOR; + [FacilityListType.AIRPORT]: FacilityAirport; + [FacilityListType.WAYPOINT]: FacilityWaypoint; + [FacilityListType.COUNT]: undefined; + }[T]; +}; diff --git a/src/generated/simvars.ts b/src/generated/simvars.ts new file mode 100644 index 0000000..120c59c --- /dev/null +++ b/src/generated/simvars.ts @@ -0,0 +1,10969 @@ +import { SimConnectDataType } from '../enums/SimConnectDataType'; + +export type PredefinedVariable = { + name: string; + units: string; + dataType: SimConnectDataType; + settable: boolean; + supportsIndex: boolean; +}; + +export const simvarPredefinitions = { + 'AUTOPILOT AIRSPEED ACQUISITION': { + name: 'AUTOPILOT AIRSPEED ACQUISITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AIRSPEED HOLD': { + name: 'AUTOPILOT AIRSPEED HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AIRSPEED HOLD CURRENT': { + name: 'AUTOPILOT AIRSPEED HOLD CURRENT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AIRSPEED HOLD VAR': { + name: 'AUTOPILOT AIRSPEED HOLD VAR', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AIRSPEED MAX CALCULATED': { + name: 'AUTOPILOT AIRSPEED MAX CALCULATED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AIRSPEED MIN CALCULATED': { + name: 'AUTOPILOT AIRSPEED MIN CALCULATED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ALT RADIO MODE': { + name: 'AUTOPILOT ALT RADIO MODE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ALTITUDE ARM': { + name: 'AUTOPILOT ALTITUDE ARM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ALTITUDE LOCK': { + name: 'AUTOPILOT ALTITUDE LOCK', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ALTITUDE LOCK VAR': { + name: 'AUTOPILOT ALTITUDE LOCK VAR', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT ALTITUDE MANUALLY TUNABLE': { + name: 'AUTOPILOT ALTITUDE MANUALLY TUNABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ALTITUDE SLOT INDEX': { + name: 'AUTOPILOT ALTITUDE SLOT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT APPROACH ACTIVE': { + name: 'AUTOPILOT APPROACH ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT APPROACH ARM': { + name: 'AUTOPILOT APPROACH ARM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT APPROACH CAPTURED': { + name: 'AUTOPILOT APPROACH CAPTURED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT APPROACH HOLD': { + name: 'AUTOPILOT APPROACH HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT APPROACH IS LOCALIZER': { + name: 'AUTOPILOT APPROACH IS LOCALIZER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT ATTITUDE HOLD': { + name: 'AUTOPILOT ATTITUDE HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AVAILABLE': { + name: 'AUTOPILOT AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT AVIONICS MANAGED': { + name: 'AUTOPILOT AVIONICS MANAGED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT BACKCOURSE HOLD': { + name: 'AUTOPILOT BACKCOURSE HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT BANK HOLD': { + name: 'AUTOPILOT BANK HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT BANK HOLD REF': { + name: 'AUTOPILOT BANK HOLD REF', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT CRUISE SPEED HOLD': { + name: 'AUTOPILOT CRUISE SPEED HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT DEFAULT PITCH MODE': { + name: 'AUTOPILOT DEFAULT PITCH MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT DEFAULT ROLL MODE': { + name: 'AUTOPILOT DEFAULT ROLL MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT DISENGAGED': { + name: 'AUTOPILOT DISENGAGED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT DIRECTOR ACTIVE': { + name: 'AUTOPILOT FLIGHT DIRECTOR ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT DIRECTOR BANK': { + name: 'AUTOPILOT FLIGHT DIRECTOR BANK', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT DIRECTOR BANK EX1': { + name: 'AUTOPILOT FLIGHT DIRECTOR BANK EX1', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT DIRECTOR PITCH': { + name: 'AUTOPILOT FLIGHT DIRECTOR PITCH', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT DIRECTOR PITCH EX1': { + name: 'AUTOPILOT FLIGHT DIRECTOR PITCH EX1', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT FLIGHT LEVEL CHANGE': { + name: 'AUTOPILOT FLIGHT LEVEL CHANGE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT GLIDESLOPE ACTIVE': { + name: 'AUTOPILOT GLIDESLOPE ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT GLIDESLOPE ARM': { + name: 'AUTOPILOT GLIDESLOPE ARM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT GLIDESLOPE HOLD': { + name: 'AUTOPILOT GLIDESLOPE HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT HEADING LOCK': { + name: 'AUTOPILOT HEADING LOCK', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT HEADING LOCK DIR': { + name: 'AUTOPILOT HEADING LOCK DIR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT HEADING MANUALLY TUNABLE': { + name: 'AUTOPILOT HEADING MANUALLY TUNABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT HEADING SLOT INDEX': { + name: 'AUTOPILOT HEADING SLOT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MACH HOLD': { + name: 'AUTOPILOT MACH HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MACH HOLD VAR': { + name: 'AUTOPILOT MACH HOLD VAR', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MANAGED INDEX': { + name: 'AUTOPILOT MANAGED INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MANAGED SPEED IN MACH': { + name: 'AUTOPILOT MANAGED SPEED IN MACH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MANAGED THROTTLE ACTIVE': { + name: 'AUTOPILOT MANAGED THROTTLE ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MASTER': { + name: 'AUTOPILOT MASTER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MAX BANK': { + name: 'AUTOPILOT MAX BANK', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MAX BANK ID': { + name: 'AUTOPILOT MAX BANK ID', + units: 'Integer', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT MAX SPEED HOLD': { + name: 'AUTOPILOT MAX SPEED HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT NAV1 LOCK': { + name: 'AUTOPILOT NAV1 LOCK', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT NAV SELECTED': { + name: 'AUTOPILOT NAV SELECTED', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT PITCH HOLD': { + name: 'AUTOPILOT PITCH HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT PITCH HOLD REF': { + name: 'AUTOPILOT PITCH HOLD REF', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT RPM HOLD': { + name: 'AUTOPILOT RPM HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT RPM HOLD VAR': { + name: 'AUTOPILOT RPM HOLD VAR', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT RPM SLOT INDEX': { + name: 'AUTOPILOT RPM SLOT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT SPEED SETTING': { + name: 'AUTOPILOT SPEED SETTING', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT SPEED SLOT INDEX': { + name: 'AUTOPILOT SPEED SLOT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT TAKEOFF POWER ACTIVE': { + name: 'AUTOPILOT TAKEOFF POWER ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT THROTTLE ARM': { + name: 'AUTOPILOT THROTTLE ARM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT THROTTLE MAX THRUST': { + name: 'AUTOPILOT THROTTLE MAX THRUST', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT VERTICAL HOLD': { + name: 'AUTOPILOT VERTICAL HOLD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT VERTICAL HOLD VAR': { + name: 'AUTOPILOT VERTICAL HOLD VAR', + units: 'Feet/minute', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AUTOPILOT VS SLOT INDEX': { + name: 'AUTOPILOT VS SLOT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT WING LEVELER': { + name: 'AUTOPILOT WING LEVELER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOPILOT YAW DAMPER': { + name: 'AUTOPILOT YAW DAMPER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ASSISTANCE LANDING ENABLED': { + name: 'ASSISTANCE LANDING ENABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ASSISTANCE TAKEOFF ENABLED': { + name: 'ASSISTANCE TAKEOFF ENABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AI ANTISTALL STATE': { + name: 'AI ANTISTALL STATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AI AUTOTRIM ACTIVE': { + name: 'AI AUTOTRIM ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AI AUTOTRIM ACTIVE AGAINST PLAYER': { + name: 'AI AUTOTRIM ACTIVE AGAINST PLAYER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AI CONTROLS': { + name: 'AI CONTROLS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AI CURSOR MODE ACTIVE': { + name: 'AI CURSOR MODE ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'DELEGATE CONTROLS TO AI': { + name: 'DELEGATE CONTROLS TO AI', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'FLY ASSISTANT CANCEL DESTINATION': { + name: 'FLY ASSISTANT CANCEL DESTINATION', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT CANCEL DESTINATION DISPLAY': { + name: 'FLY ASSISTANT CANCEL DESTINATION DISPLAY', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT COM AI LOCKED': { + name: 'FLY ASSISTANT COM AI LOCKED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT HAVE DESTINATION': { + name: 'FLY ASSISTANT HAVE DESTINATION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT LANDING SPEED': { + name: 'FLY ASSISTANT LANDING SPEED', + units: '', + dataType: SimConnectDataType.STRING32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT LANDING SPEED DISPLAY MODE': { + name: 'FLY ASSISTANT LANDING SPEED DISPLAY MODE', + units: '', + dataType: SimConnectDataType.STRING32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT NEAREST CATEGORY': { + name: 'FLY ASSISTANT NEAREST CATEGORY', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT NEAREST COUNT': { + name: 'FLY ASSISTANT NEAREST COUNT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT NEAREST METADATA': { + name: 'FLY ASSISTANT NEAREST METADATA', + units: '-', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT NEAREST NAME': { + name: 'FLY ASSISTANT NEAREST NAME', + units: '', + dataType: SimConnectDataType.STRING256, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT NEAREST SELECTED': { + name: 'FLY ASSISTANT NEAREST SELECTED', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT RIBBONS ACTIVE': { + name: 'FLY ASSISTANT RIBBONS ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT SET AS DESTINATION': { + name: 'FLY ASSISTANT SET AS DESTINATION', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT STALL SPEED': { + name: 'FLY ASSISTANT STALL SPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT STALL SPEED DISPLAY MODE': { + name: 'FLY ASSISTANT STALL SPEED DISPLAY MODE', + units: '', + dataType: SimConnectDataType.STRING32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT TAKEOFF SPEED': { + name: 'FLY ASSISTANT TAKEOFF SPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT TAKEOFF SPEED DISPLAY MODE': { + name: 'FLY ASSISTANT TAKEOFF SPEED DISPLAY MODE', + units: '', + dataType: SimConnectDataType.STRING32, + settable: false, + supportsIndex: true, + }, + 'FLY ASSISTANT TAKEOFF SPEED ESTIMATED': { + name: 'FLY ASSISTANT TAKEOFF SPEED ESTIMATED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT TAXI RIBBONS ACTIVE': { + name: 'FLY ASSISTANT TAXI RIBBONS ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'FLY ASSISTANT TELEPORT TO INCREASED ALTITUDE': { + name: 'FLY ASSISTANT TELEPORT TO INCREASED ALTITUDE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ANTISKID BRAKES ACTIVE': { + name: 'ANTISKID BRAKES ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTOBRAKES ACTIVE': { + name: 'AUTOBRAKES ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTO BRAKE SWITCH CB': { + name: 'AUTO BRAKE SWITCH CB', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE DEPENDENT HYDRAULIC PRESSURE': { + name: 'BRAKE DEPENDENT HYDRAULIC PRESSURE', + units: 'Pounds per square foot', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE INDICATOR': { + name: 'BRAKE INDICATOR', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE LEFT POSITION': { + name: 'BRAKE LEFT POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BRAKE LEFT POSITION EX1': { + name: 'BRAKE LEFT POSITION EX1', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BRAKE LEFT TEMPERATURE': { + name: 'BRAKE LEFT TEMPERATURE', + units: 'Kelvin', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE LEFT TEMPERATURE EFFECT': { + name: 'BRAKE LEFT TEMPERATURE EFFECT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE LEFT WEIGHT REMAINING': { + name: 'BRAKE LEFT WEIGHT REMAINING', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE PARKING INDICATOR': { + name: 'BRAKE PARKING INDICATOR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'BRAKE PARKING POSITION': { + name: 'BRAKE PARKING POSITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'BRAKE RIGHT POSITION': { + name: 'BRAKE RIGHT POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BRAKE RIGHT POSITION EX1': { + name: 'BRAKE RIGHT POSITION EX1', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BRAKE RIGHT TEMPERATURE': { + name: 'BRAKE RIGHT TEMPERATURE', + units: 'Kelvin', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE RIGHT TEMPERATURE EFFECT': { + name: 'BRAKE RIGHT TEMPERATURE EFFECT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BRAKE RIGHT WEIGHT REMAINING': { + name: 'BRAKE RIGHT WEIGHT REMAINING', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PARKING BRAKE AVAILABLE': { + name: 'PARKING BRAKE AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'REJECTED TAKEOFF BRAKES ACTIVE': { + name: 'REJECTED TAKEOFF BRAKES ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TOE BRAKES AVAILABLE': { + name: 'TOE BRAKES AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CONTACT POINT COMPRESSION': { + name: 'CONTACT POINT COMPRESSION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT IS ON GROUND': { + name: 'CONTACT POINT IS ON GROUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT IS SKIDDING': { + name: 'CONTACT POINT IS SKIDDING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT POSITION': { + name: 'CONTACT POINT POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT SKIDDING FACTOR': { + name: 'CONTACT POINT SKIDDING FACTOR', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT STEER ANGLE': { + name: 'CONTACT POINT STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT STEER ANGLE PCT': { + name: 'CONTACT POINT STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CONTACT POINT WATER DEPTH': { + name: 'CONTACT POINT WATER DEPTH', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AUX WHEEL ROTATION ANGLE': { + name: 'AUX WHEEL ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUX WHEEL RPM': { + name: 'AUX WHEEL RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CENTER WHEEL ROTATION ANGLE': { + name: 'CENTER WHEEL ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CENTER WHEEL RPM': { + name: 'CENTER WHEEL RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR ANIMATION POSITION': { + name: 'GEAR ANIMATION POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GEAR AUX POSITION': { + name: 'GEAR AUX POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GEAR AUX STEER ANGLE': { + name: 'GEAR AUX STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR AUX STEER ANGLE PCT': { + name: 'GEAR AUX STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR CENTER POSITION': { + name: 'GEAR CENTER POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GEAR CENTER STEER ANGLE': { + name: 'GEAR CENTER STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR CENTER STEER ANGLE PCT': { + name: 'GEAR CENTER STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR DAMAGE BY SPEED': { + name: 'GEAR DAMAGE BY SPEED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GEAR EMERGENCY HANDLE POSITION': { + name: 'GEAR EMERGENCY HANDLE POSITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GEAR HANDLE POSITION': { + name: 'GEAR HANDLE POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GEAR HYDRAULIC PRESSURE': { + name: 'GEAR HYDRAULIC PRESSURE', + units: 'Pound force per square foot', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR IS ON GROUND': { + name: 'GEAR IS ON GROUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GEAR IS SKIDDING': { + name: 'GEAR IS SKIDDING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GEAR LEFT POSITION': { + name: 'GEAR LEFT POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GEAR LEFT STEER ANGLE': { + name: 'GEAR LEFT STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR LEFT STEER ANGLE PCT': { + name: 'GEAR LEFT STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR POSITION': { + name: 'GEAR POSITION', + units: 'On get value Percent Over 100', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'GEAR RIGHT POSITION': { + name: 'GEAR RIGHT POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GEAR RIGHT STEER ANGLE': { + name: 'GEAR RIGHT STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR RIGHT STEER ANGLE PCT': { + name: 'GEAR RIGHT STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR SKIDDING FACTOR': { + name: 'GEAR SKIDDING FACTOR', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR SPEED EXCEEDED': { + name: 'GEAR SPEED EXCEEDED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GEAR STEER ANGLE': { + name: 'GEAR STEER ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GEAR STEER ANGLE PCT': { + name: 'GEAR STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GEAR TAIL POSITION': { + name: 'GEAR TAIL POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR TOTAL PCT EXTENDED': { + name: 'GEAR TOTAL PCT EXTENDED', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GEAR WARNING': { + name: 'GEAR WARNING', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GEAR WATER DEPTH': { + name: 'GEAR WATER DEPTH', + units: 'Centimeters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'IS GEAR FLOATS': { + name: 'IS GEAR FLOATS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS GEAR RETRACTABLE': { + name: 'IS GEAR RETRACTABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS GEAR SKIDS': { + name: 'IS GEAR SKIDS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS GEAR SKIS': { + name: 'IS GEAR SKIS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS GEAR WHEELS': { + name: 'IS GEAR WHEELS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LEFT WHEEL ROTATION ANGLE': { + name: 'LEFT WHEEL ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LEFT WHEEL RPM': { + name: 'LEFT WHEEL RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NOSEWHEEL LOCK ON': { + name: 'NOSEWHEEL LOCK ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NOSEWHEEL MAX STEERING ANGLE': { + name: 'NOSEWHEEL MAX STEERING ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'RETRACT FLOAT SWITCH': { + name: 'RETRACT FLOAT SWITCH', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'RETRACT LEFT FLOAT EXTENDED': { + name: 'RETRACT LEFT FLOAT EXTENDED', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RETRACT RIGHT FLOAT EXTENDED': { + name: 'RETRACT RIGHT FLOAT EXTENDED', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RIGHT WHEEL ROTATION ANGLE': { + name: 'RIGHT WHEEL ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RIGHT WHEEL RPM': { + name: 'RIGHT WHEEL RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STEER INPUT CONTROL': { + name: 'STEER INPUT CONTROL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TAILWHEEL LOCK ON': { + name: 'TAILWHEEL LOCK ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WATER LEFT RUDDER EXTENDED': { + name: 'WATER LEFT RUDDER EXTENDED', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER LEFT RUDDER STEER ANGLE': { + name: 'WATER LEFT RUDDER STEER ANGLE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER LEFT RUDDER STEER ANGLE PCT': { + name: 'WATER LEFT RUDDER STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER RIGHT RUDDER EXTENDED': { + name: 'WATER RIGHT RUDDER EXTENDED', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER RIGHT RUDDER STEER ANGLE': { + name: 'WATER RIGHT RUDDER STEER ANGLE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER RIGHT RUDDER STEER ANGLE PCT': { + name: 'WATER RIGHT RUDDER STEER ANGLE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER RUDDER HANDLE POSITION': { + name: 'WATER RUDDER HANDLE POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'WHEEL ROTATION ANGLE': { + name: 'WHEEL ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'WHEEL RPM': { + name: 'WHEEL RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON AVERAGE DEFLECTION': { + name: 'AILERON AVERAGE DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON LEFT DEFLECTION': { + name: 'AILERON LEFT DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AILERON LEFT DEFLECTION PCT': { + name: 'AILERON LEFT DEFLECTION PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON POSITION': { + name: 'AILERON POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AILERON RIGHT DEFLECTION': { + name: 'AILERON RIGHT DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AILERON RIGHT DEFLECTION PCT': { + name: 'AILERON RIGHT DEFLECTION PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON TRIM': { + name: 'AILERON TRIM', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON TRIM DISABLED': { + name: 'AILERON TRIM DISABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'AILERON TRIM MAX': { + name: 'AILERON TRIM MAX', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON TRIM MIN': { + name: 'AILERON TRIM MIN', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AILERON TRIM PCT': { + name: 'AILERON TRIM PCT', + units: 'Float', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AILERON TRIM PCT EX1': { + name: 'AILERON TRIM PCT EX1', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR DEFLECTION': { + name: 'ELEVATOR DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR DEFLECTION PCT': { + name: 'ELEVATOR DEFLECTION PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR POSITION': { + name: 'ELEVATOR POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR TRIM DISABLED': { + name: 'ELEVATOR TRIM DISABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM DOWN LIMIT': { + name: 'ELEVATOR TRIM DOWN LIMIT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM INDICATOR': { + name: 'ELEVATOR TRIM INDICATOR', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM LIMIT RATIO': { + name: 'ELEVATOR TRIM LIMIT RATIO', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM MAX': { + name: 'ELEVATOR TRIM MAX', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR TRIM MIN': { + name: 'ELEVATOR TRIM MIN', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR TRIM NEUTRAL': { + name: 'ELEVATOR TRIM NEUTRAL', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM PCT': { + name: 'ELEVATOR TRIM PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVATOR TRIM PCT EX1': { + name: 'ELEVATOR TRIM PCT EX1', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR TRIM POSITION': { + name: 'ELEVATOR TRIM POSITION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELEVATOR TRIM UP LIMIT': { + name: 'ELEVATOR TRIM UP LIMIT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELEVON DEFLECTION': { + name: 'ELEVON DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLAPS AVAILABLE': { + name: 'FLAPS AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLAPS CURRENT SPEED LIMITATION': { + name: 'FLAPS CURRENT SPEED LIMITATION', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLAP DAMAGE BY SPEED': { + name: 'FLAP DAMAGE BY SPEED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLAPS EFFECTIVE HANDLE INDEX': { + name: 'FLAPS EFFECTIVE HANDLE INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLAPS HANDLE INDEX': { + name: 'FLAPS HANDLE INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLAPS HANDLE PERCENT': { + name: 'FLAPS HANDLE PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLAPS NUM HANDLE POSITIONS': { + name: 'FLAPS NUM HANDLE POSITIONS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLAP POSITION SET': { + name: 'FLAP POSITION SET', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLAP SPEED EXCEEDED': { + name: 'FLAP SPEED EXCEEDED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS LEFT ANGLE': { + name: 'LEADING EDGE FLAPS LEFT ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS LEFT INDEX': { + name: 'LEADING EDGE FLAPS LEFT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS LEFT PERCENT': { + name: 'LEADING EDGE FLAPS LEFT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS RIGHT ANGLE': { + name: 'LEADING EDGE FLAPS RIGHT ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS RIGHT INDEX': { + name: 'LEADING EDGE FLAPS RIGHT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LEADING EDGE FLAPS RIGHT PERCENT': { + name: 'LEADING EDGE FLAPS RIGHT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'NEGATIVE G LIMIT FLAPS DOWN': { + name: 'NEGATIVE G LIMIT FLAPS DOWN', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NEGATIVE G LIMIT FLAPS UP': { + name: 'NEGATIVE G LIMIT FLAPS UP', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'POSITIVE G LIMIT FLAPS DOWN': { + name: 'POSITIVE G LIMIT FLAPS DOWN', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'POSITIVE G LIMIT FLAPS UP': { + name: 'POSITIVE G LIMIT FLAPS UP', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS LEFT ANGLE': { + name: 'TRAILING EDGE FLAPS LEFT ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS LEFT INDEX': { + name: 'TRAILING EDGE FLAPS LEFT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS LEFT PERCENT': { + name: 'TRAILING EDGE FLAPS LEFT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS RIGHT ANGLE': { + name: 'TRAILING EDGE FLAPS RIGHT ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS RIGHT INDEX': { + name: 'TRAILING EDGE FLAPS RIGHT INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRAILING EDGE FLAPS RIGHT PERCENT': { + name: 'TRAILING EDGE FLAPS RIGHT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FLY BY WIRE ALPHA PROTECTION': { + name: 'FLY BY WIRE ALPHA PROTECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE ELAC FAILED': { + name: 'FLY BY WIRE ELAC FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE ELAC SWITCH': { + name: 'FLY BY WIRE ELAC SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE FAC FAILED': { + name: 'FLY BY WIRE FAC FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE FAC SWITCH': { + name: 'FLY BY WIRE FAC SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE SEC FAILED': { + name: 'FLY BY WIRE SEC FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FLY BY WIRE SEC SWITCH': { + name: 'FLY BY WIRE SEC SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FOLDING WING HANDLE POSITION': { + name: 'FOLDING WING HANDLE POSITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FOLDING WING LEFT PERCENT': { + name: 'FOLDING WING LEFT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FOLDING WING RIGHT PERCENT': { + name: 'FOLDING WING RIGHT PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RUDDER DEFLECTION': { + name: 'RUDDER DEFLECTION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RUDDER DEFLECTION PCT': { + name: 'RUDDER DEFLECTION PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RUDDER PEDAL INDICATOR': { + name: 'RUDDER PEDAL INDICATOR', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RUDDER PEDAL POSITION': { + name: 'RUDDER PEDAL POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RUDDER POSITION': { + name: 'RUDDER POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RUDDER TRIM': { + name: 'RUDDER TRIM', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RUDDER TRIM MAX': { + name: 'RUDDER TRIM MAX', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RUDDER TRIM MIN': { + name: 'RUDDER TRIM MIN', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RUDDER TRIM DISABLED': { + name: 'RUDDER TRIM DISABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RUDDER TRIM PCT': { + name: 'RUDDER TRIM PCT', + units: 'Float', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RUDDER TRIM PCT EX1': { + name: 'RUDDER TRIM PCT EX1', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'SPOILERS ARMED': { + name: 'SPOILERS ARMED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'SPOILER AVAILABLE': { + name: 'SPOILER AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'SPOILERS HANDLE POSITION': { + name: 'SPOILERS HANDLE POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'SPOILERS LEFT POSITION': { + name: 'SPOILERS LEFT POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'SPOILERS RIGHT POSITION': { + name: 'SPOILERS RIGHT POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'YOKE X INIDICATOR / YOKE X INDICATOR': { + name: 'YOKE X INIDICATOR / YOKE X INDICATOR', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'YOKE X POSITION': { + name: 'YOKE X POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'YOKE X POSITION WITH AP': { + name: 'YOKE X POSITION WITH AP', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'YOKE Y INIDICATOR / YOKE Y INDICATOR': { + name: 'YOKE Y INIDICATOR / YOKE Y INDICATOR', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'YOKE Y POSITION': { + name: 'YOKE Y POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'YOKE Y POSITION WITH AP': { + name: 'YOKE Y POSITION WITH AP', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'BLAST SHIELD POSITION:index': { + name: 'BLAST SHIELD POSITION:index', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CABLE CAUGHT BY TAILHOOK:index': { + name: 'CABLE CAUGHT BY TAILHOOK:index', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CATAPULT STROKE POSITION:index': { + name: 'CATAPULT STROKE POSITION:index', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HOLDBACK BAR INSTALLED': { + name: 'HOLDBACK BAR INSTALLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'LAUNCHBAR HELD EXTENDED': { + name: 'LAUNCHBAR HELD EXTENDED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'LAUNCHBAR POSITION': { + name: 'LAUNCHBAR POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LAUNCHBAR SWITCH': { + name: 'LAUNCHBAR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'NUMBER OF CATAPULTS': { + name: 'NUMBER OF CATAPULTS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'BUS LOOKUP INDEX': { + name: 'BUS LOOKUP INDEX', + units: '-', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BUS BREAKER PULLED': { + name: 'BUS BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'BUS CONNECTION ON': { + name: 'BUS CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL BUS AMPS': { + name: 'ELECTRICAL BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL BUS VOLTAGE': { + name: 'ELECTRICAL BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL TOTAL LOAD AMPS': { + name: 'ELECTRICAL TOTAL LOAD AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'NEW ELECTRICAL SYSTEM': { + name: 'NEW ELECTRICAL SYSTEM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ELECTRICAL AVIONICS BUS AMPS': { + name: 'ELECTRICAL AVIONICS BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL AVIONICS BUS VOLTAGE': { + name: 'ELECTRICAL AVIONICS BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL BATTERY BUS AMPS': { + name: 'ELECTRICAL BATTERY BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL BATTERY BUS VOLTAGE': { + name: 'ELECTRICAL BATTERY BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL GENALT LOAD': { + name: 'ELECTRICAL GENALT LOAD', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ELECTRICAL GENALT BUS AMPS': { + name: 'ELECTRICAL GENALT BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL GENALT BUS VOLTAGE': { + name: 'ELECTRICAL GENALT BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL MAIN BUS AMPS': { + name: 'ELECTRICAL MAIN BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL MAIN BUS VOLTAGE': { + name: 'ELECTRICAL MAIN BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL OLD CHARGING AMPS': { + name: 'ELECTRICAL OLD CHARGING AMPS', + units: 'Amps', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BATTERY BREAKER PULLED': { + name: 'BATTERY BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'BATTERY CONNECTION ON': { + name: 'BATTERY CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL BATTERY ESTIMATED CAPACITY PCT': { + name: 'ELECTRICAL BATTERY ESTIMATED CAPACITY PCT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL BATTERY LOAD': { + name: 'ELECTRICAL BATTERY LOAD', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL BATTERY VOLTAGE': { + name: 'ELECTRICAL BATTERY VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL HOT BATTERY BUS AMPS': { + name: 'ELECTRICAL HOT BATTERY BUS AMPS', + units: 'Amperes', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL HOT BATTERY BUS VOLTAGE': { + name: 'ELECTRICAL HOT BATTERY BUS VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL MASTER BATTERY': { + name: 'ELECTRICAL MASTER BATTERY', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'BREAKER ADF*': { + name: 'BREAKER ADF*', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'BREAKER ALTFLD*': { + name: 'BREAKER ALTFLD*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER AUTOPILOT': { + name: 'BREAKER AUTOPILOT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER AVNBUS1*': { + name: 'BREAKER AVNBUS1*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER AVNBUS2*': { + name: 'BREAKER AVNBUS2*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER AVNFAN*': { + name: 'BREAKER AVNFAN*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER FLAP': { + name: 'BREAKER FLAP', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER GPS*': { + name: 'BREAKER GPS*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER INST*': { + name: 'BREAKER INST*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER INSTLTS*': { + name: 'BREAKER INSTLTS*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER LTS PWR*': { + name: 'BREAKER LTS PWR*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER NAVCOM1': { + name: 'BREAKER NAVCOM1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER NAVCOM2': { + name: 'BREAKER NAVCOM2', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER NAVCOM3': { + name: 'BREAKER NAVCOM3', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER NAVCOM4': { + name: 'BREAKER NAVCOM4', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER TURNCOORD*': { + name: 'BREAKER TURNCOORD*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER WARN*': { + name: 'BREAKER WARN*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BREAKER XPNDR*': { + name: 'BREAKER XPNDR*', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ELECTRICAL CIRCUIT EXISTS': { + name: 'ELECTRICAL CIRCUIT EXISTS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL CIRCUIT AMPS': { + name: 'ELECTRICAL CIRCUIT AMPS', + units: 'Amps', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL CIRCUIT VOLTAGE': { + name: 'ELECTRICAL CIRCUIT VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CIRCUIT AUTOPILOT ON': { + name: 'CIRCUIT AUTOPILOT ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT AUTO BRAKES ON': { + name: 'CIRCUIT AUTO BRAKES ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT AUTO FEATHER ON': { + name: 'CIRCUIT AUTO FEATHER ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT AVIONICS ON': { + name: 'CIRCUIT AVIONICS ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT BREAKER PULLED': { + name: 'CIRCUIT BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'CIRCUIT CABIN SIGNAL GO': { + name: 'CIRCUIT CABIN SIGNAL GO', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT CABIN SIGNAL STANDBY': { + name: 'CIRCUIT CABIN SIGNAL STANDBY', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT CABIN SIGNAL STOP': { + name: 'CIRCUIT CABIN SIGNAL STOP', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT COM ON': { + name: 'CIRCUIT COM ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CIRCUIT CONNECTION ON': { + name: 'CIRCUIT CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CIRCUIT ELECTRIC ENGINE ON': { + name: 'CIRCUIT ELECTRIC ENGINE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT FLAP MOTOR ON': { + name: 'CIRCUIT FLAP MOTOR ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT GEAR MOTOR ON': { + name: 'CIRCUIT GEAR MOTOR ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT GEAR WARNING ON': { + name: 'CIRCUIT GEAR WARNING ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT GENERAL PANEL ON': { + name: 'CIRCUIT GENERAL PANEL ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT HOIST ON': { + name: 'CIRCUIT HOIST ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT HYDRAULIC PUMP ON': { + name: 'CIRCUIT HYDRAULIC PUMP ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT HYDRAULIC VALVE ON': { + name: 'CIRCUIT HYDRAULIC VALVE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT MARKER BEACON ON': { + name: 'CIRCUIT MARKER BEACON ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT NAV ON': { + name: 'CIRCUIT NAV ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT NAVCOM1 ON': { + name: 'CIRCUIT NAVCOM1 ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT NAVCOM2 ON': { + name: 'CIRCUIT NAVCOM2 ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT NAVCOM3 ON': { + name: 'CIRCUIT NAVCOM3 ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT NAVCOM4 ON': { + name: 'CIRCUIT NAVCOM4 ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT ON': { + name: 'CIRCUIT ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CIRCUIT PITOT HEAT ON': { + name: 'CIRCUIT PITOT HEAT ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT POWER SETTING': { + name: 'CIRCUIT POWER SETTING', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CIRCUIT PROP SYNC ON': { + name: 'CIRCUIT PROP SYNC ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT ROTOR BRAKE ON': { + name: 'CIRCUIT ROTOR BRAKE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT SLING ON': { + name: 'CIRCUIT SLING ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT STALL WARNING ON': { + name: 'CIRCUIT STALL WARNING ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT STANDBY VACUUM ON': { + name: 'CIRCUIT STANDBY VACUUM ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CIRCUIT SWITCH ON': { + name: 'CIRCUIT SWITCH ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CIRCUIT TRANSPONDER ON': { + name: 'CIRCUIT TRANSPONDER ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ELECTRICAL GENERATOR ACTIVE': { + name: 'ELECTRICAL GENERATOR ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL GENERATOR AMPS': { + name: 'ELECTRICAL GENERATOR AMPS', + units: 'Amps', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL GENERATOR VOLTAGE': { + name: 'ELECTRICAL GENERATOR VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL GENERATOR SWITCH': { + name: 'ELECTRICAL GENERATOR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL RELAY AMPS': { + name: 'ELECTRICAL RELAY AMPS', + units: 'Amps', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL RELAY BREAKER PULLED': { + name: 'ELECTRICAL RELAY BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL RELAY CONNECTION ON': { + name: 'ELECTRICAL RELAY CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ELECTRICAL RELAY LINE OPEN': { + name: 'ELECTRICAL RELAY LINE OPEN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL RELAY POWERED': { + name: 'ELECTRICAL RELAY POWERED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL RELAY VOLTAGE': { + name: 'ELECTRICAL RELAY VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL EXTERNAL POWER AMPS': { + name: 'ELECTRICAL EXTERNAL POWER AMPS', + units: 'Amps', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ELECTRICAL EXTERNAL POWER VOLTAGE': { + name: 'ELECTRICAL EXTERNAL POWER VOLTAGE', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'EXTERNAL POWER AVAILABLE': { + name: 'EXTERNAL POWER AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'EXTERNAL POWER BREAKER PULLED': { + name: 'EXTERNAL POWER BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'EXTERNAL POWER CONNECTION ON': { + name: 'EXTERNAL POWER CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'EXTERNAL POWER ON': { + name: 'EXTERNAL POWER ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'LINE CONNECTION ON': { + name: 'LINE CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'LINE BREAKER PULLED': { + name: 'LINE BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ALTERNATOR BREAKER PULLED': { + name: 'ALTERNATOR BREAKER PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'ALTERNATOR CONNECTION ON': { + name: 'ALTERNATOR CONNECTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GENERAL ENG MASTER ALTERNATOR': { + name: 'GENERAL ENG MASTER ALTERNATOR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'APU BLEED PRESSURE RECEIVED BY ENGINE': { + name: 'APU BLEED PRESSURE RECEIVED BY ENGINE', + units: 'Pounds per square inch', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'APU GENERATOR ACTIVE': { + name: 'APU GENERATOR ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'APU GENERATOR SWITCH': { + name: 'APU GENERATOR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'APU ON FIRE DETECTED': { + name: 'APU ON FIRE DETECTED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'APU PCT RPM': { + name: 'APU PCT RPM', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'APU PCT STARTER': { + name: 'APU PCT STARTER', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'APU SWITCH': { + name: 'APU SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'APU VOLTS': { + name: 'APU VOLTS', + units: 'Volts', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BLEED AIR APU': { + name: 'BLEED AIR APU', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'BLEED AIR ENGINE': { + name: 'BLEED AIR ENGINE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'BLEED AIR SOURCE CONTROL': { + name: 'BLEED AIR SOURCE CONTROL', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COWL FLAPS': { + name: 'COWL FLAPS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ENGINE CONTROL SELECT': { + name: 'ENGINE CONTROL SELECT', + units: 'Flags', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ENGINE MIXURE AVAILABLE': { + name: 'ENGINE MIXURE AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ENGINE PRIMER': { + name: 'ENGINE PRIMER', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENGINE TYPE': { + name: 'ENGINE TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ENG ANTI ICE': { + name: 'ENG ANTI ICE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ENG COMBUSTION': { + name: 'ENG COMBUSTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ENG CYLINDER HEAD TEMPERATURE': { + name: 'ENG CYLINDER HEAD TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG EXHAUST GAS TEMPERATURE': { + name: 'ENG EXHAUST GAS TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG EXHAUST GAS TEMPERATURE GES': { + name: 'ENG EXHAUST GAS TEMPERATURE GES', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG FAILED': { + name: 'ENG FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ENG FUEL FLOW BUG POSITION': { + name: 'ENG FUEL FLOW BUG POSITION', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG FUEL FLOW GPH': { + name: 'ENG FUEL FLOW GPH', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG FUEL FLOW PPH': { + name: 'ENG FUEL FLOW PPH', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG FUEL FLOW PPH SSL': { + name: 'ENG FUEL FLOW PPH SSL', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG HYDRAULIC PRESSURE': { + name: 'ENG HYDRAULIC PRESSURE', + units: 'Pounds per square foot', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG HYDRAULIC QUANTITY': { + name: 'ENG HYDRAULIC QUANTITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG MANIFOLD PRESSURE': { + name: 'ENG MANIFOLD PRESSURE', + units: 'Inches of mercury', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG MAX RPM': { + name: 'ENG MAX RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG N1 RPM': { + name: 'ENG N1 RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG N2 RPM': { + name: 'ENG N2 RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG OIL PRESSURE': { + name: 'ENG OIL PRESSURE', + units: 'pounds per square foot', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG OIL QUANTITY': { + name: 'ENG OIL QUANTITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG OIL TEMPERATURE': { + name: 'ENG OIL TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG ON FIRE': { + name: 'ENG ON FIRE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'ENG PRESSURE RATIO': { + name: 'ENG PRESSURE RATIO', + units: 'Ratio', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG PRESSURE RATIO GES': { + name: 'ENG PRESSURE RATIO GES', + units: 'Scalar', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG RPM ANIMATION PERCENT': { + name: 'ENG RPM ANIMATION PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG RPM SCALER': { + name: 'ENG RPM SCALER', + units: 'Scalar', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG TILT PITCH': { + name: 'ENG TILT PITCH', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TILT PITCH PERCENT': { + name: 'ENG TILT PITCH PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TILT PITCH PERCENT EX1': { + name: 'ENG TILT PITCH PERCENT EX1', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TILT YAW': { + name: 'ENG TILT YAW', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TILT YAW PERCENT': { + name: 'ENG TILT YAW PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TILT YAW PERCENT EX1': { + name: 'ENG TILT YAW PERCENT EX1', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ENG TORQUE': { + name: 'ENG TORQUE', + units: 'Foot pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENG VIBRATION': { + name: 'ENG VIBRATION', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ESTIMATED FUEL FLOW': { + name: 'ESTIMATED FUEL FLOW', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FULL THROTTLE THRUST TO WEIGHT RATIO': { + name: 'FULL THROTTLE THRUST TO WEIGHT RATIO', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GENERAL ENG ANTI ICE POSITION': { + name: 'GENERAL ENG ANTI ICE POSITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG COMBUSTION': { + name: 'GENERAL ENG COMBUSTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG COMBUSTION EX1': { + name: 'GENERAL ENG COMBUSTION EX1', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG COMBUSTION SOUND PERCENT': { + name: 'GENERAL ENG COMBUSTION SOUND PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG DAMAGE PERCENT': { + name: 'GENERAL ENG DAMAGE PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG ELAPSED TIME': { + name: 'GENERAL ENG ELAPSED TIME', + units: 'Hours', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG EXHAUST GAS TEMPERATURE': { + name: 'GENERAL ENG EXHAUST GAS TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG FAILED': { + name: 'GENERAL ENG FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG FIRE DETECTED': { + name: 'GENERAL ENG FIRE DETECTED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG FUEL PRESSURE': { + name: 'GENERAL ENG FUEL PRESSURE', + units: 'Pounds per square inch', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG FUEL PUMP ON': { + name: 'GENERAL ENG FUEL PUMP ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG FUEL PUMP SWITCH': { + name: 'GENERAL ENG FUEL PUMP SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG FUEL PUMP SWITCH EX1': { + name: 'GENERAL ENG FUEL PUMP SWITCH EX1', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG FUEL USED SINCE START': { + name: 'GENERAL ENG FUEL USED SINCE START', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG FUEL VALVE': { + name: 'GENERAL ENG FUEL VALVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG GENERATOR ACTIVE': { + name: 'GENERAL ENG GENERATOR ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG GENERATOR SWITCH': { + name: 'GENERAL ENG GENERATOR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG HOBBS ELAPSED TIME': { + name: 'GENERAL ENG HOBBS ELAPSED TIME', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG MAX REACHED RPM': { + name: 'GENERAL ENG MAX REACHED RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG MIXTURE LEVER POSITION': { + name: 'GENERAL ENG MIXTURE LEVER POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG OIL LEAKED PERCENT': { + name: 'GENERAL ENG OIL LEAKED PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG OIL PRESSURE': { + name: 'GENERAL ENG OIL PRESSURE', + units: 'Psf', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG OIL TEMPERATURE': { + name: 'GENERAL ENG OIL TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG PCT MAX RPM': { + name: 'GENERAL ENG PCT MAX RPM', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG PROPELLER LEVER POSITION': { + name: 'GENERAL ENG PROPELLER LEVER POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG REVERSE THRUST ENGAGED': { + name: 'GENERAL ENG REVERSE THRUST ENGAGED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG RPM': { + name: 'GENERAL ENG RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG STARTER': { + name: 'GENERAL ENG STARTER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG STARTER ACTIVE': { + name: 'GENERAL ENG STARTER ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GENERAL ENG THROTTLE LEVER POSITION': { + name: 'GENERAL ENG THROTTLE LEVER POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GENERAL ENG THROTTLE MANAGED MODE': { + name: 'GENERAL ENG THROTTLE MANAGED MODE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'MASTER IGNITION SWITCH': { + name: 'MASTER IGNITION SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MAX EGT': { + name: 'MAX EGT', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX OIL TEMPERATURE': { + name: 'MAX OIL TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX RATED ENGINE RPM': { + name: 'MAX RATED ENGINE RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NUMBER OF ENGINES': { + name: 'NUMBER OF ENGINES', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'OIL AMOUNT': { + name: 'OIL AMOUNT', + units: 'FS7 Oil Quantity', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PANEL AUTO FEATHER SWITCH': { + name: 'PANEL AUTO FEATHER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP AUTO CRUISE ACTIVE': { + name: 'PROP AUTO CRUISE ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP AUTO FEATHER ARMED': { + name: 'PROP AUTO FEATHER ARMED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP BETA': { + name: 'PROP BETA', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PROP BETA FORCED ACTIVE': { + name: 'PROP BETA FORCED ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'PROP BETA FORCED POSITION': { + name: 'PROP BETA FORCED POSITION', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PROP BETA MAX': { + name: 'PROP BETA MAX', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PROP BETA MIN': { + name: 'PROP BETA MIN', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PROP BETA MIN REVERSE': { + name: 'PROP BETA MIN REVERSE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PROP DEICE SWITCH': { + name: 'PROP DEICE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP FEATHERED': { + name: 'PROP FEATHERED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP FEATHERING INHIBIT': { + name: 'PROP FEATHERING INHIBIT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP FEATHER SWITCH': { + name: 'PROP FEATHER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP LOCK': { + name: 'PROP LOCK', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP MAX RPM PERCENT': { + name: 'PROP MAX RPM PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PROP ROTATION ANGLE': { + name: 'PROP ROTATION ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PROP RPM': { + name: 'PROP RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PROP SYNC ACTIVE': { + name: 'PROP SYNC ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PROP SYNC DELTA LEVER': { + name: 'PROP SYNC DELTA LEVER', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PROP THRUST': { + name: 'PROP THRUST', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PROPELLER ADVANCED SELECTION': { + name: 'PROPELLER ADVANCED SELECTION', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SHUTOFF VALVE PULLED': { + name: 'SHUTOFF VALVE PULLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'THROTTLE INPUT BLOCKED BY LOWER BOUNDS': { + name: 'THROTTLE INPUT BLOCKED BY LOWER BOUNDS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'THROTTLE INPUT BLOCKED BY UPPER BOUNDS': { + name: 'THROTTLE INPUT BLOCKED BY UPPER BOUNDS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'THROTTLE LOWER LIMIT': { + name: 'THROTTLE LOWER LIMIT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TURB ENG AFTERBURNER': { + name: 'TURB ENG AFTERBURNER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG AFTERBURNER PCT ACTIVE': { + name: 'TURB ENG AFTERBURNER PCT ACTIVE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG AFTERBURNER STAGE ACTIVE': { + name: 'TURB ENG AFTERBURNER STAGE ACTIVE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG ANIMATION RPM': { + name: 'TURB ENG ANIMATION RPM', + units: 'RPM', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG BLEED AIR': { + name: 'TURB ENG BLEED AIR', + units: 'Pounds per square inch', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG COMMANDED N1': { + name: 'TURB ENG COMMANDED N1', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG CONDITION LEVER POSITION': { + name: 'TURB ENG CONDITION LEVER POSITION', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'TURB ENG CORRECTED FF': { + name: 'TURB ENG CORRECTED FF', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG CORRECTED N1': { + name: 'TURB ENG CORRECTED N1', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG CORRECTED N2': { + name: 'TURB ENG CORRECTED N2', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG FREE TURBINE TORQUE': { + name: 'TURB ENG FREE TURBINE TORQUE', + units: 'Foot Pound', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG FUEL AVAILABLE': { + name: 'TURB ENG FUEL AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG FUEL EFFICIENCY LOSS': { + name: 'TURB ENG FUEL EFFICIENCY LOSS', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG FUEL FLOW PPH': { + name: 'TURB ENG FUEL FLOW PPH', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG HIGH IDLE': { + name: 'TURB ENG HIGH IDLE', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG IGNITION SWITCH': { + name: 'TURB ENG IGNITION SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG IGNITION SWITCH EX1': { + name: 'TURB ENG IGNITION SWITCH EX1', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG INLET TEMPERATURE': { + name: 'TURB ENG INLET TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG IS IGNITING': { + name: 'TURB ENG IS IGNITING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG ITT': { + name: 'TURB ENG ITT', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG ITT COOLING EFFICIENCY LOSS': { + name: 'TURB ENG ITT COOLING EFFICIENCY LOSS', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG JET THRUST': { + name: 'TURB ENG JET THRUST', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG LOW IDLE': { + name: 'TURB ENG LOW IDLE', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG MASTER STARTER SWITCH': { + name: 'TURB ENG MASTER STARTER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG MAX TORQUE PERCENT': { + name: 'TURB ENG MAX TORQUE PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG N1': { + name: 'TURB ENG N1', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG N1 LOSS': { + name: 'TURB ENG N1 LOSS', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG N2': { + name: 'TURB ENG N2', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG NUM TANKS USED': { + name: 'TURB ENG NUM TANKS USED', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG PRESSURE RATIO': { + name: 'TURB ENG PRESSURE RATIO', + units: 'Ratio', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG PRIMARY NOZZLE PERCENT': { + name: 'TURB ENG PRIMARY NOZZLE PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG REVERSE NOZZLE PERCENT': { + name: 'TURB ENG REVERSE NOZZLE PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB ENG TANKS USED': { + name: 'TURB ENG TANKS USED', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG TANK SELECTOR': { + name: 'TURB ENG TANK SELECTOR', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TURB ENG THROTTLE COMMANDED N1': { + name: 'TURB ENG THROTTLE COMMANDED N1', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG THRUST EFFICIENCY LOSS': { + name: 'TURB ENG THRUST EFFICIENCY LOSS', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'TURB ENG VIBRATION': { + name: 'TURB ENG VIBRATION', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TURB MAX ITT': { + name: 'TURB MAX ITT', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RECIP CARBURETOR TEMPERATURE': { + name: 'RECIP CARBURETOR TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG ALTERNATE AIR POSITION': { + name: 'RECIP ENG ALTERNATE AIR POSITION', + units: 'Position', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG ANTIDETONATION TANK MAX QUANTITY': { + name: 'RECIP ENG ANTIDETONATION TANK MAX QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG ANTIDETONATION TANK QUANTITY': { + name: 'RECIP ENG ANTIDETONATION TANK QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG ANTIDETONATION TANK VALVE': { + name: 'RECIP ENG ANTIDETONATION TANK VALVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG ANTIDETONATION FLOW RATE': { + name: 'RECIP ENG ANTIDETONATION FLOW RATE', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG BRAKE POWER': { + name: 'RECIP ENG BRAKE POWER', + units: 'Foot pounds per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG BRAKE POWER PCT': { + name: 'RECIP ENG BRAKE POWER PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG COOLANT RESERVOIR PERCENT': { + name: 'RECIP ENG COOLANT RESERVOIR PERCENT', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG COWL FLAP POSITION': { + name: 'RECIP ENG COWL FLAP POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG CYLINDER HEAD TEMPERATURE': { + name: 'RECIP ENG CYLINDER HEAD TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG CYLINDER HEALTH': { + name: 'RECIP ENG CYLINDER HEALTH', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG DETONATING': { + name: 'RECIP ENG DETONATING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG EMERGENCY BOOST ACTIVE': { + name: 'RECIP ENG EMERGENCY BOOST ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG EMERGENCY BOOST ELAPSED TIME': { + name: 'RECIP ENG EMERGENCY BOOST ELAPSED TIME', + units: 'Hours', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG ENGINE MASTER SWITCH': { + name: 'RECIP ENG ENGINE MASTER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG FUEL AVAILABLE': { + name: 'RECIP ENG FUEL AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG FUEL FLOW': { + name: 'RECIP ENG FUEL FLOW', + units: 'Pounds per hour', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG FUEL NUMBER TANKS USED': { + name: 'RECIP ENG FUEL NUMBER TANKS USED', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG FUEL TANKS USED': { + name: 'RECIP ENG FUEL TANKS USED', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG FUEL TANK SELECTOR': { + name: 'RECIP ENG FUEL TANK SELECTOR', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG GLOW PLUG ACTIVE': { + name: 'RECIP ENG GLOW PLUG ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG LEFT MAGNETO': { + name: 'RECIP ENG LEFT MAGNETO', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG MANIFOLD PRESSURE': { + name: 'RECIP ENG MANIFOLD PRESSURE', + units: 'Pounds per square inch', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG NITROUS TANK MAX QUANTITY': { + name: 'RECIP ENG NITROUS TANK MAX QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG NITROUS TANK QUANTITY': { + name: 'RECIP ENG NITROUS TANK QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG NITROUS TANK VALVE': { + name: 'RECIP ENG NITROUS TANK VALVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG NUM CYLINDERS': { + name: 'RECIP ENG NUM CYLINDERS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG NUM CYLINDERS FAILED': { + name: 'RECIP ENG NUM CYLINDERS FAILED', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG PRIMER': { + name: 'RECIP ENG PRIMER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG RADIATOR TEMPERATURE': { + name: 'RECIP ENG RADIATOR TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG RIGHT MAGNETO': { + name: 'RECIP ENG RIGHT MAGNETO', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG STARTER TORQUE': { + name: 'RECIP ENG STARTER TORQUE', + units: 'Foot pound', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG SUPERCHARGER ACTIVE GEAR': { + name: 'RECIP ENG SUPERCHARGER ACTIVE GEAR', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'RECIP ENG TURBINE INLET TEMPERATURE': { + name: 'RECIP ENG TURBINE INLET TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG TURBOCHARGER FAILED': { + name: 'RECIP ENG TURBOCHARGER FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'RECIP ENG WASTEGATE POSITION': { + name: 'RECIP ENG WASTEGATE POSITION', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'RECIP MAX CHT': { + name: 'RECIP MAX CHT', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RECIP MIXTURE RATIO': { + name: 'RECIP MIXTURE RATIO', + units: 'Ratio', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'BETA DOT': { + name: 'BETA DOT', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DECISION ALTITUDE MSL': { + name: 'DECISION ALTITUDE MSL', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DECISION HEIGHT': { + name: 'DECISION HEIGHT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN CRUISE ALT': { + name: 'DESIGN CRUISE ALT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPAWN ALTITUDE CRUISE': { + name: 'DESIGN SPAWN ALTITUDE CRUISE', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPAWN ALTITUDE DESCENT': { + name: 'DESIGN SPAWN ALTITUDE DESCENT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPEED CLIMB': { + name: 'DESIGN SPEED CLIMB', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPEED MIN ROTATION': { + name: 'DESIGN SPEED MIN ROTATION', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPEED VC': { + name: 'DESIGN SPEED VC', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPEED VS0': { + name: 'DESIGN SPEED VS0', + units: 'kias', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN SPEED VS1': { + name: 'DESIGN SPEED VS1', + units: 'kias', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DESIGN TAKEOFF SPEED': { + name: 'DESIGN TAKEOFF SPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'DYNAMIC PRESSURE': { + name: 'DYNAMIC PRESSURE', + units: 'Pounds per square foot', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ESTIMATED CRUISE SPEED': { + name: 'ESTIMATED CRUISE SPEED', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'G FORCE': { + name: 'G FORCE', + units: 'GForce', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'G LIMITER SETTING': { + name: 'G LIMITER SETTING', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'INCIDENCE ALPHA': { + name: 'INCIDENCE ALPHA', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INCIDENCE BETA': { + name: 'INCIDENCE BETA', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'IS TAIL DRAGGER': { + name: 'IS TAIL DRAGGER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LINEAR CL ALPHA': { + name: 'LINEAR CL ALPHA', + units: 'Per radian', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MACH MAX OPERATE': { + name: 'MACH MAX OPERATE', + units: 'Mach', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX G FORCE': { + name: 'MAX G FORCE', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MIN DRAG VELOCITY': { + name: 'MIN DRAG VELOCITY', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MIN G FORCE': { + name: 'MIN G FORCE', + units: 'Gforce', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'REFERENCE SPEED MAX IAS': { + name: 'REFERENCE SPEED MAX IAS', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'REFERENCE SPEED MAX IAS GEAR DOWN': { + name: 'REFERENCE SPEED MAX IAS GEAR DOWN', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SEMIBODY LOADFACTOR X': { + name: 'SEMIBODY LOADFACTOR X', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SEMIBODY LOADFACTOR Y': { + name: 'SEMIBODY LOADFACTOR Y', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SEMIBODY LOADFACTOR YDOT': { + name: 'SEMIBODY LOADFACTOR YDOT', + units: 'Per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SEMIBODY LOADFACTOR Z': { + name: 'SEMIBODY LOADFACTOR Z', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SIGMA SQRT': { + name: 'SIGMA SQRT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SIMULATED RADIUS': { + name: 'SIMULATED RADIUS', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STALL ALPHA': { + name: 'STALL ALPHA', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STATIC PITCH': { + name: 'STATIC PITCH', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TYPICAL DESCENT RATE': { + name: 'TYPICAL DESCENT RATE', + units: 'Feet per minute', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WING AREA': { + name: 'WING AREA', + units: 'Square feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WING FLEX PCT': { + name: 'WING FLEX PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'WING SPAN': { + name: 'WING SPAN', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'YAW STRING ANGLE': { + name: 'YAW STRING ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'YAW STRING PCT EXTENDED': { + name: 'YAW STRING PCT EXTENDED', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ZERO LIFT ALPHA': { + name: 'ZERO LIFT ALPHA', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG AFT LIMIT': { + name: 'CG AFT LIMIT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET': { + name: 'CG FEET', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET AFT LIMIT': { + name: 'CG FEET AFT LIMIT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET LATERAL': { + name: 'CG FEET LATERAL', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET LATERAL LEFT LIMIT': { + name: 'CG FEET LATERAL LEFT LIMIT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET LATERAL RIGHT LIMIT': { + name: 'CG FEET LATERAL RIGHT LIMIT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FEET FWD LIMIT': { + name: 'CG FEET FWD LIMIT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG FWD LIMIT': { + name: 'CG FWD LIMIT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG MAX MACH': { + name: 'CG MAX MACH', + units: 'Mach', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG MIN MACH': { + name: 'CG MIN MACH', + units: 'Mach', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG PERCENT': { + name: 'CG PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CG PERCENT LATERAL': { + name: 'CG PERCENT LATERAL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STATIC CG TO GROUND': { + name: 'STATIC CG TO GROUND', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'INTERACTIVE POINT BANK': { + name: 'INTERACTIVE POINT BANK', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT BANK EX1': { + name: 'INTERACTIVE POINT BANK EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT HEADING': { + name: 'INTERACTIVE POINT HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT HEADING EX1': { + name: 'INTERACTIVE POINT HEADING EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY LEFT BEND': { + name: 'INTERACTIVE POINT JETWAY LEFT BEND', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY LEFT BEND EX1': { + name: 'INTERACTIVE POINT JETWAY LEFT BEND EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY LEFT DEPLOYMENT': { + name: 'INTERACTIVE POINT JETWAY LEFT DEPLOYMENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY LEFT DEPLOYMENT EX1': { + name: 'INTERACTIVE POINT JETWAY LEFT DEPLOYMENT EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY RIGHT BEND': { + name: 'INTERACTIVE POINT JETWAY RIGHT BEND', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY RIGHT BEND EX1': { + name: 'INTERACTIVE POINT JETWAY RIGHT BEND EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY RIGHT DEPLOYMENT': { + name: 'INTERACTIVE POINT JETWAY RIGHT DEPLOYMENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY RIGHT DEPLOYMENT EX1': { + name: 'INTERACTIVE POINT JETWAY RIGHT DEPLOYMENT EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY TOP HORIZONTAL': { + name: 'INTERACTIVE POINT JETWAY TOP HORIZONTAL', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY TOP HORIZONTAL EX1': { + name: 'INTERACTIVE POINT JETWAY TOP HORIZONTAL EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY TOP VERTICAL': { + name: 'INTERACTIVE POINT JETWAY TOP VERTICAL', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT JETWAY TOP VERTICAL EX1': { + name: 'INTERACTIVE POINT JETWAY TOP VERTICAL EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT GOAL': { + name: 'INTERACTIVE POINT GOAL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT GOAL EX1': { + name: 'INTERACTIVE POINT GOAL EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT OPEN': { + name: 'INTERACTIVE POINT OPEN', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT OPEN EX1': { + name: 'INTERACTIVE POINT OPEN EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT PITCH': { + name: 'INTERACTIVE POINT PITCH', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT PITCH EX1': { + name: 'INTERACTIVE POINT PITCH EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSX': { + name: 'INTERACTIVE POINT POSX', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSX EX1': { + name: 'INTERACTIVE POINT POSX EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSY': { + name: 'INTERACTIVE POINT POSY', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSY EX1': { + name: 'INTERACTIVE POINT POSY EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSZ': { + name: 'INTERACTIVE POINT POSZ', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT POSZ EX1': { + name: 'INTERACTIVE POINT POSZ EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'INTERACTIVE POINT TYPE': { + name: 'INTERACTIVE POINT TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'INTERACTIVE POINT TYPE EX1': { + name: 'INTERACTIVE POINT TYPE EX1', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'EMPTY WEIGHT': { + name: 'EMPTY WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'EMPTY WEIGHT CROSS COUPLED MOI': { + name: 'EMPTY WEIGHT CROSS COUPLED MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'EMPTY WEIGHT PITCH MOI': { + name: 'EMPTY WEIGHT PITCH MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'EMPTY WEIGHT ROLL MOI': { + name: 'EMPTY WEIGHT ROLL MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'EMPTY WEIGHT YAW MOI': { + name: 'EMPTY WEIGHT YAW MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX GROSS WEIGHT': { + name: 'MAX GROSS WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX LANDING WEIGHT': { + name: 'MAX LANDING WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX TAKEOFF WEIGHT': { + name: 'MAX TAKEOFF WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MAX ZERO FUEL WEIGHT': { + name: 'MAX ZERO FUEL WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL WEIGHT': { + name: 'TOTAL WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL WEIGHT CROSS COUPLED MOI': { + name: 'TOTAL WEIGHT CROSS COUPLED MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL WEIGHT PITCH MOI': { + name: 'TOTAL WEIGHT PITCH MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL WEIGHT ROLL MOI': { + name: 'TOTAL WEIGHT ROLL MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL WEIGHT YAW MOI': { + name: 'TOTAL WEIGHT YAW MOI', + units: 'Slugs per feet squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL CROSS FEED': { + name: 'FUEL CROSS FEED', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUEL DUMP ACTIVE': { + name: 'FUEL DUMP ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'FUEL DUMP SWITCH': { + name: 'FUEL DUMP SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'FUEL LEFT CAPACITY': { + name: 'FUEL LEFT CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL LEFT QUANTITY': { + name: 'FUEL LEFT QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL PUMP': { + name: 'FUEL PUMP', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL RIGHT CAPACITY': { + name: 'FUEL RIGHT CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL RIGHT QUANTITY': { + name: 'FUEL RIGHT QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL SELECTED QUANTITY': { + name: 'FUEL SELECTED QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUEL SELECTED QUANTITY PERCENT': { + name: 'FUEL SELECTED QUANTITY PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUEL SELECTED TRANSFER MODE': { + name: 'FUEL SELECTED TRANSFER MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'FUEL TOTAL CAPACITY': { + name: 'FUEL TOTAL CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TOTAL QUANTITY': { + name: 'FUEL TOTAL QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TOTAL QUANTITY EX1': { + name: 'FUEL TOTAL QUANTITY EX1', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TOTAL QUANTITY WEIGHT': { + name: 'FUEL TOTAL QUANTITY WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TOTAL QUANTITY WEIGHT EX1': { + name: 'FUEL TOTAL QUANTITY WEIGHT EX1', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TRANSFER PUMP ON': { + name: 'FUEL TRANSFER PUMP ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUEL WEIGHT PER GALLON': { + name: 'FUEL WEIGHT PER GALLON', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NEW FUEL SYSTEM': { + name: 'NEW FUEL SYSTEM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NUM FUEL SELECTORS': { + name: 'NUM FUEL SELECTORS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'UNLIMITED FUEL': { + name: 'UNLIMITED FUEL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'UNUSABLE FUEL TOTAL QUANTITY': { + name: 'UNUSABLE FUEL TOTAL QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUELSYSTEM ENGINE PRESSURE': { + name: 'FUELSYSTEM ENGINE PRESSURE', + units: 'Kilo pascal', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM JUNCTION SETTING': { + name: 'FUELSYSTEM JUNCTION SETTING', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM LINE FUEL FLOW': { + name: 'FUELSYSTEM LINE FUEL FLOW', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM LINE FUEL LEVEL': { + name: 'FUELSYSTEM LINE FUEL LEVEL', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM LINE FUEL PRESSURE': { + name: 'FUELSYSTEM LINE FUEL PRESSURE', + units: 'Kilo pascal', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM PUMP ACTIVE': { + name: 'FUELSYSTEM PUMP ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM PUMP SWITCH': { + name: 'FUELSYSTEM PUMP SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM TANK CAPACITY': { + name: 'FUELSYSTEM TANK CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM TANK USABLE CAPACITY': { + name: 'FUELSYSTEM TANK USABLE CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM TANK LEVEL': { + name: 'FUELSYSTEM TANK LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FUELSYSTEM TANK QUANTITY': { + name: 'FUELSYSTEM TANK QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FUELSYSTEM TANK TOTAL QUANTITY': { + name: 'FUELSYSTEM TANK TOTAL QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM TANK WEIGHT': { + name: 'FUELSYSTEM TANK WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'FUELSYSTEM TRIGGER STATUS': { + name: 'FUELSYSTEM TRIGGER STATUS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM VALVE OPEN': { + name: 'FUELSYSTEM VALVE OPEN', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FUELSYSTEM VALVE SWITCH': { + name: 'FUELSYSTEM VALVE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'FUEL TANK CENTER CAPACITY': { + name: 'FUEL TANK CENTER CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK CENTER2 CAPACITY': { + name: 'FUEL TANK CENTER2 CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK CENTER3 CAPACITY': { + name: 'FUEL TANK CENTER3 CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK CENTER LEVEL': { + name: 'FUEL TANK CENTER LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK CENTER2 LEVEL': { + name: 'FUEL TANK CENTER2 LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK CENTER3 LEVEL': { + name: 'FUEL TANK CENTER3 LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK CENTER QUANTITY': { + name: 'FUEL TANK CENTER QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK CENTER2 QUANTITY': { + name: 'FUEL TANK CENTER2 QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK CENTER3 QUANTITY': { + name: 'FUEL TANK CENTER3 QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL1 CAPACITY': { + name: 'FUEL TANK EXTERNAL1 CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL2 CAPACITY': { + name: 'FUEL TANK EXTERNAL2 CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL1 LEVEL': { + name: 'FUEL TANK EXTERNAL1 LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL2 LEVEL': { + name: 'FUEL TANK EXTERNAL2 LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL1 QUANTITY': { + name: 'FUEL TANK EXTERNAL1 QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK EXTERNAL2 QUANTITY': { + name: 'FUEL TANK EXTERNAL2 QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT AUX CAPACITY': { + name: 'FUEL TANK LEFT AUX CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK LEFT AUX LEVEL': { + name: 'FUEL TANK LEFT AUX LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT AUX QUANTITY': { + name: 'FUEL TANK LEFT AUX QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT MAIN CAPACITY': { + name: 'FUEL TANK LEFT MAIN CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK LEFT MAIN LEVEL': { + name: 'FUEL TANK LEFT MAIN LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT MAIN QUANTITY': { + name: 'FUEL TANK LEFT MAIN QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT TIP CAPACITY': { + name: 'FUEL TANK LEFT TIP CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK LEFT TIP LEVEL': { + name: 'FUEL TANK LEFT TIP LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK LEFT TIP QUANTITY': { + name: 'FUEL TANK LEFT TIP QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT AUX CAPACITY': { + name: 'FUEL TANK RIGHT AUX CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK RIGHT AUX LEVEL': { + name: 'FUEL TANK RIGHT AUX LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT AUX QUANTITY': { + name: 'FUEL TANK RIGHT AUX QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT MAIN CAPACITY': { + name: 'FUEL TANK RIGHT MAIN CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK RIGHT MAIN LEVEL': { + name: 'FUEL TANK RIGHT MAIN LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT MAIN QUANTITY': { + name: 'FUEL TANK RIGHT MAIN QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT TIP CAPACITY': { + name: 'FUEL TANK RIGHT TIP CAPACITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUEL TANK RIGHT TIP LEVEL': { + name: 'FUEL TANK RIGHT TIP LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK RIGHT TIP QUANTITY': { + name: 'FUEL TANK RIGHT TIP QUANTITY', + units: 'Gallons', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUEL TANK SELECTOR:index': { + name: 'FUEL TANK SELECTOR:index', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CONTRAILS CONDITIONS MET': { + name: 'CONTRAILS CONDITIONS MET', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'COVER GENERIC ON': { + name: 'COVER GENERIC ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'COVER ON': { + name: 'COVER ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'IS SLEW ACTIVE': { + name: 'IS SLEW ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'IS SLEW ALLOWED': { + name: 'IS SLEW ALLOWED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'IS USER SIM': { + name: 'IS USER SIM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ON ANY RUNWAY': { + name: 'ON ANY RUNWAY', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PLANE IN PARKING STATE': { + name: 'PLANE IN PARKING STATE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SURFACE CONDITION': { + name: 'SURFACE CONDITION', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SURFACE INFO VALID': { + name: 'SURFACE INFO VALID', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SURFACE TYPE': { + name: 'SURFACE TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STRUCTURAL ICE PCT': { + name: 'STRUCTURAL ICE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + TITLE: { + name: 'TITLE', + units: '', + dataType: SimConnectDataType.STRING8, + settable: false, + supportsIndex: false, + }, + 'LIVERY NAME': { + name: 'LIVERY NAME', + units: '', + dataType: SimConnectDataType.STRING8, + settable: false, + supportsIndex: false, + }, + 'LIVERY FOLDER': { + name: 'LIVERY FOLDER', + units: '', + dataType: SimConnectDataType.STRING8, + settable: false, + supportsIndex: false, + }, + 'WINDSHIELD RAIN EFFECT AVAILABLE': { + name: 'WINDSHIELD RAIN EFFECT AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION BODY X': { + name: 'ACCELERATION BODY X', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION BODY Y': { + name: 'ACCELERATION BODY Y', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION BODY Z': { + name: 'ACCELERATION BODY Z', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION WORLD X': { + name: 'ACCELERATION WORLD X', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION WORLD Y': { + name: 'ACCELERATION WORLD Y', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ACCELERATION WORLD Z': { + name: 'ACCELERATION WORLD Z', + units: 'Feet per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT AGL': { + name: 'AIRCRAFT AGL', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT ALTITUDE ABOVE OBSTACLES': { + name: 'AIRCRAFT ALTITUDE ABOVE OBSTACLES', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SURFACE RELATIVE GROUND SPEED': { + name: 'SURFACE RELATIVE GROUND SPEED', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GROUND VELOCITY': { + name: 'GROUND VELOCITY', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE ALTITUDE': { + name: 'PLANE ALTITUDE', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE ALT ABOVE GROUND': { + name: 'PLANE ALT ABOVE GROUND', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE ALT ABOVE GROUND MINUS CG': { + name: 'PLANE ALT ABOVE GROUND MINUS CG', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE BANK DEGREES': { + name: 'PLANE BANK DEGREES', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE HEADING DEGREES GYRO': { + name: 'PLANE HEADING DEGREES GYRO', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE HEADING DEGREES MAGNETIC': { + name: 'PLANE HEADING DEGREES MAGNETIC', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE HEADING DEGREES TRUE': { + name: 'PLANE HEADING DEGREES TRUE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE LATITUDE': { + name: 'PLANE LATITUDE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE LONGITUDE': { + name: 'PLANE LONGITUDE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE PITCH DEGREES': { + name: 'PLANE PITCH DEGREES', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN BANK DEGREES': { + name: 'PLANE TOUCHDOWN BANK DEGREES', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN HEADING DEGREES MAGNETIC': { + name: 'PLANE TOUCHDOWN HEADING DEGREES MAGNETIC', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN HEADING DEGREES TRUE': { + name: 'PLANE TOUCHDOWN HEADING DEGREES TRUE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN LATITUDE': { + name: 'PLANE TOUCHDOWN LATITUDE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN LONGITUDE': { + name: 'PLANE TOUCHDOWN LONGITUDE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN NORMAL VELOCITY': { + name: 'PLANE TOUCHDOWN NORMAL VELOCITY', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PLANE TOUCHDOWN PITCH DEGREES': { + name: 'PLANE TOUCHDOWN PITCH DEGREES', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RELATIVE WIND VELOCITY BODY X': { + name: 'RELATIVE WIND VELOCITY BODY X', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RELATIVE WIND VELOCITY BODY Y': { + name: 'RELATIVE WIND VELOCITY BODY Y', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RELATIVE WIND VELOCITY BODY Z': { + name: 'RELATIVE WIND VELOCITY BODY Z', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ROTATION ACCELERATION BODY X': { + name: 'ROTATION ACCELERATION BODY X', + units: 'Radians per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ROTATION ACCELERATION BODY Y': { + name: 'ROTATION ACCELERATION BODY Y', + units: 'Radians per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ROTATION ACCELERATION BODY Z': { + name: 'ROTATION ACCELERATION BODY Z', + units: 'Radians per second squared', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ROTATION VELOCITY BODY X': { + name: 'ROTATION VELOCITY BODY X', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ROTATION VELOCITY BODY Y': { + name: 'ROTATION VELOCITY BODY Y', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ROTATION VELOCITY BODY Z': { + name: 'ROTATION VELOCITY BODY Z', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'SLOPE TO ATC RUNWAY': { + name: 'SLOPE TO ATC RUNWAY', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'VELOCITY BODY X': { + name: 'VELOCITY BODY X', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'VELOCITY BODY Y': { + name: 'VELOCITY BODY Y', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'VELOCITY BODY Z': { + name: 'VELOCITY BODY Z', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'VERTICAL SPEED': { + name: 'VERTICAL SPEED', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'WARNING FUEL': { + name: 'WARNING FUEL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING FUEL LEFT': { + name: 'WARNING FUEL LEFT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING FUEL RIGHT': { + name: 'WARNING FUEL RIGHT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING LOW HEIGHT': { + name: 'WARNING LOW HEIGHT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING OIL PRESSURE': { + name: 'WARNING OIL PRESSURE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING VACUUM': { + name: 'WARNING VACUUM', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING VACUUM LEFT': { + name: 'WARNING VACUUM LEFT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING VACUUM RIGHT': { + name: 'WARNING VACUUM RIGHT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WARNING VOLTAGE': { + name: 'WARNING VOLTAGE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WEAR AND TEAR CHECK PROGRESSION': { + name: 'WEAR AND TEAR CHECK PROGRESSION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'WEAR AND TEAR EXPOSED PARTS LEVEL': { + name: 'WEAR AND TEAR EXPOSED PARTS LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WEAR AND TEAR EXPOSED PARTS LOWEST LEVEL': { + name: 'WEAR AND TEAR EXPOSED PARTS LOWEST LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WEAR AND TEAR IS FAILED': { + name: 'WEAR AND TEAR IS FAILED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'WEAR AND TEAR IS WEAK': { + name: 'WEAR AND TEAR IS WEAK', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'WEAR AND TEAR LEVEL': { + name: 'WEAR AND TEAR LEVEL', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'WEAR AND TEAR WEAK VALUE': { + name: 'WEAR AND TEAR WEAK VALUE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'EYEPOINT POSITION': { + name: 'EYEPOINT POSITION', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT BODY ROTATION VELOCITY': { + name: 'STRUCT BODY ROTATION VELOCITY', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT BODY VELOCITY': { + name: 'STRUCT BODY VELOCITY', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT ENGINE POSITION:index': { + name: 'STRUCT ENGINE POSITION:index', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT EYEPOINT DYNAMIC ANGLE': { + name: 'STRUCT EYEPOINT DYNAMIC ANGLE', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT EYEPOINT DYNAMIC OFFSET': { + name: 'STRUCT EYEPOINT DYNAMIC OFFSET', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT LATLONALT': { + name: 'STRUCT LATLONALT', + units: 'SIMCONNECT_DATA_LATLONALT', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT LATLONALTPBH': { + name: 'STRUCT LATLONALTPBH', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AIRCRAFT CATEGORY': { + name: 'AIRCRAFT CATEGORY', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT OBJECT CLASS': { + name: 'AIRCRAFT OBJECT CLASS', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT WIND X': { + name: 'AIRCRAFT WIND X', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT WIND Y': { + name: 'AIRCRAFT WIND Y', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRCRAFT WIND Z': { + name: 'AIRCRAFT WIND Z', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRSPEED BARBER POLE': { + name: 'AIRSPEED BARBER POLE', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRSPEED INDICATED': { + name: 'AIRSPEED INDICATED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AIRSPEED INDICATED THEORETICAL': { + name: 'AIRSPEED INDICATED THEORETICAL', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRSPEED MACH': { + name: 'AIRSPEED MACH', + units: 'Mach', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRSPEED SELECT INDICATED OR TRUE': { + name: 'AIRSPEED SELECT INDICATED OR TRUE', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AIRSPEED TRUE': { + name: 'AIRSPEED TRUE', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'AIRSPEED TRUE RAW': { + name: 'AIRSPEED TRUE RAW', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BARBER POLE MACH': { + name: 'BARBER POLE MACH', + units: 'Mach', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL VELOCITY': { + name: 'TOTAL VELOCITY', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WINDSHIELD WIND VELOCITY': { + name: 'WINDSHIELD WIND VELOCITY', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STANDARD ATM TEMPERATURE': { + name: 'STANDARD ATM TEMPERATURE', + units: 'Rankine', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOTAL AIR TEMPERATURE': { + name: 'TOTAL AIR TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER CONTROL LEVERS X': { + name: 'ORNITHOPTER CONTROL LEVERS X', + units: 'Position 16k', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER CONTROL LEVERS Y': { + name: 'ORNITHOPTER CONTROL LEVERS Y', + units: 'Position 16k', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER DIVE MODE ENABLED': { + name: 'ORNITHOPTER DIVE MODE ENABLED', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER GLIDE MODE ENABLED': { + name: 'ORNITHOPTER GLIDE MODE ENABLED', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WINGS BRAKE ENABLED': { + name: 'ORNITHOPTER WINGS BRAKE ENABLED', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WINGS BRAKE ACTIVE': { + name: 'ORNITHOPTER WINGS BRAKE ACTIVE', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WING HORIZONTAL TILT': { + name: 'ORNITHOPTER WING HORIZONTAL TILT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ORNITHOPTER WING PITCH': { + name: 'ORNITHOPTER WING PITCH', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ORNITHOPTER WING VERTICAL TILT': { + name: 'ORNITHOPTER WING VERTICAL TILT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ORNITHOPTER WINGS BLUR': { + name: 'ORNITHOPTER WINGS BLUR', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WINGS CLUTCH STATE': { + name: 'ORNITHOPTER WINGS CLUTCH STATE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WINGS FOLDING OPERATION ID': { + name: 'ORNITHOPTER WINGS FOLDING OPERATION ID', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ORNITHOPTER WORLD LIFT': { + name: 'ORNITHOPTER WORLD LIFT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ADF ACTIVE FREQUENCY': { + name: 'ADF ACTIVE FREQUENCY', + units: 'Frequency ADF BCD32', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF AVAILABLE': { + name: 'ADF AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ADF CARD': { + name: 'ADF CARD', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ADF DISTANCE': { + name: 'ADF DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ADF EXT FREQUENCY': { + name: 'ADF EXT FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ADF FREQUENCY': { + name: 'ADF FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ADF IDENT': { + name: 'ADF IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ADF LATLONALT': { + name: 'ADF LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF NAME': { + name: 'ADF NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'ADF RADIAL': { + name: 'ADF RADIAL', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF RADIAL MAG': { + name: 'ADF RADIAL MAG', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF SIGNAL': { + name: 'ADF SIGNAL', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF SOUND': { + name: 'ADF SOUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ADF STANDBY AVAILABLE': { + name: 'ADF STANDBY AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'ADF STANDBY FREQUENCY': { + name: 'ADF STANDBY FREQUENCY', + units: 'Hz', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ADF VOLUME': { + name: 'ADF VOLUME', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC AIRLINE': { + name: 'ATC AIRLINE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: true, + supportsIndex: false, + }, + 'ATC AIRPORT IS TOWERED': { + name: 'ATC AIRPORT IS TOWERED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC ARRIVAL AIRPORT HAS ATIS': { + name: 'ATC ARRIVAL AIRPORT HAS ATIS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC ARRIVAL AIRPORT IS TOWERED': { + name: 'ATC ARRIVAL AIRPORT IS TOWERED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC ASSIGNED ALTITUDE': { + name: 'ATC ASSIGNED ALTITUDE', + units: 'ft', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC CLEARED IFR': { + name: 'ATC CLEARED IFR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC CLEARED LANDING': { + name: 'ATC CLEARED LANDING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC CLEARED OVERFLIGHT CTR': { + name: 'ATC CLEARED OVERFLIGHT CTR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC CLEARED TAKEOFF': { + name: 'ATC CLEARED TAKEOFF', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC CLEARED TAXI': { + name: 'ATC CLEARED TAXI', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC CURRENT WAYPOINT ALTITUDE': { + name: 'ATC CURRENT WAYPOINT ALTITUDE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC DEPARTURE AIRPORT IS TOWERED': { + name: 'ATC DEPARTURE AIRPORT IS TOWERED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC DESIGNATED GATE ARRIVAL': { + name: 'ATC DESIGNATED GATE ARRIVAL', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC DESIGNATED GATE DEPARTURE': { + name: 'ATC DESIGNATED GATE DEPARTURE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC DESIGNATED RUNWAY LANDING': { + name: 'ATC DESIGNATED RUNWAY LANDING', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC DESIGNATED RUNWAY TAKEOFF': { + name: 'ATC DESIGNATED RUNWAY TAKEOFF', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC FIRST VFR ARRIVAL PATTERN WAYPOINT NAME': { + name: 'ATC FIRST VFR ARRIVAL PATTERN WAYPOINT NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC FLIGHTPLAN DIFF ALT': { + name: 'ATC FLIGHTPLAN DIFF ALT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC FLIGHTPLAN DIFF DISTANCE': { + name: 'ATC FLIGHTPLAN DIFF DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC FLIGHTPLAN DIFF HEADING': { + name: 'ATC FLIGHTPLAN DIFF HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC FP ARRIVAL TRAFFIC PATTERN IS LEFTHANDED': { + name: 'ATC FP ARRIVAL TRAFFIC PATTERN IS LEFTHANDED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC FP DEPARTURE TRAFFIC PATTERN IS LEFTHANDED': { + name: 'ATC FP DEPARTURE TRAFFIC PATTERN IS LEFTHANDED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC FLIGHT NUMBER': { + name: 'ATC FLIGHT NUMBER', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: true, + supportsIndex: false, + }, + 'ATC FUTURE AGENT DISTANCE': { + name: 'ATC FUTURE AGENT DISTANCE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC FUTURE AGENT FREQUENCY': { + name: 'ATC FUTURE AGENT FREQUENCY', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC FUTURE AGENT NAME': { + name: 'ATC FUTURE AGENT NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC FUTURE AGENT TYPE': { + name: 'ATC FUTURE AGENT TYPE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC HEAVY': { + name: 'ATC HEAVY', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'ATC ID': { + name: 'ATC ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: true, + supportsIndex: false, + }, + 'ATC IFR FP TO REQUEST': { + name: 'ATC IFR FP TO REQUEST', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC MISSION FP IFR': { + name: 'ATC MISSION FP IFR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC MODEL': { + name: 'ATC MODEL', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC NAME': { + name: 'ATC NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: true, + supportsIndex: false, + }, + 'ATC NEXT WAYPOINT ALTITUDE': { + name: 'ATC NEXT WAYPOINT ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC NEXT WAYPOINT NAME': { + name: 'ATC NEXT WAYPOINT NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC ON PARKING SPOT': { + name: 'ATC ON PARKING SPOT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC OVERFLYING AIRPORT UNANNOUNCED': { + name: 'ATC OVERFLYING AIRPORT UNANNOUNCED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC PREVIOUS WAYPOINT ALTITUDE': { + name: 'ATC PREVIOUS WAYPOINT ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY AIRPORT NAME': { + name: 'ATC RUNWAY AIRPORT NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY DISTANCE': { + name: 'ATC RUNWAY DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY END DISTANCE': { + name: 'ATC RUNWAY END DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY HEADING DEGREES TRUE': { + name: 'ATC RUNWAY HEADING DEGREES TRUE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY LENGTH': { + name: 'ATC RUNWAY LENGTH', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY RELATIVE POSITION X': { + name: 'ATC RUNWAY RELATIVE POSITION X', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY RELATIVE POSITION Y': { + name: 'ATC RUNWAY RELATIVE POSITION Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY RELATIVE POSITION Z': { + name: 'ATC RUNWAY RELATIVE POSITION Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY SELECTED': { + name: 'ATC RUNWAY SELECTED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY START DISTANCE': { + name: 'ATC RUNWAY START DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY TDPOINT RELATIVE POSITION X': { + name: 'ATC RUNWAY TDPOINT RELATIVE POSITION X', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY TDPOINT RELATIVE POSITION Y': { + name: 'ATC RUNWAY TDPOINT RELATIVE POSITION Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY TDPOINT RELATIVE POSITION Z': { + name: 'ATC RUNWAY TDPOINT RELATIVE POSITION Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC RUNWAY WIDTH': { + name: 'ATC RUNWAY WIDTH', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC SUGGESTED MIN RWY LANDING': { + name: 'ATC SUGGESTED MIN RWY LANDING', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC SUGGESTED MIN RWY TAKEOFF': { + name: 'ATC SUGGESTED MIN RWY TAKEOFF', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC TAXIPATH DISTANCE': { + name: 'ATC TAXIPATH DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATC TYPE': { + name: 'ATC TYPE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'ATC WAYPOINTS HIGHEST ALTITUDE': { + name: 'ATC WAYPOINTS HIGHEST ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'COM1 STORED FREQUENCY': { + name: 'COM1 STORED FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'COM2 STORED FREQUENCY': { + name: 'COM2 STORED FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'COM3 STORED FREQUENCY': { + name: 'COM3 STORED FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'COM ACTIVE BEARING': { + name: 'COM ACTIVE BEARING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM ACTIVE DISTANCE': { + name: 'COM ACTIVE DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM ACTIVE FREQUENCY': { + name: 'COM ACTIVE FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM ACTIVE FREQ IDENT': { + name: 'COM ACTIVE FREQ IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'COM ACTIVE FREQ TYPE': { + name: 'COM ACTIVE FREQ TYPE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'COM ACTIVE LATLONALT': { + name: 'COM ACTIVE LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM AVAILABLE': { + name: 'COM AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM LATLONALT': { + name: 'COM LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM RECEIVE': { + name: 'COM RECEIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM RECEIVE ALL': { + name: 'COM RECEIVE ALL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'COM RECEIVE EX1': { + name: 'COM RECEIVE EX1', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM SPACING MODE': { + name: 'COM SPACING MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM STANDBY FREQUENCY': { + name: 'COM STANDBY FREQUENCY', + units: 'Frequency Frequency BCD16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'COM STANDBY FREQ IDENT': { + name: 'COM STANDBY FREQ IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'COM STANDBY FREQ TYPE': { + name: 'COM STANDBY FREQ TYPE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'COM STATUS': { + name: 'COM STATUS', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM TEST': { + name: 'COM TEST', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM TRANSMIT': { + name: 'COM TRANSMIT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'COM VOLUME': { + name: 'COM VOLUME', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FLARM AVAILABLE': { + name: 'FLARM AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'FLARM THREAT BEARING': { + name: 'FLARM THREAT BEARING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT DATA': { + name: 'FLARM THREAT DATA', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT DISTANCE': { + name: 'FLARM THREAT DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT HEADING': { + name: 'FLARM THREAT HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT RELATIVE ALTITUDE': { + name: 'FLARM THREAT RELATIVE ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT TIME TO COLLISION': { + name: 'FLARM THREAT TIME TO COLLISION', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FLARM THREAT VERTICAL BEARING': { + name: 'FLARM THREAT VERTICAL BEARING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH AIRPORT ID': { + name: 'GPS APPROACH AIRPORT ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH APPROACH ID': { + name: 'GPS APPROACH APPROACH ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH APPROACH INDEX': { + name: 'GPS APPROACH APPROACH INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH APPROACH TYPE': { + name: 'GPS APPROACH APPROACH TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH IS FINAL': { + name: 'GPS APPROACH IS FINAL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH IS MISSED': { + name: 'GPS APPROACH IS MISSED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH IS WP RUNWAY': { + name: 'GPS APPROACH IS WP RUNWAY', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH MODE': { + name: 'GPS APPROACH MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH SEGMENT TYPE': { + name: 'GPS APPROACH SEGMENT TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH TIMEZONE DEVIATION': { + name: 'GPS APPROACH TIMEZONE DEVIATION', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH TRANSITION ID': { + name: 'GPS APPROACH TRANSITION ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH TRANSITION INDEX': { + name: 'GPS APPROACH TRANSITION INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH WP COUNT': { + name: 'GPS APPROACH WP COUNT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH WP INDEX': { + name: 'GPS APPROACH WP INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS APPROACH WP TYPE': { + name: 'GPS APPROACH WP TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS CDI NEEDLE': { + name: 'GPS CDI NEEDLE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS CDI SCALING': { + name: 'GPS CDI SCALING', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS COURSE TO STEER': { + name: 'GPS COURSE TO STEER', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS DRIVES NAV1': { + name: 'GPS DRIVES NAV1', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS ETA': { + name: 'GPS ETA', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS ETE': { + name: 'GPS ETE', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS FLIGHTPLAN TOTAL DISTANCE': { + name: 'GPS FLIGHTPLAN TOTAL DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS FLIGHT PLAN WP COUNT': { + name: 'GPS FLIGHT PLAN WP COUNT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS FLIGHT PLAN WP INDEX': { + name: 'GPS FLIGHT PLAN WP INDEX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS GROUND MAGNETIC TRACK': { + name: 'GPS GROUND MAGNETIC TRACK', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS GROUND SPEED': { + name: 'GPS GROUND SPEED', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS GROUND TRUE HEADING': { + name: 'GPS GROUND TRUE HEADING', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS GROUND TRUE TRACK': { + name: 'GPS GROUND TRUE TRACK', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS GSI SCALING': { + name: 'GPS GSI SCALING', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GPS GSI NEEDLE': { + name: 'GPS GSI NEEDLE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS HAS GLIDEPATH': { + name: 'GPS HAS GLIDEPATH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'GPS HSI NEEDLE': { + name: 'GPS HSI NEEDLE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS IS ACTIVE FLIGHT PLAN': { + name: 'GPS IS ACTIVE FLIGHT PLAN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS ACTIVE WAY POINT': { + name: 'GPS IS ACTIVE WAY POINT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS ACTIVE WP LOCKED': { + name: 'GPS IS ACTIVE WP LOCKED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS APPROACH ACTIVE': { + name: 'GPS IS APPROACH ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS APPROACH LOADED': { + name: 'GPS IS APPROACH LOADED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS ARRIVED': { + name: 'GPS IS ARRIVED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS IS DIRECTTO FLIGHTPLAN': { + name: 'GPS IS DIRECTTO FLIGHTPLAN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS MAGVAR': { + name: 'GPS MAGVAR', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS OBS ACTIVE': { + name: 'GPS OBS ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS OBS VALUE': { + name: 'GPS OBS VALUE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS OVERRIDDEN': { + name: 'GPS OVERRIDDEN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'GPS POSITION ALT': { + name: 'GPS POSITION ALT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS POSITION LAT': { + name: 'GPS POSITION LAT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS POSITION LON': { + name: 'GPS POSITION LON', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS TARGET ALTITUDE': { + name: 'GPS TARGET ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS TARGET DISTANCE': { + name: 'GPS TARGET DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS VERTICAL ANGLE': { + name: 'GPS VERTICAL ANGLE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS VERTICAL ANGLE ERROR': { + name: 'GPS VERTICAL ANGLE ERROR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS VERTICAL ERROR': { + name: 'GPS VERTICAL ERROR', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP BEARING': { + name: 'GPS WP BEARING', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP CROSS TRK': { + name: 'GPS WP CROSS TRK', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP DESIRED TRACK': { + name: 'GPS WP DESIRED TRACK', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP DISTANCE': { + name: 'GPS WP DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP ETA': { + name: 'GPS WP ETA', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP ETE': { + name: 'GPS WP ETE', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP NEXT ALT': { + name: 'GPS WP NEXT ALT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP NEXT ID': { + name: 'GPS WP NEXT ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'GPS WP NEXT LAT': { + name: 'GPS WP NEXT LAT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP NEXT LON': { + name: 'GPS WP NEXT LON', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP PREV ALT': { + name: 'GPS WP PREV ALT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP PREV ID': { + name: 'GPS WP PREV ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'GPS WP PREV LAT': { + name: 'GPS WP PREV LAT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP PREV LON': { + name: 'GPS WP PREV LON', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP PREV VALID': { + name: 'GPS WP PREV VALID', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GPS WP TRACK ANGLE ERROR': { + name: 'GPS WP TRACK ANGLE ERROR', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP TRUE BEARING': { + name: 'GPS WP TRUE BEARING', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP TRUE REQ HDG': { + name: 'GPS WP TRUE REQ HDG', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPS WP VERTICAL SPEED': { + name: 'GPS WP VERTICAL SPEED', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI BEARING': { + name: 'HSI BEARING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI BEARING VALID': { + name: 'HSI BEARING VALID', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HSI CDI NEEDLE': { + name: 'HSI CDI NEEDLE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI CDI NEEDLE VALID': { + name: 'HSI CDI NEEDLE VALID', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HSI DISTANCE': { + name: 'HSI DISTANCE', + units: 'Nautical miles', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI GSI NEEDLE': { + name: 'HSI GSI NEEDLE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI GSI NEEDLE VALID': { + name: 'HSI GSI NEEDLE VALID', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HSI HAS LOCALIZER': { + name: 'HSI HAS LOCALIZER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HSI SPEED': { + name: 'HSI SPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HSI STATION IDENT': { + name: 'HSI STATION IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'HSI TF FLAGS': { + name: 'HSI TF FLAGS', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'INNER MARKER': { + name: 'INNER MARKER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'INNER MARKER LATLONALT': { + name: 'INNER MARKER LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARKER AVAILABLE': { + name: 'MARKER AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MARKER BEACON SENSITIVITY HIGH': { + name: 'MARKER BEACON SENSITIVITY HIGH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MARKER BEACON STATE': { + name: 'MARKER BEACON STATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'MARKER BEACON TEST MUTE': { + name: 'MARKER BEACON TEST MUTE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MARKER SOUND': { + name: 'MARKER SOUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MIDDLE MARKER': { + name: 'MIDDLE MARKER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'MIDDLE MARKER LATLONALT': { + name: 'MIDDLE MARKER LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'OUTER MARKER': { + name: 'OUTER MARKER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'OUTER MARKER LATLONALT': { + name: 'OUTER MARKER LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV ACTIVE FREQUENCY': { + name: 'NAV ACTIVE FREQUENCY', + units: 'MHz', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV AVAILABLE': { + name: 'NAV AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'NAV BACK COURSE FLAGS': { + name: 'NAV BACK COURSE FLAGS', + units: 'Flags', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV CDI': { + name: 'NAV CDI', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV CLOSE DME': { + name: 'NAV CLOSE DME', + units: 'Nautical miles', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV CLOSE FREQUENCY': { + name: 'NAV CLOSE FREQUENCY', + units: 'Hz', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV CLOSE IDENT': { + name: 'NAV CLOSE IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'NAV CLOSE LOCALIZER': { + name: 'NAV CLOSE LOCALIZER', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV CLOSE NAME': { + name: 'NAV CLOSE NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'NAV CODES': { + name: 'NAV CODES', + units: 'Flags', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV DME': { + name: 'NAV DME', + units: 'Nautical miles', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV DMESPEED': { + name: 'NAV DMESPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV DME LATLONALT': { + name: 'NAV DME LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV FREQUENCY': { + name: 'NAV FREQUENCY', + units: 'Hz', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV GLIDE SLOPE': { + name: 'NAV GLIDE SLOPE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV GLIDE SLOPE ERROR': { + name: 'NAV GLIDE SLOPE ERROR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV GLIDE SLOPE LENGTH': { + name: 'NAV GLIDE SLOPE LENGTH', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'NAV GSI': { + name: 'NAV GSI', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV GS FLAG': { + name: 'NAV GS FLAG', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'NAV GS LATLONALT': { + name: 'NAV GS LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV GS LLAF64': { + name: 'NAV GS LLAF64', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV HAS CLOSE DME': { + name: 'NAV HAS CLOSE DME', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS CLOSE LOCALIZER': { + name: 'NAV HAS CLOSE LOCALIZER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS DME': { + name: 'NAV HAS DME', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS GLIDE SLOPE': { + name: 'NAV HAS GLIDE SLOPE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS LOCALIZER': { + name: 'NAV HAS LOCALIZER', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS NAV': { + name: 'NAV HAS NAV', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV HAS TACAN': { + name: 'NAV HAS TACAN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV IDENT': { + name: 'NAV IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'NAV LOCALIZER': { + name: 'NAV LOCALIZER', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV LOC AIRPORT IDENT': { + name: 'NAV LOC AIRPORT IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'NAV LOC RUNWAY DESIGNATOR': { + name: 'NAV LOC RUNWAY DESIGNATOR', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'NAV LOC RUNWAY NUMBER': { + name: 'NAV LOC RUNWAY NUMBER', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: false, + }, + 'NAV MAGVAR': { + name: 'NAV MAGVAR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV NAME': { + name: 'NAV NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'NAV OBS': { + name: 'NAV OBS', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV RADIAL': { + name: 'NAV RADIAL', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV RADIAL ERROR': { + name: 'NAV RADIAL ERROR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV RAW GLIDE SLOPE': { + name: 'NAV RAW GLIDE SLOPE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV RELATIVE BEARING TO STATION': { + name: 'NAV RELATIVE BEARING TO STATION', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV SIGNAL': { + name: 'NAV SIGNAL', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV SOUND': { + name: 'NAV SOUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'NAV STANDBY FREQUENCY': { + name: 'NAV STANDBY FREQUENCY', + units: 'MHz', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV TOFROM': { + name: 'NAV TOFROM', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'NAV VOLUME': { + name: 'NAV VOLUME', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV VOR DISTANCE': { + name: 'NAV VOR DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'NAV VOR LATLONALT': { + name: 'NAV VOR LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'NAV VOR LLAF64': { + name: 'NAV VOR LLAF64', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN ACTIVE CHANNEL': { + name: 'TACAN ACTIVE CHANNEL', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN ACTIVE MODE': { + name: 'TACAN ACTIVE MODE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TACAN AVAILABLE': { + name: 'TACAN AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TACAN DRIVES NAV1': { + name: 'TACAN DRIVES NAV1', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TACAN OBS': { + name: 'TACAN OBS', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STANDBY CHANNEL': { + name: 'TACAN STANDBY CHANNEL', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STANDBY MODE': { + name: 'TACAN STANDBY MODE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION CDI': { + name: 'TACAN STATION CDI', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION DISTANCE': { + name: 'TACAN STATION DISTANCE', + units: 'Meter', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION IDENT': { + name: 'TACAN STATION IDENT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION LATLONALT': { + name: 'TACAN STATION LATLONALT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION RADIAL': { + name: 'TACAN STATION RADIAL', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION RADIAL ERROR': { + name: 'TACAN STATION RADIAL ERROR', + units: 'Degrees.', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TACAN STATION TOFROM': { + name: 'TACAN STATION TOFROM', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TACAN VOLUME': { + name: 'TACAN VOLUME', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TCAS INTRUDER BEARING': { + name: 'TCAS INTRUDER BEARING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER DATA': { + name: 'TCAS INTRUDER DATA', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER DISTANCE': { + name: 'TCAS INTRUDER DISTANCE', + units: 'nm', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER NETWORK ID': { + name: 'TCAS INTRUDER NETWORK ID', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER RELATIVE ALTITUDE': { + name: 'TCAS INTRUDER RELATIVE ALTITUDE', + units: 'ft', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER RELATIVE SPEED': { + name: 'TCAS INTRUDER RELATIVE SPEED', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS INTRUDER VERTICAL SPEED': { + name: 'TCAS INTRUDER VERTICAL SPEED', + units: 'ft per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS MODE': { + name: 'TCAS MODE', + units: 'Integer', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS RECEIVED RESOLUTION ADVISORY': { + name: 'TCAS RECEIVED RESOLUTION ADVISORY', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TCAS SEND RESOLUTION ADVISORY': { + name: 'TCAS SEND RESOLUTION ADVISORY', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'COPILOT TRANSMITTER TYPE': { + name: 'COPILOT TRANSMITTER TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'COPILOT TRANSMITTING': { + name: 'COPILOT TRANSMITTING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PILOT TRANSMITTER TYPE': { + name: 'PILOT TRANSMITTER TYPE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PILOT TRANSMITTING': { + name: 'PILOT TRANSMITTING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'RADIOS AVAILABLE': { + name: 'RADIOS AVAILABLE', + units: '-', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'RADIO HEIGHT': { + name: 'RADIO HEIGHT', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TRANSPONDER AVAILABLE': { + name: 'TRANSPONDER AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TRANSPONDER CODE': { + name: 'TRANSPONDER CODE', + units: 'Bco16', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'TRANSPONDER IDENT': { + name: 'TRANSPONDER IDENT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'TRANSPONDER STATE': { + name: 'TRANSPONDER STATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'AIRSPEED TRUE CALIBRATE': { + name: 'AIRSPEED TRUE CALIBRATE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'ALTERNATE STATIC SOURCE OPEN': { + name: 'ALTERNATE STATIC SOURCE OPEN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ANEMOMETER PCT RPM': { + name: 'ANEMOMETER PCT RPM', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ANGLE OF ATTACK INDICATOR': { + name: 'ANGLE OF ATTACK INDICATOR', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ANNUNCIATOR SWITCH': { + name: 'ANNUNCIATOR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'APPLY HEAT TO SYSTEMS': { + name: 'APPLY HEAT TO SYSTEMS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'ATTITUDE BARS POSITION': { + name: 'ATTITUDE BARS POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATTITUDE CAGE': { + name: 'ATTITUDE CAGE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ATTITUDE INDICATOR BANK DEGREES': { + name: 'ATTITUDE INDICATOR BANK DEGREES', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'ATTITUDE INDICATOR PITCH DEGREES': { + name: 'ATTITUDE INDICATOR PITCH DEGREES', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUDIO PANEL AVAILABLE': { + name: 'AUDIO PANEL AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUDIO PANEL VOLUME': { + name: 'AUDIO PANEL VOLUME', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'AUTOTHROTTLE ACTIVE': { + name: 'AUTOTHROTTLE ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'AUTO COORDINATION': { + name: 'AUTO COORDINATION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'AVIONICS MASTER SWITCH': { + name: 'AVIONICS MASTER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CABIN NO SMOKING ALERT SWITCH': { + name: 'CABIN NO SMOKING ALERT SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CABIN SEATBELTS ALERT SWITCH': { + name: 'CABIN SEATBELTS ALERT SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'CANOPY OPEN': { + name: 'CANOPY OPEN', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CARB HEAT AVAILABLE': { + name: 'CARB HEAT AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'DELTA HEADING RATE': { + name: 'DELTA HEADING RATE', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DME SOUND': { + name: 'DME SOUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'ELT ACTIVATED': { + name: 'ELT ACTIVATED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'EXTERNAL SYSTEM VALUE': { + name: 'EXTERNAL SYSTEM VALUE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FIRE BOTTLE DISCHARGED': { + name: 'FIRE BOTTLE DISCHARGED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'FIRE BOTTLE SWITCH': { + name: 'FIRE BOTTLE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GLASSCOCKPIT AUTOMATIC BRIGHTNESS': { + name: 'GLASSCOCKPIT AUTOMATIC BRIGHTNESS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GPWS SYSTEM ACTIVE': { + name: 'GPWS SYSTEM ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'GPWS WARNING': { + name: 'GPWS WARNING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'GYRO DRIFT ERROR': { + name: 'GYRO DRIFT ERROR', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HAS STALL PROTECTION': { + name: 'HAS STALL PROTECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HEADING INDICATOR': { + name: 'HEADING INDICATOR', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'INDICATED ALTITUDE': { + name: 'INDICATED ALTITUDE', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'INDICATED ALTITUDE CALIBRATED': { + name: 'INDICATED ALTITUDE CALIBRATED', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'INDICATED ALTITUDE EX1': { + name: 'INDICATED ALTITUDE EX1', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'INDUCTOR COMPASS HEADING REF': { + name: 'INDUCTOR COMPASS HEADING REF', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'INDUCTOR COMPASS PERCENT DEVIATION': { + name: 'INDUCTOR COMPASS PERCENT DEVIATION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'INSTRUMENTS AVAILABLE': { + name: 'INSTRUMENTS AVAILABLE', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'INTERCOM MODE': { + name: 'INTERCOM MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'INTERCOM SYSTEM ACTIVE': { + name: 'INTERCOM SYSTEM ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS ALTITUDE FREEZE ON': { + name: 'IS ALTITUDE FREEZE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS ATTITUDE FREEZE ON': { + name: 'IS ATTITUDE FREEZE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS LATITUDE LONGITUDE FREEZE ON': { + name: 'IS LATITUDE LONGITUDE FREEZE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'KOHLSMAN SETTING HG': { + name: 'KOHLSMAN SETTING HG', + units: 'Inches of Mercury, inHg', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'KOHLSMAN SETTING HG EX1': { + name: 'KOHLSMAN SETTING HG EX1', + units: 'Inches of Mercury, inHg', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'KOHLSMAN SETTING MB': { + name: 'KOHLSMAN SETTING MB', + units: 'Millibars', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'KOHLSMAN SETTING MB EX1': { + name: 'KOHLSMAN SETTING MB EX1', + units: 'Millibars', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'KOHLSMAN SETTING STD': { + name: 'KOHLSMAN SETTING STD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'MAGNETIC COMPASS': { + name: 'MAGNETIC COMPASS', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MANUAL FUEL PUMP HANDLE': { + name: 'MANUAL FUEL PUMP HANDLE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'OVERSPEED WARNING': { + name: 'OVERSPEED WARNING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PANEL ANTI ICE SWITCH': { + name: 'PANEL ANTI ICE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PITOT ICE PCT': { + name: 'PITOT ICE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PITOT HEAT': { + name: 'PITOT HEAT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PITOT HEAT SWITCH': { + name: 'PITOT HEAT SWITCH', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'RAD INS SWITCH': { + name: 'RAD INS SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SELECTED DME': { + name: 'SELECTED DME', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'SMOKESYSTEM AVAILABLE': { + name: 'SMOKESYSTEM AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SMOKE ENABLE': { + name: 'SMOKE ENABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'SPEAKER ACTIVE': { + name: 'SPEAKER ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STALL HORN AVAILABLE': { + name: 'STALL HORN AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STALL PROTECTION OFF LIMIT': { + name: 'STALL PROTECTION OFF LIMIT', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STALL PROTECTION ON GOAL': { + name: 'STALL PROTECTION ON GOAL', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STALL PROTECTION ON LIMIT': { + name: 'STALL PROTECTION ON LIMIT', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STALL PROTECTION SYSTEM YOKE SHAKER INTENSITY': { + name: 'STALL PROTECTION SYSTEM YOKE SHAKER INTENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'STALL WARNING': { + name: 'STALL WARNING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STRUCTURAL DEICE SWITCH': { + name: 'STRUCTURAL DEICE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'SUCTION PRESSURE': { + name: 'SUCTION PRESSURE', + units: 'Inches of Mercury, inHg', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'SYSTEMS AVAILABLE': { + name: 'SYSTEMS AVAILABLE', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TRUE AIRSPEED SELECTED': { + name: 'TRUE AIRSPEED SELECTED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'TURN COORDINATOR BALL': { + name: 'TURN COORDINATOR BALL', + units: 'Position 128', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TURN COORDINATOR BALL INV': { + name: 'TURN COORDINATOR BALL INV', + units: 'Position 128', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TURN INDICATOR RATE': { + name: 'TURN INDICATOR RATE', + units: 'Radians per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TURN INDICATOR SWITCH': { + name: 'TURN INDICATOR SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WINDSHIELD DEICE SWITCH': { + name: 'WINDSHIELD DEICE SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WISKEY COMPASS INDICATION DEGREES': { + name: 'WISKEY COMPASS INDICATION DEGREES', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'VARIOMETER MAC CREADY SETTING': { + name: 'VARIOMETER MAC CREADY SETTING', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'VARIOMETER NETTO': { + name: 'VARIOMETER NETTO', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'VARIOMETER RATE': { + name: 'VARIOMETER RATE', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'VARIOMETER SPEED TO FLY': { + name: 'VARIOMETER SPEED TO FLY', + units: 'Kilometers per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'VARIOMETER SPEED TO FLY GLIDE RATIO': { + name: 'VARIOMETER SPEED TO FLY GLIDE RATIO', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'VARIOMETER SWITCH': { + name: 'VARIOMETER SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'VARIOMETER TOTAL ENERGY': { + name: 'VARIOMETER TOTAL ENERGY', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER BALLAST TANK CAPACITY': { + name: 'WATER BALLAST TANK CAPACITY', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'WATER BALLAST TANK NUMBER': { + name: 'WATER BALLAST TANK NUMBER', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER BALLAST TANK QUANTITY': { + name: 'WATER BALLAST TANK QUANTITY', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'WATER BALLAST VALVE': { + name: 'WATER BALLAST VALVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WATER BALLAST VALVE FLOW RATE': { + name: 'WATER BALLAST VALVE FLOW RATE', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WATER BALLAST EVERY VALVE OPEN': { + name: 'WATER BALLAST EVERY VALVE OPEN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING DOOR FLOW': { + name: 'LIQUID DROPPING DOOR FLOW', + units: 'lbs per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING DOOR FLOW VOLUME': { + name: 'LIQUID DROPPING DOOR FLOW VOLUME', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING DOOR OPEN TARGET': { + name: 'LIQUID DROPPING DOOR OPEN TARGET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIQUID DROPPING DOOR OPEN VALUE': { + name: 'LIQUID DROPPING DOOR OPEN VALUE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING SCOOP FLOW': { + name: 'LIQUID DROPPING SCOOP FLOW', + units: 'lbs per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING SCOOP FLOW VOLUME': { + name: 'LIQUID DROPPING SCOOP FLOW VOLUME', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING SCOOP OPEN TARGET': { + name: 'LIQUID DROPPING SCOOP OPEN TARGET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIQUID DROPPING SCOOP OPEN VALUE': { + name: 'LIQUID DROPPING SCOOP OPEN VALUE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIQUID DROPPING TANK CAPACITY': { + name: 'LIQUID DROPPING TANK CAPACITY', + units: 'lbs', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING TANK CAPACITY VOLUME': { + name: 'LIQUID DROPPING TANK CAPACITY VOLUME', + units: 'Gallon', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING TANK TOTAL CAPACITY': { + name: 'LIQUID DROPPING TANK TOTAL CAPACITY', + units: 'lbs', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TANK TOTAL CAPACITY VOLUME': { + name: 'LIQUID DROPPING TANK TOTAL CAPACITY VOLUME', + units: 'Gallon', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TANK TOTAL WEIGHT': { + name: 'LIQUID DROPPING TANK TOTAL WEIGHT', + units: 'lbs', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TANK TOTAL CURRENT VOLUME': { + name: 'LIQUID DROPPING TANK TOTAL CURRENT VOLUME', + units: 'Gallon', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TANK WEIGHT': { + name: 'LIQUID DROPPING TANK WEIGHT', + units: 'lbs', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING TANK CURRENT VOLUME': { + name: 'LIQUID DROPPING TANK CURRENT VOLUME', + units: 'Gallon', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIQUID DROPPING TOTAL DROPPED FLOW': { + name: 'LIQUID DROPPING TOTAL DROPPED FLOW', + units: 'lbs per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TOTAL DROPPED FLOW VOLUME': { + name: 'LIQUID DROPPING TOTAL DROPPED FLOW VOLUME', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TOTAL SCOOPED FLOW': { + name: 'LIQUID DROPPING TOTAL SCOOPED FLOW', + units: 'lbs per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIQUID DROPPING TOTAL SCOOPED FLOW VOLUME': { + name: 'LIQUID DROPPING TOTAL SCOOPED FLOW VOLUME', + units: 'Gallons per hour', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'HAS ANY CABIN SIGNAL LIGHT': { + name: 'HAS ANY CABIN SIGNAL LIGHT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS ANY INTERIOR LIGHT ON': { + name: 'IS ANY INTERIOR LIGHT ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LANDING LIGHT PBH': { + name: 'LANDING LIGHT PBH', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIGHT AMBIENT COLOR START RGBA': { + name: 'LIGHT AMBIENT COLOR START RGBA', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR START R': { + name: 'LIGHT AMBIENT COLOR START R', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR START G': { + name: 'LIGHT AMBIENT COLOR START G', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR START B': { + name: 'LIGHT AMBIENT COLOR START B', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR START A': { + name: 'LIGHT AMBIENT COLOR START A', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR END RGBA': { + name: 'LIGHT AMBIENT COLOR END RGBA', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR END R': { + name: 'LIGHT AMBIENT COLOR END R', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR END G': { + name: 'LIGHT AMBIENT COLOR END G', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR END B': { + name: 'LIGHT AMBIENT COLOR END B', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT AMBIENT COLOR END A': { + name: 'LIGHT AMBIENT COLOR END A', + units: 'Integer / Hexadecimal', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'LIGHT BEACON': { + name: 'LIGHT BEACON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT BEACON ON': { + name: 'LIGHT BEACON ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT BACKLIGHT INTENSITY': { + name: 'LIGHT BACKLIGHT INTENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'LIGHT BRAKE ON': { + name: 'LIGHT BRAKE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT CABIN': { + name: 'LIGHT CABIN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT CABIN ON': { + name: 'LIGHT CABIN ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT CABIN POWER SETTING': { + name: 'LIGHT CABIN POWER SETTING', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIGHT GLARESHIELD': { + name: 'LIGHT GLARESHIELD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT GLARESHIELD ON': { + name: 'LIGHT GLARESHIELD ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT GLARESHIELD POWER SETTING': { + name: 'LIGHT GLARESHIELD POWER SETTING', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIGHT GYROLIGHT INTENSITY': { + name: 'LIGHT GYROLIGHT INTENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'LIGHT HEAD ON': { + name: 'LIGHT HEAD ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT HEADLIGHT INTENSITY': { + name: 'LIGHT HEADLIGHT INTENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'LIGHT LANDING ON': { + name: 'LIGHT LANDING ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT LANDING': { + name: 'LIGHT LANDING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT LOGO': { + name: 'LIGHT LOGO', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT LOGO ON': { + name: 'LIGHT LOGO ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT NAV ON': { + name: 'LIGHT NAV ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT NAV': { + name: 'LIGHT NAV', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT ON STATES': { + name: 'LIGHT ON STATES', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT PANEL': { + name: 'LIGHT PANEL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT PANEL ON': { + name: 'LIGHT PANEL ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT PANEL POWER SETTING': { + name: 'LIGHT PANEL POWER SETTING', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIGHT PEDESTRAL': { + name: 'LIGHT PEDESTRAL', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT PEDESTRAL ON': { + name: 'LIGHT PEDESTRAL ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT PEDESTRAL POWER SETTING': { + name: 'LIGHT PEDESTRAL POWER SETTING', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'LIGHT POTENTIOMETER': { + name: 'LIGHT POTENTIOMETER', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'LIGHT RECOGNITION': { + name: 'LIGHT RECOGNITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT RECOGNITION ON': { + name: 'LIGHT RECOGNITION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT STATES': { + name: 'LIGHT STATES', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT STROBE': { + name: 'LIGHT STROBE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT STROBE ON': { + name: 'LIGHT STROBE ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT TAXI': { + name: 'LIGHT TAXI', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT TAXI ON': { + name: 'LIGHT TAXI ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'LIGHT WING': { + name: 'LIGHT WING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'LIGHT WING ON': { + name: 'LIGHT WING ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MANUAL INSTRUMENT LIGHTS': { + name: 'MANUAL INSTRUMENT LIGHTS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STROBES AVAILABLE': { + name: 'STROBES AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'STROBE FLASH': { + name: 'STROBE FLASH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'HYDRAULIC ACCUMULATOR PRESSURE': { + name: 'HYDRAULIC ACCUMULATOR PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC ACCUMULATOR QUANTITY': { + name: 'HYDRAULIC ACCUMULATOR QUANTITY', + units: 'Litres', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC ACTUATOR ACTIVE': { + name: 'HYDRAULIC ACTUATOR ACTIVE', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC ACTUATOR PCT INTEGRITY': { + name: 'HYDRAULIC ACTUATOR PCT INTEGRITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC ACTUATOR PRESSURE': { + name: 'HYDRAULIC ACTUATOR PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC PTU ACTIVE': { + name: 'HYDRAULIC PTU ACTIVE', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC PTU DIRECTION': { + name: 'HYDRAULIC PTU DIRECTION', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC PTU PRESSURE': { + name: 'HYDRAULIC PTU PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC PUMP ACTIVE': { + name: 'HYDRAULIC PUMP ACTIVE', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC PUMP PRESSURE': { + name: 'HYDRAULIC PUMP PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC RESERVOIR PERCENT': { + name: 'HYDRAULIC RESERVOIR PERCENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC RESERVOIR PRESSURE': { + name: 'HYDRAULIC RESERVOIR PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC RESERVOIR QUANTITY': { + name: 'HYDRAULIC RESERVOIR QUANTITY', + units: 'Litres', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC SWITCH': { + name: 'HYDRAULIC SWITCH', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC SYSTEM INTEGRITY': { + name: 'HYDRAULIC SYSTEM INTEGRITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC VALVE ACTIVE': { + name: 'HYDRAULIC VALVE ACTIVE', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC VALVE POS': { + name: 'HYDRAULIC VALVE POS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HYDRAULIC VALVE TARGET POS': { + name: 'HYDRAULIC VALVE TARGET POS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'HYDRAULIC PRESSURE(:name)': { + name: 'HYDRAULIC PRESSURE(:name)', + units: 'psf', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS AIRCRAFT PRESSURE': { + name: 'PNEUMATICS AIRCRAFT PRESSURE', + units: 'Kilopascal', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS APU BLEED AIR': { + name: 'PNEUMATICS APU BLEED AIR', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS AREAS MAX TEMPERATURE': { + name: 'PNEUMATICS AREAS MAX TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS AREAS MIN TEMPERATURE': { + name: 'PNEUMATICS AREAS MIN TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS AREA TARGET TEMPERATURE': { + name: 'PNEUMATICS AREA TARGET TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PNEUMATICS AREA TARGET TEMPERATURE PCT': { + name: 'PNEUMATICS AREA TARGET TEMPERATURE PCT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PNEUMATICS AREA TEMPERATURE': { + name: 'PNEUMATICS AREA TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS CABIN ALTITUDE': { + name: 'PNEUMATICS CABIN ALTITUDE', + units: 'ft', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS CABIN ALTITUDE RATE': { + name: 'PNEUMATICS CABIN ALTITUDE RATE', + units: 'ft per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS COMPONENT TEMPERATURE': { + name: 'PNEUMATICS COMPONENT TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS COMPONENT NUMBER OF MOLES': { + name: 'PNEUMATICS COMPONENT NUMBER OF MOLES', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS COMPONENT PRESSURE': { + name: 'PNEUMATICS COMPONENT PRESSURE', + units: 'Kilopascal', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS COMPONENT VOLUME': { + name: 'PNEUMATICS COMPONENT VOLUME', + units: 'Cubic Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS DIFFERENTIAL PRESSURE': { + name: 'PNEUMATICS DIFFERENTIAL PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS DUCT PRESSURE': { + name: 'PNEUMATICS DUCT PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS DUCT TEMPERATURE': { + name: 'PNEUMATICS DUCT TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS ENGINE BLEED AIR': { + name: 'PNEUMATICS ENGINE BLEED AIR', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS ENGINE BLEED AIR PRESSURE': { + name: 'PNEUMATICS ENGINE BLEED AIR PRESSURE', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS ENGINE BLEED AIR PRESSURE EX1': { + name: 'PNEUMATICS ENGINE BLEED AIR PRESSURE EX1', + units: 'psi', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS ENGINE BLEED AIR TEMPERATURE': { + name: 'PNEUMATICS ENGINE BLEED AIR TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS FAN STATUS': { + name: 'PNEUMATICS FAN STATUS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS FAN TARGET STATUS': { + name: 'PNEUMATICS FAN TARGET STATUS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS FAN SWITCH': { + name: 'PNEUMATICS FAN SWITCH', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS JUNCTION LINE OPENING STATUS:name1:name2': { + name: 'PNEUMATICS JUNCTION LINE OPENING STATUS:name1:name2', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW': { + name: 'PNEUMATICS PACK FLOW', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW AUTO': { + name: 'PNEUMATICS PACK FLOW AUTO', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW MODE': { + name: 'PNEUMATICS PACK FLOW MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW MODE VALUE:name1:name2': { + name: 'PNEUMATICS PACK FLOW MODE VALUE:name1:name2', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW MODE VALUE HIGH': { + name: 'PNEUMATICS PACK FLOW MODE VALUE HIGH', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW MODE VALUE LOW': { + name: 'PNEUMATICS PACK FLOW MODE VALUE LOW', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK FLOW MODE VALUE NORM': { + name: 'PNEUMATICS PACK FLOW MODE VALUE NORM', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK STATUS': { + name: 'PNEUMATICS PACK STATUS', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK SWITCH': { + name: 'PNEUMATICS PACK SWITCH', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS PACK TEMPERATURE': { + name: 'PNEUMATICS PACK TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS TARGET CABIN ALTITUDE': { + name: 'PNEUMATICS TARGET CABIN ALTITUDE', + units: 'ft', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PNEUMATICS VALVE MODE': { + name: 'PNEUMATICS VALVE MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS VALVE STATUS': { + name: 'PNEUMATICS VALVE STATUS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PNEUMATICS VALVE TARGET STATUS': { + name: 'PNEUMATICS VALVE TARGET STATUS', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PNEUMATICS VALVE SWITCH': { + name: 'PNEUMATICS VALVE SWITCH', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PRESSURE ALTITUDE': { + name: 'PRESSURE ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PRESSURIZATION CABIN ALTITUDE': { + name: 'PRESSURIZATION CABIN ALTITUDE', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PRESSURIZATION CABIN ALTITUDE GOAL': { + name: 'PRESSURIZATION CABIN ALTITUDE GOAL', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PRESSURIZATION CABIN ALTITUDE RATE': { + name: 'PRESSURIZATION CABIN ALTITUDE RATE', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PRESSURIZATION DUMP SWITCH': { + name: 'PRESSURIZATION DUMP SWITCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'PRESSURIZATION PRESSURE DIFFERENTIAL': { + name: 'PRESSURIZATION PRESSURE DIFFERENTIAL', + units: 'Pounds per square foot, psf', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PARTIAL PANEL ADF': { + name: 'PARTIAL PANEL ADF', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL AIRSPEED': { + name: 'PARTIAL PANEL AIRSPEED', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL ALTIMETER': { + name: 'PARTIAL PANEL ALTIMETER', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL ATTITUDE': { + name: 'PARTIAL PANEL ATTITUDE', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL AVIONICS': { + name: 'PARTIAL PANEL AVIONICS', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL COMM': { + name: 'PARTIAL PANEL COMM', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL COMPASS': { + name: 'PARTIAL PANEL COMPASS', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL ELECTRICAL': { + name: 'PARTIAL PANEL ELECTRICAL', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL ENGINE': { + name: 'PARTIAL PANEL ENGINE', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL FUEL INDICATOR': { + name: 'PARTIAL PANEL FUEL INDICATOR', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL HEADING': { + name: 'PARTIAL PANEL HEADING', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL NAV': { + name: 'PARTIAL PANEL NAV', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL PITOT': { + name: 'PARTIAL PANEL PITOT', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL TRANSPONDER': { + name: 'PARTIAL PANEL TRANSPONDER', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL TURN COORDINATOR': { + name: 'PARTIAL PANEL TURN COORDINATOR', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL VACUUM': { + name: 'PARTIAL PANEL VACUUM', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'PARTIAL PANEL VERTICAL VELOCITY': { + name: 'PARTIAL PANEL VERTICAL VELOCITY', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'DROPPABLE OBJECTS COUNT': { + name: 'DROPPABLE OBJECTS COUNT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'DROPPABLE OBJECTS TYPE': { + name: 'DROPPABLE OBJECTS TYPE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: true, + supportsIndex: true, + }, + 'DROPPABLE OBJECTS UI NAME': { + name: 'DROPPABLE OBJECTS UI NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'PAYLOAD STATION COUNT': { + name: 'PAYLOAD STATION COUNT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PAYLOAD STATION NAME': { + name: 'PAYLOAD STATION NAME', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'PAYLOAD STATION NUM SIMOBJECTS': { + name: 'PAYLOAD STATION NUM SIMOBJECTS', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PAYLOAD STATION OBJECT': { + name: 'PAYLOAD STATION OBJECT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'PAYLOAD STATION WEIGHT': { + name: 'PAYLOAD STATION WEIGHT', + units: 'Pounds', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'GRAPPLE HOOK SET': { + name: 'GRAPPLE HOOK SET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'LEAD POLE SET': { + name: 'LEAD POLE SET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'TOW CABLE RELEASE REASON': { + name: 'TOW CABLE RELEASE REASON', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TOW CABLE TENSION': { + name: 'TOW CABLE TENSION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOW CONNECTION': { + name: 'TOW CONNECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TOW PLANE CONNECTION': { + name: 'TOW PLANE CONNECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TOW RELEASE HANDLE': { + name: 'TOW RELEASE HANDLE', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'TOW WINCH CONNECTION': { + name: 'TOW WINCH CONNECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TAILHOOK HANDLE': { + name: 'TAILHOOK HANDLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'TAILHOOK POSITION': { + name: 'TAILHOOK POSITION', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'NIGHT VISION AVAILABLE': { + name: 'NIGHT VISION AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'NIGHT VISION DISPLAYED': { + name: 'NIGHT VISION DISPLAYED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'NIGHT VISION INTENSITY': { + name: 'NIGHT VISION INTENSITY', + units: 'Float', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'ANIMATION DELTA TIME': { + name: 'ANIMATION DELTA TIME', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ARTIFICIAL GROUND ELEVATION': { + name: 'ARTIFICIAL GROUND ELEVATION', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + CATEGORY: { + name: 'CATEGORY', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + CONTROLLABLE: { + name: 'CONTROLLABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CRASH FLAG': { + name: 'CRASH FLAG', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CRASH SEQUENCE': { + name: 'CRASH SEQUENCE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'GROUND ALTITUDE': { + name: 'GROUND ALTITUDE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'HAND ANIM STATE': { + name: 'HAND ANIM STATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'HIDE AVATAR IN AIRCRAFT': { + name: 'HIDE AVATAR IN AIRCRAFT', + units: 'Boolean', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'IDLE ANIMATION ID': { + name: 'IDLE ANIMATION ID', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + MAGVAR: { + name: 'MAGVAR', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'MISSION SCORE': { + name: 'MISSION SCORE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'MOTION SIMULATION': { + name: 'MOTION SIMULATION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PARACHUTE OPEN': { + name: 'PARACHUTE OPEN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + REALISM: { + name: 'REALISM', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'REALISM CRASH DETECTION': { + name: 'REALISM CRASH DETECTION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'REALISM CRASH WITH OTHERS': { + name: 'REALISM CRASH WITH OTHERS', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'SIM DISABLED': { + name: 'SIM DISABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'SIM ON GROUND': { + name: 'SIM ON GROUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'SIM SHOULD SET ON GROUND': { + name: 'SIM SHOULD SET ON GROUND', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'TRACK IR ENABLE': { + name: 'TRACK IR ENABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'TOTAL WORLD VELOCITY': { + name: 'TOTAL WORLD VELOCITY', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'USER INPUT ENABLED': { + name: 'USER INPUT ENABLED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'VISUAL MODEL RADIUS': { + name: 'VISUAL MODEL RADIUS', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'VELOCITY WORLD X': { + name: 'VELOCITY WORLD X', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'VELOCITY WORLD Y': { + name: 'VELOCITY WORLD Y', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'VELOCITY WORLD Z': { + name: 'VELOCITY WORLD Z', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'VR GROUP INTERACTION ON': { + name: 'VR GROUP INTERACTION ON', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'PYLON HEIGHT': { + name: 'PYLON HEIGHT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'PYLON COLLISION POSITION': { + name: 'PYLON COLLISION POSITION', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FAUNA BEHAVIOUR STATE': { + name: 'FAUNA BEHAVIOUR STATE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'FAUNA FORCE MAGNITUDE': { + name: 'FAUNA FORCE MAGNITUDE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FAUNA HEADING ROTATION ANGLE': { + name: 'FAUNA HEADING ROTATION ANGLE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'FAUNA TURN RATE': { + name: 'FAUNA TURN RATE', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + GENDER: { + name: 'GENDER', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + HEIGHT: { + name: 'HEIGHT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'IS CROUCH': { + name: 'IS CROUCH', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'IS TALKING': { + name: 'IS TALKING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'AMBIENT DENSITY': { + name: 'AMBIENT DENSITY', + units: 'Slugs per cubic feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT IN CLOUD': { + name: 'AMBIENT IN CLOUD', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'AMBIENT IN SMOKE': { + name: 'AMBIENT IN SMOKE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'AMBIENT PRECIP RATE': { + name: 'AMBIENT PRECIP RATE', + units: 'millimeters of water', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT PRECIP STATE': { + name: 'AMBIENT PRECIP STATE', + units: 'Mask', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'AMBIENT PRESSURE': { + name: 'AMBIENT PRESSURE', + units: 'Inches of mercury, inHg', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT TEMPERATURE': { + name: 'AMBIENT TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT VISIBILITY': { + name: 'AMBIENT VISIBILITY', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT WIND DIRECTION': { + name: 'AMBIENT WIND DIRECTION', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT WIND VELOCITY': { + name: 'AMBIENT WIND VELOCITY', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT WIND X': { + name: 'AMBIENT WIND X', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT WIND Y': { + name: 'AMBIENT WIND Y', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AMBIENT WIND Z': { + name: 'AMBIENT WIND Z', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'BAROMETER PRESSURE': { + name: 'BAROMETER PRESSURE', + units: 'Millibars', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'DENSITY ALTITUDE': { + name: 'DENSITY ALTITUDE', + units: 'ft', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENV CLOUD DENSITY': { + name: 'ENV CLOUD DENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'ENV SMOKE DENSITY': { + name: 'ENV SMOKE DENSITY', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'SEA LEVEL AMBIENT TEMPERATURE': { + name: 'SEA LEVEL AMBIENT TEMPERATURE', + units: 'Celsius', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'SEA LEVEL PRESSURE': { + name: 'SEA LEVEL PRESSURE', + units: 'Millibars', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT AMBIENT WIND': { + name: 'STRUCT AMBIENT WIND', + units: 'Feet per second', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AI DESIRED SPEED': { + name: 'AI DESIRED SPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI WAYPOINT LIST': { + name: 'AI WAYPOINT LIST', + units: 'SIMCONNECT_DATA_WAYPOINT', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI CURRENT WAYPOINT': { + name: 'AI CURRENT WAYPOINT', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI DESIRED HEADING': { + name: 'AI DESIRED HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI GROUNDTURNTIME': { + name: 'AI GROUNDTURNTIME', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI GROUNDCRUISESPEED': { + name: 'AI GROUNDCRUISESPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI GROUNDTURNSPEED': { + name: 'AI GROUNDTURNSPEED', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'AI TRAFFIC ISIFR': { + name: 'AI TRAFFIC ISIFR', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC STATE': { + name: 'AI TRAFFIC STATE', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC CURRENT AIRPORT': { + name: 'AI TRAFFIC CURRENT AIRPORT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC ASSIGNED RUNWAY': { + name: 'AI TRAFFIC ASSIGNED RUNWAY', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC ASSIGNED PARKING': { + name: 'AI TRAFFIC ASSIGNED PARKING', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC FROMAIRPORT': { + name: 'AI TRAFFIC FROMAIRPORT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC TOAIRPORT': { + name: 'AI TRAFFIC TOAIRPORT', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC ETD': { + name: 'AI TRAFFIC ETD', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'AI TRAFFIC ETA': { + name: 'AI TRAFFIC ETA', + units: 'Seconds', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT DAMAGEVISIBLE': { + name: 'STRUCT DAMAGEVISIBLE', + units: '-', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUC AIRSPEED HOLD PID CONSTS': { + name: 'STRUC AIRSPEED HOLD PID CONSTS', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUC HEADING HOLD PID CONSTS': { + name: 'STRUC HEADING HOLD PID CONSTS', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT BODY ROTATION ACCELERATION': { + name: 'STRUCT BODY ROTATION ACCELERATION', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT PBH32': { + name: 'STRUCT PBH32', + units: 'SIMCONNECT_DATA_XYZ', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT REALISM VARS': { + name: 'STRUCT REALISM VARS', + units: '-', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT SURFACE RELATIVE VELOCITY': { + name: 'STRUCT SURFACE RELATIVE VELOCITY', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT WORLDVELOCITY': { + name: 'STRUCT WORLDVELOCITY', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT WORLD ACCELERATION': { + name: 'STRUCT WORLD ACCELERATION', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'STRUCT WORLD ROTATION VELOCITY': { + name: 'STRUCT WORLD ROTATION VELOCITY', + units: '', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'BAGGAGELOADER ANGLE CURRENT': { + name: 'BAGGAGELOADER ANGLE CURRENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BAGGAGELOADER ANGLE TARGET': { + name: 'BAGGAGELOADER ANGLE TARGET', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BAGGAGELOADER END RAMP Y': { + name: 'BAGGAGELOADER END RAMP Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BAGGAGELOADER END RAMP Z': { + name: 'BAGGAGELOADER END RAMP Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BAGGAGELOADER PIVOT Y': { + name: 'BAGGAGELOADER PIVOT Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BAGGAGELOADER PIVOT Z': { + name: 'BAGGAGELOADER PIVOT Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP ELEVATION CURRENT': { + name: 'BOARDINGRAMP ELEVATION CURRENT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BOARDINGRAMP ELEVATION TARGET': { + name: 'BOARDINGRAMP ELEVATION TARGET', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BOARDINGRAMP END POSITION Y': { + name: 'BOARDINGRAMP END POSITION Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP END POSITION Z': { + name: 'BOARDINGRAMP END POSITION Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP ORIENTATION CURRENT': { + name: 'BOARDINGRAMP ORIENTATION CURRENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BOARDINGRAMP ORIENTATION TARGET': { + name: 'BOARDINGRAMP ORIENTATION TARGET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'BOARDINGRAMP START POSITION Y': { + name: 'BOARDINGRAMP START POSITION Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP START POSITION Z': { + name: 'BOARDINGRAMP START POSITION Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP STRAIGHT POSITION Y': { + name: 'BOARDINGRAMP STRAIGHT POSITION Y', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'BOARDINGRAMP STRAIGHT POSITION Z': { + name: 'BOARDINGRAMP STRAIGHT POSITION Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CATERINGTRUCK AIRCRAFT DOOR CONTACT OFFSET Z': { + name: 'CATERINGTRUCK AIRCRAFT DOOR CONTACT OFFSET Z', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CATERINGTRUCK ELEVATION CURRENT': { + name: 'CATERINGTRUCK ELEVATION CURRENT', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CATERINGTRUCK ELEVATION TARGET': { + name: 'CATERINGTRUCK ELEVATION TARGET', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CATERINGTRUCK OPENING CURRENT': { + name: 'CATERINGTRUCK OPENING CURRENT', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CATERINGTRUCK OPENING TARGET': { + name: 'CATERINGTRUCK OPENING TARGET', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUELTRUCK HOSE DEPLOYED': { + name: 'FUELTRUCK HOSE DEPLOYED', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'FUELTRUCK HOSE END POSX': { + name: 'FUELTRUCK HOSE END POSX', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUELTRUCK HOSE END POSZ': { + name: 'FUELTRUCK HOSE END POSZ', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'FUELTRUCK HOSE END RELATIVE HEADING': { + name: 'FUELTRUCK HOSE END RELATIVE HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GROUNDPOWERUNIT HOSE DEPLOYED': { + name: 'GROUNDPOWERUNIT HOSE DEPLOYED', + units: 'Percent Over 100', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GROUNDPOWERUNIT HOSE END POSX': { + name: 'GROUNDPOWERUNIT HOSE END POSX', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GROUNDPOWERUNIT HOSE END POSZ': { + name: 'GROUNDPOWERUNIT HOSE END POSZ', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'GROUNDPOWERUNIT HOSE END RELATIVE HEADING': { + name: 'GROUNDPOWERUNIT HOSE END RELATIVE HEADING', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'JETWAY HOOD LEFT BEND': { + name: 'JETWAY HOOD LEFT BEND', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY HOOD LEFT DEPLOYMENT': { + name: 'JETWAY HOOD LEFT DEPLOYMENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY HOOD RIGHT BEND': { + name: 'JETWAY HOOD RIGHT BEND', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY HOOD RIGHT DEPLOYMENT': { + name: 'JETWAY HOOD RIGHT DEPLOYMENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY HOOD TOP HORIZONTAL': { + name: 'JETWAY HOOD TOP HORIZONTAL', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY HOOD TOP VERTICAL': { + name: 'JETWAY HOOD TOP VERTICAL', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY MOVING': { + name: 'JETWAY MOVING', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'JETWAY WHEEL ORIENTATION CURRENT': { + name: 'JETWAY WHEEL ORIENTATION CURRENT', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY WHEEL ORIENTATION TARGET': { + name: 'JETWAY WHEEL ORIENTATION TARGET', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'JETWAY WHEEL SPEED': { + name: 'JETWAY WHEEL SPEED', + units: 'Meters per second', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT DIRECTION PARKINGSPACE': { + name: 'MARSHALLER AIRCRAFT DIRECTION PARKINGSPACE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT DISTANCE': { + name: 'MARSHALLER AIRCRAFT DISTANCE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT DISTANCE DIRECTION X PARKINGSPACE': { + name: 'MARSHALLER AIRCRAFT DISTANCE DIRECTION X PARKINGSPACE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT DISTANCE DIRECTION Z PARKINGSPACE': { + name: 'MARSHALLER AIRCRAFT DISTANCE DIRECTION Z PARKINGSPACE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT ENGINE SHUTDOWN': { + name: 'MARSHALLER AIRCRAFT ENGINE SHUTDOWN', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT HEADING PARKINGSPACE': { + name: 'MARSHALLER AIRCRAFT HEADING PARKINGSPACE', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT PROJECTION POINT PARKINGSPACE': { + name: 'MARSHALLER AIRCRAFT PROJECTION POINT PARKINGSPACE', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'MARSHALLER AIRCRAFT VELOCITY': { + name: 'MARSHALLER AIRCRAFT VELOCITY', + units: 'Knots', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PUSHBACK ANGLE': { + name: 'PUSHBACK ANGLE', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PUSHBACK ATTACHED': { + name: 'PUSHBACK ATTACHED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'PUSHBACK AVAILABLE': { + name: 'PUSHBACK AVAILABLE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'PUSHBACK CONTACTX': { + name: 'PUSHBACK CONTACTX', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PUSHBACK CONTACTY': { + name: 'PUSHBACK CONTACTY', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PUSHBACK CONTACTZ': { + name: 'PUSHBACK CONTACTZ', + units: 'Feet', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'PUSHBACK STATE:index': { + name: 'PUSHBACK STATE:index', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'PUSHBACK WAIT': { + name: 'PUSHBACK WAIT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'WAGON BACK LINK LENGTH': { + name: 'WAGON BACK LINK LENGTH', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WAGON BACK LINK ORIENTATION': { + name: 'WAGON BACK LINK ORIENTATION', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'WAGON BACK LINK START POSZ': { + name: 'WAGON BACK LINK START POSZ', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WAGON FRONT LINK LENGTH': { + name: 'WAGON FRONT LINK LENGTH', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'WAGON FRONT LINK ORIENTATION': { + name: 'WAGON FRONT LINK ORIENTATION', + units: 'Degrees', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'WAGON FRONT LINK START POSZ': { + name: 'WAGON FRONT LINK START POSZ', + units: 'Meters', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: false, + }, + 'CAMERA GAMEPLAY PITCH YAW': { + name: 'CAMERA GAMEPLAY PITCH YAW', + units: 'Radians', + dataType: SimConnectDataType.FLOAT64, + settable: false, + supportsIndex: true, + }, + 'CAMERA REQUEST ACTION': { + name: 'CAMERA REQUEST ACTION', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CAMERA STATE': { + name: 'CAMERA STATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CAMERA SUBSTATE': { + name: 'CAMERA SUBSTATE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CAMERA VIEW TYPE AND INDEX': { + name: 'CAMERA VIEW TYPE AND INDEX', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: true, + }, + 'CAMERA VIEW TYPE AND INDEX MAX': { + name: 'CAMERA VIEW TYPE AND INDEX MAX', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'DIRECTORS CUT CAMERA PITCH': { + name: 'DIRECTORS CUT CAMERA PITCH', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DIRECTORS CUT CAMERA YAW': { + name: 'DIRECTORS CUT CAMERA YAW', + units: 'Percent', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'GAMEPLAY CAMERA FOCUS': { + name: 'GAMEPLAY CAMERA FOCUS', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'IS CAMERA LOCKED': { + name: 'IS CAMERA LOCKED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'IS CAMERA RAY INTERSECT WITH NODE': { + name: 'IS CAMERA RAY INTERSECT WITH NODE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'CHASE CAMERA HEADLOOK': { + name: 'CHASE CAMERA HEADLOOK', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CHASE CAMERA MOMENTUM': { + name: 'CHASE CAMERA MOMENTUM', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CHASE CAMERA SPEED': { + name: 'CHASE CAMERA SPEED', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CHASE CAMERA ZOOM': { + name: 'CHASE CAMERA ZOOM', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CHASE CAMERA ZOOM SPEED': { + name: 'CHASE CAMERA ZOOM SPEED', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'CAMERA ACTION COCKPIT VIEW RESET': { + name: 'CAMERA ACTION COCKPIT VIEW RESET', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'CAMERA ACTION COCKPIT VIEW SAVE:index': { + name: 'CAMERA ACTION COCKPIT VIEW SAVE:index', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA HEADLOOK': { + name: 'COCKPIT CAMERA HEADLOOK', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA HEIGHT': { + name: 'COCKPIT CAMERA HEIGHT', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA INSTRUMENT AUTOSELECT': { + name: 'COCKPIT CAMERA INSTRUMENT AUTOSELECT', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA MOMENTUM': { + name: 'COCKPIT CAMERA MOMENTUM', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA SIDE': { + name: 'COCKPIT CAMERA SIDE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: false, + }, + 'COCKPIT CAMERA SPEED': { + name: 'COCKPIT CAMERA SPEED', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA UPPER POSITION': { + name: 'COCKPIT CAMERA UPPER POSITION', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA ZOOM': { + name: 'COCKPIT CAMERA ZOOM', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'COCKPIT CAMERA ZOOM SPEED': { + name: 'COCKPIT CAMERA ZOOM SPEED', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA FOCUS': { + name: 'DRONE CAMERA FOCUS', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA FOCUS MODE': { + name: 'DRONE CAMERA FOCUS MODE', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA FOLLOW': { + name: 'DRONE CAMERA FOLLOW', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA FOV': { + name: 'DRONE CAMERA FOV', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA LOCKED': { + name: 'DRONE CAMERA LOCKED', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA SPEED ROTATION': { + name: 'DRONE CAMERA SPEED ROTATION', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'DRONE CAMERA SPEED TRAVELLING': { + name: 'DRONE CAMERA SPEED TRAVELLING', + units: 'Percentage', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: false, + }, + 'SMART CAMERA ACTIVE': { + name: 'SMART CAMERA ACTIVE', + units: 'Bool', + dataType: SimConnectDataType.INT32, + settable: true, + supportsIndex: false, + }, + 'SMART CAMERA INFO': { + name: 'SMART CAMERA INFO', + units: 'Number', + dataType: SimConnectDataType.FLOAT64, + settable: true, + supportsIndex: true, + }, + 'SMART CAMERA LIST': { + name: 'SMART CAMERA LIST', + units: 'Enum', + dataType: SimConnectDataType.INT32, + settable: false, + supportsIndex: true, + }, + 'SMART CAMERA LIST DESCRIPTION': { + name: 'SMART CAMERA LIST DESCRIPTION', + units: '', + dataType: SimConnectDataType.STRINGV, + settable: false, + supportsIndex: true, + }, +} as const satisfies { [key: string]: PredefinedVariable }; + +export type SimvarPredefinitions = typeof simvarPredefinitions; diff --git a/src/index.ts b/src/index.ts index 6c9dfd7..c8473cc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,7 @@ export * from './datastructures'; export * from './Types'; export * from './recv'; export * from './dto'; +export * from './ApiHelper'; export { RawBuffer } from './RawBuffer'; export interface OpenEvent { diff --git a/utils/packet-inspector/packetInspectorProxy.ts b/utils/packet-inspector/packetInspectorProxy.ts index 822015f..1c695d9 100644 --- a/utils/packet-inspector/packetInspectorProxy.ts +++ b/utils/packet-inspector/packetInspectorProxy.ts @@ -19,7 +19,7 @@ const server = net.createServer(clientSocket => { const targetSocket = net.connect(simConnectPort, simConnectHost, () => { console.log(`Proxy connected to target server: ${simConnectHost}:${simConnectPort}`); - clientSocket.on('data', data => { + clientSocket.on('data', (data: Buffer) => { console.log( `[Application -> SimConnect] ${data.length} bytes ::::::::::::::::::::::::\n` ); @@ -29,7 +29,7 @@ const server = net.createServer(clientSocket => { targetSocket.write(Uint8Array.from(Buffer.from(hexString, 'hex'))); // Forwarding the data to the target server }); - targetSocket.on('data', data => { + targetSocket.on('data', (data: Buffer) => { console.log( `[SimConnect -> Application] ${data.length} bytes ::::::::::::::::::::::::\n` ); diff --git a/utils/scrapeSimvars.ts b/utils/scrapeSimvars.ts new file mode 100644 index 0000000..7ee63b5 --- /dev/null +++ b/utils/scrapeSimvars.ts @@ -0,0 +1,188 @@ +import * as fs from 'fs'; +import * as cheerio from 'cheerio'; +import { outdent } from 'outdent'; +import { SimConnectDataType } from '../src/index'; + +/** + * Running manually: + * npx ts-node .\src\ApiHelper\scripts\scrapeSimvars.ts + */ + +type SimvarSpecs = { + name: string; + description: string; + units: string; + type: SimConnectDataType; + settable: boolean; + supportsIndex: boolean; +}; + +async function clone() { + const pages = [ + 'Aircraft_SimVars/Aircraft_AutopilotAssistant_Variables.htm', + 'Aircraft_SimVars/Aircraft_Brake_Landing_Gear_Variables.htm', + 'Aircraft_SimVars/Aircraft_Control_Variables.htm', + 'Aircraft_SimVars/Aircraft_Electrics_Variables.htm', + 'Aircraft_SimVars/Aircraft_Engine_Variables.htm', + 'Aircraft_SimVars/Aircraft_FlightModel_Variables.htm', + 'Aircraft_SimVars/Aircraft_Fuel_Variables.htm', + 'Aircraft_SimVars/Aircraft_Misc_Variables.htm', + 'Aircraft_SimVars/Aircraft_RadioNavigation_Variables.htm', + 'Aircraft_SimVars/Aircraft_System_Variables.htm', + 'Aircraft_SimVars/Helicopter_Variables.htm', + 'Aircraft_SimVars/Balloon_Variables.htm', + 'Miscellaneous_Variables.htm', + 'Services_Variables.htm', + 'Camera_Variables.htm', + ]; + + const results = await Promise.all( + pages.map(async url => + extractTables( + `https://docs.flightsimulator.com/msfs2024/html/6_Programming_APIs/SimVars/${url}` + ) + ) + ); + + const allSimvars: { [key: string]: SimvarSpecs } = {}; + + results.forEach(page => { + page.forEach(simvar => { + allSimvars[simvar.name] = simvar; + }); + }); + + const fileContent = createOutputFile(allSimvars); + + fs.writeFile('src/generated/simvars.ts', fileContent, err => { + if (err) { + console.error(err); + } + // file written successfully + }); +} + +const EXPECTED_COLUMNS = [ + 'Simulation Variable', + 'Index', + 'Description', + 'Units', + 'Settable', +] as const; +type ColumnName = (typeof EXPECTED_COLUMNS)[number]; + +async function extractTables(url: string): Promise { + const xml = await fetch(url).then(res => res.text()); + const $ = cheerio.load(xml); + const tables = $('table:has(th:contains("Simulation Variable"))'); + + const output: SimvarSpecs[] = []; + + tables.each((_, table) => { + // Build column name → index map from header row + const colIndex: Partial> = {}; + $(table) + .find('tr:has(th)') + .first() + .find('th') + .each((i, th) => { + const name = $(th).text().trim() as ColumnName; + if (EXPECTED_COLUMNS.includes(name)) { + colIndex[name] = i; + } + }); + + const missing = EXPECTED_COLUMNS.filter(col => colIndex[col] === undefined); + if (missing.length > 0) { + console.warn(`[${url}] Missing columns: ${missing.join(', ')}`); + } + + $(table) + .find('tr:has(td)') + .each((_, row) => { + const cells = $(row).find('td'); + const get = (col: ColumnName) => cells.eq(colIndex[col] ?? -1); + + const settable = get('Settable').find('span.checkmark_circle_red').length === 0; + const unitsText = get('Units').text(); + const indexText = get('Index').text(); + + const simvarNames = get('Simulation Variable').text().split('\n'); + simvarNames.forEach((name: string) => { + const trimmed = name.trim(); + if (!trimmed) return; + output.push({ + name: trimmed, + description: get('Description').html() || '', + units: correctUnits(unitsText), + type: inferTypeFromUnit(unitsText), + settable, + supportsIndex: indexText.trim() !== 'N/A', + }); + }); + }); + }); + + return output; +} + +function correctUnits(originalValue: string): string { + if (originalValue.toUpperCase().includes('STRING')) return ''; + if (originalValue.toUpperCase().includes('STRUCT')) return ''; + return originalValue + .replace(':', '') + .replace(/\s*\([^)]*\)?/g, '') + .trim(); +} + +function inferTypeFromUnit(type: string): SimConnectDataType { + if (type.includes('Bool')) return SimConnectDataType.INT32; + if (type.includes('Enum')) return SimConnectDataType.INT32; + if (type.includes('Mask')) return SimConnectDataType.INT32; + if (type.includes('String')) { + if (type.includes('256')) return SimConnectDataType.STRING256; + if (type.includes('64')) return SimConnectDataType.STRING64; + if (type.includes('32')) return SimConnectDataType.STRING32; + if (type.includes('8')) return SimConnectDataType.STRING8; + return SimConnectDataType.STRINGV; + } + + return SimConnectDataType.FLOAT64; +} + +clone(); + +function createOutputFile(simvars: { [key: string]: SimvarSpecs }) { + let output = ''; + Object.values(simvars).forEach(simvar => { + output += outdent({ trimTrailingNewline: false })` + ${outdent} + '${simvar.name}': { + name: '${simvar.name}', + units: '${simvar.units.split('\n')[0]}', + dataType: SimConnectDataType.${SimConnectDataType[simvar.type]}, + settable: ${simvar.settable}, + supportsIndex: ${simvar.supportsIndex}, + }, + `; + }); + + return outdent` + import { SimConnectDataType } from '../enums/SimConnectDataType'; + + export type PredefinedVariable = { + name: string; + units: string; + dataType: SimConnectDataType; + settable: boolean; + supportsIndex: boolean; + }; + + export const simvarPredefinitions = { + ${output} + } as const satisfies { [key: string]: PredefinedVariable }; + + export type SimvarPredefinitions = typeof simvarPredefinitions; + + `; +}