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