mirror of
https://github.com/clockworkpi/LauncherGoDev.git
synced 2025-12-12 16:08:52 +01:00
179 lines
3.8 KiB
Go
179 lines
3.8 KiB
Go
package DBUS
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"github.com/godbus/dbus"
|
|
)
|
|
|
|
type DbusInterface struct {
|
|
Dest string
|
|
Path dbus.ObjectPath
|
|
Iface string
|
|
Obj *dbus.Object
|
|
}
|
|
|
|
func NewDbusInterface(conn *dbus.Conn,dest string, path dbus.ObjectPath ,iface string) *DbusInterface {
|
|
m := &DbusInterface{}
|
|
o := conn.Object(dest,path)
|
|
|
|
m.Obj = o.(*dbus.Object)
|
|
m.Dest = dest
|
|
m.Path = path
|
|
|
|
if len(iface) > 2 {
|
|
m.Iface = iface
|
|
}
|
|
return m
|
|
}
|
|
|
|
func (self *DbusInterface) Method(name string, args...interface{} ) *dbus.Call {
|
|
var method string
|
|
if self.Iface != "" {
|
|
method = fmt.Sprintf("%s.%s.%s", self.Dest, self.Iface,name)
|
|
}else {
|
|
method = fmt.Sprintf("%s.%s", self.Dest,name)
|
|
}
|
|
|
|
if args != nil {
|
|
return self.Obj.Call( method , 0,args...)
|
|
}else {
|
|
return self.Obj.Call( method, 0)
|
|
}
|
|
}
|
|
|
|
func (self *DbusInterface) Get( thecall *dbus.Call, retvalues ...interface{}) error {
|
|
if len(thecall.Body) == 0 {
|
|
return nil
|
|
}
|
|
err:= thecall.Store(retvalues...)
|
|
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Failed: %s,%s",err,thecall.Method))
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
type DBusInterface interface {
|
|
WifiStrength() int
|
|
IsWifiConnectedNow() bool
|
|
}
|
|
|
|
type DBus struct {
|
|
Conn *dbus.Conn
|
|
Daemon *DbusInterface
|
|
Wifi *DbusInterface
|
|
}
|
|
|
|
func NewDBus() *DBus {
|
|
d := &DBus{}
|
|
return d
|
|
}
|
|
|
|
func (self *DBus) Init() {
|
|
conn, err := dbus.SystemBus()
|
|
if err != nil {
|
|
panic(fmt.Sprintf("Failed to connect to system bus:", err))
|
|
}
|
|
|
|
self.Conn = conn
|
|
|
|
self.Daemon = NewDbusInterface(conn, "org.wicd.daemon","/org/wicd/daemon" ,"",)
|
|
self.Wifi = NewDbusInterface(conn, "org.wicd.daemon","/org/wicd/daemon/wireless","wireless")
|
|
}
|
|
|
|
func (self *DBus) WifiStrength() int {
|
|
var fast bool
|
|
var iwconfig string
|
|
var sig_display_type int
|
|
var strength int
|
|
|
|
self.Daemon.Get( self.Daemon.Method("NeedsExternalCalls"), &fast)
|
|
|
|
if fast == false {
|
|
self.Wifi.Get( self.Wifi.Method("GetIwconfig"), &iwconfig )
|
|
}else{
|
|
iwconfig = ""
|
|
}
|
|
self.Daemon.Get( self.Daemon.Method("GetSignalDisplayType"), &sig_display_type )
|
|
|
|
if sig_display_type == 0 {
|
|
self.Wifi.Get( self.Wifi.Method("GetCurrentSignalStrength",iwconfig), &strength)
|
|
} else{
|
|
self.Wifi.Get( self.Wifi.Method("GetCurrentDBMStrength",iwconfig), &strength)
|
|
}
|
|
|
|
return strength
|
|
}
|
|
|
|
func (self *DBus) check_for_wireless(iwconfig string, wireless_ip string) bool {
|
|
var network string
|
|
var sig_display_type int
|
|
var strength int
|
|
if wireless_ip == "" {
|
|
return false
|
|
}
|
|
|
|
self.Wifi.Get( self.Wifi.Method("GetCurrentNetwork",iwconfig), &network)
|
|
self.Daemon.Get( self.Daemon.Method("GetSignalDisplayType"), &sig_display_type )
|
|
|
|
if sig_display_type == 0 {
|
|
self.Wifi.Get( self.Wifi.Method("GetCurrentSignalStrength",iwconfig), &strength)
|
|
}else {
|
|
self.Wifi.Get( self.Wifi.Method("GetCurrentDBMStrength",iwconfig), &strength)
|
|
}
|
|
|
|
if strength == 0 {
|
|
return false
|
|
}
|
|
strength_str := strconv.Itoa(strength)
|
|
self.Daemon.Get( self.Daemon.Method("FormatSignalForPrinting",strength_str), &strength_str)
|
|
|
|
return true
|
|
}
|
|
|
|
func (self *DBus) IsWifiConnectedNow() bool {
|
|
var fast bool
|
|
var iwconfig string
|
|
var wireless_connecting bool
|
|
var wireless_ip string
|
|
|
|
self.Wifi.Get( self.Wifi.Method("CheckIfWirelessConnecting"), &wireless_connecting )
|
|
self.Daemon.Get( self.Daemon.Method("NeedsExternalCalls"), &fast)
|
|
if wireless_connecting == true {
|
|
return false
|
|
}else {
|
|
if fast == false {
|
|
self.Wifi.Get( self.Wifi.Method("GetIwconfig"), &iwconfig )
|
|
}else {
|
|
iwconfig = ""
|
|
}
|
|
|
|
self.Wifi.Get( self.Wifi.Method("GetWirelessIP", iwconfig), &wireless_ip)
|
|
|
|
if self.check_for_wireless(iwconfig,wireless_ip) == true {
|
|
return true
|
|
}else {
|
|
return false
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
func (self *DBus) ListenSignal() {
|
|
c := make(chan *dbus.Signal, 10)
|
|
self.Conn.Signal(c)
|
|
for v := range c {
|
|
fmt.Printf("%+v %#v\n",v,v)
|
|
}
|
|
}
|
|
|
|
var DBusHandler *DBus //global
|
|
|
|
func init() {
|
|
DBusHandler = NewDBus()
|
|
DBusHandler.Init()
|
|
fmt.Println("dbus inited")
|
|
}
|