This repository has been archived on 2025-03-19. You can view files and clone it, but cannot push or open issues or pull requests.
gonetworkmanager/DeviceWireless.go
2019-07-10 22:57:00 -04:00

190 lines
6 KiB
Go

package gonetworkmanager
import (
"encoding/json"
"github.com/godbus/dbus"
)
const (
DeviceWirelessInterface = DeviceInterface + ".Wireless"
// Methods
DeviceWirelessGetAccessPoints = DeviceWirelessInterface + ".GetAccessPoints"
DeviceWirelessGetAllAccessPoints = DeviceWirelessInterface + ".GetAllAccessPoints"
DeviceWirelessRequestScan = DeviceWirelessInterface + ".RequestScan"
// Properties
DeviceWirelessPropertyHwAddress = DeviceWirelessInterface + ".HwAddress" // readable s
DeviceWirelessPropertyPermHwAddress = DeviceWirelessInterface + ".PermHwAddress" // readable s
DeviceWirelessPropertyMode = DeviceWirelessInterface + ".Mode" // readable u
DeviceWirelessPropertyBitrate = DeviceWirelessInterface + ".Bitrate" // readable u
DeviceWirelessPropertyAccessPoints = DeviceWirelessInterface + ".AccessPoints" // readable ao
DeviceWirelessPropertyActiveAccessPoint = DeviceWirelessInterface + ".ActiveAccessPoint" // readable o
DeviceWirelessPropertyWirelessCapabilities = DeviceWirelessInterface + ".WirelessCapabilities" // readable u
DeviceWirelessPropertyLastScan = DeviceWirelessInterface + ".LastScan" // readable x
)
type DeviceWireless interface {
Device
// GetAccessPoints gets the list of access points visible to this device.
// Note that this list does not include access points which hide their SSID.
// To retrieve a list of all access points (including hidden ones) use the
// GetAllAccessPoints() method.
GetAccessPoints() ([]AccessPoint, error)
// GetAllAccessPoints gets the list of all access points visible to this
// device, including hidden ones for which the SSID is not yet known.
GetAllAccessPoints() ([]AccessPoint, error)
// Request the device to scan. To know when the scan is finished, use the
// "PropertiesChanged" signal from "org.freedesktop.DBus.Properties" to listen
// to changes to the "LastScan" property.
RequestScan() error
// The active hardware address of the device.
GetPropertyHwAddress() (string, error)
// The permanent hardware address of the device.
GetPropertyPermHwAddress() (string, error)
// The operating mode of the wireless device.
GetPropertyMode() (Nm80211Mode, error)
// The bit rate currently used by the wireless device, in kilobits/second (Kb/s).
GetPropertyBitrate() (uint32, error)
// List of object paths of access point visible to this wireless device.
GetPropertyAccessPoints() ([]AccessPoint, error)
// Object path of the access point currently used by the wireless device.
GetPropertyActiveAccessPoint() (AccessPoint, error)
// The capabilities of the wireless device.
GetPropertyWirelessCapabilities() (uint32, error)
// The timestamp (in CLOCK_BOOTTIME milliseconds) for the last finished
// network scan. A value of -1 means the device never scanned for access
// points.
GetPropertyLastScan() (int64, error)
}
func NewDeviceWireless(objectPath dbus.ObjectPath) (DeviceWireless, error) {
var d deviceWireless
return &d, d.init(NetworkManagerInterface, objectPath)
}
type deviceWireless struct {
device
}
func (d *deviceWireless) GetAccessPoints() ([]AccessPoint, error) {
var apPaths []dbus.ObjectPath
err := d.callWithReturn(&apPaths, DeviceWirelessGetAccessPoints)
if err != nil {
return nil, err
}
aps := make([]AccessPoint, len(apPaths))
for i, path := range apPaths {
aps[i], err = NewAccessPoint(path)
if err != nil {
return aps, err
}
}
return aps, nil
}
func (d *deviceWireless) GetAllAccessPoints() ([]AccessPoint, error) {
var apPaths []dbus.ObjectPath
err := d.callWithReturn(&apPaths, DeviceWirelessGetAllAccessPoints)
if err != nil {
return nil, err
}
aps := make([]AccessPoint, len(apPaths))
for i, path := range apPaths {
aps[i], err = NewAccessPoint(path)
if err != nil {
return aps, err
}
}
return aps, nil
}
func (d *deviceWireless) RequestScan() error {
var options map[string]interface{}
return d.obj.Call(DeviceWirelessRequestScan, 0, options).Store()
}
func (d *deviceWireless) GetPropertyHwAddress() (string, error) {
return d.getStringProperty(DeviceWirelessPropertyHwAddress)
}
func (d *deviceWireless) GetPropertyPermHwAddress() (string, error) {
return d.getStringProperty(DeviceWirelessPropertyPermHwAddress)
}
func (d *deviceWireless) GetPropertyMode() (Nm80211Mode, error) {
v, err := d.getUint32Property(DeviceWirelessPropertyMode)
return Nm80211Mode(v), err
}
func (d *deviceWireless) GetPropertyBitrate() (uint32, error) {
return d.getUint32Property(DeviceWirelessPropertyBitrate)
}
func (d *deviceWireless) GetPropertyAccessPoints() ([]AccessPoint, error) {
apPaths, err := d.getSliceObjectProperty(DeviceWirelessPropertyAccessPoints)
if err != nil {
return nil, err
}
ap := make([]AccessPoint, len(apPaths))
for i, path := range apPaths {
ap[i], err = NewAccessPoint(path)
if err != nil {
return ap, err
}
}
return ap, nil
}
func (d *deviceWireless) GetPropertyActiveAccessPoint() (AccessPoint, error) {
path, err := d.getObjectProperty(DeviceWirelessPropertyActiveAccessPoint)
if err != nil || path == "/" {
return nil, err
}
return NewAccessPoint(path)
}
func (d *deviceWireless) GetPropertyWirelessCapabilities() (uint32, error) {
return d.getUint32Property(DeviceWirelessPropertyWirelessCapabilities)
}
func (d *deviceWireless) GetPropertyLastScan() (int64, error) {
return d.getInt64Property(DeviceWirelessPropertyLastScan)
}
func (d *deviceWireless) MarshalJSON() ([]byte, error) {
m := d.device.marshalMap()
m["AccessPoints"], _ = d.GetPropertyAccessPoints()
m["HwAddress"], _ = d.GetPropertyHwAddress()
m["PermHwAddress"], _ = d.GetPropertyPermHwAddress()
m["Mode"], _ = d.GetPropertyMode()
m["Bitrate"], _ = d.GetPropertyBitrate()
m["AccessPoints"], _ = d.GetPropertyAccessPoints()
m["ActiveAccessPoint"], _ = d.GetPropertyActiveAccessPoint()
m["WirelessCapabilities"], _ = d.GetPropertyWirelessCapabilities()
m["LastScan"], _ = d.GetPropertyLastScan()
return json.Marshal(m)
}