UNPKG

@betaflight/api

Version:

A high-level API to read data from betaflight flight controllers

133 lines 6.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeSerialConfig = exports.readSerialConfig = exports.BAUD_RATES = exports.SerialPortFunctions = exports.SerialPortIdentifiers = void 0; const msp_1 = require("@betaflight/msp"); const semver_1 = __importDefault(require("semver")); const codes_1 = __importDefault(require("../codes")); const utils_1 = require("../utils"); const constants_1 = require("./constants"); const types_1 = require("./types"); Object.defineProperty(exports, "SerialPortIdentifiers", { enumerable: true, get: function () { return types_1.SerialPortIdentifiers; } }); Object.defineProperty(exports, "SerialPortFunctions", { enumerable: true, get: function () { return types_1.SerialPortFunctions; } }); exports.BAUD_RATES = [ -1, 9600, 19200, 38400, 57600, 115200, 230400, 250000, 400000, 460800, 500000, 921600, 1000000, 1500000, 2000000, 2470000, ]; const toBaudRate = (baudRateIdentifier) => { var _a; return (_a = exports.BAUD_RATES[baudRateIdentifier]) !== null && _a !== void 0 ? _a : -1; }; const readSerialConfig = async (port) => { const api = (0, msp_1.apiVersion)(port); if (semver_1.default.gte(api, "1.43.0")) { const data = await (0, msp_1.execute)(port, { code: codes_1.default.MSP2_COMMON_SERIAL_CONFIG, }); const count = data.readU8(); const portConfigSize = data.remaining() / count; return { ports: (0, utils_1.times)(() => { const start = data.remaining(); const serialPort = { id: data.readU8(), functions: (0, utils_1.unpackValues)(data.readU32(), (0, constants_1.serialPortFunctionBits)()), mspBaudRate: toBaudRate(data.readU8()), gpsBaudRate: toBaudRate(data.readU8()), telemetryBaudRate: toBaudRate(data.readU8()), blackboxBaudRate: toBaudRate(data.readU8()), }; while (start - data.remaining() < portConfigSize && data.remaining() > 0) { data.readU8(); } return serialPort; }, count), }; } const data = await (0, msp_1.execute)(port, { code: codes_1.default.MSP_CF_SERIAL_CONFIG, }); if (semver_1.default.lt(api, "1.6.0")) { const serialPortCount = (data.byteLength - 16) / 2; return { ports: (0, utils_1.times)(() => { var _a; return ({ id: data.readU8(), functions: (_a = constants_1.legacySerialPortFunctionsMap[data.readU8()]) !== null && _a !== void 0 ? _a : [], mspBaudRate: -1, gpsBaudRate: -1, telemetryBaudRate: -1, blackboxBaudRate: -1, }); }, serialPortCount), legacy: { mspBaudRate: data.readU32(), cliBaudRate: data.readU32(), gpsBaudRate: data.readU32(), gpsPassthroughBaudRate: data.readU32(), }, }; } const serialPortCount = Math.floor(data.byteLength / (1 + 2 + 1 * 4)); return { ports: (0, utils_1.times)(() => ({ id: data.readU8(), functions: (0, utils_1.unpackValues)(data.readU16(), (0, constants_1.serialPortFunctionBits)()), mspBaudRate: toBaudRate(data.readU8()), gpsBaudRate: toBaudRate(data.readU8()), telemetryBaudRate: toBaudRate(data.readU8()), blackboxBaudRate: toBaudRate(data.readU8()), }), serialPortCount), }; }; exports.readSerialConfig = readSerialConfig; const writeSerialConfig = async (port, config) => { const buffer = new msp_1.WriteBuffer(); const api = (0, msp_1.apiVersion)(port); if (semver_1.default.gte(api, "1.43.0")) { buffer.push8(config.ports.length); config.ports.forEach((portSettings) => { buffer.push8(portSettings.id); buffer .push32((0, utils_1.packValues)(portSettings.functions, (0, constants_1.serialPortFunctionBits)())) .push8(exports.BAUD_RATES.indexOf(portSettings.mspBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.gpsBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.telemetryBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.blackboxBaudRate)); }); await (0, msp_1.execute)(port, { code: codes_1.default.MSP2_COMMON_SET_SERIAL_CONFIG, data: buffer, }); } else { if (semver_1.default.lt(api, "1.6.0")) { // for (let i = 0; i < SERIAL_CONFIG.ports.length; i++) { // buffer.push8(SERIAL_CONFIG.ports[i].scenario); // } // buffer // .push32(SERIAL_CONFIG.mspBaudRate) // .push32(SERIAL_CONFIG.cliBaudRate) // .push32(SERIAL_CONFIG.gpsBaudRate) // .push32(SERIAL_CONFIG.gpsPassthroughBaudRate); } else { config.ports.forEach((portSettings) => { buffer.push8(portSettings.id); buffer .push16((0, utils_1.packValues)(portSettings.functions, (0, constants_1.serialPortFunctionBits)())) .push8(exports.BAUD_RATES.indexOf(portSettings.mspBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.gpsBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.telemetryBaudRate)) .push8(exports.BAUD_RATES.indexOf(portSettings.blackboxBaudRate)); }); } await (0, msp_1.execute)(port, { code: codes_1.default.MSP_SET_CF_SERIAL_CONFIG, data: buffer, }); } }; exports.writeSerialConfig = writeSerialConfig; //# sourceMappingURL=index.js.map