123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- # -*- coding: utf-8 -*-
- import pygame
- #import math
- #import commands
- import dbus
- #from beeprint import pp
- from libs.roundrects import aa_round_rect
- from UI.page import Page,PageSelector
- from UI.keys_def import CurKeys, IsKeyMenuOrB
- from libs.DBUS import bus, adapter,devices
- BUS_NAME = 'org.bluez'
- AGENT_INTERFACE = 'org.bluez.Agent1'
- AGENT_PATH = "/gameshell/bleagent"
- class Rejected(dbus.DBusException):
- _dbus_error_name = "org.bluez.Error.Rejected"
- class BleAgent(dbus.service.Object):
- device_obj = None
- _Leader = None
- dev_path = ""
-
- def set_trusted(self,path):
- global BUS_NAME
- props = dbus.Interface(bus.get_object(BUS_NAME, path),
- "org.freedesktop.DBus.Properties")
- props.Set("org.bluez.Device1", "Trusted", True)
-
- def dev_connect(self,path):
- global BUS_NAME
- dev = dbus.Interface(bus.get_object(BUS_NAME, path),
- "org.bluez.Device1")
-
- print("dev_connect %s" % path)
- try:
- dev.Connect()
- except Exception,e:
- print(str(e))
-
- @dbus.service.method(AGENT_INTERFACE,in_signature="", out_signature="")
- def Release(self):
- print("Agent release")
-
- @dbus.service.method(AGENT_INTERFACE,in_signature="os", out_signature="")
- def AuthorizeService(self, device, uuid):
- print("AuthorizeService (%s, %s)" % (device, uuid)) ## directly authrized
- return
- @dbus.service.method(AGENT_INTERFACE,in_signature="o", out_signature="s")
- def RequestPinCode(self, device):
- print("RequestPinCode (%s)" % (device))
- set_trusted(device)
- return "0000"
- @dbus.service.method(AGENT_INTERFACE,in_signature="o", out_signature="u")
- def RequestPasskey(self, device):
- print("RequestPasskey (%s)" % (device))
- set_trusted(device)
- passkey = "000000"
- return dbus.UInt32(passkey)
- @dbus.service.method(AGENT_INTERFACE,in_signature="ouq", out_signature="")
- def DisplayPasskey(self, device, passkey, entered):
- print("DisplayPasskey (%s, %06u entered %u)" % (device, passkey, entered))
- self._Leader._PairPage.ShowPassKey(device,passkey,entered)
-
- @dbus.service.method(AGENT_INTERFACE,in_signature="os", out_signature="")
- def DisplayPinCode(self, device, pincode):
- print("DisplayPinCode (%s, %s)" % (device, pincode))
- self._Leader._PairPage.ShowPinCode(device,pincode)
-
- @dbus.service.method(AGENT_INTERFACE,in_signature="ou", out_signature="")
- def RequestConfirmation(self, device, passkey):
- print("RequestConfirmation (%s, %06d)" % (device, passkey))
- set_trusted(device)
- return
- @dbus.service.method(AGENT_INTERFACE,in_signature="o", out_signature="")
- def RequestAuthorization(self, device):
- print("RequestAuthorization (%s)" % (device))
-
- return
- @dbus.service.method(AGENT_INTERFACE,in_signature="", out_signature="")
- def Cancel(self):
- print("Cancel")
-
-
- def pair_reply(self):
- print("Device paired under Agent")
- self.set_trusted(self.dev_path)
- self.dev_connect(self.dev_path)
-
- self._Leader._PairPage._dev_obj = self.device_obj
- self._Leader._PairPage.PairReplyCb()
-
- def pair_error(self,error):
- global adapter
- err_msg = ""
- err_name = error.get_dbus_name()
- print(err_name)
- if err_name == "org.freedesktop.DBus.Error.NoReply" and self.device_obj:
- err_msg = "Timed out. Cancelling pairing"
- print(err_msg)
- self.device_obj.CancelPairing()
- elif err_name == "org.bluez.Error.AuthenticationCanceled":
- err_msg = "Authentication Canceled"
- elif err_name == "org.bluez.Error.ConnectionAttemptFailed":
- err_msg = "Page Timeout"
- elif err_name == "org.bluez.Error.AlreadyExists":
- err_msg ="Already Exists"
- try:
- adapter.RemoveDevice(self.device_obj)
- except Exception,e:
- print("pair_error forget err:",str(e))
-
- elif err_name == "org.bluez.Error.AuthenticationFailed":
- err_msg = "Authentication Failed"
- else:
- err_msg = "Pair error"
- print( err_name,str(error) )
-
- self.device_obj = None
- self._Leader._PairPage.PairErrorCb(err_msg)
- class BleAgentPairPage(Page):
-
- ##show pin/password
- ##show prompt
- _Pin = ""
- _Pass = ""
- _dev_obj = None
- _FootMsg = ["Nav","","","Back",""]
-
- 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
-
- def ShowPinCode(self,device,pincode):
- print("ShowPinCode %s %s" % (device,pincode))
- if self._Screen.CurPage() != self:
- self._Screen.PushPage(self)
- self.ClearCanvas()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
- self._Pin = "%s" % pincode
- txt = self.Pin
- if len(self._Pin) > 0:
- txt = "Pin code: %s" % self._Pin
- self._Screen._MsgBox.SetText(txt)
- self._Screen._MsgBox.Draw()
- self._Screen.SwapAndShow()
-
- def ShowPassKey(self,device,passkey,entered):
- print("ShowPassKey %06u %u" % (passkey,entered))
- if self._Screen.CurPage() != self:
- self._Screen.PushPage(self)
- self.ClearCanvas()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
- self._Pass = "%06u" % passkey
- if len(self._Pass) > 0:
- txt = "Pair code: %s" % self._Pass
- self._Screen._MsgBox.SetText(txt)
- self._Screen._MsgBox.Draw()
- self._Screen.SwapAndShow()
-
- def PairReplyCb(self):
- self.ClearCanvas()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
- self._Screen._MsgBox.SetText("Device paired")
- self._Screen._MsgBox.Draw()
- self._Screen.SwapAndShow()
- pygame.time.delay(1500)
- self.ReturnToUpLevelPage()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
- self._Screen._FootBar.ResetNavText()
-
- def PairErrorCb(self,error=None):
- self.ClearCanvas()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
- self._Screen._MsgBox.SetText(error)
- self._Screen._MsgBox.Draw()
- self._Screen.SwapAndShow()
- pygame.time.delay(1500)
- self.ReturnToUpLevelPage()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
- self._Screen._FootBar.ResetNavText()
-
- def KeyDown(self,event):
- if IsKeyMenuOrB(event.key):
- if self._dev_obj != None:
- try:
- self._dev_obj.CancelPairing()
- except Exception,e:
- print(str(e))
-
- self.ReturnToUpLevelPage()
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
-
- def Draw(self):
- pass
- #self.ClearCanvas()
-
-
-
|