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

What is ENABLE_INDICATION_VALUE and ENABLE_NOTIFICATION_VALUE in Client Characteristic Configuration Descriptor in ble?

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

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

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

  3. ENABLE_INDICATION_VALUE和ENABLE_INDICATION_VALUE之间的主要区别是什么 ENABLE_NOTIFICATION_VALUE 而两者都执行相同的任务,即发送 连续数据到中央设备?

  1. 客户端需要配置服务器才能启用notifications/indications。否则它不会发送任何东西。

  2. 没有。 16 位描述符值是一个位域。目前只定义了两个位:通知和指示。您可以同时设置这两个位,然后在服务器运行正常时您应该同时收到通知和指示。

  3. 服务器可以随时发送通知。每个连接事件甚至可能有多个通知,这提供了高性能。一台服务器只能有一个未完成的指示。在服务器可以发送新指示之前,客户端需要确认接收到指示。与通知相比,这会降低性能。请注意,在我看来,使用带有 Android 或 iOS 的指示作为客户端有点无用,因为在应用程序完全处理指示之前蓝牙堆栈会发回确认信息。所以确认是"false"确认。

1.Why我们需要 CCCD 来启用通知吗?

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

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

“CCCD的使用是为了让GATT Client控制GATT Server可以向它发送什么样的数据包”-意思是使外设能够发送数据。

2.Once 传递ENABLE_INDICATION_VALUE,是否在外围设备中启用通知?

NO.For每一个Indication,你都要发送Acknowledgment来说明这是我需要的数据。

3.What是ENABLE_INDICATION_VALUE和ENABLE_NOTIFICATION_VALUE的区别吗?

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

ENABLE_NOTIFICATION_VALUE -> 如果有任何变化,外围设备将发送,这意味着这可以用于定期通知

ENABLE_INDICATION_VALUE -> peripheral 有任何变化都会发送,在下一个连接间隔会有一个应用层的ack(from ble stack)(一个连接间隔只允许一个指示),然后只有外围设备可以发送新值。这就是我们不能使用 ENABLE_INDICATION_VALUE 发送常规通知的原因。