通过查看代码示例,它看起来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* …
在 Coffeescript 中,当变量名称以“@”符号开头时,这意味着什么?例如,我一直在查看 hubot 源代码,就在我查看的前几行中,我发现
class Brain extends EventEmitter
# Represents somewhat persistent storage for the robot. Extend this.
#
# Returns a new Brain with no external storage.
constructor: (robot) ->
@data =
users: { }
_private: { }
@autoSave = true
robot.on "running", =>
@resetSaveInterval 5
Run Code Online (Sandbox Code Playgroud)
我在其他地方也看到过,但没能猜出它的意思。