首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BlueZ hci_* API使主机可被发现

BlueZ hci_* API使主机可被发现
EN

Stack Overflow用户
提问于 2015-05-05 16:42:55
回答 2查看 1.6K关注 0票数 2

环境:

  • Linux
  • BlueZ蓝牙协议栈
  • C API
  • 不使用dbus接口。

我必须说,HCI BlueZ C API ( lib.h )文档很少,也就是说,是否存在控制主机可发现状态的C hci_* API?类似于启用可发现性控制的"hci_write_simple_pairing_mode“吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-10 23:55:53

下面的hci命令使适配器可以被发现

代码语言:javascript
复制
hciconfig hci0 piscan

下面是来自hciconfig图的对应代码

代码语言:javascript
复制
if (!strcmp(opt, "pscan"))
    dr.dev_opt = SCAN_PAGE;
else if (!strcmp(opt, "piscan"))
     dr.dev_opt = SCAN_PAGE | SCAN_INQUIRY;
if (ioctl(ctl, HCISETSCAN, (unsigned long) &dr) < 0) {

这里是从ctl得到的:

代码语言:javascript
复制
 if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) 
票数 1
EN

Stack Overflow用户

发布于 2015-05-06 06:44:33

解决方案可以在hciconfig.c中找到,具体在'cmd_scan‘实现(具有opt = "piscan“),派生如下

代码语言:javascript
复制
    HRESULT BluZbridge::SetDiscoverable(IN BOOL bVisible) {
        if (0 == m_fdHCI)
            return HRESULT_FROM_WIN32(ERROR_NOT_READY);
        hci_dev_req req = { DEFAULT_HCI_ADAPTER_ID, ((TRUE == bVisible) ? (SCAN_PAGE | SCAN_INQUIRY) : SCAN_DISABLED) };
        if (ioctl(m_fdHCI, HCISETSCAN, (unsigned long)&req) < 0) {
            perror("Can't set scan mode on hci0");
            return HRESULT_GET_ERRNO();
        }
        return S_OK;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30058715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档