Bluez4在代理对期间获取设备名称

时间:2015-11-09 12:03:41

标签: python bluetooth bluez

我正在使用Bluez通过DBUS在Python中实现自定义蓝牙配对代理。代理需要返回多个固定PIN码中的一个(传统PIN,而不是简单的配对模式请求),具体取决于尝试配对的设备类型。这些设备是支持蓝牙的医疗监护仪(血压,血压等),我无法控制。

最初,我正在查看设备的第一位Mac地址,并根据制造商前缀返回PIN。这很好用。但我现在尝试添加支持的设备使用相同的前缀(我假设它具有相同的BT芯片)但是作为我需要支持的其他设备之一的不同PIN。设备唯一独特的是它们的名称总是不变的(例如“AND 1234”或“IEM 5678”)所以我试图通过代理更改以查看名称的第一位而不是

knownPins = {
    "aandd": "12345",
    "iem ": "5678",
    "default": "98689"
}

@dbus.service.method("org.bluez.Agent", in_signature="o", out_signature="s")
def RequestPinCode(self, device):
    pprint("RequestPinCode ({})", device)   
    dbdevice = dbus.Interface(bus.get_object("org.bluez", device),
        "org.bluez.Device")

    bits = device.split('/')
    mac = bits[-1].replace("dev_","").replace("_",":").lower()      
    props = dbdevice.GetProperties()
    if not props["Name"]:
        raise Rejected()
    try:
        for name, pin in knownPins.items():
            if props["Name"].startswith(name):
                return pin

        return knownPins["default"]
    except:
        raise Rejected() 

但是,在大多数情况下props["Name"]只是空的 - 我认为这是因为配对请求是由远程方发起的,因为我没有做过发现,所以我不知道它的名字。

所以我的问题是,如何在此过程中强制进行查询,以便获取设备名称?我试过了

adapter.CreateDevice(mac)

给出了org.bluez.Error.AlreadyExists

我试过了

adapter.RemoveDevice(device)
adapter.CreateDevice(mac)

给出了org.bluez.Error.DoesNotExist: Device creation in progress

我认为在这两种情况下都是因为Bluez正在尝试创建设备

由于

0 个答案:

没有答案