当前位置: 首页 > 面试题库 >

低功耗蓝牙:使用BlueZ堆栈作为外围设备(具有自定义服务和特性)

卓新知
2023-03-14
问题内容

我试图在Linux机器上使用BlueZ堆栈来创建具有自定义服务和特征的GATT服务器。最终目标是使用任何中央设备(例如iOS或Android设备)连接到GATT服务器,发现服务和特征,并操纵特征中的数据。

例:

  • 具有1个服务的外围设备,其中包含3个特征。
  • 服务uuid​​ = 0xFFFF
  • Char 1 uuid = 0xAAAA,属性=可读
  • 字符2 uuid = 0xBBBB,属性=可读可写
  • Char 3 uuid = 0xCCCC,属性=可通知

从中央设备,我应该看到外围设备,连接到外围设备,然后发现一项具有三个特征(0xAAAA,0xBBBB,0xCCCC)的服务(0xFFFF)。然后,我应该能够读取0xAAAA的值,读取和写入0xBBBB的值,并在0xCCCC上启用通知。

请注意,我知道也存在类似的问题,但这仅说明了如何将外围设备用作广告商。另一个已解决的问题说明了如何创建GATT服务器,但没有说明如何使用特性的属性(例如,可读性,可通知性等),或者也许我遗漏了一些东西。

先感谢您。


问题答案:

您可以在示例/目录下查看gatt-example的实践或已定义的配置文件,例如alert /
server.c。基本上,您只需要按照现有代码使用gatt_service_add()函数注册服务即可。例如 :

 gatt_service_add(adapter, GATT_PRIM_SVC_UUID, 0xFFFF,
    /* Char 1 */
    GATT_OPT_CHR_UUID16, 0xAAAA,
    GATT_OPT_CHR_PROPS, ATT_CHAR_PROPER_READ,
    GATT_OPT_CHR_VALUE_CB, ATTRIB_READ, read_func_callback,

    /* Char 2 Define here */
    ...
    /* Char 3 Define here */
    ...
    GATT_OPT_INVALID);
 }

另外,我忘记了细节,但是为了使警报服务器正常工作,您需要在配置期间通过添加“ –enable-maintainer-mode”和“ –enable-
experimental”来启用实验性(和维护者模式?)

要运行,请运行带有-n和-d选项的已编译“ bluetoothd”进行调试(也可以使用-
E启用实验性服务)。您可能需要在运行蓝牙后再次重置适配器。然后,您可以使用gatttool(也可以在远程设备上运行蓝牙)从远程设备进行连接。



 类似资料:
  • ap.connectBLEDevice(OPTION | deviceId, CALLBACK) 连接低功耗蓝牙设备。可直接传入一个字符串作为 OPTION.deviceId。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id 错误码说明 error 描述 12 链接失败 代码示例 <script src="https://gw.alipayobj

  • 问题内容: 我试图按照davidgyoung在此问题中提供的步骤进行操作。这是我使用的命令: 这给了我这个输出: 请注意,我不能使用建议的命令,因为它会引发错误。 但是,当我尝试从另一台设备中读出(例如带有)广告包中的有效负载时,我得到的输出是这样的: 输出代码段(两个条目都一遍又一遍地重复,但查看MAC,它应该是同一台设备): 匹配的输出片段: 我正在使用Bluez 5.26和CSR4.0加密狗

  • jd.readBLECharacteristicValue(Object object) 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 参数名 类型 默认值 必填 说明 deviceId string 是 蓝牙设备 id serviceId string 是 蓝牙特征值对应服务的 uuid characteristicId string 是 蓝牙

  • 问题内容: 我试图在Linux机器上使用GATT来设置具有许多特征的自定义服务。 使用[这个问题及其链接的问题,我能够识别出我需要编写的代码(利用该函数)。 我创建了一个单独的文件gatt_service.c,并编写了我认为需要的代码。但是,我无法解决如何将我的代码链接到Bluez库以编译和运行我的解决方案。例如,此站点(并非用于BLE开发)使用gcc参数链接到libbluetooth ,而我无法

  • 我得到一些信息,Android设备现在可以在蓝牙低能耗(BLE)外围模式下运行。应用程序可以使用此功能从Android L中的New向附近的设备广播它们的存在。 我已经全部配置好了(即蓝牙LE广告和广告数据的设置要在广告包中进行广告),当我开始发送时,我发现我无法监听传入的连接。谁能帮我? 我是一个基于l-开发者-预览-参考的API(Added Package:android.bluetooth.

  • 有人知道如何添加蓝牙低能耗作为设备要求,只允许iOS应用程序在蓝牙LE设备上可用吗?谢啦