1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-26 17:55:24 +03:00

Added rpm freq osd element and new rpm osd layout. Added new element type, which is an array of string.

This commit is contained in:
jack 2019-03-08 23:37:29 +11:00 committed by jackct@gmail.com
parent 17c5743348
commit b390a48d04
2 changed files with 92 additions and 41 deletions

View file

@ -3733,6 +3733,9 @@
"osdDescElementEscRpm": { "osdDescElementEscRpm": {
"message": "RPM reported by ESC telemetry" "message": "RPM reported by ESC telemetry"
}, },
"osdDescElementEscRpmFreq": {
"message": "RPM frequency reported by ESC telemetry"
},
"osdDescElementRtcDateTime": { "osdDescElementRtcDateTime": {
"message": "Real time clock date / time" "message": "Real time clock date / time"
}, },

View file

@ -803,7 +803,7 @@ OSD.constants = {
default_position: -1, default_position: -1,
draw_order: 490, draw_order: 490,
positionable: true, positionable: true,
preview: '226000' preview: [ "22600", "22600", "22600", "22600"]
}, },
REMAINING_TIME_ESTIMATE: { REMAINING_TIME_ESTIMATE: {
name: 'REMAINING_TIME_ESTIMATE', name: 'REMAINING_TIME_ESTIMATE',
@ -946,6 +946,14 @@ OSD.constants = {
return OSD.generateDisplayName(osd_data, 1); return OSD.generateDisplayName(osd_data, 1);
} }
}, },
ESC_RPM_FREQ: {
name: 'ESC_RPM_FREQ',
desc: 'osdDescElementEscRpmFreq',
default_position: -1,
draw_order: 390,
positionable: true,
preview: [ "22600", "22600", "22600", "22600"]
},
}, },
UNKNOWN_DISPLAY_FIELD: { UNKNOWN_DISPLAY_FIELD: {
name: 'UNKNOWN_', name: 'UNKNOWN_',
@ -1114,13 +1122,25 @@ OSD.constants = {
OSD.searchLimitsElement = function (arrayElements) { OSD.searchLimitsElement = function (arrayElements) {
// Search minimum and maximum // Search minimum and maximum
var limits = { minX: 0, maxX: 0, minY: 0, maxY: 0 }; var limits = { minX: 0, maxX: 0, minY: 0, maxY: 0 };
if (arrayElements.length == 0) {
return limits;
}
if (arrayElements[0].constructor === String) {
limits.maxY = arrayElements.length;
limits.minY = 0;
limits.minX = 0;
arrayElements.forEach(function(valor, indice, array) {
limits.maxX = Math.max(valor.length, limits.maxX);
});
} else {
arrayElements.forEach(function (valor, indice, array) { arrayElements.forEach(function (valor, indice, array) {
limits.minX = Math.min(valor.x, limits.minX); limits.minX = Math.min(valor.x, limits.minX);
limits.maxX = Math.max(valor.x, limits.maxX); limits.maxX = Math.max(valor.x, limits.maxX);
limits.minY = Math.min(valor.y, limits.minY); limits.minY = Math.min(valor.y, limits.minY);
limits.maxY = Math.max(valor.y, limits.maxY); limits.maxY = Math.max(valor.y, limits.maxY);
}); });
}
return limits; return limits;
} }
@ -1222,6 +1242,7 @@ OSD.chooseFields = function () {
F.STICK_OVERLAY_LEFT, F.STICK_OVERLAY_LEFT,
F.STICK_OVERLAY_RIGHT, F.STICK_OVERLAY_RIGHT,
F.DISPLAY_NAME, F.DISPLAY_NAME,
F.ESC_RPM_FREQ
]); ]);
} }
} }
@ -1701,6 +1722,8 @@ OSD.GUI.preview = {
var field_id = parseInt(ev.dataTransfer.getData('text/plain')) var field_id = parseInt(ev.dataTransfer.getData('text/plain'))
var display_item = OSD.data.display_items[field_id]; var display_item = OSD.data.display_items[field_id];
var position = $(this).removeAttr('style').data('position'); var position = $(this).removeAttr('style').data('position');
var cursor = position;
var cursorX = cursor % FONT.constants.SIZES.LINE;
if (display_item.preview.constructor === Array) { if (display_item.preview.constructor === Array) {
console.log('Initial Drop Position: ' + position); console.log('Initial Drop Position: ' + position);
@ -1723,10 +1746,25 @@ OSD.GUI.preview = {
// Advanced preview, array type // Advanced preview, array type
var arrayElements = display_item.preview; var arrayElements = display_item.preview;
var limits = OSD.searchLimitsElement(arrayElements); var limits = OSD.searchLimitsElement(arrayElements);
var selectedPositionX = position % FONT.constants.SIZES.LINE; var selectedPositionX = position % FONT.constants.SIZES.LINE;
var selectedPositionY = Math.trunc(position / FONT.constants.SIZES.LINE); var selectedPositionY = Math.trunc(position / FONT.constants.SIZES.LINE);
if (arrayElements[0].constructor === String) {
if (position < 0 ) {
return;
}
if (selectedPositionX > cursorX) { // TRUE -> Detected wrap around
position += FONT.constants.SIZES.LINE - selectedPositionX;
selectedPositionY++;
} else if (selectedPositionX + limits.maxX > FONT.constants.SIZES.LINE) { // TRUE -> right border of the element went beyond left edge of screen.
position -= selectedPositionX + limits.maxX - FONT.constants.SIZES.LINE;
}
if (selectedPositionY < 0 ) {
position += Math.abs(selectedPositionY) * FONT.constants.SIZES.LINE;
} else if ((selectedPositionY + limits.maxY ) > OSD.data.display_size.y) {
position -= (selectedPositionY + limits.maxY - OSD.data.display_size.y) * FONT.constants.SIZES.LINE;
}
} else {
if ((limits.minX < 0) && ((selectedPositionX + limits.minX) < 0)) { if ((limits.minX < 0) && ((selectedPositionX + limits.minX) < 0)) {
position += Math.abs(selectedPositionX + limits.minX); position += Math.abs(selectedPositionX + limits.minX);
} else if ((limits.maxX > 0) && ((selectedPositionX + limits.maxX) >= FONT.constants.SIZES.LINE)) { } else if ((limits.maxX > 0) && ((selectedPositionX + limits.maxX) >= FONT.constants.SIZES.LINE)) {
@ -1739,6 +1777,7 @@ OSD.GUI.preview = {
} }
} }
} }
}
if (semver.gte(CONFIG.apiVersion, "1.21.0")) { if (semver.gte(CONFIG.apiVersion, "1.21.0")) {
// unsigned now // unsigned now
@ -2167,7 +2206,6 @@ TABS.osd.initialize = function (callback) {
// Standard preview, type String // Standard preview, type String
if (field.preview.constructor !== Array) { if (field.preview.constructor !== Array) {
// fill the screen buffer // fill the screen buffer
for (var i = 0; i < field.preview.length; i++) { for (var i = 0; i < field.preview.length; i++) {
@ -2184,10 +2222,23 @@ TABS.osd.initialize = function (callback) {
} }
} else { } else {
var arrayElements = field.preview; var arrayElements = field.preview;
for (var i = 0; i < arrayElements.length; i++) {
// The array can have negative and positive positions, search limits... var element = arrayElements[i];
//Add string to the preview.
if (element.constructor === String) {
for(var j = 0; j < element.length; j++) {
var charCode = element.charCodeAt(j);
OSD.drawByOrder(selectedPosition++, field, charCode, j, i);
// Image used when "dragging" the element
if (field.positionable) {
var img = new Image();
img.src = FONT.draw(charCode);
ctx.drawImage(img, j * 12, i * 18);
}
}
selectedPosition = selectedPosition - element.length + FONT.constants.SIZES.LINE;
} else {
var limits = OSD.searchLimitsElement(arrayElements); var limits = OSD.searchLimitsElement(arrayElements);
var offsetX = 0; var offsetX = 0;
var offsetY = 0; var offsetY = 0;
if (limits.minX < 0) { if (limits.minX < 0) {
@ -2196,14 +2247,9 @@ TABS.osd.initialize = function (callback) {
if (limits.minY < 0) { if (limits.minY < 0) {
offsetY = -limits.minY; offsetY = -limits.minY;
} }
for (var i = 0; i < arrayElements.length; i++) {
// Add the character to the preview // Add the character to the preview
var element = arrayElements[i];
var charCode = element.sym; var charCode = element.sym;
OSD.drawByOrder(selectedPosition + element.x + element.y * FONT.constants.SIZES.LINE, field, charCode, element.x, element.y); OSD.drawByOrder(selectedPosition + element.x + element.y * FONT.constants.SIZES.LINE, field, charCode, element.x, element.y);
// Image used when "dragging" the element // Image used when "dragging" the element
if (field.positionable) { if (field.positionable) {
var img = new Image(); var img = new Image();
@ -2212,6 +2258,8 @@ TABS.osd.initialize = function (callback) {
} }
} }
} }
}
field.preview_img.src = canvas.toDataURL('image/png'); field.preview_img.src = canvas.toDataURL('image/png');
// Required for NW.js - Otherwise the <img /> will // Required for NW.js - Otherwise the <img /> will
//consume drag/drop events. //consume drag/drop events.