1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-26 09:45:28 +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;
}
arrayElements.forEach(function (valor, indice, array) { if (arrayElements[0].constructor === String) {
limits.minX = Math.min(valor.x, limits.minX); limits.maxY = arrayElements.length;
limits.maxX = Math.max(valor.x, limits.maxX); limits.minY = 0;
limits.minY = Math.min(valor.y, limits.minY); limits.minX = 0;
limits.maxY = Math.max(valor.y, limits.maxY); arrayElements.forEach(function(valor, indice, array) {
}); limits.maxX = Math.max(valor.length, limits.maxX);
});
} else {
arrayElements.forEach(function (valor, indice, array) {
limits.minX = Math.min(valor.x, limits.minX);
limits.maxX = Math.max(valor.x, limits.maxX);
limits.minY = Math.min(valor.y, limits.minY);
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,19 +1746,35 @@ 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;
}
if ((limits.minX < 0) && ((selectedPositionX + limits.minX) < 0)) { } else {
position += Math.abs(selectedPositionX + limits.minX); if ((limits.minX < 0) && ((selectedPositionX + limits.minX) < 0)) {
} else if ((limits.maxX > 0) && ((selectedPositionX + limits.maxX) >= FONT.constants.SIZES.LINE)) { position += Math.abs(selectedPositionX + limits.minX);
position -= (selectedPositionX + limits.maxX + 1) - FONT.constants.SIZES.LINE; } else if ((limits.maxX > 0) && ((selectedPositionX + limits.maxX) >= FONT.constants.SIZES.LINE)) {
} position -= (selectedPositionX + limits.maxX + 1) - FONT.constants.SIZES.LINE;
if ((limits.minY < 0) && ((selectedPositionY + limits.minY) < 0)) { }
position += Math.abs(selectedPositionY + limits.minY) * FONT.constants.SIZES.LINE; if ((limits.minY < 0) && ((selectedPositionY + limits.minY) < 0)) {
} else if ((limits.maxY > 0) && ((selectedPositionY + limits.maxY) >= OSD.data.display_size.y)) { position += Math.abs(selectedPositionY + limits.minY) * FONT.constants.SIZES.LINE;
position -= (selectedPositionY + limits.maxY - OSD.data.display_size.y + 1) * FONT.constants.SIZES.LINE; } else if ((limits.maxY > 0) && ((selectedPositionY + limits.maxY) >= OSD.data.display_size.y)) {
position -= (selectedPositionY + limits.maxY - OSD.data.display_size.y + 1) * FONT.constants.SIZES.LINE;
}
} }
} }
} }
@ -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,33 +2222,43 @@ TABS.osd.initialize = function (callback) {
} }
} else { } else {
var arrayElements = field.preview; var arrayElements = field.preview;
// The array can have negative and positive positions, search limits...
var limits = OSD.searchLimitsElement(arrayElements);
var offsetX = 0;
var offsetY = 0;
if (limits.minX < 0) {
offsetX = -limits.minX;
}
if (limits.minY < 0) {
offsetY = -limits.minY;
}
for (var i = 0; i < arrayElements.length; i++) { for (var i = 0; i < arrayElements.length; i++) {
// Add the character to the preview
var element = arrayElements[i]; var element = arrayElements[i];
var charCode = element.sym; //Add string to the preview.
OSD.drawByOrder(selectedPosition + element.x + element.y * FONT.constants.SIZES.LINE, field, charCode, element.x, element.y); if (element.constructor === String) {
for(var j = 0; j < element.length; j++) {
// Image used when "dragging" the element var charCode = element.charCodeAt(j);
if (field.positionable) { OSD.drawByOrder(selectedPosition++, field, charCode, j, i);
var img = new Image(); // Image used when "dragging" the element
img.src = FONT.draw(charCode); if (field.positionable) {
ctx.drawImage(img, (element.x + offsetX) * 12, (element.y + offsetY) * 18); 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 offsetX = 0;
var offsetY = 0;
if (limits.minX < 0) {
offsetX = -limits.minX;
}
if (limits.minY < 0) {
offsetY = -limits.minY;
}
// Add the character to the preview
var charCode = element.sym;
OSD.drawByOrder(selectedPosition + element.x + element.y * FONT.constants.SIZES.LINE, field, charCode, element.x, element.y);
// Image used when "dragging" the element
if (field.positionable) {
var img = new Image();
img.src = FONT.draw(charCode);
ctx.drawImage(img, (element.x + offsetX) * 12, (element.y + offsetY) * 18);
}
} }
} }
} }
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