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:
parent
17c5743348
commit
b390a48d04
2 changed files with 92 additions and 41 deletions
|
@ -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"
|
||||||
},
|
},
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue