客户端特性配置描述符中的ENABLE_INDICATION_VALUE和ENABLE_NOTIFICATION_VALUE是什么?

问题描述 投票:1回答:2

我一直在开发一个应用程序来读取和写入另一个BLE设备的数据。从应用程序的角度来看,我没有任何问题。只是一些我需要澄清的概念性疑虑。所以:

  1. 为什么我们需要cccd来启用通知?
  2. 一旦传递ENABLE_INDICATION_VALUE,它是否在外围设备中启用通知?
  3. ENABLE_INDICATION_VALUE和ENABLE_NOTIFICATION_VALUE之间的主要区别是什么,而两者都执行相同的任务,即将连续数据发送到中央设备?
android bluetooth-lowenergy android-bluetooth android-ble
2个回答
4
投票
  1. 如果服务器应启用通知/指示,则客户端需要配置服务器。否则它不会发送任何东西。
  2. 不是.16位描述符值是位字段。目前只定义了两位:通知和指示。您可以设置这两个位,然后如果服务器行为正确,您应该同时获得通知和指示。
  3. 服务器可以随时发送通知。可能每个连接事件甚至多个通知,这提供了高性能。服务器只能有一个未完成的指示。客户端需要在服务器发送新指示之前确认接收指示。与通知相比,这会降低性能。请注意,在我看来,使用Android或iOS作为客户端的指示是没用的,因为在应用完全处理指示之前,蓝牙堆栈会发回确认信息。因此确认是“错误”确认。

2
投票

1.为什么我们需要CCCD来启用通知?

首先setCharacteristicNotification() - 启用/禁用本地设备接收来自外围设备的通知

CCCD - 客户端配置特征描述符

“使用CCCD是为了让GATT客户端控制GATT服务器可以向它发送什么类型的数据包” - 这意味着启用外设发送数据。

2.一旦通过ENABLE_INDICATION_VALUE,它是否在外围设备中启用通知?

NO。对于每个指示,您必须发送确认声明这是我需要的数据。

3. ENABLE_INDICATION_VALUE和ENABLE_NOTIFICATION_VALUE有什么区别?

如果特征值有任何变化,他们都会通知他们。

ENABLE_NOTIFICATION_VALUE - >如果有任何更改,外围设备将发送,这意味着这可以用于常规通知

ENABLE_INDICATION_VALUE - >如果有任何更改,外设将发送,在下一个连接间隔中将有一个应用程序级别ack(来自ble stack)(一个连接间隔只允许一个指示),那么只有外围设备可以发送新值。这就是我们无法使用ENABLE_INDICATION_VALUE发送常规通知的原因。

© www.soinside.com 2019 - 2024. All rights reserved.