Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/js/Features.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,13 @@ const Features = function (config) {

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_36)) {
features.push(
{bit: 28, group: 'antiGravity', name: 'ANTI_GRAVITY', haveTip: true, hideName: true},
{bit: 29, group: 'other', name: 'DYNAMIC_FILTER'}
{bit: 28, group: 'antiGravity', name: 'ANTI_GRAVITY', haveTip: true, hideName: true}
);
if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_44)) { // DYNAMIC_FILTER got removed from FEATURES in BF 4.3 / API 1.44
features.push(
{bit: 29, group: 'other', name: 'DYNAMIC_FILTER'}
);
}
}

if (!semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_36)) {
Expand Down
91 changes: 60 additions & 31 deletions src/js/tabs/pid_tuning.js
Original file line number Diff line number Diff line change
Expand Up @@ -377,51 +377,76 @@ TABS.pid_tuning.initialize = function (callback) {
}

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) {
const dynamicNotchWidthPercent_e = $('.pid_filter input[name="dynamicNotchWidthPercent"]');
const dynamicNotchQ_e = $('.pid_filter input[name="dynamicNotchQ"]');
const dynamicNotchCount_e = $('.pid_filter input[name="dynamicNotchCount"]');

$('.smartfeedforward').hide();

if (FC.FEATURE_CONFIG.features.isEnabled('DYNAMIC_FILTER')) {
$('.dynamicNotch').show();
} else {
$('.dynamicNotch').hide();
// Dynamic Notch Filter
if (semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_44)) {
if (FC.FEATURE_CONFIG.features.isEnabled('DYNAMIC_FILTER')) {
$('.dynamicNotch span.inputSwitch').hide();
} else {
$('.dynamicNotch').hide();
}
}
$('.dynamicNotchRange').toggle(semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_43));
$('.pid_filter select[name="dynamicNotchRange"]').val(FC.FILTER_CONFIG.dyn_notch_range);

const dynamicNotchRange_e = $('.pid_filter select[name="dynamicNotchRange"]');
const dynamicNotchWidthPercent_e = $('.pid_filter input[name="dynamicNotchWidthPercent"]');
const dynamicNotchCount_e = $('.pid_filter input[name="dynamicNotchCount"]');
const dynamicNotchQ_e = $('.pid_filter input[name="dynamicNotchQ"]');
const dynamicNotchMinHz_e = $('.pid_filter input[name="dynamicNotchMinHz"]');
const dynamicNotchMaxHz_e = $('.pid_filter input[name="dynamicNotchMaxHz"]');

dynamicNotchRange_e.val(FC.FILTER_CONFIG.dyn_notch_range);
dynamicNotchWidthPercent_e.val(FC.FILTER_CONFIG.dyn_notch_width_percent);
dynamicNotchQ_e.val(FC.FILTER_CONFIG.dyn_notch_q);
dynamicNotchCount_e.val(FC.FILTER_CONFIG.dyn_notch_count);
$('.pid_filter input[name="dynamicNotchMinHz"]').val(FC.FILTER_CONFIG.dyn_notch_min_hz);
dynamicNotchQ_e.val(FC.FILTER_CONFIG.dyn_notch_q);
dynamicNotchMinHz_e.val(FC.FILTER_CONFIG.dyn_notch_min_hz);
dynamicNotchMaxHz_e.val(FC.FILTER_CONFIG.dyn_notch_max_hz);

if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43)) {
$('.pid_filter input[name="dynamicNotchMinHz"]').attr("max","250");
$('.pid_filter input[name="dynamicNotchMaxHz"]').val(FC.FILTER_CONFIG.dyn_notch_max_hz);
dynamicNotchMinHz_e.attr("max","250");
} else {
$('.dynamicNotchMaxHz').hide();
}
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44)) {
$('.dynamicNotchHelp').attr('title', i18n.getMessage('pidTuningMultiDynamicNotchFilterHelp'));
$('.dynamicNotchWidthPercent').hide();
} else {
$('.dynamicNotchCount').hide();
}

const dynamicNotchSwitch_e = $('.pid_filter input[id="dynamicNotchEnabled"]');

dynamicNotchSwitch_e.on('change', function() {

const checked = $(this).is(':checked');
const count = parseInt(dynamicNotchCount_e.val());

if (checked && !count) {
dynamicNotchCount_e.val(FILTER_DEFAULT.dyn_notch_count);
}

$('.dynamicNotch span.suboption').toggle(checked);
$('.dynamicNotchRange').toggle(semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_43) && checked);
$('.dynamicNotchMaxHz').toggle(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_43) && checked);
$('.dynamicNotchWidthPercent').toggle(semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_44) && checked);
$('.dynamicNotchCount').toggle(semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_44) && checked);

}).prop('checked', FC.FILTER_CONFIG.dyn_notch_count !== 0 || FC.FEATURE_CONFIG.features.isEnabled('DYNAMIC_FILTER')).trigger('change');

