在从蓝牙外设读取数据时,我面临着一些问题。我们有一个蓝牙设备,有以下关贸总协定的细节。
<service uuid="service id" advertise="true">
<description>XXXX service</description>
<characteristic uuid="characteristic id" id="xgatt_data">
<description>Data</description>
<properties write="true" indicate="true" />
<value variable_length="true" length="20" type="user" />
</characteristic>
</service>
我所做的是
我能连接到这个设备。我也可以向外设发送命令(数据)。一旦我们向设备发送任何命令,它就会发送一些数据作为响应。我可以在设备上看到日志,一旦收到任何命令,它就会将一些数据发回。但是在我的iOS设备中,我无法使用通知或普通读取函数读取数据。我在这里错过了什么?
发布于 2017-07-03 20:37:04
我发现了问题。实际上,问题在于模拟器。现在我可以获得数据更新指示,并能够用“读”和“指示”属性将数据写入BLE。
发布于 2017-07-03 05:17:31
通知和指示是两件不同的事情:如果启用指示,您将不会接收通知,如果启用指示,则发送指示的应用程序希望对每个发送的indiciation (来自应用层)作出响应。
另外,您的权限似乎不太正确: xgatt_data特性不一定需要“写”权限,除非您打算让客户端更改它的值。如果要从通知中读取数据,则需要“读取”权限,而不仅仅是被通知已收到数据。
要启用通知,需要一个客户端特征配置描述符 (UUID 00002901-.)在xgatt_data特征范围内。这个CCCD需要"Read+Write“权限来启用通知/指示(有些没有读取权限,有些没有)。
最后,确保您的设备不同意小于通知大小的属性MTU,如果它不适合于单个包,它将不会被外围设备接收。如果使用了数据长度扩展,则在DLE协商之后才启用通知,或者将通知值大小保持在设备最初的最小属性MTU以下。
https://stackoverflow.com/questions/44702529
复制相似问题