工具与软件:
您好!
我知道我们可以在: case GATT_CLIENT_CHAR_CFG_UUID :".in 写回调下启用通知
如果我有多个通知、则每个通知都将执行相同的案例声明以及发送方式
启用通知时对应属性的通知值。
例如:我有 ATTR1和 ATTR2通知、当我启用 ATTR2通知时、其值应发送至 ATTR2。
如何以编程方式确定启用了哪个通知?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我知道我们可以在: case GATT_CLIENT_CHAR_CFG_UUID :".in 写回调下启用通知
如果我有多个通知、则每个通知都将执行相同的案例声明以及发送方式
启用通知时对应属性的通知值。
例如:我有 ATTR1和 ATTR2通知、当我启用 ATTR2通知时、其值应发送至 ATTR2。
如何以编程方式确定启用了哪个通知?
否 我说的是外设端 当外设接收到 CCCD 写入以启用通知时、写入回调中有一条切换情况语句
案例 GATT_CLIENT_CHAR_CFG_UUID:。 在此案例下、将启用通知。
请参阅 simple_gatt_service.c
函数: SimpleGattProfile_writeAttrCB
通知启用代码的片段
大小写 GATT_CLIENT_char_CFG_UUID:
状态= GATT451C387WriteReq App_Process (connHandle、pAttr、pValue、len、
offset, GATT_CLIENT_CFG_NOTIFY ;
//通知应用程序在字符4中发生了更改
notifyApp = SIMPLEGATTPROFILE_CHAR4;
休息;
如果您只有一个属性,那么我们可以有上述代码,但当我们有多个(多个属性)如何启用通知
属性的属性?。 或者此时如何识别中心设备正在启用 CCCD 的属性?
尊敬的 Manjunath:
感谢您发送编修。
为此、它属于一种情况、因为 UUID ( 0x2902(由蓝牙规范定义)始终是相同的。 您只 需在 GATT 表中添加新特性、并且没有进一步的代码修改即可启用此通知。 请参阅我们的 DATA_STREAM SLA 以了解有关属性和特征的更多详细信息。
此致
Ivan
伊凡、您好!
感谢您的答复。
我添加了一个新特性。 我要启用通知功能。 当我在 SimpleLink 应用程序中央(移动)中启用通知按钮时,我如何知道启用了哪个属性通知?
例如:如果我有属性 A 和 B、如果中央设备启用了 B 通知、如何知道已启用 B 通知、以便我可以立即发送通知
行号588 simple_gatt_profile.c 具有以下代码
notifyApp = SIMPLEGATTPROFILE_CHAR4;
该代码在中央器件上启用通知后立即发送通知。
在此示例中、只有一个属性、因此不用担心、当我有多个属性时、如何确定启用了哪个属性通知
尊敬的 Manjunath:
GATT 客户端需要单独写入每个 CCCD、以便启用 针对特定特征的通知、它只使用写入请求 ATT 数据包将相应的位设置为1。 然后、服务器将使用写入响应进行回复、并在它想要提醒值更改时开始发送相应的数据包。 如果每个特征需要支持"通知"和/或"指示"、则每个特征都需要 CCCD。 您根据每个特征进行 API 调用。
请参阅的以下示例 用户指南的链接:

句柄0x002D 包含 CCCD。 CCCD 的 UUID 始终是前面提到的标准0x2902。 CCCD 必须始终可读且可写、通过向该属性写入0x0001、GATT 服务器可以配置通知。 写入0x0002进行指示 或写入0x0000禁用通知和指示。
我希望这对您有所帮助。
此致
Ivan
没有帮助我。
看起来您没有得到我的问题。
我知道 GATT 客户端分别对每个属性进行写入、并且还通过向 CCCD 单独写入1来启用它。
服务器如何知道启用了哪些属性通知、因为 UUID 0x2902用于所有属性。
我再次尝试解释相同的示例
假设我有两个属性 A 和 B、所有必需的操作都得到了处理
现在、当 GATT 客户端启用时、将在 GATT 服务器中执行以下代码
大小写 GATT_CLIENT_char_CFG_UUID:
状态= GATT451C387WriteReq App_Process (connHandle、pAttr、pValue、len、
offset, GATT_CLIENT_CFG_NOTIFY ;
无论是属性 A、B、C 还是 D、您同意吗?
现在、我如何知道启用了哪些属性(A/B/C/D)通知
尊敬的 Manjunath:
[报价 userid="597109" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1377663/cc2340r5-how-to-enable-mulitple-notification/5271042 #5271042"]大小写 GATT_CLIENT_char_CFG_UUID:
状态= GATT451C387WriteReq App_Process (connHandle、pAttr、pValue、len、
offset, GATT_CLIENT_CFG_NOTIFY ;
无论是属性 A、B、C 还是 D、您同意吗?
[报价]参数 gattAttribute_t *pAttr 传递给 GATT357CWriteReq App_Process ()将最终判断它是属性 A、B、C 还是 D
一般情况下,GATT3072CWriteReq ()在 App_Process 写入属性回调函数中执行,例如在 SimpleGattProfile_writeAttrCB ()中, 并且 pAttr 作为该函数的参数传递。
我希望这将有所帮助、
此致、
您好、Clement、
感谢您的答复。
GattAttribute_t 结构具有以下类型
typedef 结构 attAttribute_t
{
GattAttrType_t 类型、 //!<属性类型(2或16个八位字节 UUID)
uint8权限; //!<属性权限
uint16句柄; //!<属性句柄-由属性服务器在内部分配
uint8* const pValue; //!< Attribute 值-在中定义了八位字节数组的编码
//!<适用的配置文件。 属性的最大长度
//!<值应为512个八位位组。
} GattAttribute_t;
在上面的结构中、我可以使用"handle"来标识属性。 但我无法在"handle"中将 receive 中的值关联起来
UUID。
您能告诉我 UUID 如何映射到"handle"吗?
谢谢
您好!
以上结构我可以采用"handle"来标识属性。 但我无法在"handle"[/报价]中关联"接收"中的值只要 GATT 表未更改、属性句柄就会保持不变。 然后、您可以按照 Ivan 所示使用 BTool 检索属性句柄。
请注意、由于您 有指针 pValue、因此可以考虑使用 GATT3874 App_Find contextr ()、并最终在 返回的 gattAttribute_t 结构中检索所需的句柄。
/** * @brief Find the attribute record within a service attribute * table for a given attribute value pointer. * * @param pAttrTbl - pointer to attribute table * @param numAttrs - number of attributes in attribute table * @param pValue - pointer to attribute value * * @return Pointer to attribute record * @return NULL, if not found */ extern gattAttribute_t *GATTServApp_FindAttr( gattAttribute_t *pAttrTbl, uint16 numAttrs, uint8 *pValue );我希望这将有所帮助、
此致、
您好!
Ivan 建议在第二台设备上运行 BTool。 BTool 用于连接器件并发现其 GATT 表。
如果需要、您可以在此处找到 BTool 用户指南: https://software-dl.ti.com/lprf/simplelink_cc2640r2_sdk/1.30.00.25/exports/docs/blestack/btool_user_guide/BTool_Users_Guide / index.html
我希望这将有所帮助、
此致、