Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ BlueZ hci_*API使主机可发现_C++_Linux_Bluetooth_Bluez - Fatal编程技术网

C++ BlueZ hci_*API使主机可发现

C++ BlueZ hci_*API使主机可发现,c++,linux,bluetooth,bluez,C++,Linux,Bluetooth,Bluez,环境: Linux 蓝牙协议栈 C API 不使用dbus接口 我必须说,hcibluezcapi()的文档记录得很差,有没有一个控制主机可发现状态的HCI_*API?类似于“hci\u写入\u简单\u配对\u模式”的解决方案,可以控制可发现性。解决方案可以在特定的at“cmd\u扫描”实现中找到(具有opt=“piscan”),其派生如下 HRESULT BluZbridge::SetDiscoverable(IN BOOL bVisible) { if (0 ==

环境:

  • Linux
  • 蓝牙协议栈
  • C API
  • 不使用dbus接口
我必须说,hcibluezcapi()的文档记录得很差,有没有一个控制主机可发现状态的HCI_*API?类似于“hci\u写入\u简单\u配对\u模式”的解决方案,可以控制可发现性。

解决方案可以在特定的at“cmd\u扫描”实现中找到(具有opt=“piscan”),其派生如下

    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;
    }
HRESULT BluZbridge::SetDiscoverable(在BOOL bVisible中){
if(0==m_fdHCI)
从WIN32返回HRESULT\u(错误\u未准备就绪);
hci_dev_req req={DEFAULT_hci_ADAPTER_ID,((TRUE==bVisible)?(扫描页面|扫描查询:扫描禁用)};
if(ioctl(m_fdHCI,HCISETSCAN,(无符号长)&req)<0){
perror(“无法在hci0上设置扫描模式”);
返回HRESULT_GET_ERRNO();
}
返回S_OK;
}

以下hci命令使适配器可发现
hciconfig hci0 piscan

以下是来自hciconfig的相应代码

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) {
if(!strcmp(opt,“pscan”))
dr.dev_opt=扫描页面;
否则,如果(!strcmp(选择“piscan”))
dr.dev_opt=SCAN_PAGE | SCAN_INQUIRY;
if(ioctl(ctl,HCISETSCAN,(无符号长)和dr)<0){
以下是ctl的来源:

 if ((ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0) 
if((ctl=socket(蓝牙、SOCK\u原始、BTPROTO\u HCI))<0)

AFAIK在HCI库中没有这样的API。但肯定是通过。而HCI库实际上是供内部使用的(尽管许多人使用)。我想这也是为什么它没有更好的文档化的原因之一。