wifi alpha

This commit is contained in:
cuu 2018-11-28 23:23:31 +08:00
parent 594e78d2f4
commit b7ad646046
8 changed files with 132 additions and 16 deletions

View File

@ -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 ) {

View File

@ -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 {

View File

@ -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()
}

View File

@ -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 {