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接口
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库实际上是供内部使用的(尽管许多人使用)。我想这也是为什么它没有更好的文档化的原因之一。