栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Bluez:广告服务/ Gatt服务器示例?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Bluez:广告服务/ Gatt服务器示例?

最终,我找到了所有问题的答案。

我将从回答最后一个问题开始:

我仅使用命令设置BLE设备来通告一些数据,但iOS报告已接受连接。 bluez的哪一部分接受传入连接?

这一次是回答的bluez邮件列表上,以响应我。

简介: 内核在HCI级别接受BLE连接。如果要从用户空间使用该连接,则需要使用具有ATT通道ID(为4)的l2cap套接字。

Bleno有一个使用L2CAP套接字的很好的例子。

L2CAP套接字的工作原理基本上是这样的:

l2cap_socket = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);hci_device_id = hci_get_route(NULL);hci_socket = hci_open_dev(hci_device_id);memset(&l2cap_address, sizeof(l2cap_address));l2cap_address.l2_family = AF_BLUETOOTH;l2cap_address.l2_bdaddr = hci_device_address;l2cap_address.l2_cid = htobs(ATT_CID);bind(l2cap_socket, (struct sockaddr*)&l2cap_address, sizeof(l2cap_address));listen(l2cap_socket, 1);while (1) {    select(l2cap_socket + 1, &afds, NULL, NULL, &tv);  client_socket = accept(l2cap_socket, (struct sockaddr *)&l2cap_address, &len);    int ret = read(client_socket, buffer, sizeof(buffer));  printf("data len: %dn", ret);  for (i = 0; i < ret; i++) {    printf("%02x", ((int)buffer[i]) & 0xff);  }  printf("n");  close(client_socket);}

如何宣传服务?

我意识到我需要对上一个问题的答案才能回答这个问题。

一旦您可以通过L2CAP套接字读取数据,一切都会变得更有意义,例如,如果您的Android手机可以读取数据

gatt.discoverServices()
,则上面的小程序将读取(即接收):

10 0100 ffff 0028

这基本上意味着:

10: READ_BY_GROUP0100: from handle 0001ffff: to handle ffff0028: with UUID 2800

此请求是任何BLE外围设备将请求服务列表的方式。

然后,您可以使用设备提供的服务列表(根据GATT协议格式化)来回答此请求。

再次,请参见Bleno中的实现。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号