mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
implement channel map including validation and UI compatibility fallback
This commit is contained in:
parent
5d9b28c5c7
commit
6be76d855d
5 changed files with 136 additions and 6 deletions
|
@ -443,6 +443,9 @@
|
||||||
"receiverRcExpo": {
|
"receiverRcExpo": {
|
||||||
"message": "RC Expo"
|
"message": "RC Expo"
|
||||||
},
|
},
|
||||||
|
"receiverChannelMap": {
|
||||||
|
"message": "Channel Map"
|
||||||
|
},
|
||||||
"receiverRefreshRateTitle": {
|
"receiverRefreshRateTitle": {
|
||||||
"message": "Graph refresh rate"
|
"message": "Graph refresh rate"
|
||||||
},
|
},
|
||||||
|
|
|
@ -47,9 +47,6 @@ TABS.configuration.initialize = function (callback) {
|
||||||
// translate to user-selected language
|
// translate to user-selected language
|
||||||
localize();
|
localize();
|
||||||
|
|
||||||
// index references
|
|
||||||
var RCMAPlLetters = ['A', 'E', 'R', 'T', '1', '2', '3', '4'];
|
|
||||||
|
|
||||||
// generate mixer
|
// generate mixer
|
||||||
var mixerList = [
|
var mixerList = [
|
||||||
{name: 'Tricopter', image: 'tri'},
|
{name: 'Tricopter', image: 'tri'},
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
.tab-receiver .tunings .throttle {
|
.tab-receiver .tunings .throttle {
|
||||||
margin-bottom: 22px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.tab-receiver .tunings table, .tab-receiver .tunings table th, .tab-receiver .tunings table td {
|
.tab-receiver .tunings table, .tab-receiver .tunings table th, .tab-receiver .tunings table td {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
@ -101,6 +101,42 @@
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
.tab-receiver .rcmap_wrapper {
|
||||||
|
float: right;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
width: 126px;
|
||||||
|
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
|
||||||
|
border: 1px solid #8b8b8b;
|
||||||
|
}
|
||||||
|
.tab-receiver .rcmap_wrapper .head {
|
||||||
|
height: 15px;
|
||||||
|
padding: 4px;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
border-bottom: 1px solid #8b8b8b;
|
||||||
|
background-color: #ececec;
|
||||||
|
}
|
||||||
|
.tab-receiver .hybrid_element input {
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
padding-left: 5px;
|
||||||
|
|
||||||
|
width: calc(100% - 24px);
|
||||||
|
height: 22px;
|
||||||
|
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.tab-receiver .hybrid_element select {
|
||||||
|
width: 100%;
|
||||||
|
height: 22px;
|
||||||
|
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
.tab-receiver .curves {
|
.tab-receiver .curves {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,16 @@
|
||||||
<td><input type="number" name="expo" step="0.01" min="0" max="1" /></td>
|
<td><input type="number" name="expo" step="0.01" min="0" max="1" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
<div class="rcmap_wrapper">
|
||||||
|
<div class="head" i18n="receiverChannelMap"></div>
|
||||||
|
<div class="hybrid_element">
|
||||||
|
<input type="text" name="rcmap" spellcheck="false" />
|
||||||
|
<select class="hybrid_helper" name="rcmap_helper">
|
||||||
|
<option value="AETR1234">AETR1234 - default</option>
|
||||||
|
<option value="TAER1234">TAER1234 - frsky</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="curves">
|
<div class="curves">
|
||||||
<div class="throttle_curve">
|
<div class="throttle_curve">
|
||||||
|
|
|
@ -7,7 +7,16 @@ TABS.receiver.initialize = function (callback) {
|
||||||
googleAnalytics.sendAppView('Receiver Page');
|
googleAnalytics.sendAppView('Receiver Page');
|
||||||
|
|
||||||
function get_rc_data() {
|
function get_rc_data() {
|
||||||
MSP.send_message(MSP_codes.MSP_RC, false, false, load_html);
|
MSP.send_message(MSP_codes.MSP_RC, false, false, get_rc_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_rc_map() {
|
||||||
|
// TODO remove this after compatibility period
|
||||||
|
if (bit_check(CONFIG.capability, 30)) {
|
||||||
|
MSP.send_message(MSP_codes.MSP_RCMAP, false, false, load_html);
|
||||||
|
} else {
|
||||||
|
load_html();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_html() {
|
function load_html() {
|
||||||
|
@ -68,6 +77,66 @@ TABS.receiver.initialize = function (callback) {
|
||||||
meter_values_array.push($(this));
|
meter_values_array.push($(this));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// handle rcmap
|
||||||
|
if (bit_check(CONFIG.capability, 30)) {
|
||||||
|
var RCMAPlLetters = ['A', 'E', 'R', 'T', '1', '2', '3', '4'];
|
||||||
|
|
||||||
|
var strBuffer = '';
|
||||||
|
for (var i = 0; i < RC_MAP.length; i++) {
|
||||||
|
strBuffer += RCMAPlLetters[RC_MAP[i]];
|
||||||
|
}
|
||||||
|
|
||||||
|
// set current value
|
||||||
|
$('input[name="rcmap"]').val(strBuffer);
|
||||||
|
|
||||||
|
// validation / filter
|
||||||
|
var last_valid = strBuffer;
|
||||||
|
|
||||||
|
$('input[name="rcmap"]').on('input', function () {
|
||||||
|
var val = $(this).val();
|
||||||
|
|
||||||
|
// limit length to max 8
|
||||||
|
if (val.length > 8) {
|
||||||
|
val = val.substr(0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).val(val);
|
||||||
|
});
|
||||||
|
|
||||||
|
$('input[name="rcmap"]').focusout(function () {
|
||||||
|
var val = $(this).val();
|
||||||
|
var strBuffer = val.split('');
|
||||||
|
var duplicityBuffer = [];
|
||||||
|
|
||||||
|
if (val.length != 8) {
|
||||||
|
$(this).val(last_valid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if characters inside are all valid, also check for duplicity
|
||||||
|
for (var i = 0; i < val.length; i++) {
|
||||||
|
if (RCMAPlLetters.indexOf(strBuffer[i]) < 0) {
|
||||||
|
$(this).val(last_valid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (duplicityBuffer.indexOf(strBuffer[i]) < 0) {
|
||||||
|
duplicityBuffer.push(strBuffer[i]);
|
||||||
|
} else {
|
||||||
|
$(this).val(last_valid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// handle helper
|
||||||
|
$('select[name="rcmap_helper"]').change(function () {
|
||||||
|
$('input[name="rcmap"]').val($(this).val());
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$('.rcmap_wrapper').hide();
|
||||||
|
}
|
||||||
|
|
||||||
// UI Hooks
|
// UI Hooks
|
||||||
// curves
|
// curves
|
||||||
$('.tunings .throttle input').change(function () {
|
$('.tunings .throttle input').change(function () {
|
||||||
|
@ -143,13 +212,28 @@ TABS.receiver.initialize = function (callback) {
|
||||||
RC_tuning.RC_RATE = parseFloat($('.tunings .rate input[name="rate"]').val());
|
RC_tuning.RC_RATE = parseFloat($('.tunings .rate input[name="rate"]').val());
|
||||||
RC_tuning.RC_EXPO = parseFloat($('.tunings .rate input[name="expo"]').val());
|
RC_tuning.RC_EXPO = parseFloat($('.tunings .rate input[name="expo"]').val());
|
||||||
|
|
||||||
|
// catch rc map
|
||||||
|
var strBuffer = $('input[name="rcmap"]').val().split('');
|
||||||
|
|
||||||
|
for (var i = 0; i < RC_MAP.length; i++) {
|
||||||
|
RC_MAP[i] = RCMAPlLetters.indexOf(strBuffer[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function save_rc_map() {
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_RCMAP, MSP.crunch(MSP_codes.MSP_SET_RCMAP), false, save_to_eeprom);
|
||||||
|
}
|
||||||
|
|
||||||
function save_to_eeprom() {
|
function save_to_eeprom() {
|
||||||
MSP.send_message(MSP_codes.MSP_EEPROM_WRITE, false, false, function () {
|
MSP.send_message(MSP_codes.MSP_EEPROM_WRITE, false, false, function () {
|
||||||
GUI.log(chrome.i18n.getMessage('receiverEepromSaved'));
|
GUI.log(chrome.i18n.getMessage('receiverEepromSaved'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
MSP.send_message(MSP_codes.MSP_SET_RC_TUNING, MSP.crunch(MSP_codes.MSP_SET_RC_TUNING), false, save_to_eeprom);
|
if (bit_check(CONFIG.capability, 30)) {
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_RC_TUNING, MSP.crunch(MSP_codes.MSP_SET_RC_TUNING), false, save_rc_map);
|
||||||
|
} else {
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_RC_TUNING, MSP.crunch(MSP_codes.MSP_SET_RC_TUNING), false, save_to_eeprom);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('select[name="rx_refresh_rate"]').change(function () {
|
$('select[name="rx_refresh_rate"]').change(function () {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue