hci_get_route() 的目的是什么

Tal*_*uck 6 c linux bluetooth bluez

通过查看代码示例,它看起来hci_get_route(NULL)通常用于获取本地计算机上蓝牙设备的设备 ID。很好,我能理解。我想,我的困惑仅在具有多个蓝牙设备且参数为非hci_get_route()NULL 的系统上才有意义。hci.c的源代码显示了以下实现:

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;
}
Run Code Online (Sandbox Code Playgroud)

我不会在这里复制hci_for_each_dev()__other_bdaddr()、 或的整个代码__same_bdaddr(),但简而言之,如果提供非 NULL ,该函数将首先尝试查找地址与所提供的地址bdaddr_t*匹配的设备,然后,仅失败后,选择地址匹配的设备。我回顾了引入这个函数的提交,它略有不同,但仍然使用:__other_bdaddr

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);
}
Run Code Online (Sandbox Code Playgroud)

即使这个初始版本的出现,也是有意为之,做同样的事情,它只是不包括使用__same_bdaddr.

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