swiftmacoscorewlan

Core WLAN MCS Index?


I'm trying to recreate the information displayed for the current Wi-Fi network when option-clicking on the Wi-Fi status bar item. One of the parameters shown is the MCS Index, but I can't find any way to query this value using the CWInterface class, which is where I am getting most of the other data:

if let interface = CWWiFiClient.shared().interface() {
    rssi = interface.rssiValue()
    noise = interface.noiseMeasurement()
    // etc.
}

Since both the Wi-Fi status bar item and the airport command line tool display the MCS Index, it seems like there should be some way to query it:

MacBook:~ mark$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
     agrCtlRSSI: -46
     agrExtRSSI: 0
    agrCtlNoise: -90
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 878
        maxRate: 1300
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: xx:xx:xx:xx:xx:xx
           SSID: MyWiFi
            MCS: 7
        channel: 149,80

I've also seem some Python sample code that seems to indicate that the MCS Index should be available, but I don't see it in the docs or code completion.

Is there some way to get this value through Core WLAN or some other framework, or is this something I need to calculate based on other values?


Solution

  • I found another Python script wifi_status.py which reports the WiFi status. From the lines

    def wifi_status(properties=('bssid', 'channel', 'txRate', 'mcsIndex', 'rssi', 'noise')):
        xface = CWWiFiClient.sharedWiFiClient().interface()
        while True:
            yield({name: getattr(xface, name)() for name in properties})
    

    one can conclude that these attributes can be retrieved with Key-Value Coding.

    And that really works:

    if let iface = CWWiFiClient.shared().interface() {
        if let mcsIndex = iface.value(forKey: "mcsIndex") as? Int {
            print(mcsIndex)
        }
    }
    

    But I have now idea if that approach is officially supported, or will work in the future, so use at your own risk.