From 22088f5aea7c554a652ccff13a681f31c9a5d7a3 Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Thu, 1 Feb 2024 00:50:02 +0100 Subject: [PATCH] Add buildOptions from MSP --- src/js/fc.js | 68 ++++++++++++++++++++++++++++++++++++++++ src/js/msp/MSPHelper.js | 16 ++++++++++ src/js/serial_backend.js | 3 +- 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/src/js/fc.js b/src/js/fc.js index df15a2a2e13..1a503993b80 100644 --- a/src/js/fc.js +++ b/src/js/fc.js @@ -67,6 +67,59 @@ const INITIAL_BATTERY_CONFIG = { currentMeterSource: 0, }; +const FIRMWARE_BUILD_OPTIONS = { + // Radio Protocols + USE_SERIALRX_CRSF: 4097, + USE_SERIALRX_FPORT: 4098, + USE_SERIALRX_GHST: 4099, + USE_SERIALRX_IBUS: 4100, + USE_SERIALRX_JETIEXBUS: 4101, + USE_RX_PPM: 4102, + USE_SERIALRX_SBUS: 4103, + USE_SERIALRX_SPEKTRUM: 4104, + USE_SERIALRX_SRXL2: 4105, + USE_SERIALRX_SUMD: 4106, + USE_SERIALRX_SUMH: 4107, + USE_SERIALRX_XBUS: 4108, + + // Motor Protocols + USE_BRUSHED: 8230, + USE_DSHOT: 8231, + USE_MULTISHOT: 8232, + USE_ONESHOT: 8233, + USE_PROSHOT: 8234, + USE_PWM_OUTPUT: 8235, + + // Telemetry Protocols + USE_TELEMETRY_FRSKY_HUB: 12301, + USE_TELEMETRY_HOTT: 12302, + USE_TELEMETRY_IBUS_EXTENDED:12303, + USE_TELEMETRY_LTM: 12304, + USE_TELEMETRY_MAVLINK: 12305, + USE_TELEMETRY_SMARTPORT: 12306, + USE_TELEMETRY_SRXL: 12307, + + // General Options + USE_ACRO_TRAINER: 16404, + USE_AKK_SMARTAUDIO: 16405, + USE_BATTERY_CONTINUE: 16406, + USE_CAMERA_CONTROL: 16407, + USE_DASHBOARD: 16408, + USE_EMFAT_TOOLS: 16409, + USE_ESCSERIAL_SIMONK: 16410, + USE_FRSKYOSD: 16411, + USE_GPS: 16412, + USE_LED_STRIP: 16413, + USE_LED_STRIP_64: 16414, + USE_MAG: 16415, + USE_OSD_SD: 16416, + USE_OSD_HD: 16417, + USE_PINIO: 16418, + USE_RACE_PRO: 16419, + USE_SERVOS: 16420, + USE_VTX: 16421, +}; + const FC = { // define all the global variables that are uses to hold FC state @@ -87,6 +140,7 @@ const FC = { // Shallow copy of original config and added getter // getter allows this to be used with simple dot notation // and bridges the vue and rest of the code + BUILD_OPTIONS: {...FIRMWARE_BUILD_OPTIONS}, CONFIG: { ...INITIAL_CONFIG, get hardwareName() { @@ -823,6 +877,20 @@ const FC = { MOTOR_PROTOCOL_DISABLED: 1, }, + processBuildOptions() { + let buildOptions = []; + + for (const [key, value] of Object.entries(FIRMWARE_BUILD_OPTIONS)) { + for (const option of this.CONFIG.buildOptions) { + if (option === value) { + buildOptions.push(key); + } + } + } + + this.CONFIG.buildOptions = buildOptions; + }, + boardHasVcp() { return bit_check(this.CONFIG.targetCapabilities, this.TARGET_CAPABILITIES_FLAGS.HAS_VCP); }, diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index 0b74823a774..d1bff5c781d 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -782,6 +782,22 @@ MspHelper.prototype.process_data = function(dataHandler) { buff.push(data.readU8()); } FC.CONFIG.buildInfo = String.fromCharCode.apply(null, buff); + + const gitRevisionLength = 7; + buff = []; + for (let i = 0; i < gitRevisionLength; i++) { + buff.push(data.readU8()); + } + console.log("Fw git rev:", String.fromCharCode.apply(null, buff)); + + if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_46)) { + let option = data.readU16(); + while (option) { + FC.CONFIG.buildOptions.push(option); + option = data.readU16(); + } + } + break; case MSPCodes.MSP_BOARD_INFO: diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index 3930535779b..7b82bbe8491 100644 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -451,6 +451,7 @@ function processBoardInfo() { gui_log(i18n.getMessage('boardInfoReceived', [FC.getHardwareName(), FC.CONFIG.boardVersion])); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_46)) { + FC.processBuildOptions(); checkReportProblems(); } else { processCustomDefaults(); @@ -548,7 +549,7 @@ async function processUid() { gui_log(i18n.getMessage('uniqueDeviceIdReceived', FC.CONFIG.deviceIdentifier)); - if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { + if (semver.eq(FC.CONFIG.apiVersion, API_VERSION_1_45)) { processBuildConfiguration(); } else { processCraftName();