hci_get_route()的目的是什么

hci_get_route()的目的是什么,c,linux,bluetooth,bluez,C,Linux,Bluetooth,Bluez,查看代码示例,它看起来像hci\u get\u route(NULL)通常用于获取本地机器上蓝牙设备的设备id。那很好,我能理解。我想,我的困惑只会影响到一个有多个蓝牙设备的系统,并且hci\u get\u route()的参数是非空的。的源代码显示了以下实现: int hci_get_route(bdaddr_t *bdaddr) { int dev_id; dev_id = hci_for_each_dev(HCI_UP, __other_bdaddr,

查看代码示例,它看起来像
hci\u get\u route(NULL)
通常用于获取本地机器上蓝牙设备的设备id。那很好,我能理解。我想,我的困惑只会影响到一个有多个蓝牙设备的系统,并且
hci\u get\u route()
的参数是非空的。的源代码显示了以下实现:

int hci_get_route(bdaddr_t *bdaddr)
{
        int dev_id;

        dev_id = hci_for_each_dev(HCI_UP, __other_bdaddr,
                            (long) (bdaddr ? bdaddr : BDADDR_ANY)); 
        if (dev_id < 0)
                dev_id = hci_for_each_dev(HCI_UP, __same_bdaddr,
                                (long) (bdaddr ? bdaddr : BDADDR_ANY)); 

        return dev_id;
}
即使是这个初始版本看起来也是非常有意地做同样的事情,它只是不包括使用
\uuusame\ubdaddr
的备份检查

由于没有关于这个函数的文档(我可以找到),这个库的新手用户似乎希望使用
bdaddr\u t*
参数来选择设备,所以我的问题是,为什么它会做完全相反的事情,在选择具有匹配地址的设备之前,更喜欢任何其他设备

int hci_get_route(bdaddr_t *bdaddr)
{
        if (bdaddr)
                return hci_for_each_dev(HCI_UP, __other_bdaddr, (long) bdaddr);
        else
                return hci_for_each_dev(HCI_UP, NULL, 0);
}