mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-23 16:25:22 +03:00
Merge pull request #1125 from McGiverGim/remove_unused_pids
Remove unused PIDs
This commit is contained in:
commit
704f06419f
2 changed files with 94 additions and 235 deletions
280
src/js/tabs/pid_tuning.js
Executable file → Normal file
280
src/js/tabs/pid_tuning.js
Executable file → Normal file
|
@ -53,142 +53,19 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill in the data from PIDs array
|
// Fill in the data from PIDs array
|
||||||
var i = 0;
|
|
||||||
$('.pid_tuning .ROLL input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[0][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[0][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[0][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// For each pid name
|
||||||
$('.pid_tuning .PITCH input').each(function () {
|
PID_names.forEach(function(elementPid, indexPid) {
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[1][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[1][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[1][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// Look into the PID table to a row with the name of the pid
|
||||||
$('.pid_tuning .YAW input').each(function () {
|
var searchRow = $('.pid_tuning .' + elementPid + ' input');
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[2][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[2][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('.pid_tuning .YAW_JUMP_PREVENTION input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[2][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// Assign each value
|
||||||
$('.pid_tuning .ALT input').each(function () {
|
searchRow.each(function (indexInput) {
|
||||||
switch (i) {
|
if (PIDs[indexPid][indexInput] !== undefined) {
|
||||||
case 0:
|
$(this).val(PIDs[indexPid][indexInput]);
|
||||||
$(this).val(PIDs[3][i++]);
|
}
|
||||||
break;
|
});
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[3][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[3][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .Pos input').each(function () {
|
|
||||||
$(this).val(PIDs[4][i++]);
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .PosR input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[5][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[5][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[5][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .NavR input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[6][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[6][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[6][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .ANGLE input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[7][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$('.pid_tuning .HORIZON input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[7][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[7][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .MAG input').each(function () {
|
|
||||||
$(this).val(PIDs[8][i++]);
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('.pid_tuning .Vario input').each(function () {
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
$(this).val(PIDs[9][i++]);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
$(this).val(PIDs[9][i++]);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$(this).val(PIDs[9][i++]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fill in data from RC_tuning object
|
// Fill in data from RC_tuning object
|
||||||
|
@ -523,60 +400,19 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
function form_to_pid_and_rc() {
|
function form_to_pid_and_rc() {
|
||||||
// Fill in the data from PIDs array
|
// Fill in the data from PIDs array
|
||||||
// Catch all the changes and stuff the inside PIDs array
|
// Catch all the changes and stuff the inside PIDs array
|
||||||
var i = 0;
|
|
||||||
$('table.pid_tuning tr.ROLL .pid_data input').each(function () {
|
|
||||||
PIDs[0][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// For each pid name
|
||||||
$('table.pid_tuning tr.PITCH .pid_data input').each(function () {
|
PID_names.forEach(function(elementPid, indexPid) {
|
||||||
PIDs[1][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// Look into the PID table to a row with the name of the pid
|
||||||
$('table.pid_tuning tr.YAW .pid_data input').each(function () {
|
var searchRow = $('.pid_tuning .' + elementPid + ' input');
|
||||||
PIDs[2][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
$('table.pid_tuning tr.YAW_JUMP_PREVENTION .pid_data input').each(function () {
|
|
||||||
PIDs[2][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
// Assign each value
|
||||||
$('table.pid_tuning tr.ALT input').each(function () {
|
searchRow.each(function (indexInput) {
|
||||||
PIDs[3][i++] = parseFloat($(this).val());
|
if ($(this).val()) {
|
||||||
});
|
PIDs[indexPid][indexInput] = parseFloat($(this).val());
|
||||||
|
}
|
||||||
i = 0;
|
});
|
||||||
$('table.pid_tuning tr.Vario input').each(function () {
|
|
||||||
PIDs[9][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('table.pid_tuning tr.Pos input').each(function () {
|
|
||||||
PIDs[4][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('table.pid_tuning tr.PosR input').each(function () {
|
|
||||||
PIDs[5][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('table.pid_tuning tr.NavR input').each(function () {
|
|
||||||
PIDs[6][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('div.pid_tuning tr.ANGLE input').each(function () {
|
|
||||||
PIDs[7][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
$('div.pid_tuning tr.HORIZON input').each(function () {
|
|
||||||
PIDs[7][i++] = parseFloat($(this).val());
|
|
||||||
});
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
$('div.pid_tuning tr.MAG input').each(function () {
|
|
||||||
PIDs[8][i++] = parseFloat($(this).val());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// catch RC_tuning changes
|
// catch RC_tuning changes
|
||||||
|
@ -665,37 +501,54 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function showAllPids() {
|
function showAllPids() {
|
||||||
$('.tab-pid_tuning .pid_tuning').show();
|
|
||||||
|
// Hide all optional elements
|
||||||
|
$('.pid_optional tr').hide(); // Hide all rows
|
||||||
|
$('.pid_optional table').hide(); // Hide tables
|
||||||
|
$('.pid_optional').hide(); // Hide general div
|
||||||
|
|
||||||
|
// Only show rows supported by the firmware
|
||||||
|
PID_names.forEach(function(elementPid) {
|
||||||
|
// Show rows for the PID
|
||||||
|
$('.pid_tuning .' + elementPid).show();
|
||||||
|
|
||||||
|
// Show titles and other elements needed by the PID
|
||||||
|
$('.needed_by_' + elementPid).show();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Special case
|
||||||
|
if (semver.lt(CONFIG.apiVersion, "1.24.0")) {
|
||||||
|
$('#pid_sensitivity').hide();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideUnusedPids() {
|
function hideUnusedPids() {
|
||||||
$('.tab-pid_tuning .pid_tuning').hide();
|
|
||||||
|
|
||||||
$('#pid_main').show();
|
if (!have_sensor(CONFIG.activeSensors, 'acc')) {
|
||||||
|
$('#pid_accel').hide();
|
||||||
if (have_sensor(CONFIG.activeSensors, 'acc')) {
|
|
||||||
$('#pid_accel').show();
|
|
||||||
$('#pid_level').show();
|
|
||||||
$('#pid_sensitivity').show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var showTitle = false;
|
var hideSensorPid = function(element, sensorReady) {
|
||||||
if (have_sensor(CONFIG.activeSensors, 'baro') ||
|
var isVisible = element.is(":visible");
|
||||||
have_sensor(CONFIG.activeSensors, 'sonar')) {
|
if (!isVisible || !sensorReady) {
|
||||||
$('#pid_baro').show();
|
element.hide();
|
||||||
showTitle = true;
|
isVisible = false;
|
||||||
}
|
}
|
||||||
if (have_sensor(CONFIG.activeSensors, 'mag')) {
|
|
||||||
$('#pid_mag').show();
|
return isVisible;
|
||||||
showTitle = true;
|
|
||||||
}
|
|
||||||
if (FEATURE_CONFIG.features.isEnabled('GPS')) {
|
|
||||||
$('#pid_gps').show();
|
|
||||||
showTitle = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showTitle) {
|
var isVisibleBaroMagGps = false;
|
||||||
$('#pid_optional').show();
|
|
||||||
|
isVisibleBaroMagGps |= hideSensorPid($('#pid_baro'), have_sensor(CONFIG.activeSensors, 'baro') || have_sensor(CONFIG.activeSensors, 'sonar'));
|
||||||
|
|
||||||
|
isVisibleBaroMagGps |= hideSensorPid($('#pid_mag'), have_sensor(CONFIG.activeSensors, 'mag'));
|
||||||
|
|
||||||
|
isVisibleBaroMagGps |= hideSensorPid($('#pid_gps'), have_sensor(CONFIG.activeSensors, 'GPS'));
|
||||||
|
|
||||||
|
if (!isVisibleBaroMagGps) {
|
||||||
|
$('#pid_baro_mag_gps').hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -877,6 +730,7 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showAllPids();
|
||||||
updatePidDisplay();
|
updatePidDisplay();
|
||||||
|
|
||||||
showAllButton.on('click', function(){
|
showAllButton.on('click', function(){
|
||||||
|
@ -985,12 +839,16 @@ TABS.pid_tuning.initialize = function (callback) {
|
||||||
$('.tab-pid_tuning .note').hide();
|
$('.tab-pid_tuning .note').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add a name to each row of PIDs if empty
|
||||||
$('.pid_tuning tr').each(function(){
|
$('.pid_tuning tr').each(function(){
|
||||||
for(i = 0; i < PID_names.length; i++) {
|
for(i = 0; i < PID_names.length; i++) {
|
||||||
if($(this).hasClass(PID_names[i])) {
|
if($(this).hasClass(PID_names[i])) {
|
||||||
$(this).find('td:first').text(PID_names[i]);
|
var firstColumn = $(this).find('td:first');
|
||||||
|
if (!firstColumn.text()) {
|
||||||
|
firstColumn.text(PID_names[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
49
src/tabs/pid_tuning.html
Executable file → Normal file
49
src/tabs/pid_tuning.html
Executable file → Normal file
|
@ -33,7 +33,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="cf_column right">
|
<div class="cf_column right">
|
||||||
<div class="default_btn show">
|
<div class="default_btn show showAllPids">
|
||||||
<a href="#" id="showAllPids" i18n="pidTuningShowAllPids"></a>
|
<a href="#" id="showAllPids" i18n="pidTuningShowAllPids"></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="default_btn resetbt">
|
<div class="default_btn resetbt">
|
||||||
|
@ -139,17 +139,17 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div id="pid_optional" class="gui_box grey topspacer pid_tuning">
|
<div id="pid_baro_mag_gps" class="pid_optional needed_by_ALT needed_by_VEL needed_by_MAG needed_by_Pos needed_by_PosR needed_by_NavR gui_box grey topspacer pid_tuning">
|
||||||
<table class="pid_titlebar">
|
<table class="pid_titlebar needed_by_ALT needed_by_VEL needed_by_MAG">
|
||||||
<tr>
|
<tr class="needed_by_ALT needed_by_VEL needed_by_MAG">
|
||||||
<th class="name"></th>
|
<th class="name"></th>
|
||||||
<th class="proportional" i18n="pidTuningProportional"></th>
|
<th class="proportional" i18n="pidTuningProportional"></th>
|
||||||
<th class="integral" i18n="pidTuningIntegral"></th>
|
<th class="integral" i18n="pidTuningIntegral"></th>
|
||||||
<th class="derivative" i18n="pidTuningDerivative"></th>
|
<th class="derivative" i18n="pidTuningDerivative"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table id="pid_baro" class="pid_tuning">
|
<table id="pid_baro" class="pid_tuning needed_by_ALT needed_by_VEL">
|
||||||
<tr>
|
<tr class="needed_by_ALT needed_by_VEL">
|
||||||
<th colspan="4">
|
<th colspan="4">
|
||||||
<div class="pid_mode" i18n="pidTuningAltitude"></div>
|
<div class="pid_mode" i18n="pidTuningAltitude"></div>
|
||||||
</th>
|
</th>
|
||||||
|
@ -161,16 +161,16 @@
|
||||||
<td><input type="number" name="i" step="1" min="0" max="255" /></td>
|
<td><input type="number" name="i" step="1" min="0" max="255" /></td>
|
||||||
<td><input type="number" name="d" step="1" min="0" max="255" /></td>
|
<td><input type="number" name="d" step="1" min="0" max="255" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="Vario">
|
<tr class="VEL">
|
||||||
<!-- 9 -->
|
<!-- 9 -->
|
||||||
<td>VEL</td>
|
<td></td>
|
||||||
<td><input type="number" name="p" step="1" min="0" max="255" /></td>
|
<td><input type="number" name="p" step="1" min="0" max="255" /></td>
|
||||||
<td><input type="number" name="i" step="1" min="0" max="255" /></td>
|
<td><input type="number" name="i" step="1" min="0" max="255" /></td>
|
||||||
<td><input type="number" name="d" step="1" min="0" max="255" /></td>
|
<td><input type="number" name="d" step="1" min="0" max="255" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table id="pid_mag" class="pid_tuning">
|
<table id="pid_mag" class="pid_tuning needed_by_MAG">
|
||||||
<tr>
|
<tr class="needed_by_MAG">
|
||||||
<th colspan="4">
|
<th colspan="4">
|
||||||
<div class="pid_mode" i18n="pidTuningMag"></div>
|
<div class="pid_mode" i18n="pidTuningMag"></div>
|
||||||
</th>
|
</th>
|
||||||
|
@ -183,8 +183,8 @@
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table id="pid_gps" class="pid_tuning">
|
<table id="pid_gps" class="pid_tuning needed_by_Pos needed_by_PosR needed_by_NavR">
|
||||||
<tr>
|
<tr class="needed_by_Pos needed_by_PosR needed_by_NavR">
|
||||||
<th colspan="4">
|
<th colspan="4">
|
||||||
<div class="pid_mode" i18n="pidTuningGps"></div>
|
<div class="pid_mode" i18n="pidTuningGps"></div>
|
||||||
</th>
|
</th>
|
||||||
|
@ -213,9 +213,9 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div id="pid_accel" class="gui_box grey topspacer pid_tuning">
|
<div id="pid_accel" class="pid_optional needed_by_LEVEL gui_box grey topspacer pid_tuning">
|
||||||
<table id="pid_level" class="pid_tuning">
|
<table id="pid_level" class="pid_tuning needed_by_LEVEL">
|
||||||
<tr>
|
<tr class="needed_by_LEVEL">
|
||||||
<th colspan="3">
|
<th colspan="3">
|
||||||
<div class="pid_mode">
|
<div class="pid_mode">
|
||||||
<div i18n="pidTuningLevel" style="float:left;"></div>
|
<div i18n="pidTuningLevel" style="float:left;"></div>
|
||||||
|
@ -224,42 +224,43 @@
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table class="pid_titlebar">
|
<table class="pid_titlebar needed_by_LEVEL">
|
||||||
<tr>
|
<tr class="needed_by_LEVEL">
|
||||||
<th class="third"></th>
|
<th class="third"></th>
|
||||||
<th class="third" i18n="pidTuningStrength" style="width: 33%;"></th>
|
<th class="third" i18n="pidTuningStrength" style="width: 33%;"></th>
|
||||||
<th class="third" i18n="pidTuningTransition" style="width: 33%;"></th>
|
<th class="third" i18n="pidTuningTransition" style="width: 33%;"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table>
|
<table class="needed_by_LEVEL">
|
||||||
<tr class="ANGLE">
|
<tr class="LEVEL">
|
||||||
<!-- 7 -->
|
<!-- 7 -->
|
||||||
<td class="third" i18n="pidTuningAngle"></td>
|
<td class="third" i18n="pidTuningAngle"></td>
|
||||||
<td class="third"><input type="number" name="p" step="1" min="0" max="255" /></td>
|
<td class="third"><input type="number" name="p" step="1" min="0" max="255" /></td>
|
||||||
<td class="third"></td>
|
<td class="third"></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="HORIZON">
|
<tr class="LEVEL">
|
||||||
<!-- 7 -->
|
<!-- 7 -->
|
||||||
<td class="third" i18n="pidTuningHorizon"></td>
|
<td class="third" i18n="pidTuningHorizon"></td>
|
||||||
<td class="third"><input type="number" name="i" step="1" min="0" max="255" /></td>
|
<td class="third"><input type="number" name="i" step="1" min="0" max="255" /></td>
|
||||||
<td class="third"><input type="number" name="d" step="1" min="0" max="255" /></td>
|
<td class="third"><input type="number" name="d" step="1" min="0" max="255" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table class="pid_titlebar pid_sensitivity">
|
<table class="needed_by_LEVEL pid_titlebar pid_sensitivity">
|
||||||
<tr>
|
<tr class="needed_by_LEVEL">
|
||||||
<th class="third"></th>
|
<th class="third"></th>
|
||||||
<th class="third" i18n="pidTuningLevelAngleLimit" style="width: 33%;"></th>
|
<th class="third" i18n="pidTuningLevelAngleLimit" style="width: 33%;"></th>
|
||||||
<th class="third levelSensitivityHeader" i18n="pidTuningLevelSensitivity" style="width: 33%;"></th>
|
<th class="third levelSensitivityHeader" i18n="pidTuningLevelSensitivity" style="width: 33%;"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table id="pid_sensitivity" class="pid_tuning pid_sensitivity">
|
<table id="pid_sensitivity" class="needed_by_LEVEL pid_tuning pid_sensitivity">
|
||||||
<tr>
|
<tr class="needed_by_LEVEL">
|
||||||
<td class="third"></td>
|
<td class="third"></td>
|
||||||
<td class="third"><input type="number" name="angleLimit" step="1" min="10" max="200" /></td>
|
<td class="third"><input type="number" name="angleLimit" step="1" min="10" max="200" /></td>
|
||||||
<td class="third"><input type="number" name="sensitivity" step="1" min="10" max="120" /></td>
|
<td class="third"><input type="number" name="sensitivity" step="1" min="10" max="120" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gui_box grey topspacer pidTuningFeatures">
|
<div class="gui_box grey topspacer pidTuningFeatures">
|
||||||
<table class="pid_titlebar new_rates">
|
<table class="pid_titlebar new_rates">
|
||||||
<tr>
|
<tr>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue