Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Bluez配置文件注册_Python_Bluez - Fatal编程技术网

Python Bluez配置文件注册

Python Bluez配置文件注册,python,bluez,Python,Bluez,我正试图在Bluez5上获得一个用Python工作的Bluetooth设备。目前我有以下几点: #set up a bluez profile to advertise device capabilities from a loaded service record def init_bluez_profile(self): print("Configuring Bluez Profile") #setup profile options service_re

我正试图在Bluez5上获得一个用Python工作的Bluetooth设备。目前我有以下几点:

    #set up a bluez profile to advertise device capabilities from a loaded service record
def init_bluez_profile(self):

    print("Configuring Bluez Profile")

    #setup profile options
    service_record=self.read_sdp_service_record()

    opts = {
        "ServiceRecord":service_record,
        "Role":"server",
        "RequireAuthentication":False,
        "RequireAuthorization":False,
        "Name":BTKbDevice.MY_DEV_NAME,
        "AutoConnect":True
    }

    #retrieve a proxy for the bluez profile interface
    bus = dbus.SystemBus()
    self.manager = dbus.Interface(bus.get_object("org.bluez","/org/bluez"), "org.bluez.ProfileManager1")
    self.profile = BTKbBluezProfile(bus, BTKbDevice.PROFILE_DBUS_PATH)
    self.manager.RegisterProfile(BTKbDevice.PROFILE_DBUS_PATH, BTKbDevice.UUID, opts)
    print("Profile registered ")
此代码正确执行,配置文件代码是bluez测试用例中的标准代码:

class BTKbBluezProfile(dbus.service.Object):
fd = -1

@dbus.service.method("org.bluez.Profile1",
                                in_signature="", out_signature="")
def Release(self):
        print("Release")
        mainloop.quit()

@dbus.service.method("org.bluez.Profile1",
                                in_signature="", out_signature="")
def Cancel(self):
        print("Cancel")

@dbus.service.method("org.bluez.Profile1", in_signature="oha{sv}", out_signature="")
def NewConnection(self, path, fd, properties):
        self.fd = fd.take()
        print("NewConnection(%s, %d)" % (path, self.fd))
        for key in properties.keys():
                print ('key ' + key + ' value ' + properties[key])
                if key == "Version" or key == "Features":
                        print("  %s = 0x%04x" % (key, properties[key]))
                else:
                        print("  %s = %s" % (key, properties[key]))



@dbus.service.method("org.bluez.Profile1", in_signature="o", out_signature="")
def RequestDisconnection(self, path):
        print("RequestDisconnection(%s)" % (path))

        if (self.fd > 0):
                os.close(self.fd)
                self.fd = -1

def __init__(self, bus, path):
        dbus.service.Object.__init__(self, bus, path)
但是,当我得到连接/断开连接时,什么都不起作用。我尝试过各种各样的选择,但我就是找不到任何东西来注册。文档很简单,而且在dbus通信中似乎没有什么调试信息。是否有人成功地注册了配置文件和/或获得了有关bluez交互的更多调试信息


谢谢。

这是一个成功的HID键盘实现,记录在:

“”“
蓝牙HID键盘模拟器DBUS服务
原意取自:
http://yetanotherpointlesstechblog.blogspot.com/2016/04/emulating-bluetooth-keyboard-with.html
移动到Python 3并使用BlueZ 5.43进行测试
更新记录在:
https://gist.github.com/ukBaz/a47e71e7b87fbc851b27cde7d1c0fcf0
"""
导入操作系统
导入系统
导入DBU
导入dbus.service
导入套接字
从gi.repository导入GLib
从dbus.mainloop.glib导入DBusGMainLoop
类HumanInterfaceDeviceProfile(dbus.service.Object):
"""
用于HID的BlueZ D总线配置文件
"""
fd=-1
@dbus.service.method('org.bluez.Profile1',
输入/输出签名=“”,输出/输出签名=“”)
def释放(自):
打印(‘发布’)
mainloop.quit()
@dbus.service.method('org.bluez.Profile1',
in_签名='oha{sv}',out_签名='')
def新连接(自身、路径、fd、属性):
self.fd=fd.take()
print('NewConnection({},{}').format(path,self.fd))
对于键入属性。键():
如果键='Version'或键='Features':
打印({}=0x{:04x})。格式(键,
属性[键])
其他:
打印('{}={}'。格式(键,属性[key]))
@dbus.service.method('org.bluez.Profile1',
输入签名为“o”,输出签名为“o”)
def请求断开连接(自身、路径):
打印('RequestDisconnection{}'。格式(路径))
如果self.fd>0:
操作系统关闭(self.fd)
self.fd=-1
BTKB类设备:
"""
创建蓝牙设备以模拟HID键盘
"""
MY_DEV_NAME='BT_HID_键盘'
#服务端口-必须与SDP记录中配置的端口匹配
P_CTRL=17
#服务端口-必须与SDP记录中配置的端口#中断端口匹配
P_INTR=19
#BlueZ dbus
PROFILE_DBUS_PATH='/bluez/yaptb/btkb_PROFILE'
ADAPTER_IFACE='org.bluez.Adapter1'
设备接口='org.bluez.Device1'
DBUS_PROP_IFACE='org.freedesktop.DBUS.Properties'
DBUS_OM_IFACE='org.freedesktop.DBUS.ObjectManager'
#sdp记录到laod的文件路径
install_dir=os.path.dirname(os.path.realpath(_文件__))
SDP_RECORD_PATH=os.PATH.join(install_dir,
'sdp_record.xml')
#HID服务的UUID(1124)
# https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
UUID='00001124-0000-1000-8000-00805f9b34fb'
定义初始化(自,hci=0):
self.scocontrol=None
self.ccontrol=None#控件的套接字对象
self.sinterrupt=无
self.cinterrupt=None#中断的套接字对象
self.dev_path='/org/bluez/hci{}'。格式(hci)
打印('设置BT设备')
self.bus=dbus.SystemBus()
self.adapter_methods=dbus.Interface(
self.bus.get_对象('org.bluez',
self.dev_路径),
自适配接头(如有)
self.adapter_property=dbus.Interface(
self.bus.get_对象('org.bluez',
self.dev_路径),
自我保护(DBUS_PROP_IFACE)
self.bus.add_信号_接收器(添加了self.interfaces_,
dbus_接口=self.dbus_OM_IFACE,
信号_name='InterfacesAdded')
self.bus.add\u信号\u接收器(self.\u属性\u更改,
dbus\u接口=self.dbus\u PROP\u IFACE,
信号\u name='PropertiesChanged',
arg0=self.DEVICE\u接口,
路径(关键字=“路径”)
打印('Configuring for name{}'。格式(BTKbDevice.MY_DEV_name))
self.config\u hid\u profile()
#设置蓝牙设备配置
self.alias=BTKbDevice.MY\u DEV\u NAME
self.discoverabletimeout=0
self.discoverable=True
添加的def接口(自):
通过
定义属性更改(自身、接口、更改、无效、路径):
如果self.on\u disconnect不是无:
如果更改中的“已连接”:
如果未更改[“已连接”]:
self.on_disconnect()
def on_断开(自):
打印('客户端已断开连接')
self.listen()
@财产
def地址(自我):
“”“返回适配器MAC地址。”“”
返回self.adapter\u属性.Get(self.adapter\u IFACE,
"地址")
@财产
def供电(自):
"""
适配器的电源状态。
"""
返回self.adapter\u属性.Get(self.adapter\u IFACE,'Powered')
@电动塞特
def通电(自身、新_状态):
self.adapter\u property.Set(self.adapter\u IFACE,'Powered',new\u state)
@财产
def别名(自身):
返回self.adapter\u属性.Get(self.adapter\u IFACE,
“别名”)
@别名.setter
def别名(自身,新的_别名):
self.adapter\u property.Set(self.adapter\u IFACE,
“别名”,