UNPKG

@betaflight/api

Version:

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

67 lines 2.81 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readBoxIds = exports.writeModeRangeSlots = exports.writeModeRangeSlot = exports.readModeRangeSlots = exports.Modes = 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 types_1 = require("./types"); Object.defineProperty(exports, "Modes", { enumerable: true, get: function () { return types_1.Modes; } }); const readModeRangeSlots = async (port) => { const api = (0, msp_1.apiVersion)(port); const [data, extraData] = await Promise.all([ (0, msp_1.execute)(port, { code: codes_1.default.MSP_MODE_RANGES }), semver_1.default.gte(api, "1.41.0") ? (0, msp_1.execute)(port, { code: codes_1.default.MSP_MODE_RANGES_EXTRA }) : undefined, ]); if (extraData) { // we don't really care about the number of // extra data bits, because we assume it must // be the same as the number of mode slots extraData.readU8(); } return (0, utils_1.times)(() => ({ modeId: data.readU8(), auxChannel: data.readU8(), range: { start: 900 + data.readU8() * 25, end: 900 + data.readU8() * 25, }, ...(extraData ? { modeId: extraData.readU8(), modeLogic: extraData.readU8(), linkedTo: extraData.readU8(), } : {}), }), data.byteLength / 4); }; exports.readModeRangeSlots = readModeRangeSlots; const writeModeRangeSlot = async (port, slotPosition, slot) => { const buffer = new msp_1.WriteBuffer(); buffer .push8(slotPosition) .push8(slot.modeId) .push8(slot.auxChannel) .push8((slot.range.start - 900) / 25) .push8((slot.range.end - 900) / 25); if (slot.modeLogic !== undefined && slot.linkedTo !== undefined) { buffer.push8(slot.modeLogic).push8(slot.linkedTo); } await (0, msp_1.execute)(port, { code: codes_1.default.MSP_SET_MODE_RANGE, data: buffer }); }; exports.writeModeRangeSlot = writeModeRangeSlot; const writeModeRangeSlots = async (port, slots) => { await Promise.all(slots.map((slot, i) => (0, exports.writeModeRangeSlot)(port, i, slot))); }; exports.writeModeRangeSlots = writeModeRangeSlots; const readBoxIds = async (port) => { const data = await (0, msp_1.execute)(port, { code: codes_1.default.MSP_BOXIDS }); return [...new Uint8Array(data.buffer)]; }; exports.readBoxIds = readBoxIds; //# sourceMappingURL=index.js.map