diff --git a/Menu/GameShell/10_Settings/About/about.so b/Menu/GameShell/10_Settings/About/about.so index b17eb9e..6aee1fe 100644 Binary files a/Menu/GameShell/10_Settings/About/about.so and b/Menu/GameShell/10_Settings/About/about.so differ diff --git a/Menu/GameShell/10_Settings/Settings.so b/Menu/GameShell/10_Settings/Settings.so index bbad449..6db3c89 100644 Binary files a/Menu/GameShell/10_Settings/Settings.so and b/Menu/GameShell/10_Settings/Settings.so differ diff --git a/Menu/GameShell/10_Settings/Wifi/plugin_init.go b/Menu/GameShell/10_Settings/Wifi/plugin_init.go index 40f484e..fc7dd12 100644 --- a/Menu/GameShell/10_Settings/Wifi/plugin_init.go +++ b/Menu/GameShell/10_Settings/Wifi/plugin_init.go @@ -35,7 +35,15 @@ func (self *WifiPlugin) Init( main_screen *UI.MainScreen ) { self.ScanPage.Screen = main_screen self.ScanPage.Init() - + + if self.ScanPage.Daemon != nil { + self.ScanPage.Daemon.EnableSignal("StatusChanged") + self.ScanPage.Daemon.EnableSignal("ConnectResultsSent") + self.ScanPage.Wireless.EnableSignal("SendStartScanSignal") + self.ScanPage.Wireless.EnableSignal("SendEndScanSignal") + + + } } func (self *WifiPlugin) Run( main_screen *UI.MainScreen ) { diff --git a/Menu/GameShell/10_Settings/Wifi/wifi.go b/Menu/GameShell/10_Settings/Wifi/wifi.go index 3508b51..589758e 100644 --- a/Menu/GameShell/10_Settings/Wifi/wifi.go +++ b/Menu/GameShell/10_Settings/Wifi/wifi.go @@ -7,6 +7,8 @@ import ( "strings" gotime "time" + "github.com/godbus/dbus" + "github.com/veandco/go-sdl2/ttf" "github.com/cuu/gogame/surface" @@ -351,7 +353,7 @@ type WifiListMessageBox struct{ func NewWifiListMessageBox() *WifiListMessageBox{ p := &WifiListMessageBox{} - + p.Color = &color.Color{83,83,83,255} return p } @@ -499,14 +501,82 @@ func (self *WifiList) Rescan(sync bool) { // sync default should be false } // dbus signal functions -func (self *WifiList) DbusScanFinishedSig() { +func (self *WifiList) WifiDbusScanFinishedSig(body []interface{}) { + if self.Screen.CurrentPage != self { + return + } + + self.ResetPageSelector() + + self.UpdateNetList(-1,[]string{}, true,false) + + self.Scanning= false + self.HideBox() + + self.BlockingUI = false + fmt.Println("dbus says scan finished") + } -func (self *WifiList) DbusScanStarted() { - +func (self *WifiList) WifiDbusScanStarted(body []interface{} ) { + if self.Screen.CurrentPage != self { + return + } + + self.Scanning = true + self.ShowBox("Wifi scanning...") + self.BlockingUI = true + fmt.Println("dbus says start scan") } +func (self *WifiList) DbusDaemonStatusChangedSig(body []interface{}) { + var state int + var info []dbus.Variant + + err := dbus.Store(body,&state,&info) + + if err != nil { + fmt.Println(err) + }else { + fmt.Println(state," ", info) + } + + var info_str []string + for i,v := range info { + info_str = append(info_str, v.String()) + } + + self.UpdateNetList(state,info_str,false,false) + if len(info_str) > 0 { + self.Screen.Draw() + self.Screen.SwapAndShow() + } + +} + +func (self *WifiList) DbusConnectResultsSent(body []interface{}) { + var ret_val string + err := dbus.Store(body,&ret_val) + + if err != nil { + fmt.Println(err) + }else { + fmt.Println(ret_val) + } + + self.Connecting = flase + self.BlockingUI = false + if self.BlockCb != nil { + self.BlockCb() + self.BlockCb = nil + } + + self.Screen.FootBar.ResetNavText() +} + +//---------------------------------------------------------------------------------- + func (self *WifiList) UpdateNetList(state int,info []string ,force_check bool,firstrun bool) { //force_check default ==false, firstrun default == false if self.Daemon == nil { return @@ -640,14 +710,6 @@ func (self *WifiList) UpdateStatus() bool { } -func (self *WifiList) DbusDaemonStatusChangedSig(state int,info []string) { - -} - -func (self *WifiList) DbusConnectResultsSent( result string) { - -} - //set_status == "" not used func (self *WifiList) CheckForWireless(iwconfig string, wireless_ip string , set_status string ) bool { if len(wireless_ip) == 0 { diff --git a/Menu/GameShell/10_Settings/Wifi/wifi.so b/Menu/GameShell/10_Settings/Wifi/wifi.so index b202d39..310143f 100644 Binary files a/Menu/GameShell/10_Settings/Wifi/wifi.so and b/Menu/GameShell/10_Settings/Wifi/wifi.so differ diff --git a/Menu/GameShell/HelloWorld/HelloWorld.so b/Menu/GameShell/HelloWorld/HelloWorld.so index 6a03855..f4a7ada 100644 Binary files a/Menu/GameShell/HelloWorld/HelloWorld.so and b/Menu/GameShell/HelloWorld/HelloWorld.so differ diff --git a/sysgo/DBUS/dbus.go b/sysgo/DBUS/dbus.go index 0cdc3ba..6cecf13 100644 --- a/sysgo/DBUS/dbus.go +++ b/sysgo/DBUS/dbus.go @@ -11,6 +11,7 @@ type DbusInterface struct { Path dbus.ObjectPath Iface string Obj *dbus.Object + SigFuncs map[string]interface{} } func NewDbusInterface(conn *dbus.Conn,dest string, path dbus.ObjectPath ,iface string) *DbusInterface { @@ -20,6 +21,8 @@ func NewDbusInterface(conn *dbus.Conn,dest string, path dbus.ObjectPath ,iface s m.Obj = o.(*dbus.Object) m.Dest = dest m.Path = path + + m.SigFuncs = make(map[string]interface{}) if len(iface) > 2 { m.Iface = iface @@ -55,6 +58,34 @@ func (self *DbusInterface) Get( thecall *dbus.Call, retvalues ...interface{}) er return err } +func (self *DbusInterface) EnableSignal(signame string) { + iface := self.Dest + if self.Iface != "" { + iface = iface+ "."+self.Iface + } + self.Obj.AddMatchSignal(iface,signame) +} + + +func (self *DbusInterface) HandleSignal( sig *dbus.Signal) { + + iface := self.Dest + if self.Iface != "" { + iface = iface+ "."+self.Iface + } + + if strings.HasPrefix(sig.Name,iface) { + func_name := strings.Replace( sig.Name, iface, "",-1)[1:] + for k,v := range self.SigFuncs { + if k == func_name { + v.(func([]interface{}))(sig.Body) + break + } + } + } + +} + type DBusInterface interface { WifiStrength() int IsWifiConnectedNow() bool @@ -72,7 +103,11 @@ func NewDBus() *DBus { } func (self *DBus) Init() { + //conn_option := dbus.WithSignalHandler(self) + conn, err := dbus.SystemBus() + //conn,err := dbus.SystemBusPrivate(conn_option) + if err != nil { panic(fmt.Sprintf("Failed to connect to system bus:", err)) } @@ -164,9 +199,15 @@ func (self *DBus) IsWifiConnectedNow() bool { 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) - } + + for v := range c { + fmt.Printf("%+v %#v\n",v,v) + fmt.Printf("body len:%d \n\n",len(v.Body)) + + self.Wifi.HandleSignal(v) + self.Daemon.HandleSignal(v) + + } } var DBusHandler *DBus //global @@ -175,4 +216,7 @@ func init() { DBusHandler = NewDBus() DBusHandler.Init() + go DBusHandler.ListenSignal() + + } diff --git a/sysgo/UI/page.go b/sysgo/UI/page.go index f8cfc78..e543cfd 100644 --- a/sysgo/UI/page.go +++ b/sysgo/UI/page.go @@ -821,6 +821,8 @@ func (self *Page) ReturnToUpLevelPage() { page_ := pop_page.(PageInterface) page_.Draw() self.Screen.SetCurPage(page_) + self.Screen.CurrentPage.OnReturnBackCb() + }else { if self.Screen.MyPageStack.Length() == 0 { if len(self.Screen.Pages) > 0 {