diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js index decd98b4..f0d26725 100644 --- a/src/js/backup_restore.js +++ b/src/js/backup_restore.js @@ -196,11 +196,11 @@ function configuration_backup(callback) { return MSP.promise(MSPCodes.MSP_SENSOR_CONFIG); }).then(function() { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME)) + ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.CRAFT_NAME)) : MSP.promise(MSPCodes.MSP_NAME); }).then(function() { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_PILOT_NAME)) : Promise.resolve(true); + ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.PILOT_NAME)) : Promise.resolve(true); }).then(function() { return MSP.promise(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG); }).then(function() { @@ -812,8 +812,8 @@ function configuration_restore(callback) { function update_unique_data_list() { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - uniqueData.push([MSPCodes.MSP2_SET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME]); - uniqueData.push([MSPCodes.MSP2_SET_TEXT, MSPCodes.MSP2TEXT_PILOT_NAME]); + uniqueData.push([MSPCodes.MSP2_SET_TEXT, MSPCodes.CRAFT_NAME]); + uniqueData.push([MSPCodes.MSP2_SET_TEXT, MSPCodes.PILOT_NAME]); } else { uniqueData.push(MSPCodes.MSP_SET_NAME); } diff --git a/src/js/fc.js b/src/js/fc.js index a41ea2b0..6298ad89 100644 --- a/src/js/fc.js +++ b/src/js/fc.js @@ -21,6 +21,8 @@ const INITIAL_CONFIG = { craftName: '', displayName: '', // present for backwards compatibility before MSP v1.45 pilotName: '', + pidProfileNames: ["", "", "", ""], + rateProfileNames: ["", "", "", ""], numProfiles: 3, rateProfile: 0, boardType: 0, diff --git a/src/js/msp/MSPCodes.js b/src/js/msp/MSPCodes.js index 29266b73..610221ea 100644 --- a/src/js/msp/MSPCodes.js +++ b/src/js/msp/MSPCodes.js @@ -195,10 +195,13 @@ const MSPCodes = { MSP2_SET_MOTOR_OUTPUT_REORDERING: 0x3002, MSP2_SEND_DSHOT_COMMAND: 0x3003, MSP2_GET_VTX_DEVICE_STATUS: 0x3004, + MSP2_GET_OSD_WARNINGS: 0x3005, MSP2_GET_TEXT: 0x3006, MSP2_SET_TEXT: 0x3007, // MSP2_GET_TEXT and MSP2_SET_TEXT variable types - MSP2TEXT_PILOT_NAME: 1, - MSP2TEXT_CRAFT_NAME: 2, + PILOT_NAME: 1, + CRAFT_NAME: 2, + PID_PROFILE_NAME: 3, + RATE_PROFILE_NAME: 4, }; diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index 54b0a3b6..2036b083 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -1,6 +1,5 @@ 'use strict'; - // Used for LED_STRIP const ledDirectionLetters = ['n', 'e', 's', 'w', 'u', 'd']; // in LSB bit order const ledFunctionLetters = ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l']; // in LSB bit order @@ -52,6 +51,31 @@ function MspHelper() { self.SIGNATURE_LENGTH = 32; self.mspMultipleCache = []; + + self.setText = function(buffer, type, config, length) { + // type byte + buffer.push8(type); + + const size = Math.min(length, config.length); + // length byte followed by the actual characters + buffer.push8(size); + + for (let i = 0; i < size; i++) { + buffer.push8(config.charCodeAt(i)); + } + }; + + self.getText = function(data) { + // length byte followed by the actual characters + const size = data.readU8() || 0; + let str = ''; + + for (let i = 0; i < size; i++) { + str += String.fromCharCode(data.readU8()); + } + + return str; + }; } @@ -922,20 +946,25 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP2_GET_TEXT: // type byte const textType = data.readU8(); - // length byte followed by the actual characters - const textLength = data.readU8() || 0; - if (textType === MSPCodes.MSP2TEXT_PILOT_NAME) { - FC.CONFIG.pilotName = ''; - for (let i = 0; i < textLength; i++) { - FC.CONFIG.pilotName += String.fromCharCode(data.readU8()); - } - } else if (textType === MSPCodes.MSP2TEXT_CRAFT_NAME) { - FC.CONFIG.craftName = ''; - for (let i = 0; i < textLength; i++) { - FC.CONFIG.craftName += String.fromCharCode(data.readU8()); - } + switch(textType) { + case MSPCodes.PILOT_NAME: + FC.CONFIG.pilotName = self.getText(data); + break; + case MSPCodes.CRAFT_NAME: + FC.CONFIG.craftName = self.getText(data); + break; + case MSPCodes.PID_PROFILE_NAME: + FC.CONFIG.pidProfileNames[FC.CONFIG.profile] = self.getText(data); + break; + case MSPCodes.RATE_PROFILE_NAME: + FC.CONFIG.rateProfileNames[FC.CONFIG.rateProfile] = self.getText(data); + break; + default: + console.log('Unsupport text type'); + break; } + break; case MSPCodes.MSP_SET_CHANNEL_FORWARDING: @@ -2352,40 +2381,26 @@ MspHelper.prototype.crunch = function(code, modifierCode = undefined) { break; case MSPCodes.MSP2_GET_TEXT: - if (modifierCode === MSPCodes.MSP2TEXT_PILOT_NAME) { - // type byte - buffer.push8(MSPCodes.MSP2TEXT_PILOT_NAME); - } else if (modifierCode === MSPCodes.MSP2TEXT_CRAFT_NAME) { - // type byte - buffer.push8(MSPCodes.MSP2TEXT_CRAFT_NAME); - } + buffer.push8(modifierCode); break; case MSPCodes.MSP2_SET_TEXT: - if (modifierCode === MSPCodes.MSP2TEXT_PILOT_NAME) { - // type byte - buffer.push8(MSPCodes.MSP2TEXT_PILOT_NAME); - - const MAX_NAME_LENGTH = 16; - const pilotNameLength = Math.min(MAX_NAME_LENGTH, FC.CONFIG.pilotName.length); - // length byte followed by the actual characters - buffer.push8(pilotNameLength); - - for (let i = 0; i < pilotNameLength; i++) { - buffer.push8(FC.CONFIG.pilotName.charCodeAt(i)); - } - } else if (modifierCode === MSPCodes.MSP2TEXT_CRAFT_NAME) { - // type byte - buffer.push8(MSPCodes.MSP2TEXT_CRAFT_NAME); - - const MAX_NAME_LENGTH = 16; - const craftNameLength = Math.min(MAX_NAME_LENGTH, FC.CONFIG.craftName.length); - // length byte followed by the actual characters - buffer.push8(craftNameLength); - - for (let i = 0; i < craftNameLength; i++) { - buffer.push8(FC.CONFIG.craftName.charCodeAt(i)); - } + switch (modifierCode) { + case MSPCodes.PILOT_NAME: + self.setText(buffer, modifierCode, FC.CONFIG.pilotName, 16); + break; + case MSPCodes.CRAFT_NAME: + self.setText(buffer, modifierCode, FC.CONFIG.craftName, 16); + break; + case MSPCodes.PID_PROFILE_NAME: + self.setText(buffer, modifierCode, FC.CONFIG.pidProfileNames[FC.CONFIG.profile], 8); + break; + case MSPCodes.RATE_PROFILE_NAME: + self.setText(buffer, modifierCode, FC.CONFIG.pidProfileNames[FC.CONFIG.rateProfile], 8); + break; + default: + console.log('Unsupport text type'); + break; } break; diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index b96a9786..65bea485 100644 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -454,24 +454,15 @@ function processUid() { async function processCraftName() { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - await MSP.promise( - MSPCodes.MSP2_GET_TEXT, - mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME), - ); + await MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.CRAFT_NAME)); } else { await MSP.promise(MSPCodes.MSP_NAME); } - GUI.log(i18n.getMessage('craftNameReceived', semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? [FC.CONFIG.craftName] - : [FC.CONFIG.name], - )); + GUI.log(i18n.getMessage('craftNameReceived', semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) ? [FC.CONFIG.craftName] : [FC.CONFIG.name])); if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - await MSP.promise( - MSPCodes.MSP2_GET_TEXT, - mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_PILOT_NAME), - ); + await MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.PILOT_NAME)); } FC.CONFIG.armingDisabled = false; diff --git a/src/js/tabs/configuration.js b/src/js/tabs/configuration.js index c98fdefc..517bfb89 100644 --- a/src/js/tabs/configuration.js +++ b/src/js/tabs/configuration.js @@ -34,11 +34,11 @@ configuration.initialize = function (callback) { ? MSP.promise(MSPCodes.MSP_NAME) : Promise.resolve(true); }) .then(() => { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME)) + ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.CRAFT_NAME)) : Promise.resolve(true); }) .then(() => { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_31) ? MSP.promise(MSPCodes.MSP_RX_CONFIG) : true; }) .then(() => { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_PILOT_NAME)) : Promise.resolve(true); }) + ? MSP.promise(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.PILOT_NAME)) : Promise.resolve(true); }) .then(() => { return MSP.promise(MSPCodes.MSP_ADVANCED_CONFIG); }) .then(() => { load_html(); }); } @@ -636,10 +636,10 @@ configuration.initialize = function (callback) { .then(() => { return MSP.promise(MSPCodes.MSP_SET_ARMING_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_ARMING_CONFIG)); }) .then(() => { return MSP.promise(MSPCodes.MSP_SET_SENSOR_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_SENSOR_CONFIG)); }) .then(() => { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) - ? MSP.promise(MSPCodes.MSP2_SET_TEXT, mspHelper.crunch(MSPCodes.MSP2_SET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME)) + ? MSP.promise(MSPCodes.MSP2_SET_TEXT, mspHelper.crunch(MSPCodes.MSP2_SET_TEXT, MSPCodes.CRAFT_NAME)) : MSP.promise(MSPCodes.MSP_SET_NAME, mspHelper.crunch(MSPCodes.MSP_SET_NAME)); }) .then(() => { return semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45) ? - MSP.promise(MSPCodes.MSP2_SET_TEXT, mspHelper.crunch(MSPCodes.MSP2_SET_TEXT, MSPCodes.MSP2TEXT_PILOT_NAME)) : Promise.resolve(true); }) + MSP.promise(MSPCodes.MSP2_SET_TEXT, mspHelper.crunch(MSPCodes.MSP2_SET_TEXT, MSPCodes.PILOT_NAME)) : Promise.resolve(true); }) .then(() => { return (semver.gte(FC.CONFIG.apiVersion, "1.20.0")) ? MSP.promise(MSPCodes.MSP_SET_RX_CONFIG, mspHelper.crunch(MSPCodes.MSP_SET_RX_CONFIG)) : true; }) .then(() => { return MSP.promise(MSPCodes.MSP_EEPROM_WRITE); }) .then(() => { reboot(); }); diff --git a/src/js/tabs/onboard_logging.js b/src/js/tabs/onboard_logging.js index e5348314..aaea97fd 100644 --- a/src/js/tabs/onboard_logging.js +++ b/src/js/tabs/onboard_logging.js @@ -27,12 +27,7 @@ onboard_logging.initialize = function (callback) { MSP.send_message(MSPCodes.MSP_BLACKBOX_CONFIG, false, false, function() { MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, function() { if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_45)) { - MSP.send_message( - MSPCodes.MSP2_GET_TEXT, - mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.MSP2TEXT_CRAFT_NAME), - false, - load_html, - ); + MSP.send_message(MSPCodes.MSP2_GET_TEXT, mspHelper.crunch(MSPCodes.MSP2_GET_TEXT, MSPCodes.CRAFT_NAME), false, load_html); } else { MSP.send_message(MSPCodes.MSP_NAME, false, false, load_html); }