@betaflight/api
Version:
A high-level API to read data from betaflight flight controllers
57 lines • 2.05 kB
JavaScript
import { execute, WriteBuffer, apiVersion } from "@betaflight/msp";
import semver from "semver";
import codes from "../codes";
import { times } from "../utils";
import { Modes } from "./types";
export { Modes };
export const readModeRangeSlots = async (port) => {
const api = apiVersion(port);
const [data, extraData] = await Promise.all([
execute(port, { code: codes.MSP_MODE_RANGES }),
semver.gte(api, "1.41.0")
? execute(port, { code: codes.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 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);
};
export const writeModeRangeSlot = async (port, slotPosition, slot) => {
const buffer = new 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 execute(port, { code: codes.MSP_SET_MODE_RANGE, data: buffer });
};
export const writeModeRangeSlots = async (port, slots) => {
await Promise.all(slots.map((slot, i) => writeModeRangeSlot(port, i, slot)));
};
export const readBoxIds = async (port) => {
const data = await execute(port, { code: codes.MSP_BOXIDS });
return [...new Uint8Array(data.buffer)];
};
//# sourceMappingURL=index.js.map