update code with latest muka/go-bluetooth ,add go mod

This commit is contained in:
cuu
2021-10-01 21:57:21 +08:00
parent a481890304
commit 8db027c60f
8 changed files with 267 additions and 254 deletions

View File

@@ -2,68 +2,72 @@ package Bluetooth
import (
"fmt"
"log"
"os"
"github.com/muka/go-bluetooth/api"
"github.com/muka/go-bluetooth/emitter"
"github.com/muka/go-bluetooth/linux/btmgmt"
"github.com/muka/go-bluetooth/bluez/profile"
// "log"
//"os"
"time"
"github.com/godbus/dbus/v5"
"github.com/muka/go-bluetooth/api"
"github.com/muka/go-bluetooth/hw"
//"github.com/muka/go-bluetooth/bluez/profile"
"github.com/muka/go-bluetooth/bluez/profile/agent"
"github.com/muka/go-bluetooth/bluez/profile/adapter"
/*
"github.com/veandco/go-sdl2/ttf"
"github.com/veandco/go-sdl2/ttf"
"github.com/cuu/gogame/surface"
"github.com/cuu/gogame/event"
"github.com/cuu/gogame/rect"
"github.com/cuu/gogame/color"
"github.com/cuu/gogame/surface"
"github.com/cuu/gogame/event"
"github.com/cuu/gogame/rect"
"github.com/cuu/gogame/color"
*/
"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
//"github.com/clockworkpi/LauncherGoDev/sysgo/DBUS"
"github.com/clockworkpi/LauncherGoDev/sysgo/UI"
//"github.com/clockworkpi/LauncherGoDev/sysgo/DBUS"
log "github.com/sirupsen/logrus"
)
/******************************************************************************/
type BluetoothPlugin struct {
UI.Plugin
UI.Plugin
BluetoothPage *BluetoothPage
PairPage *BleAgentPairPage
}
const (
adapterID = "hci0"
BUS_NAME = "org.bluez"
AGENT_INTERFACE = "org.bluez.Agent1"
AGENT_PATH = "/gameshell/bleagentgo"
BUS_NAME = "org.bluez"
AGENT_INTERFACE = "org.bluez.Agent1"
)
func (self *BluetoothPlugin) InitAgent() {
agent := &Agent{}
agent.BusName = BUS_NAME
agent.AgentInterface = AGENT_INTERFACE
agent.AgentPath = AGENT_PATH
agent.Leader = self
RegisterAgent(agent, profile.AGENT_CAP_KEYBOARD_DISPLAY)
conn, err := dbus.SystemBus()
if err != nil {
return
}
ag := agent.NewSimpleAgent()
err = agent.ExposeAgent(conn, ag, agent.CapKeyboardDisplay, true)
if err != nil {
fmt.Println( fmt.Errorf("SimpleAgent: %s", err) )
return
}
}
func (self *BluetoothPlugin) Init( main_screen *UI.MainScreen ) {
log.Println("Reset bluetooth device")
log.Println("Reset bluetooth device")
a := btmgmt.NewBtMgmt(adapterID)
err := a.Reset()
if err != nil {
log.Fatal(err)
os.Exit(1)
}
self.BluetoothPage = NewBluetoothPage()
self.BluetoothPage.SetScreen( main_screen)
self.BluetoothPage.SetName("Bluetooth")
btmgmt := hw.NewBtMgmt(adapterID)
btmgmt.SetPowered(true)
self.BluetoothPage = NewBluetoothPage()
self.BluetoothPage.SetScreen( main_screen)
self.BluetoothPage.SetName("Bluetooth")
self.BluetoothPage.Leader = self
self.BluetoothPage.Init()
self.BluetoothPage.Init()
self.PairPage = NewBleAgentPairPage()
self.PairPage.SetScreen( main_screen)
@@ -73,30 +77,57 @@ func (self *BluetoothPlugin) Init( main_screen *UI.MainScreen ) {
self.InitAgent()
err = api.On("discovery", emitter.NewCallback(func(ev emitter.Event) {
//discoveryEvent := ev.GetData().(api.DiscoveredDeviceEvent)
//dev := discoveryEvent.Device
//showDeviceInfo(dev)
self.BluetoothPage.RefreshDevices()
self.BluetoothPage.GenNetworkList()
main_screen.Draw()
main_screen.SwapAndShow()
}))
a, err := adapter.GetAdapter(adapterID)
if err != nil {
fmt.Println(err)
}
}
discovery, cancel, err := api.Discover(a, nil)
if err != nil {
fmt.Println(err)
}
defer cancel()
wait := make(chan error)
go func() {
for dev := range discovery {
if dev == nil {
return
}
wait <- nil
}
}()
go func() {
sleep := 5
time.Sleep(time.Duration(sleep) * time.Second)
log.Debugf("Discovery timeout exceeded (%ds)", sleep)
wait <- nil
}()
err = <-wait
if err != nil {
fmt.Println(err)
}
self.BluetoothPage.RefreshDevices()
self.BluetoothPage.GenNetworkList()
main_screen.Draw()
main_screen.SwapAndShow()
}
func (self *BluetoothPlugin) Run( main_screen *UI.MainScreen ) {
if main_screen != nil {
if main_screen != nil {
main_screen.PushCurPage()
main_screen.SetCurPage(self.BluetoothPage)
main_screen.Draw()
main_screen.SwapAndShow()
}
main_screen.Draw()
main_screen.SwapAndShow()
}
}
var APIOBJ BluetoothPlugin