#!/usr/bin/python3

import sys
import dbus

# Map dict keys to units. Units can be a function/lambda which should return the
# entire value with units as a string.
unit_map = {
    "ConnectedBss" : None,
    "RSSI" : "dBm",
    "RxMode" : None,
    "RxBitrate" : lambda k : str(100 * int(k)) + ' Kbps',
    "RxMCS" : lambda i : str(int(i)),
    "TxMode" : None,
    "TxBitrate" : lambda k : str(100 * int(k)) + ' Kbps',
    "TxMCS" : lambda i : str(int(i)),
    "ExpectedThroughput" : "Kbps"
}

if (len(sys.argv) != 2):
    print("Usage: %s <device>" % (sys.argv[0]))
    sys.exit(1)

bus = dbus.SystemBus()
device = dbus.Interface(bus.get_object("net.connman.iwd", sys.argv[1]),
                                    "net.connman.iwd.StationDiagnostic")
diagnostics = device.GetDiagnostics()

for key, value in diagnostics.items():
    if key in unit_map:
        units = unit_map[key]
        if units is None:
            units = ''
        elif callable(units):
            value = units(value)
            units = ''

        print('%s : %s %s' % (key, value, units))