// RPM Filter
$('.rpmFilter').toggle(FC.MOTOR_CONFIG.use_dshot_telemetry);

$('.pid_filter input[name="rpmFilterHarmonics"]').val(FC.FILTER_CONFIG.gyro_rpm_notch_harmonics);
$('.pid_filter input[name="rpmFilterMinHz"]').val(FC.FILTER_CONFIG.gyro_rpm_notch_min_hz);
const rpmFilterHarmonics_e = $('.pid_filter input[name="rpmFilterHarmonics"]');
const rpmFilterMinHz_e = $('.pid_filter input[name="rpmFilterMinHz"]');

rpmFilterHarmonics_e.val(FC.FILTER_CONFIG.gyro_rpm_notch_harmonics);
rpmFilterMinHz_e.val(FC.FILTER_CONFIG.gyro_rpm_notch_min_hz);

$('.pid_filter #rpmFilterEnabled').change(function() {
$('.pid_filter #rpmFilterEnabled').on('change', function() {

let harmonics = $('.pid_filter input[name="rpmFilterHarmonics"]').val();
let checked = $(this).is(':checked') && harmonics != 0;
const harmonics = rpmFilterHarmonics_e.val();
const checked = $(this).is(':checked') && harmonics !== 0;

$('.pid_filter input[name="rpmFilterHarmonics"]').attr('disabled', !checked);
$('.pid_filter input[name="rpmFilterMinHz"]').attr('disabled', !checked);
rpmFilterHarmonics_e.attr('disabled', !checked);
rpmFilterMinHz_e.attr('disabled', !checked);

if (harmonics == 0) {
$('.pid_filter input[name="rpmFilterHarmonics"]').val(FILTER_DEFAULT.gyro_rpm_notch_harmonics);
rpmFilterHarmonics_e.val(FILTER_DEFAULT.gyro_rpm_notch_harmonics);
}

if (checked !== (FC.FILTER_CONFIG.gyro_rpm_notch_harmonics !== 0)) { // if rpmFilterEnabled is not the same value as saved in the fc
Expand All @@ -442,8 +467,10 @@ TABS.pid_tuning.initialize = function (callback) {
dynamicNotchQ_e.val(FC.FILTER_CONFIG.dyn_notch_q);
dynamicNotchWidthPercent_e.val(FC.FILTER_CONFIG.dyn_notch_width_percent);
}

$('.rpmFilter span.suboption').toggle(checked);
}).prop('checked', FC.FILTER_CONFIG.gyro_rpm_notch_harmonics != 0).change();

}).prop('checked', FC.FILTER_CONFIG.gyro_rpm_notch_harmonics !== 0).trigger('change');

} else {
$('.itermRelaxCutoff').hide();
Expand Down Expand Up @@ -1325,7 +1352,7 @@ TABS.pid_tuning.initialize = function (callback) {
FC.FILTER_CONFIG.dyn_notch_q = parseInt($('.pid_filter input[name="dynamicNotchQ"]').val());
FC.FILTER_CONFIG.dyn_notch_min_hz = parseInt($('.pid_filter input[name="dynamicNotchMinHz"]').val());

let rpmFilterEnabled = $('.pid_filter #rpmFilterEnabled').is(':checked');
const rpmFilterEnabled = $('.pid_filter #rpmFilterEnabled').is(':checked');
FC.FILTER_CONFIG.gyro_rpm_notch_harmonics = rpmFilterEnabled ? parseInt($('.pid_filter input[name="rpmFilterHarmonics"]').val()) : 0;
FC.FILTER_CONFIG.gyro_rpm_notch_min_hz = parseInt($('.pid_filter input[name="rpmFilterMinHz"]').val());
}
Expand Down Expand Up @@ -1356,7 +1383,9 @@ TABS.pid_tuning.initialize = function (callback) {
FC.ADVANCED_TUNING.vbat_sag_compensation = $('input[id="vbatSagCompensation"]').is(':checked') ? parseInt($('input[name="vbatSagValue"]').val()) : 0;
FC.ADVANCED_TUNING.thrustLinearization = $('input[id="thrustLinearization"]').is(':checked') ? parseInt($('input[name="thrustLinearValue"]').val()) : 0;
FC.FILTER_CONFIG.dyn_lpf_curve_expo = parseInt($('.pid_filter input[name="dtermLowpassExpo"]').val());
FC.FILTER_CONFIG.dyn_notch_count = parseInt($('.pid_filter input[name="dynamicNotchCount"]').val());

const dynamicNotchEnabled = $('.pid_filter input[id="dynamicNotchEnabled"]').is(':checked');
FC.FILTER_CONFIG.dyn_notch_count = dynamicNotchEnabled ? parseInt($('.pid_filter input[name="dynamicNotchCount"]').val()) : 0;

FC.TUNING_SLIDERS.slider_pids_mode = TuningSliders.sliderPidsMode;
//round slider values to nearest multiple of 5 and passes to the FW. Avoid dividing calc by (* x 100)/5 = 20
Expand Down Expand Up @@ -3072,7 +3101,7 @@ TABS.pid_tuning.updateFilterWarning = function() {
} else {
warningE.hide();
}
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42)) {
if (semver.gte(FC.CONFIG.apiVersion, API_VERSION_1_42) && semver.lt(FC.CONFIG.apiVersion, API_VERSION_1_44)) {
if (FC.FEATURE_CONFIG.features.isEnabled('DYNAMIC_FILTER')) {
warningDynamicNotchE.hide();
} else {
Expand Down
116 changes: 42 additions & 74 deletions src/tabs/pid_tuning.html
Original file line number Diff line number Diff line change
Expand Up @@ -1423,7 +1423,7 @@
</td>
</tr>

<tr>
<tr class="newFilter rpmFilter">
<th class="rpmFilter" colspan="2">
<div class="pid_mode rpmFilter">
<div i18n="pidTuningRpmFilterGroup"></div>
Expand Down Expand Up @@ -1455,95 +1455,63 @@
</td>
</tr>

<tr>
<tr class="newFilter dynamicNotch">
<th class="dynamicNotch" colspan="2">
<div class="pid_mode dynamicNotch">
<div i18n="pidTuningDynamicNotchFilterGroup"></div>
<div class="helpicon cf_tip dynamicNotchHelp" i18n_title="pidTuningDynamicNotchFilterHelp"></div>
</div>
</th>
</tr>
<tr class="newFilter dynamicNotch dynamicNotchRange">

<tr class="newFilter dynamicNotch">

<td>
<select name="dynamicNotchRange">
<!-- Populated on execution -->
</select>
<span class="inputSwitch"><input type="checkbox" id="dynamicNotchEnabled" class="toggle" /></span>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchRange"></span>
</label>

<td colspan="2">
<span i18n="pidTuningDynamicNotchFilterGroup"></span>

<span class="suboption dynamicNotchRange">
<select name="dynamicNotchRange">
<!-- Populated on execution -->
</select>
<label><span i18n="pidTuningDynamicNotchRange"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchRangeHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter dynamicNotch dynamicNotchWidthPercent">
<td>
<input type="number" name="dynamicNotchWidthPercent" step="1" min="0" max="20"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchWidthPercent"></span>
</label>
</span>

<span class="suboption dynamicNotchWidthPercent">
<input type="number" name="dynamicNotchWidthPercent" step="1" min="0" max="20"/>
<label><span i18n="pidTuningDynamicNotchWidthPercent"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchWidthPercentHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter dynamicNotch dynamicNotchQ">
<td>
<input type="number" name="dynamicNotchQ" step="1" min="1" max="1000"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchQ"></span>
</label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchQHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter dynamicNotch dynamicNotchCount">
<td>
<input type="number" name="dynamicNotchCount" step="1" min="0" max="5"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchCount"></span>
</label>
</span>

<span class="suboption dynamicNotchCount">
<input type="number" name="dynamicNotchCount" step="1" min="1" max="5"/>
<label><span i18n="pidTuningDynamicNotchCount"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchCountHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter dynamicNotch">
<td>
<input type="number" name="dynamicNotchMinHz" step="1" min="60" max="1000"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchMinHz"></span>
</label>
</span>

<span class="suboption dynamicNotchQ">
<input type="number" name="dynamicNotchQ" step="1" min="1" max="1000"/>
<label><span i18n="pidTuningDynamicNotchQ"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchQHelp"></div>
</span>

<span class="suboption dynamicNotchMinHz">
<input type="number" name="dynamicNotchMinHz" step="1" min="60" max="1000"/>
<label><span i18n="pidTuningDynamicNotchMinHz"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchMinHzHelp"></div>
</div>
</td>
</tr>
<tr class="newFilter dynamicNotch dynamicNotchMaxHz">
<td>
<input type="number" name="dynamicNotchMaxHz" step="1" min="200" max="1000"/>
</td>
<td>
<div>
<label>
<span i18n="pidTuningDynamicNotchMaxHz"></span>
</label>
</span>

<span class="suboption dynamicNotchMaxHz">
<input type="number" name="dynamicNotchMaxHz" step="1" min="200" max="1000"/>
<label><span i18n="pidTuningDynamicNotchMaxHz"></span></label>
<div class="helpicon cf_tip" i18n_title="pidTuningDynamicNotchMaxHzHelp"></div>
</div>
</span>
</td>
</tr>

</table>
</div>
<div class="gui_box grey topspacer pid_filter two_columns_second">
Expand Down