@@ -377,51 +377,76 @@ TABS.pid_tuning.initialize = function (callback) {
377377 }
378378
379379 if ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_42 ) ) {
380- const dynamicNotchWidthPercent_e = $ ( '.pid_filter input[name="dynamicNotchWidthPercent"]' ) ;
381- const dynamicNotchQ_e = $ ( '.pid_filter input[name="dynamicNotchQ"]' ) ;
382- const dynamicNotchCount_e = $ ( '.pid_filter input[name="dynamicNotchCount"]' ) ;
383380
384381 $ ( '.smartfeedforward' ) . hide ( ) ;
385382
386- if ( FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) {
387- $ ( '.dynamicNotch' ) . show ( ) ;
388- } else {
389- $ ( '.dynamicNotch' ) . hide ( ) ;
383+ // Dynamic Notch Filter
384+ if ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) ) {
385+ if ( FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) {
386+ $ ( '.dynamicNotch span.inputSwitch' ) . hide ( ) ;
387+ } else {
388+ $ ( '.dynamicNotch' ) . hide ( ) ;
389+ }
390390 }
391- $ ( '.dynamicNotchRange' ) . toggle ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) ) ;
392- $ ( '.pid_filter select[name="dynamicNotchRange"]' ) . val ( FC . FILTER_CONFIG . dyn_notch_range ) ;
391+
392+ const dynamicNotchRange_e = $ ( '.pid_filter select[name="dynamicNotchRange"]' ) ;
393+ const dynamicNotchWidthPercent_e = $ ( '.pid_filter input[name="dynamicNotchWidthPercent"]' ) ;
394+ const dynamicNotchCount_e = $ ( '.pid_filter input[name="dynamicNotchCount"]' ) ;
395+ const dynamicNotchQ_e = $ ( '.pid_filter input[name="dynamicNotchQ"]' ) ;
396+ const dynamicNotchMinHz_e = $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) ;
397+ const dynamicNotchMaxHz_e = $ ( '.pid_filter input[name="dynamicNotchMaxHz"]' ) ;
398+
399+ dynamicNotchRange_e . val ( FC . FILTER_CONFIG . dyn_notch_range ) ;
393400 dynamicNotchWidthPercent_e . val ( FC . FILTER_CONFIG . dyn_notch_width_percent ) ;
394- dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
395401 dynamicNotchCount_e . val ( FC . FILTER_CONFIG . dyn_notch_count ) ;
396- $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) . val ( FC . FILTER_CONFIG . dyn_notch_min_hz ) ;
402+ dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
403+ dynamicNotchMinHz_e . val ( FC . FILTER_CONFIG . dyn_notch_min_hz ) ;
404+ dynamicNotchMaxHz_e . val ( FC . FILTER_CONFIG . dyn_notch_max_hz ) ;
405+
397406 if ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) ) {
398- $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) . attr ( "max" , "250" ) ;
399- $ ( '.pid_filter input[name="dynamicNotchMaxHz"]' ) . val ( FC . FILTER_CONFIG . dyn_notch_max_hz ) ;
407+ dynamicNotchMinHz_e . attr ( "max" , "250" ) ;
400408 } else {
401409 $ ( '.dynamicNotchMaxHz' ) . hide ( ) ;
402410 }
403- if ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) ) {
404- $ ( '.dynamicNotchHelp' ) . attr ( 'title' , i18n . getMessage ( 'pidTuningMultiDynamicNotchFilterHelp' ) ) ;
405- $ ( '.dynamicNotchWidthPercent' ) . hide ( ) ;
406- } else {
407- $ ( '.dynamicNotchCount' ) . hide ( ) ;
408- }
409411
412+ const dynamicNotchSwitch_e = $ ( '.pid_filter input[id="dynamicNotchEnabled"]' ) ;
413+
414+ dynamicNotchSwitch_e . on ( 'change' , function ( ) {
415+
416+ const checked = $ ( this ) . is ( ':checked' ) ;
417+ const count = parseInt ( dynamicNotchCount_e . val ( ) ) ;
418+
419+ if ( checked && ! count ) {
420+ dynamicNotchCount_e . val ( FILTER_DEFAULT . dyn_notch_count ) ;
421+ }
422+
423+ $ ( '.dynamicNotch span.suboption' ) . toggle ( checked ) ;
424+ $ ( '.dynamicNotchRange' ) . toggle ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) && checked ) ;
425+ $ ( '.dynamicNotchMaxHz' ) . toggle ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) && checked ) ;
426+ $ ( '.dynamicNotchWidthPercent' ) . toggle ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) && checked ) ;
427+ $ ( '.dynamicNotchCount' ) . toggle ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) && checked ) ;
428+
429+ } ) . prop ( 'checked' , FC . FILTER_CONFIG . dyn_notch_count !== 0 || FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) . trigger ( 'change' ) ;
430+
431+ // RPM Filter
410432 $ ( '.rpmFilter' ) . toggle ( FC . MOTOR_CONFIG . use_dshot_telemetry ) ;
411433
412- $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( FC . FILTER_CONFIG . gyro_rpm_notch_harmonics ) ;
413- $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) . val ( FC . FILTER_CONFIG . gyro_rpm_notch_min_hz ) ;
434+ const rpmFilterHarmonics_e = $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) ;
435+ const rpmFilterMinHz_e = $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) ;
436+
437+ rpmFilterHarmonics_e . val ( FC . FILTER_CONFIG . gyro_rpm_notch_harmonics ) ;
438+ rpmFilterMinHz_e . val ( FC . FILTER_CONFIG . gyro_rpm_notch_min_hz ) ;
414439
415- $ ( '.pid_filter #rpmFilterEnabled' ) . change ( function ( ) {
440+ $ ( '.pid_filter #rpmFilterEnabled' ) . on ( 'change' , function ( ) {
416441
417- let harmonics = $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( ) ;
418- let checked = $ ( this ) . is ( ':checked' ) && harmonics != 0 ;
442+ const harmonics = rpmFilterHarmonics_e . val ( ) ;
443+ const checked = $ ( this ) . is ( ':checked' ) && harmonics != = 0 ;
419444
420- $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . attr ( 'disabled' , ! checked ) ;
421- $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) . attr ( 'disabled' , ! checked ) ;
445+ rpmFilterHarmonics_e . attr ( 'disabled' , ! checked ) ;
446+ rpmFilterMinHz_e . attr ( 'disabled' , ! checked ) ;
422447
423448 if ( harmonics == 0 ) {
424- $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( FILTER_DEFAULT . gyro_rpm_notch_harmonics ) ;
449+ rpmFilterHarmonics_e . val ( FILTER_DEFAULT . gyro_rpm_notch_harmonics ) ;
425450 }
426451
427452 if ( checked !== ( FC . FILTER_CONFIG . gyro_rpm_notch_harmonics !== 0 ) ) { // if rpmFilterEnabled is not the same value as saved in the fc
@@ -442,8 +467,10 @@ TABS.pid_tuning.initialize = function (callback) {
442467 dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
443468 dynamicNotchWidthPercent_e . val ( FC . FILTER_CONFIG . dyn_notch_width_percent ) ;
444469 }
470+
445471 $ ( '.rpmFilter span.suboption' ) . toggle ( checked ) ;
446- } ) . prop ( 'checked' , FC . FILTER_CONFIG . gyro_rpm_notch_harmonics != 0 ) . change ( ) ;
472+
473+ } ) . prop ( 'checked' , FC . FILTER_CONFIG . gyro_rpm_notch_harmonics !== 0 ) . trigger ( 'change' ) ;
447474
448475 } else {
449476 $ ( '.itermRelaxCutoff' ) . hide ( ) ;
@@ -1325,7 +1352,7 @@ TABS.pid_tuning.initialize = function (callback) {
13251352 FC . FILTER_CONFIG . dyn_notch_q = parseInt ( $ ( '.pid_filter input[name="dynamicNotchQ"]' ) . val ( ) ) ;
13261353 FC . FILTER_CONFIG . dyn_notch_min_hz = parseInt ( $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) . val ( ) ) ;
13271354
1328- let rpmFilterEnabled = $ ( '.pid_filter #rpmFilterEnabled' ) . is ( ':checked' ) ;
1355+ const rpmFilterEnabled = $ ( '.pid_filter #rpmFilterEnabled' ) . is ( ':checked' ) ;
13291356 FC . FILTER_CONFIG . gyro_rpm_notch_harmonics = rpmFilterEnabled ? parseInt ( $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( ) ) : 0 ;
13301357 FC . FILTER_CONFIG . gyro_rpm_notch_min_hz = parseInt ( $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) . val ( ) ) ;
13311358 }
@@ -1356,7 +1383,9 @@ TABS.pid_tuning.initialize = function (callback) {
13561383 FC . ADVANCED_TUNING . vbat_sag_compensation = $ ( 'input[id="vbatSagCompensation"]' ) . is ( ':checked' ) ? parseInt ( $ ( 'input[name="vbatSagValue"]' ) . val ( ) ) : 0 ;
13571384 FC . ADVANCED_TUNING . thrustLinearization = $ ( 'input[id="thrustLinearization"]' ) . is ( ':checked' ) ? parseInt ( $ ( 'input[name="thrustLinearValue"]' ) . val ( ) ) : 0 ;
13581385 FC . FILTER_CONFIG . dyn_lpf_curve_expo = parseInt ( $ ( '.pid_filter input[name="dtermLowpassExpo"]' ) . val ( ) ) ;
1359- FC . FILTER_CONFIG . dyn_notch_count = parseInt ( $ ( '.pid_filter input[name="dynamicNotchCount"]' ) . val ( ) ) ;
1386+
1387+ const dynamicNotchEnabled = $ ( '.pid_filter input[id="dynamicNotchEnabled"]' ) . is ( ':checked' ) ;
1388+ FC . FILTER_CONFIG . dyn_notch_count = dynamicNotchEnabled ? parseInt ( $ ( '.pid_filter input[name="dynamicNotchCount"]' ) . val ( ) ) : 0 ;
13601389
13611390 FC . TUNING_SLIDERS . slider_pids_mode = TuningSliders . sliderPidsMode ;
13621391 //round slider values to nearest multiple of 5 and passes to the FW. Avoid dividing calc by (* x 100)/5 = 20
@@ -3072,7 +3101,7 @@ TABS.pid_tuning.updateFilterWarning = function() {
30723101 } else {
30733102 warningE . hide ( ) ;
30743103 }
3075- if ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_42 ) ) {
3104+ if ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_42 ) && semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) ) {
30763105 if ( FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) {
30773106 warningDynamicNotchE . hide ( ) ;
30783107 } else {
0 commit comments