@@ -539,6 +539,12 @@ export function HeaderDialog(dialog, onSave) {
539
539
name : "gyro_to_use" ,
540
540
type : FIRMWARE_TYPE_BETAFLIGHT ,
541
541
min : "4.3.0" ,
542
+ max : "4.5.9" ,
543
+ } ,
544
+ {
545
+ name : "gyro_enabled_bitmask" ,
546
+ type : FIRMWARE_TYPE_BETAFLIGHT ,
547
+ min : "2025.12.0" ,
542
548
max : "9999.9.9" ,
543
549
} ,
544
550
{
@@ -867,6 +873,34 @@ export function HeaderDialog(dialog, onSave) {
867
873
} else {
868
874
parameterElem . addClass ( "missing" ) ;
869
875
}
876
+ parameterElem . css (
877
+ "display" ,
878
+ isParameterValid ( name ) ? "table-cell" : "none" ,
879
+ ) ;
880
+ }
881
+
882
+ function setBitmaskParameter ( name , data , totalBits = 8 ) {
883
+ let parameterElem = $ ( `.parameter td[name="${ name } "]` ) ;
884
+ let nameElem = $ ( "input" , parameterElem ) ;
885
+ if ( data == null ) {
886
+ // Clear all bitmask state when data is null
887
+ nameElem . val ( "" ) ; // Clear the input value
888
+ nameElem . removeData ( "raw-value" ) ; // Remove stored raw value
889
+ nameElem . prop ( "readonly" , false ) ; // Make input editable again
890
+ parameterElem . removeAttr ( "title" ) ; // Clear tooltip
891
+ parameterElem . addClass ( "missing" ) ;
892
+ } else {
893
+ // Convert number to binary string with leading zeros
894
+ const binaryString = data . toString ( 2 ) . padStart ( totalBits , '0' ) ;
895
+ // Display as "3 (00000011)" format
896
+ const displayValue = `${ data } (${ binaryString } )` ;
897
+ nameElem . val ( displayValue ) ;
898
+ // Store the raw integer value for round-trip saving
899
+ nameElem . data ( "raw-value" , data ) ;
900
+ nameElem . attr ( "readonly" , true ) ; // Make it readonly since it shows formatted bitmask
901
+ parameterElem . attr ( "title" , `Bitmask value: ${ data } (binary: ${ binaryString } )` ) ;
902
+ parameterElem . removeClass ( "missing" ) ;
903
+ }
870
904
parameterElem . css (
871
905
"display" ,
872
906
isParameterValid ( name ) ? "table-cell" : "none"
@@ -1363,9 +1397,9 @@ export function HeaderDialog(dialog, onSave) {
1363
1397
1364
1398
let PID_CONTROLLER_TYPE = [ ] ;
1365
1399
if (
1366
- ( sysConfig . firmware >= 3.0 &&
1400
+ ( sysConfig . firmware >= 3 &&
1367
1401
sysConfig . firmwareType == FIRMWARE_TYPE_BETAFLIGHT ) ||
1368
- ( sysConfig . firmware >= 2.0 &&
1402
+ ( sysConfig . firmware >= 2 &&
1369
1403
sysConfig . firmwareType == FIRMWARE_TYPE_CLEANFLIGHT )
1370
1404
) {
1371
1405
PID_CONTROLLER_TYPE = [ "LEGACY" , "BETAFLIGHT" ] ;
@@ -1713,8 +1747,7 @@ export function HeaderDialog(dialog, onSave) {
1713
1747
if ( semver . lt ( activeSysConfig . firmwareVersion , "2025.12.0" ) ) {
1714
1748
const derivativeColumn = document . getElementById ( "derivativeColumn" ) ;
1715
1749
const dMaxColumn = document . getElementById ( "dMaxColumn" ) ;
1716
- const parent = derivativeColumn . parentNode ;
1717
- parent . insertBefore ( dMaxColumn , derivativeColumn ) ; // Меняем местами
1750
+ derivativeColumn . before ( dMaxColumn ) ; // Меняем местами
1718
1751
}
1719
1752
} else {
1720
1753
$ ( "#d_max" ) . hide ( ) ;
@@ -1938,6 +1971,7 @@ export function HeaderDialog(dialog, onSave) {
1938
1971
renderSelect ( "baro_hardware" , sysConfig . baro_hardware , BARO_HARDWARE ) ;
1939
1972
renderSelect ( "mag_hardware" , sysConfig . mag_hardware , MAG_HARDWARE ) ;
1940
1973
renderSelect ( "gyro_to_use" , sysConfig . gyro_to_use , GYRO_TO_USE ) ;
1974
+ setBitmaskParameter ( "gyro_enabled_bitmask" , sysConfig . gyro_enabled_bitmask , 8 ) ;
1941
1975
setParameter ( "motor_poles" , sysConfig . motor_poles , 0 ) ;
1942
1976
1943
1977
/* Booleans */
@@ -1998,6 +2032,9 @@ export function HeaderDialog(dialog, onSave) {
1998
2032
if ( $ ( this ) . attr ( "decPl" ) != null ) {
1999
2033
newArray [ matches [ 2 ] ] =
2000
2034
parseFloat ( $ ( this ) . val ( ) ) * Math . pow ( 10 , $ ( this ) . attr ( "decPl" ) ) ;
2035
+ } else if ( $ ( this ) . data ( "raw-value" ) != null ) {
2036
+ // Use raw value for bitmask parameters
2037
+ newArray [ matches [ 2 ] ] = $ ( this ) . data ( "raw-value" ) ;
2001
2038
} else {
2002
2039
newArray [ matches [ 2 ] ] = $ ( this ) . val ( ) == "on" ? 1 : 0 ;
2003
2040
}
@@ -2006,6 +2043,9 @@ export function HeaderDialog(dialog, onSave) {
2006
2043
if ( $ ( this ) . attr ( "decPl" ) != null ) {
2007
2044
newSysConfig [ $ ( this ) . attr ( "name" ) ] =
2008
2045
parseFloat ( $ ( this ) . val ( ) ) * Math . pow ( 10 , $ ( this ) . attr ( "decPl" ) ) ;
2046
+ } else if ( $ ( this ) . data ( "raw-value" ) != null ) {
2047
+ // Use raw value for bitmask parameters
2048
+ newSysConfig [ $ ( this ) . attr ( "name" ) ] = $ ( this ) . data ( "raw-value" ) ;
2009
2049
} else {
2010
2050
newSysConfig [ $ ( this ) . attr ( "name" ) ] = $ ( this ) . val ( ) == "on" ? 1 : 0 ;
2011
2051
}
0 commit comments