start bluetooth

This commit is contained in:
cuu 2018-08-16 21:20:00 +08:00
parent 37e4d655b1
commit 2a9bb59a35
4 changed files with 251 additions and 4 deletions

View File

@ -0,0 +1,228 @@
# -*- coding: utf-8 -*-
import pygame
#import math
import commands
#from beeprint import pp
from libs.roundrects import aa_round_rect
from libs.DBUS import bus, adapter,devices
#import gobject
#from wicd import misc
## local UI import
from UI.constants import Width,Height,ICON_TYPES
from UI.page import Page,PageSelector
from UI.label import Label
from UI.fonts import fonts
from UI.util_funcs import midRect
from UI.keys_def import CurKeys
from UI.scroller import ListScroller
from UI.icon_pool import MyIconPool
from UI.icon_item import IconItem
from UI.multi_icon_item import MultiIconItem
from UI.skin_manager import SkinManager
from UI.multilabel import MultiLabel
class BleListSelector(PageSelector):
_BackgroundColor = SkinManager().GiveColor('Front')
def __init__(self):
self._PosX = 0
self._PosY = 0
self._Height = 0
def AnimateDraw(self,x2,y2):
pass
def Draw(self):
idx = self._Parent._PsIndex
if idx < len( self._Parent._WirelessList):
x = self._Parent._WirelessList[idx]._PosX+11
y = self._Parent._WirelessList[idx]._PosY+1
h = self._Parent._WirelessList[idx]._Height -3
self._PosX = x
self._PosY = y
self._Height = h
aa_round_rect(self._Parent._CanvasHWND,
(x,y,self._Width,h),self._BackgroundColor,4,0,self._BackgroundColor)
class BleListMessageBox(Label):
_Parent = None
def Draw(self):
my_text = self._FontObj.render( self._Text,True,self._Color)
w = my_text.get_width()
h = my_text.get_height()
x = (self._Parent._Width - w)/2
y = (self._Parent._Height - h)/2
padding = 10
pygame.draw.rect(self._CanvasHWND,SkinManager().GiveColor('White'),(x-padding,y-padding, w+padding*2,h+padding*2))
pygame.draw.rect(self._CanvasHWND,SkinManager().GiveColor('Black'),(x-padding,y-padding, w+padding*2,h+padding*2),1)
self._CanvasHWND.blit(my_text,(x,y,w,h))
class BluetoothPage(Page):
_WirelessList = []
#Wicd dbus part
_Adapter = None
_Dbus = None
_Devices = None
_BlePassword = ""
_Connecting = False
_Scanning = False
_PrevState = None
_Selector = None
_ShowingMessageBox = False
_MsgBox = None
_ConnectTry = 0
_BlockCb = None
_LastStatusMsg = ""
_FootMsg = ["Nav.","Scan","Info","Back","Enter"]
_Scroller = None
_ListFontObj = fonts["notosanscjk15"]
_InfoPage = None
def __init__(self):
Page.__init__(self)
self._WirelessList = []
self._CanvasHWND = None
def Init(self):
self._PosX = self._Index * self._Screen._Width
self._Width = self._Screen._Width
self._Height = self._Screen._Height
#self._CanvasHWND = pygame.Surface((self._Width,self._Height))
self._CanvasHWND = self._Screen._CanvasHWND
ps = BleListSelector()
ps._Parent = self
ps._Width = Width - 12
self._Ps = ps
self._PsIndex = 0
msgbox = WifiListMessageBox()
msgbox._CanvasHWND = self._CanvasHWND
msgbox.Init(" ",fonts["veramono12"])
msgbox._Parent = self
self._MsgBox = msgbox
def DbusPropertiesChanged:## signal_name = "PropertiesChanged",
pass
def GenNetworkList(self):
self._WirelessList = []
start_x = 0
start_y = 0
for network_id,v in enumerate(self._Devices):
ni = NetItem()
ni._Parent = self
ni._PosX = start_x
ni._PosY = start_y + network_id* NetItem._Height
ni._Width = Width
ni._FontObj = self._ListFontObj
ni.Init()
self._WirelessList.append(ni)
self._PsIndex = 0
def Rescan():
if self._Adapter!= None:
self._Adapter.StopDiscovery()
self._Adapter.StartDiscovery()
def KeyDown:
if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
if self._Adapter != None:
_connecting = self._Wireless.CheckIfBluetoothConnecting()
if _connecting:
self.ShutDownConnecting()
self.ShowBox("ShutDownConnecting...")
else:
self.AbortedAndReturnToUpLevel()
else:
self.HideBox()
self.ReturnToUpLevelPage()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["Up"]:
self.ScrollUp()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["Down"]:
self.ScrollDown()
self._Screen.Draw()
self._Screen.SwapAndShow()
if event.key == CurKeys["X"]:
self.Rescan()
def Draw():
self.ClearCanvas()
if len(self._WirelessList) == 0:
return
self._Ps.Draw()
for i in self._WirelessList:
i.Draw()
self._Scroller.UpdateSize( len(self._WirelessList)*NetItem._Height, self._PsIndex*NetItem._Height)
self._Scroller.Draw()
class APIOBJ(object):
_Page = None
def __init__(self):
pass
def Init(self,main_screen):
self._Page = BluetoothPage()
self._Page._Dbus = bus
self._Page._Devices = devices
self._Page._Adapter = adapter
self._Page._Screen = main_screen
self._Page._Name ="Bluetooth"
self._Page.Init()
def API(self,main_screen):
if main_screen !=None:
main_screen.PushPage(self._Page)
main_screen.Draw()
main_screen.SwapAndShow()
OBJ = APIOBJ()
def Init(main_screen):
OBJ.Init(main_screen)
def API(main_screen):
OBJ.API(main_screen)

View File

@ -16,7 +16,7 @@
## local UI import
from libs.DBUS import bus,daemon,wireless,wired
from keyboard import Keyboard
from UI.keyboard import Keyboard
from wifi_list import WifiList
import myvars

View File

@ -23,11 +23,15 @@ else:
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = daemon = wireless = wired = None
bus = daemon = wireless = wired = None
manager = objects = adapter = None
devices = {}
def setup_dbus(force=True):
global bus,daemon,wireless,wired
global manager,objects,adapter,devices
try:
dbusmanager.connect_to_dbus()
except dbus.DBusException:
@ -39,11 +43,26 @@ def setup_dbus(force=True):
daemon = dbus_ifaces["daemon"] ## @dbus.service.method('org.wicd.daemon')
wireless = dbus_ifaces["wireless"] ## @dbus.service.method('org.wicd.daemon.wireless')
wired = dbus_ifaces["wired"] ## @
### BlueZ
proxy_obj = bus.get_object("org.bluez", "/")
manager = dbus.Interface(proxy_obj,"org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
for path, interfaces in objects.iteritems():
if "org.bluez.Device1" in interfaces:
devices[path] = interfaces["org.bluez.Device1"] ## like /org/bluez/hci0/dev_xx_xx_xx_yy_yy_yy
proxy_obj = bus.get_object("org.bluez", "/org/bluez/hci0")
adapter = dbus.Interface(proxy_obj, "org.bluez.Adapter1")
if not daemon:
print("Error connecting to wicd via D-Bus")
return True