@@ -377,51 +377,74 @@ 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+ $ ( '.dynamicNotch span.inputSwitch' ) . hide ( ) ;
386+ if ( ! FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) {
387+ $ ( '.dynamicNotch' ) . hide ( ) ;
388+ }
390389 }
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 ) ;
390+ const dynamicNotchRange_e = $ ( '.pid_filter select[name="dynamicNotchRange"]' ) ;
391+ const dynamicNotchWidthPercent_e = $ ( '.pid_filter input[name="dynamicNotchWidthPercent"]' ) ;
392+ const dynamicNotchCount_e = $ ( '.pid_filter input[name="dynamicNotchCount"]' ) ;
393+ const dynamicNotchQ_e = $ ( '.pid_filter input[name="dynamicNotchQ"]' ) ;
394+ const dynamicNotchMinHz_e = $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) ;
395+ const dynamicNotchMaxHz_e = $ ( '.pid_filter input[name="dynamicNotchMaxHz"]' ) ;
396+
397+ dynamicNotchRange_e . val ( FC . FILTER_CONFIG . dyn_notch_range ) ;
393398 dynamicNotchWidthPercent_e . val ( FC . FILTER_CONFIG . dyn_notch_width_percent ) ;
394- dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
395399 dynamicNotchCount_e . val ( FC . FILTER_CONFIG . dyn_notch_count ) ;
396- $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) . val ( FC . FILTER_CONFIG . dyn_notch_min_hz ) ;
400+ dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
401+ dynamicNotchMinHz_e . val ( FC . FILTER_CONFIG . dyn_notch_min_hz ) ;
402+ dynamicNotchMaxHz_e . val ( FC . FILTER_CONFIG . dyn_notch_max_hz ) ;
403+
397404 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 ) ;
405+ dynamicNotchMinHz_e . attr ( "max" , "250" ) ;
400406 } else {
401407 $ ( '.dynamicNotchMaxHz' ) . hide ( ) ;
402408 }
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- }
409409
410+ const dynamicNotchSwitch_e = $ ( '.pid_filter input[id="dynamicNotchEnabled"]' ) ;
411+
412+ dynamicNotchSwitch_e . on ( 'change' , function ( ) {
413+
414+ const checked = $ ( this ) . is ( ':checked' ) ;
415+ const count = parseInt ( dynamicNotchCount_e . val ( ) ) ;
416+
417+ if ( checked && ! count ) {
418+ dynamicNotchCount_e . val ( FILTER_DEFAULT . dyn_notch_count ) ;
419+ }
420+
421+ $ ( '.dynamicNotch span.suboption' ) . toggle ( checked ) ;
422+ $ ( '.dynamicNotchRange' ) . toggle ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) && checked ) ;
423+ $ ( '.dynamicNotchMaxHz' ) . toggle ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_43 ) && checked ) ;
424+ $ ( '.dynamicNotchWidthPercent' ) . toggle ( semver . lt ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) && checked ) ;
425+ $ ( '.dynamicNotchCount' ) . toggle ( semver . gte ( FC . CONFIG . apiVersion , API_VERSION_1_44 ) && checked ) ;
426+
427+ } ) . prop ( 'checked' , FC . FILTER_CONFIG . dyn_notch_count !== 0 || FC . FEATURE_CONFIG . features . isEnabled ( 'DYNAMIC_FILTER' ) ) . trigger ( 'change' ) ;
428+
429+ // RPM Filter
410430 $ ( '.rpmFilter' ) . toggle ( FC . MOTOR_CONFIG . use_dshot_telemetry ) ;
411431
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 ) ;
432+ const rpmFilterHarmonics_e = $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) ;
433+ const rpmFilterMinHz_e = $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) ;
434+
435+ rpmFilterHarmonics_e . val ( FC . FILTER_CONFIG . gyro_rpm_notch_harmonics ) ;
436+ rpmFilterMinHz_e . val ( FC . FILTER_CONFIG . gyro_rpm_notch_min_hz ) ;
414437
415- $ ( '.pid_filter #rpmFilterEnabled' ) . change ( function ( ) {
438+ $ ( '.pid_filter #rpmFilterEnabled' ) . on ( 'change' , function ( ) {
416439
417- let harmonics = $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( ) ;
418- let checked = $ ( this ) . is ( ':checked' ) && harmonics != 0 ;
440+ const harmonics = rpmFilterHarmonics_e . val ( ) ;
441+ const checked = $ ( this ) . is ( ':checked' ) && harmonics != = 0 ;
419442
420- $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . attr ( 'disabled' , ! checked ) ;
421- $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) . attr ( 'disabled' , ! checked ) ;
443+ rpmFilterHarmonics_e . attr ( 'disabled' , ! checked ) ;
444+ rpmFilterMinHz_e . attr ( 'disabled' , ! checked ) ;
422445
423446 if ( harmonics == 0 ) {
424- $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( FILTER_DEFAULT . gyro_rpm_notch_harmonics ) ;
447+ rpmFilterHarmonics_e . val ( FILTER_DEFAULT . gyro_rpm_notch_harmonics ) ;
425448 }
426449
427450 if ( checked !== ( FC . FILTER_CONFIG . gyro_rpm_notch_harmonics !== 0 ) ) { // if rpmFilterEnabled is not the same value as saved in the fc
@@ -442,8 +465,10 @@ TABS.pid_tuning.initialize = function (callback) {
442465 dynamicNotchQ_e . val ( FC . FILTER_CONFIG . dyn_notch_q ) ;
443466 dynamicNotchWidthPercent_e . val ( FC . FILTER_CONFIG . dyn_notch_width_percent ) ;
444467 }
468+
445469 $ ( '.rpmFilter span.suboption' ) . toggle ( checked ) ;
446- } ) . prop ( 'checked' , FC . FILTER_CONFIG . gyro_rpm_notch_harmonics != 0 ) . change ( ) ;
470+
471+ } ) . prop ( 'checked' , FC . FILTER_CONFIG . gyro_rpm_notch_harmonics !== 0 ) . trigger ( 'change' ) ;
447472
448473 } else {
449474 $ ( '.itermRelaxCutoff' ) . hide ( ) ;
@@ -1321,7 +1346,7 @@ TABS.pid_tuning.initialize = function (callback) {
13211346 FC . FILTER_CONFIG . dyn_notch_q = parseInt ( $ ( '.pid_filter input[name="dynamicNotchQ"]' ) . val ( ) ) ;
13221347 FC . FILTER_CONFIG . dyn_notch_min_hz = parseInt ( $ ( '.pid_filter input[name="dynamicNotchMinHz"]' ) . val ( ) ) ;
13231348
1324- let rpmFilterEnabled = $ ( '.pid_filter #rpmFilterEnabled' ) . is ( ':checked' ) ;
1349+ const rpmFilterEnabled = $ ( '.pid_filter #rpmFilterEnabled' ) . is ( ':checked' ) ;
13251350 FC . FILTER_CONFIG . gyro_rpm_notch_harmonics = rpmFilterEnabled ? parseInt ( $ ( '.pid_filter input[name="rpmFilterHarmonics"]' ) . val ( ) ) : 0 ;
13261351 FC . FILTER_CONFIG . gyro_rpm_notch_min_hz = parseInt ( $ ( '.pid_filter input[name="rpmFilterMinHz"]' ) . val ( ) ) ;
13271352 }
@@ -1350,7 +1375,9 @@ TABS.pid_tuning.initialize = function (callback) {
13501375 FC . ADVANCED_TUNING . vbat_sag_compensation = $ ( 'input[id="vbatSagCompensation"]' ) . is ( ':checked' ) ? parseInt ( $ ( 'input[name="vbatSagValue"]' ) . val ( ) ) : 0 ;
13511376 FC . ADVANCED_TUNING . thrustLinearization = $ ( 'input[id="thrustLinearization"]' ) . is ( ':checked' ) ? parseInt ( $ ( 'input[name="thrustLinearValue"]' ) . val ( ) ) : 0 ;
13521377 FC . FILTER_CONFIG . dyn_lpf_curve_expo = parseInt ( $ ( '.pid_filter input[name="dtermLowpassExpo"]' ) . val ( ) ) ;
1353- FC . FILTER_CONFIG . dyn_notch_count = parseInt ( $ ( '.pid_filter input[name="dynamicNotchCount"]' ) . val ( ) ) ;
1378+
1379+ const dynamicNotchEnabled = $ ( '.pid_filter input[id="dynamicNotchEnabled"]' ) . is ( ':checked' ) ;
1380+ FC . FILTER_CONFIG . dyn_notch_count = dynamicNotchEnabled ? parseInt ( $ ( '.pid_filter input[name="dynamicNotchCount"]' ) . val ( ) ) : 0 ;
13541381
13551382 FC . TUNING_SLIDERS . slider_pids_mode = TuningSliders . sliderPidsMode ;
13561383 //round slider values to nearest multiple of 5 and passes to the FW. Avoid dividing calc by (* x 100)/5 = 20
0 commit comments