@betaflight/api
Version:
A high-level API to read data from betaflight flight controllers
67 lines • 2.81 kB
JavaScript
;
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