mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-16 12:55:13 +03:00
Use MSPV2_SET_SETTING to set small_angle to 180 on FW presets
- Add a json file with the types of all settings, generated by the settings generator on INAV. - Implement MSPV2_SETTING and MSPV2_SET_SETTING, which gives us access to any value exposed via settings. - Use this to set small_angle to 180 in FW presets.
This commit is contained in:
parent
12cf9fe2e5
commit
a44a290c8c
6 changed files with 1798 additions and 2 deletions
|
@ -190,6 +190,7 @@ gulp.task('dist-build', ['build'], function() {
|
||||||
'./build/*',
|
'./build/*',
|
||||||
'./src/css/font-awesome/fonts/*',
|
'./src/css/font-awesome/fonts/*',
|
||||||
'./src/css/opensans_webfontkit/*.{eot,svg,ttf,woff,woff2}',
|
'./src/css/opensans_webfontkit/*.{eot,svg,ttf,woff,woff2}',
|
||||||
|
'./resources/*.json',
|
||||||
'./resources/models/*',
|
'./resources/models/*',
|
||||||
'./resources/osd/*.mcm',
|
'./resources/osd/*.mcm',
|
||||||
'./resources/motor_order/*.svg',
|
'./resources/motor_order/*.svg',
|
||||||
|
|
|
@ -283,6 +283,7 @@ var MSP = {
|
||||||
|
|
||||||
switch (this.protocolVersion) {
|
switch (this.protocolVersion) {
|
||||||
case this.constants.PROTOCOL_V1:
|
case this.constants.PROTOCOL_V1:
|
||||||
|
// TODO: Error if code is < 255 and MSPv1 is requested
|
||||||
length = payloadLength + 6;
|
length = payloadLength + 6;
|
||||||
buffer = new ArrayBuffer(length);
|
buffer = new ArrayBuffer(length);
|
||||||
view = new Uint8Array(buffer);
|
view = new Uint8Array(buffer);
|
||||||
|
|
|
@ -140,5 +140,9 @@ var MSPCodes = {
|
||||||
MSP_BF_CONFIG: 66, // baseflight-specific settings that aren't covered elsewhere
|
MSP_BF_CONFIG: 66, // baseflight-specific settings that aren't covered elsewhere
|
||||||
MSP_SET_BF_CONFIG: 67, // baseflight-specific settings save
|
MSP_SET_BF_CONFIG: 67, // baseflight-specific settings save
|
||||||
MSP_SET_REBOOT: 68, // reboot settings
|
MSP_SET_REBOOT: 68, // reboot settings
|
||||||
MSP_BF_BUILD_INFO: 69 // build date as well as some space for future expansion
|
MSP_BF_BUILD_INFO: 69, // build date as well as some space for future expansion
|
||||||
|
|
||||||
|
// INAV specific codes
|
||||||
|
MSPV2_SETTING: 0x1003,
|
||||||
|
MSPV2_SET_SETTING: 0x1004,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1063,6 +1063,11 @@ var mspHelper = (function (gui) {
|
||||||
case MSPCodes.MSP_OSD_CHAR_WRITE:
|
case MSPCodes.MSP_OSD_CHAR_WRITE:
|
||||||
console.log('OSD char uploaded');
|
console.log('OSD char uploaded');
|
||||||
break;
|
break;
|
||||||
|
case MSPCodes.MSPV2_SETTING:
|
||||||
|
break;
|
||||||
|
case MSPCodes.MSPV2_SET_SETTING:
|
||||||
|
console.log("Setting set");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.log('Unknown code detected: ' + dataHandler.code);
|
console.log('Unknown code detected: ' + dataHandler.code);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2240,5 +2245,113 @@ var mspHelper = (function (gui) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self._getSetting = function(name) {
|
||||||
|
if (!this._settings) {
|
||||||
|
var $this = this;
|
||||||
|
$.ajax({
|
||||||
|
url: chrome.extension.getURL('/resources/settings.json'),
|
||||||
|
dataType: 'json',
|
||||||
|
async: false,
|
||||||
|
success: function(data) {
|
||||||
|
$this._settings = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return this._settings[name];
|
||||||
|
};
|
||||||
|
|
||||||
|
self._encodeSettingName = function(name, data) {
|
||||||
|
for (var ii = 0; ii < name.length; ii++) {
|
||||||
|
data.push(name.charCodeAt(ii));
|
||||||
|
}
|
||||||
|
data.push(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.getSetting = function(name, callback) {
|
||||||
|
var setting = this._getSetting(name);
|
||||||
|
var data = [];
|
||||||
|
this._encodeSettingName(name, data);
|
||||||
|
MSP.send_message(MSPCodes.MSPV2_SETTING, data, false, function(resp) {
|
||||||
|
var value;
|
||||||
|
switch (setting.type) {
|
||||||
|
case "uint8_t":
|
||||||
|
value = resp.data.getUint8(0);
|
||||||
|
break;
|
||||||
|
case "int8_t":
|
||||||
|
value = resp.data.getInt8(0);
|
||||||
|
break;
|
||||||
|
case "uint16_t":
|
||||||
|
value = resp.data.getUint16(0, true);
|
||||||
|
break;
|
||||||
|
case "int16_t":
|
||||||
|
value = resp.data.getInt16(0, true);
|
||||||
|
break;
|
||||||
|
case "uint32_t":
|
||||||
|
value = resp.data.getUint32(0, true);
|
||||||
|
break;
|
||||||
|
case "float":
|
||||||
|
var fi32 = resp.data.getUint32(0, true);
|
||||||
|
var buf = new ArrayBuffer(4);
|
||||||
|
(new Uint32Array(buf))[0] = fi32;
|
||||||
|
value = (new Float32Array(buf))[0];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw "Unknown setting type " + setting.type;
|
||||||
|
}
|
||||||
|
if (setting.table) {
|
||||||
|
value = setting.table.values[value];
|
||||||
|
}
|
||||||
|
if (callback) {
|
||||||
|
callback(value, setting);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
self.encodeSetting = function(name, value) {
|
||||||
|
var setting = this._getSetting(name);
|
||||||
|
if (setting.table) {
|
||||||
|
var found = false;
|
||||||
|
for (var ii = 0; ii < setting.table.values.length; ii++) {
|
||||||
|
if (setting.table.values[ii] == value) {
|
||||||
|
value = ii;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
throw 'Invalid value "' + value + '" for setting ' + name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = [];
|
||||||
|
this._encodeSettingName(name, data);
|
||||||
|
switch (setting.type) {
|
||||||
|
case "uint8_t":
|
||||||
|
case "int8_t":
|
||||||
|
data.push8(value);
|
||||||
|
break;
|
||||||
|
case "uint16_t":
|
||||||
|
case "int16_t":
|
||||||
|
data.push16(value);
|
||||||
|
break;
|
||||||
|
case "uint32_t":
|
||||||
|
data.push32(value);
|
||||||
|
break;
|
||||||
|
case "float":
|
||||||
|
var buf = new ArrayBuffer(4);
|
||||||
|
(new Float32Array(buf))[0] = value;
|
||||||
|
var if32 = (new Uint32Array(buf))[0];
|
||||||
|
data.push32(if32);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw "Unknown setting type " + setting.type;
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
self.setSetting = function(name, value, callback) {
|
||||||
|
var data = this.encodeSetting(name, value);
|
||||||
|
MSP.send_message(MSPCodes.MSPV2_SET_SETTING, data, false, callback);
|
||||||
|
};
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
})(GUI);
|
})(GUI);
|
||||||
|
|
1646
resources/settings.json
Normal file
1646
resources/settings.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -44,6 +44,27 @@ presets.defaultValues = {
|
||||||
FC_CONFIG: {"loopTime": 2000}
|
FC_CONFIG: {"loopTime": 2000}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
presets.settings = {
|
||||||
|
COMMON: {
|
||||||
|
|
||||||
|
},
|
||||||
|
FW: {
|
||||||
|
"small_angle": 180,
|
||||||
|
},
|
||||||
|
MR: {
|
||||||
|
},
|
||||||
|
get: function(mixerType) {
|
||||||
|
var settings = {};
|
||||||
|
$.extend(settings, presets.settings.COMMON);
|
||||||
|
if (mixerType == 'multirotor') {
|
||||||
|
$.extend(settings, presets.settings.MR);
|
||||||
|
} else {
|
||||||
|
$.extend(settings, presets.settings.FW);
|
||||||
|
}
|
||||||
|
return settings;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When defining a preset, following fields are required:
|
* When defining a preset, following fields are required:
|
||||||
*
|
*
|
||||||
|
@ -505,7 +526,17 @@ TABS.profiles.initialize = function (callback, scrollPosition) {
|
||||||
window[setting.group][setting.field] = setting.value;
|
window[setting.group][setting.field] = setting.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var promises = {};
|
||||||
|
if (semver.gt(CONFIG.flightControllerVersion, '1.7.3')) {
|
||||||
|
var settings = presets.settings.get(currentPreset.type);
|
||||||
|
Object.keys(settings).forEach(function(key, ii) {
|
||||||
|
var value = settings[key];
|
||||||
|
promises[key] = MSP.promise(MSPCodes.MSPV2_SET_SETTING, mspHelper.encodeSetting(key, value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Promise.props(promises).then(function () {
|
||||||
saveChainer.execute();
|
saveChainer.execute();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillPresetDescription(preset) {
|
function fillPresetDescription(preset) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue