CF/BF - Update for API v0.35.0 - OSD SLAVE.

10.3.x-maintenance
Hydra 2017-04-08 21:40:16 +01:00 committed by Michael Keller
parent 158b36cd9c
commit 0520f0d473
8 changed files with 113 additions and 39 deletions

View File

@ -74,7 +74,8 @@ var FC = {
accelerometerTrims: [0, 0], accelerometerTrims: [0, 0],
name: '', name: '',
numProfiles: 3, numProfiles: 3,
rateProfile: 0 rateProfile: 0,
boardType: 0,
}; };
FEATURE_CONFIG = { FEATURE_CONFIG = {

View File

@ -1,3 +1,4 @@
'use strict'; 'use strict';
var TABS = {}; // filled by individual tab js file var TABS = {}; // filled by individual tab js file
@ -12,12 +13,14 @@ var GUI_control = function () {
this.operating_system; this.operating_system;
this.interval_array = []; this.interval_array = [];
this.timeout_array = []; this.timeout_array = [];
this.defaultAllowedTabsWhenDisconnected = [ this.defaultAllowedTabsWhenDisconnected = [
'landing', 'landing',
'firmware_flasher', 'firmware_flasher',
'help' 'help'
]; ];
this.defaultAllowedTabsWhenConnected = [ this.defaultAllowedFCTabsWhenConnected = [
'setup',
'failsafe', 'failsafe',
'transponder', 'transponder',
'osd', 'osd',
@ -37,7 +40,14 @@ var GUI_control = function () {
'receiver', 'receiver',
'sensors', 'sensors',
'servos', 'servos',
'setup' ];
this.defaultAllowedOSDTabsWhenConnected = [
'setup',
'osd',
'power',
'sensors',
'transponder',
'cli',
]; ];
this.allowedTabs = this.defaultAllowedTabsWhenDisconnected; this.allowedTabs = this.defaultAllowedTabsWhenDisconnected;

View File

@ -611,6 +611,12 @@ MspHelper.prototype.process_data = function(dataHandler) {
} }
CONFIG.boardIdentifier = identifier; CONFIG.boardIdentifier = identifier;
CONFIG.boardVersion = data.readU16(); CONFIG.boardVersion = data.readU16();
if (semver.gte(CONFIG.apiVersion, "1.35.0")) {
CONFIG.boardType = data.readU8();
} else {
CONFIG.boardType = 0;
}
break; break;
case MSPCodes.MSP_NAME: case MSPCodes.MSP_NAME:

View File

@ -263,9 +263,32 @@ function onConnect() {
GUI.timeout_remove('connecting'); // kill connecting timer GUI.timeout_remove('connecting'); // kill connecting timer
$('div#connectbutton a.connect_state').text(chrome.i18n.getMessage('disconnect')).addClass('active'); $('div#connectbutton a.connect_state').text(chrome.i18n.getMessage('disconnect')).addClass('active');
$('div#connectbutton a.connect').addClass('active'); $('div#connectbutton a.connect').addClass('active');
$('#tabs ul.mode-disconnected').hide(); $('#tabs ul.mode-disconnected').hide();
$('#tabs ul.mode-connected-cli').show(); $('#tabs ul.mode-connected-cli').show();
// show only appropriate tabs
$('#tabs ul.mode-connected li').hide();
$('#tabs ul.mode-connected li').filter(function (index) {
var classes = $(this).attr("class").split(/\s+/);
var found = false;
$.each(GUI.allowedTabs, function (index, value) {
var tabName = "tab_" + value;
if ($.inArray(tabName, classes) >= 0) {
found = true;
}
});
if (CONFIG.boardType == 0) {
if (classes.indexOf("osd-required") >= 0) {
found = false;
}
}
return found;
}).show();
if (CONFIG.flightControllerVersion !== '') { if (CONFIG.flightControllerVersion !== '') {
FEATURE_CONFIG.features = new Features(CONFIG); FEATURE_CONFIG.features = new Features(CONFIG);
@ -277,8 +300,10 @@ function onConnect() {
MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false); MSP.send_message(MSPCodes.MSP_STATUS_EX, false, false);
MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false); MSP.send_message(MSPCodes.MSP_DATAFLASH_SUMMARY, false, false);
if (CONFIG.boardType == 0 || CONFIG.boardType == 2) {
startLiveDataRefreshTimer(); startLiveDataRefreshTimer();
} }
}
var sensor_state = $('#sensor-status'); var sensor_state = $('#sensor-status');
sensor_state.show(); sensor_state.show();
@ -349,7 +374,7 @@ function sensor_status(sensors_detected) {
$('.accicon', e_sensor_status).removeClass('active'); $('.accicon', e_sensor_status).removeClass('active');
} }
if (true) { // Gyro status is not reported by FC if (CONFIG.boardType == 0 || CONFIG.boardType == 2) { // Gyro status is not reported by FC
$('.gyro', e_sensor_status).addClass('on'); $('.gyro', e_sensor_status).addClass('on');
$('.gyroicon', e_sensor_status).addClass('active'); $('.gyroicon', e_sensor_status).addClass('active');
} else { } else {

View File

@ -466,12 +466,13 @@ function updateTabList(features) {
} else { } else {
$('#tabs ul.mode-connected li.tab_transponder').hide(); $('#tabs ul.mode-connected li.tab_transponder').hide();
} }
/* FIXME this approach doesn't work for OSD SLAVE boards as they don't have an 'OSD' feature.
if (features.isEnabled('OSD')) { if (features.isEnabled('OSD')) {
$('#tabs ul.mode-connected li.tab_osd').show(); $('#tabs ul.mode-connected li.tab_osd').show();
} else { } else {
$('#tabs ul.mode-connected li.tab_osd').hide(); $('#tabs ul.mode-connected li.tab_osd').hide();
} }
*/
} }
function zeroPad(value, width) { function zeroPad(value, width) {

View File

@ -11,7 +11,7 @@
<p class="note">Note that some flight controllers have an onboard <a href="https://www.youtube.com/watch?v=ikKH_6SQ-Tk" target="_blank">MinimOSD</a> that can be flashed and configured with <a href="https://github.com/ShikOfTheRa/scarab-osd/releases/latest" target="_blank">scarab-osd</a>, however the MinimOSD cannot be configured through this interface.</p> <p class="note">Note that some flight controllers have an onboard <a href="https://www.youtube.com/watch?v=ikKH_6SQ-Tk" target="_blank">MinimOSD</a> that can be flashed and configured with <a href="https://github.com/ShikOfTheRa/scarab-osd/releases/latest" target="_blank">scarab-osd</a>, however the MinimOSD cannot be configured through this interface.</p>
</div> </div>
<div class="supported hide"> <div class="supported hide">
<div class="cf_column third_left elements"> <div class="cf_column third_left elements requires-osd-feature">
<div class="spacer_right"> <div class="spacer_right">
<div class="gui_box grey"> <div class="gui_box grey">
<div <div
@ -28,7 +28,7 @@
</div> </div>
</div> </div>
<div class="cf_column twothird"> <div class="cf_column twothird">
<div class="gui_box grey preview" style="float: left;"> <div class="gui_box grey preview requires-osd-feature" style="float: left;">
<div class="gui_box_titlebar image"> <div class="gui_box_titlebar image">
<div class="spacer_box_title"> <div class="spacer_box_title">
Preview <span>(drag to change position)</span><span class="preview-logo cf_tip" title="Show or hide the logo in the preview window. This will not change any settings on the flight controller."></span> Preview <span>(drag to change position)</span><span class="preview-logo cf_tip" title="Show or hide the logo in the preview window. This will not change any settings on the flight controller."></span>
@ -42,7 +42,7 @@
</div> </div>
</div> </div>
<div class="cf_column third_right" style="width: calc(100% - 377px);"> <div class="cf_column third_right" style="width: calc(100% - 377px);">
<div class="gui_box grey"> <div class="gui_box grey requires-max7456">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title">Video <div class="spacer_box_title">Video
Format Format
@ -52,7 +52,7 @@
<div class="video-types"></div> <div class="video-types"></div>
</div> </div>
</div> </div>
<div class="gui_box grey units-container" style="display:none;"> <div class="gui_box grey units-container requires-osd-feature" style="display:none;">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title">Units <div class="spacer_box_title">Units
</div> </div>
@ -61,7 +61,7 @@
<div class="units"></div> <div class="units"></div>
</div> </div>
</div> </div>
<div class="gui_box grey alarms-container" style="display:none;"> <div class="gui_box grey alarms-container requires-osd-feature" style="display:none;">
<div class="gui_box_titlebar"> <div class="gui_box_titlebar">
<div class="spacer_box_title"> <div class="spacer_box_title">
Alarms Alarms
@ -117,10 +117,10 @@
</div> </div>
</div> </div>
<div class="content_toolbar supported hide" style="left:0;"> <div class="content_toolbar supported hide" style="left:0;">
<div class="btn"> <div class="btn save">
<a class="active save" href="#" >Save</a> <a class="active save" href="#" >Save</a>
</div> </div>
<div class="btn"> <div class="btn requires-max7456">
<a class="fonts" id="fontmanager" href="#" >Font Manager</a> <a class="fonts" id="fontmanager" href="#" >Font Manager</a>
</div> </div>
</div> </div>

View File

@ -556,7 +556,7 @@ OSD.msp = {
}, },
encodeOther: function() { encodeOther: function() {
var result = [-1, OSD.data.video_system]; var result = [-1, OSD.data.video_system];
if (semver.gte(CONFIG.apiVersion, "1.21.0")) { if (OSD.data.state.haveOsdFeature && semver.gte(CONFIG.apiVersion, "1.21.0")) {
result.push8(OSD.data.unit_mode); result.push8(OSD.data.unit_mode);
// watch out, order matters! match the firmware // watch out, order matters! match the firmware
result.push8(OSD.data.alarms.rssi.value); result.push8(OSD.data.alarms.rssi.value);
@ -576,10 +576,12 @@ OSD.msp = {
decode: function(payload) { decode: function(payload) {
var view = payload.data; var view = payload.data;
var d = OSD.data; var d = OSD.data;
d.compiled_in = view.readU8(); d.flags = view.readU8();
d.video_system = view.readU8();
if (semver.gte(CONFIG.apiVersion, "1.21.0")) { if (d.flags > 0) {
if (payload.length > 1) {
d.video_system = view.readU8();
if (semver.gte(CONFIG.apiVersion, "1.21.0") && bit_check(d.flags, 0)) {
d.unit_mode = view.readU8(); d.unit_mode = view.readU8();
d.alarms = {}; d.alarms = {};
d.alarms['rssi'] = { display_name: 'Rssi', value: view.readU8() }; d.alarms['rssi'] = { display_name: 'Rssi', value: view.readU8() };
@ -587,7 +589,17 @@ OSD.msp = {
d.alarms['time'] = { display_name: 'Minutes', value: view.readU16() }; d.alarms['time'] = { display_name: 'Minutes', value: view.readU16() };
d.alarms['alt'] = { display_name: 'Altitude', value: view.readU16() }; d.alarms['alt'] = { display_name: 'Altitude', value: view.readU16() };
} }
}
}
d.state = {};
d.state.haveSomeOsd = (d.flags != 0)
d.state.haveMax7456Video = bit_check(d.flags, 4) || (d.flags == 1 && semver.lt(CONFIG.apiVersion, "1.34.0"));
d.state.haveOsdFeature = bit_check(d.flags, 0) || (d.flags == 1 && semver.lt(CONFIG.apiVersion, "1.34.0"));
d.state.isOsdSlave = bit_check(d.flags, 1) && semver.gte(CONFIG.apiVersion, "1.34.0");
d.display_items = []; d.display_items = [];
// start at the offset from the other fields // start at the offset from the other fields
while (view.offset < view.byteLength && d.display_items.length < OSD.constants.DISPLAY_FIELDS.length) { while (view.offset < view.byteLength && d.display_items.length < OSD.constants.DISPLAY_FIELDS.length) {
var v = null; var v = null;
@ -685,14 +697,16 @@ TABS.osd.initialize = function (callback) {
// ask for the OSD config data // ask for the OSD config data
MSP.promise(MSPCodes.MSP_OSD_CONFIG) MSP.promise(MSPCodes.MSP_OSD_CONFIG)
.then(function(info) { .then(function(info) {
OSD.chooseFields(); OSD.chooseFields();
// fc responsed with short message: osd unsupported
if (info.length < 4) { OSD.msp.decode(info);
if (OSD.data.state.haveSomeOsd == 0) {
$('.unsupported').fadeIn(); $('.unsupported').fadeIn();
return; return;
} }
$('.supported').fadeIn(); $('.supported').fadeIn();
OSD.msp.decode(info);
// show Betaflight logo in preview // show Betaflight logo in preview
var $previewLogo = $('.preview-logo').empty(); var $previewLogo = $('.preview-logo').empty();
@ -763,6 +777,14 @@ TABS.osd.initialize = function (callback) {
} }
} }
if (!OSD.data.state.haveMax7456Video) {
$('.requires-max7456').hide();
}
if (!OSD.data.state.haveOsdFeature) {
$('.requires-osd-feature').hide();
}
// display fields on/off and position // display fields on/off and position
var $displayFields = $('.display-fields').empty(); var $displayFields = $('.display-fields').empty();
for (let field of OSD.data.display_items) { for (let field of OSD.data.display_items) {

View File

@ -185,6 +185,9 @@ TABS.sensors.initialize = function (callback) {
// disable graphs for sensors that are missing // disable graphs for sensors that are missing
var checkboxes = $('.tab-sensors .info .checkboxes input'); var checkboxes = $('.tab-sensors .info .checkboxes input');
checkboxes.parent().show();
if (CONFIG.boardType == 0 || CONFIG.boardType == 2) {
if (!have_sensor(CONFIG.activeSensors, 'acc')) { if (!have_sensor(CONFIG.activeSensors, 'acc')) {
checkboxes.eq(1).prop('disabled', true); checkboxes.eq(1).prop('disabled', true);
} }
@ -197,6 +200,12 @@ TABS.sensors.initialize = function (callback) {
if (!have_sensor(CONFIG.activeSensors, 'sonar')) { if (!have_sensor(CONFIG.activeSensors, 'sonar')) {
checkboxes.eq(4).prop('disabled', true); checkboxes.eq(4).prop('disabled', true);
} }
} else {
for (var i = 0; i <= 4; i++) {
checkboxes.eq(i).prop('disabled', true);
checkboxes.eq(i).parent().hide();
}
}
$('.tab-sensors .info .checkboxes input').change(function () { $('.tab-sensors .info .checkboxes input').change(function () {
var enable = $(this).prop('checked'); var enable = $(this).prop('checked');