@@ -145,8 +145,12 @@ class IeeeMode(Enum):
145145
146146 AUTO = "AUTO"
147147 _11ACVHT80 = "11ACVHT80" # On a NanoStation
148+ _11ACVHT60 = "11ACVHT60"
149+ _11ACVHT50 = "11ACVHT50"
148150 _11ACVHT40 = "11ACVHT40"
149151 _11ACVHT20 = "11ACVHT20" # On a LiteBeam
152+ _11NAHT40MINUS = "11NAHT40MINUS" # On a v6 XM
153+ _11NAHT40PLUS = "11NAHT40PLUS" # On a v6 XW
150154 # More to be added when known
151155
152156
@@ -552,13 +556,19 @@ class Wireless(AirOSDataClass):
552556 @classmethod
553557 def __pre_deserialize__ (cls , d : dict [str , Any ]) -> dict [str , Any ]:
554558 """Pre-deserialize hook for Wireless."""
559+
555560 _check_and_log_unknown_enum_value (d , "mode" , WirelessMode , "Wireless" , "mode" )
561+
556562 _check_and_log_unknown_enum_value (
557- d , "ieeemode " , IeeeMode , "Wireless" , "ieeemode "
563+ d , "security " , Security , "Wireless" , "security "
558564 )
565+
566+ # Ensure ieeemode/opmode are in uppercase and map opmode back into ieeemode
567+ d ["ieeemode" ] = d ["ieeemode" ].upper () or None
559568 _check_and_log_unknown_enum_value (
560- d , "security " , Security , "Wireless" , "security "
569+ d , "ieeemode " , IeeeMode , "Wireless" , "ieeemode "
561570 )
571+
562572 return d
563573
564574
@@ -583,8 +593,8 @@ class Wireless6(AirOSDataClass):
583593 ack : int
584594 distance : int # In meters
585595 ccq : int
586- txrate : int
587- rxrate : int
596+ txrate : str
597+ rxrate : str
588598 security : Security
589599 qos : str
590600 rstatus : int
@@ -594,7 +604,9 @@ class Wireless6(AirOSDataClass):
594604 aprepeater : int # Not bool as v8
595605 chanbw : int
596606 throughput : Throughput
607+ ieeemode : IeeeMode # Virtual to match base/v8
597608 mode : Wireless6Mode | None = None
609+ antenna_gain : int | None = None # Virtual to match base/v8
598610
599611 @classmethod
600612 def __pre_deserialize__ (cls , d : dict [str , Any ]) -> dict [str , Any ]:
@@ -615,6 +627,13 @@ def __pre_deserialize__(cls, d: dict[str, Any]) -> dict[str, Any]:
615627 "tx" : int (float (txrate )) if txrate else 0 ,
616628 }
617629
630+ d ["ieeemode" ] = d ["opmode" ].upper () or None
631+ _check_and_log_unknown_enum_value (
632+ d , "ieeemode" , IeeeMode , "Wireless" , "ieeemode"
633+ )
634+ match = re .search (r"(\d+)\s*dBi" , d ["antenna" ])
635+ d ["antenna_gain" ] = int (match .group (1 )) if match else None
636+
618637 return d
619638
620639
0 commit comments