diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 4b68d881..b368ffe1 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -2701,6 +2701,60 @@ "fixedWingNavigationConfiguration": { "message": "Fixed Wing Navigation Settings" }, + "osd_unsupported_msg1": { + "message" : "Your flight controller isn't responding to OSD commands. This probably means that it does not have an integrated OSD." + }, + "osd_unsupported_msg2": { + "message" : "Note that some flight controllers have an onboard MinimOSD that can be flashed and configured with scarab-osd, however the MinimOSD cannot be configured through this interface." + }, + "osd_elements": { + "message" : "Elements" + }, + "osd_preview_title": { + "message" : "Preview (drag to change position)" + }, + "osd_preview_title_drag":{ + "message": "" + }, + "osd_video_format": { + "message" : "Video Format" + }, + "osd_units": { + "message" : "Units" + }, + "osd_main_voltage_decimals": { + "message" : "Voltage Decimals" + }, + "osd_coordinate_digits": { + "message" : "Coordinate Digits" + }, + "osd_plus_code_digits": { + "message" : "Plus Code Digits" + }, + "osd_plus_code_short": { + "message" : "Plus Code Remove Leading Digits" + }, + "osd_crosshairs_style": { + "message" : "Crosshairs Style" + }, + "osd_left_sidebar_scroll": { + "message" : "Left Sidebar Scroll" + }, + "osd_right_sidebar_scroll": { + "message" : "Right Sidebar Scroll" + }, + "osd_crsf_lq_format": { + "message" : "Crossfire LQ Format" + }, + "osd_sidebar_scroll_arrows": { + "message" : "Sidebar Scroll Arrows" + }, + "osd_home_position_arm_screen": { + "message" : "Home Position on Arming Screen" + }, + "osd_alarms": { + "message" : "Alarms" + }, "osdLayoutDefault": { "message": "Default Layout" }, @@ -3196,6 +3250,66 @@ "osdSettingCRSF_LQ_FORMAT_HELP": { "message": "TYPE1 shows LQ% as used by TBS hardware. TYPE2 shows RF Profile Modes (2=150Hz, 1=50Hz, 0=4Hz update rates) and LQ % [0..100%]. Tracer shows RFMode 1 (1=250Hz) and LQ % [0..100%]." }, + "osd_dji_HD_FPV": { + "message" : "DJI HD FPV" + }, + "osd_dji_hide_unsupported": { + "message": "Hide unsupported elements" + }, + "osd_dji_ESC_temp": { + "message" : "Source of ESC Temperature" + }, + "osd_dji_RSSI_source": { + "message" : "Source of RSSI" + }, + "osd_dji_GPS_source": { + "message" : "Source of GPS Speed" + }, + "osd_dji_speed_source": { + "message" : "Source of 3D Speed" + }, + "osd_dji_use_craft_name_elements": { + "message" : "Use craft name for messages and additional elements.
Elements in blue appear in Craft Name." + }, + "osd_dji_adjustments": { + "message" : "Show adjustments in Craft Name" + }, + "osd_dji_cn_alternating_duration": { + "message" : "Craft Name alternating duration (in 1/10 sec)" + }, + "osd_font_default": { + "message" : "Default" + }, + "osd_font_vision": { + "message" : "Vision" + }, + "osd_font_impact": { + "message" : "Impact" + }, + "osd_font_impact_mini": { + "message" : "Impact mini" + }, + "osd_font_clarity": { + "message" : "Clarity" + }, + "osd_font_clarity_medium": { + "message" : "Clarity medium" + }, + "osd_font_bold": { + "message" : "Bold" + }, + "osd_font_large": { + "message" : "Large" + }, + "osd_font_load_file": { + "message" : "Open Font File" + }, + "osd_font_upload": { + "message" : "Upload Font" + }, + "osd_font_manager": { + "message" : "Font Manager" + }, "uploadingCharacters": { "message": "Uploading..." }, diff --git a/config.yml b/config.yml new file mode 100644 index 00000000..c7418817 --- /dev/null +++ b/config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/js/settings.js b/js/settings.js index f95d8422..84a0b25f 100644 --- a/js/settings.js +++ b/js/settings.js @@ -21,7 +21,7 @@ var Settings = (function () { if (!s) { // Setting doesn't exist. input.val(null); - parent.hide(); + parent.remove(); return; } parent.show(); diff --git a/src/css/tabs/osd.css b/src/css/tabs/osd.css index c0f32983..912b8964 100644 --- a/src/css/tabs/osd.css +++ b/src/css/tabs/osd.css @@ -21,6 +21,10 @@ background-color: #575757; } +.blue { + color: #151f8c; +} + .tab-osd .spacer_box_title { float: none; } @@ -448,7 +452,7 @@ button { } .tab-osd .settings select { - width: 61px; + width: 65px; margin-right: 11px; } @@ -456,6 +460,19 @@ button { margin-right: 25px; } +.tab-osd .settings .djiCraftNameElements { + display: block; + width: 100%; + border-bottom: 1px solid #ddd; + margin-top: 5px; + padding-bottom: 5px; +} + +.no-bottom { + border-bottom: none !important; + padding-bottom: 0 i !important; +} + @media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) { .tab-osd .content_wrapper { height: calc(100% - 30px); diff --git a/tabs/osd.html b/tabs/osd.html index 15de901c..be1877e9 100644 --- a/tabs/osd.html +++ b/tabs/osd.html @@ -1,11 +1,9 @@
-

- OSD -

+

-

Your flight controller isn't responding to OSD commands. This probably means that it does not have an integrated OSD.

-

Note that some flight controllers have an onboard MinimOSD that can be flashed and configured with scarab-osd, however the MinimOSD cannot be configured through this interface.

+

+

@@ -16,9 +14,7 @@
-
- Elements -
+
@@ -29,9 +25,7 @@
-
- Preview (drag to change position) -
+
@@ -43,9 +37,7 @@
-
Video - Format -
+
@@ -53,56 +45,64 @@
-
-
+
-
- Alarms -
+
+
+
+
+
+
+ + + + + +
+ + + +
+ + +
+
@@ -222,10 +261,10 @@
- Save +
diff --git a/tabs/osd.js b/tabs/osd.js index 5a8757b9..5848c2c3 100644 --- a/tabs/osd.js +++ b/tabs/osd.js @@ -426,10 +426,62 @@ OSD.initData = function () { items: [], groups: {}, display_items: [], - preview: [] + preview: [], + isDjiHdFpv: false }; }; +OSD.DjiElements = { + supported: [ + "RSSI_VALUE", + "MAIN_BATT_VOLTAGE", + "MAIN_BATT_CELL_VOLTAGE", + "CRAFT_NAME", + "FLYMODE", + "ESC_TEMPERATURE", + "ALTITUDE", + "VARIO_NUM", + "CROSSHAIRS", + "HORIZON_SIDEBARS", + "PITCH_ANGLE", + "ROLL_ANGLE", + "CURRENT_DRAW", + "MAH_DRAWN", + "GPS_SPEED", + "GPS_SATS", + "LONGITUDE", + "LATITUDE", + "DIRECTION_TO_HOME", + "DISTANCE_TO_HOME" + ], + emptyGroups: [ + "MapsAndRadars", + "GForce", + "Timers", + "VTX", + "CRSF", + "GVars", + "PIDs", + "PIDOutputs", + "PowerLimits" + ], + supportedSettings: [ + "units" + ], + supportedAlarms: [ + "rssi_alarm", + "osd_alt_alarm" + ], + craftNameElements: [ + "MESSAGES", + "THROTTLE_POSITION", + "THROTTLE_POSITION_AUTO_THR", + "3D_SPEED", + "EFFICIENCY_MAH", + "TRIP_DIST" + ] +}; + OSD.constants = { VISIBLE: 0x0800, VIDEO_TYPES: [ @@ -1659,6 +1711,13 @@ OSD.reload = function(callback) { callback(); } }; + + MSP.promise(MSPCodes.MSP2_CF_SERIAL_CONFIG).then(function (resp) { + $.each(SERIAL_CONFIG.ports, function(index, port){ + OSD.data.isDjiHdFpv = port.functions.includes('DJI_FPV'); + }); + }); + MSP.promise(MSPCodes.MSP2_INAV_OSD_LAYOUTS).then(function (resp) { OSD.msp.decodeLayoutCounts(resp); @@ -2062,6 +2121,7 @@ OSD.GUI.updateFields = function() { continue; } var groupContainer = $tmpl.clone().addClass('osd_group').show(); + groupContainer.attr('id', group.name); var groupTitleContainer = groupContainer.find('.spacer_box_title'); var groupTitle = chrome.i18n.getMessage(group.name); groupTitleContainer.text(groupTitle); @@ -2155,11 +2215,102 @@ OSD.GUI.updateFields = function() { } $tmpl.parent().append(groupContainer); } + + $('#djiUnsupportedElements').prepend( + $('') + .attr('checked', OSD.data.isDjiHdFpv) + .on('change', function () { + OSD.GUI.updateDjiView(this.checked); + OSD.GUI.updatePreviews(); + }) + ); // TODO: If we add more switches somewhere else, this // needs to be called after all of them have been set up GUI.switchery(); }; +OSD.GUI.removeBottomLines = function(){ + // restore + $('.display-field').removeClass('no-bottom'); + $('.gui_box').each(function(index, gui_box){ + var elements = $(gui_box).find('.display-fields, .settings').children(); + var lastVisible = false; + elements.each(function(index, element){ + if ($(element).is(':visible')) { + lastVisible = $(element); + } + }); + if (lastVisible) { + lastVisible.addClass('no-bottom'); + } + }); +}; + +OSD.GUI.updateDjiMessageElements = function(on) { + $('.display-field').each(function(index, element) { + var name = $(element).find('input').attr('name'); + if (OSD.DjiElements.craftNameElements.includes(name)) { + if (on) { + $(element) + .addClass('blue') + .show(); + } else if ($('#djiUnsupportedElements').find('input').is(':checked')) { + $(element).hide(); + } + } + + if (!on) { + $(element).removeClass('blue'); + } + }); + OSD.GUI.removeBottomLines(); +}; + +OSD.GUI.updateDjiView = function(on) { + if (on) { + $(OSD.DjiElements.emptyGroups).each(function(index, groupName) { + $('#osdGroup' + groupName).hide(); + }); + + var displayFields = $('.display-field'); + displayFields.each(function(index, element) { + var name = $(element).find('input').attr('name'); + if (!OSD.DjiElements.supported.includes(name)) { + $(element).hide(); + } + }); + + var settings = $('.settings-container').find('.settings').children(); + settings.each(function(index, element) { + var name = $(element).attr('class'); + if (!OSD.DjiElements.supportedSettings.includes(name)) { + $(element).hide(); + } + }); + + var alarms = $('.alarms-container').find('.settings').children(); + alarms.each(function(index, element) { + var name = $(element).attr('for'); + if (!OSD.DjiElements.supportedAlarms.includes(name)) { + $(element).hide(); + } + }); + } else { + $(OSD.DjiElements.emptyGroups).each(function(index, groupName) { + $('#osdGroup' + groupName).show(); + }); + + $('.display-field') + .show() + .removeClass('no-bottom'); + + $('.settings-container, .alarms-container').find('.settings').children() + .show() + .removeClass('no-bottom'); + } + OSD.GUI.updateDjiMessageElements($('#useCraftnameForMessages').is(':checked')); +}; + OSD.GUI.updateMapPreview = function(mapCenter, name, directionSymbol, centerSymbol) { if ($('input[name="' + name + '"]').prop('checked')) { var mapInitialX = OSD.data.display_size.x - 2; @@ -2194,6 +2345,11 @@ OSD.GUI.updatePreviews = function() { if (!itemData.isVisible) { continue; } + // DJI HD FPV: Hide elements that only appear in craft name + if (OSD.DjiElements.craftNameElements.includes(item.name) && + $('#djiUnsupportedElements').find('input').is(':checked')) { + continue; + } var j = (itemData.position >= 0) ? itemData.position : itemData.position + OSD.data.display_size.total; // create the preview image item.preview_img = new Image(); @@ -2358,6 +2514,7 @@ OSD.GUI.updateAll = function() { OSD.GUI.updateUnits(); OSD.GUI.updateFields(); OSD.GUI.updatePreviews(); + OSD.GUI.updateDjiView(OSD.data.isDjiHdFpv); }; OSD.GUI.update = function() { @@ -2547,6 +2704,10 @@ TABS.osd.initialize = function (callback) { } }); + $('#useCraftnameForMessages').on('change', function() { + OSD.GUI.updateDjiMessageElements(this.checked); + }); + // Update SENSOR_CONFIG, used to detect // OSD_AIR_SPEED mspHelper.loadSensorConfig(function () {