plugin_init.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package Bluetooth
  2. import (
  3. "fmt"
  4. // "log"
  5. //"os"
  6. "time"
  7. "github.com/godbus/dbus/v5"
  8. "github.com/muka/go-bluetooth/api"
  9. "github.com/muka/go-bluetooth/hw"
  10. //"github.com/muka/go-bluetooth/bluez/profile"
  11. "github.com/muka/go-bluetooth/bluez/profile/agent"
  12. "github.com/muka/go-bluetooth/bluez/profile/adapter"
  13. /*
  14. "github.com/veandco/go-sdl2/ttf"
  15. "github.com/cuu/gogame/surface"
  16. "github.com/cuu/gogame/event"
  17. "github.com/cuu/gogame/rect"
  18. "github.com/cuu/gogame/color"
  19. */
  20. "github.com/clockworkpi/LauncherGoDev/sysgo/UI"
  21. //"github.com/clockworkpi/LauncherGoDev/sysgo/DBUS"
  22. log "github.com/sirupsen/logrus"
  23. )
  24. /******************************************************************************/
  25. type BluetoothPlugin struct {
  26. UI.Plugin
  27. BluetoothPage *BluetoothPage
  28. PairPage *BleAgentPairPage
  29. }
  30. const (
  31. adapterID = "hci0"
  32. BUS_NAME = "org.bluez"
  33. AGENT_INTERFACE = "org.bluez.Agent1"
  34. )
  35. func (self *BluetoothPlugin) InitAgent() {
  36. conn, err := dbus.SystemBus()
  37. if err != nil {
  38. return
  39. }
  40. ag := agent.NewSimpleAgent()
  41. err = agent.ExposeAgent(conn, ag, agent.CapKeyboardDisplay, true)
  42. if err != nil {
  43. fmt.Println( fmt.Errorf("SimpleAgent: %s", err) )
  44. return
  45. }
  46. }
  47. func (self *BluetoothPlugin) Init( main_screen *UI.MainScreen ) {
  48. log.Println("Reset bluetooth device")
  49. btmgmt := hw.NewBtMgmt(adapterID)
  50. btmgmt.SetPowered(true)
  51. self.BluetoothPage = NewBluetoothPage()
  52. self.BluetoothPage.SetScreen( main_screen)
  53. self.BluetoothPage.SetName("Bluetooth")
  54. self.BluetoothPage.Leader = self
  55. self.BluetoothPage.Init()
  56. self.PairPage = NewBleAgentPairPage()
  57. self.PairPage.SetScreen( main_screen)
  58. self.PairPage.SetName("Bluetooth pair")
  59. self.PairPage.Leader = self
  60. self.PairPage.Init()
  61. self.InitAgent()
  62. a, err := adapter.GetAdapter(adapterID)
  63. if err != nil {
  64. fmt.Println(err)
  65. return
  66. }
  67. discovery, cancel, err := api.Discover(a, nil)
  68. if err != nil {
  69. fmt.Println(err)
  70. }
  71. defer cancel()
  72. wait := make(chan error)
  73. go func() {
  74. for dev := range discovery {
  75. if dev == nil {
  76. return
  77. }
  78. wait <- nil
  79. }
  80. }()
  81. go func() {
  82. sleep := 5
  83. time.Sleep(time.Duration(sleep) * time.Second)
  84. log.Debugf("Discovery timeout exceeded (%ds)", sleep)
  85. wait <- nil
  86. }()
  87. err = <-wait
  88. if err != nil {
  89. fmt.Println(err)
  90. }
  91. self.BluetoothPage.RefreshDevices()
  92. self.BluetoothPage.GenNetworkList()
  93. main_screen.Draw()
  94. main_screen.SwapAndShow()
  95. }
  96. func (self *BluetoothPlugin) Run( main_screen *UI.MainScreen ) {
  97. if main_screen != nil {
  98. main_screen.PushCurPage()
  99. main_screen.SetCurPage(self.BluetoothPage)
  100. main_screen.Draw()
  101. main_screen.SwapAndShow()
  102. }
  103. }
  104. var APIOBJ BluetoothPlugin