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.

[参考译文] CC2340R5:如何启用多种通知

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1377663/cc2340r5-how-to-enable-mulitple-notification

器件型号:CC2340R5

工具与软件:

您好!

 我知道我们可以在: case GATT_CLIENT_CHAR_CFG_UUID :".in 写回调下启用通知

如果我有多个通知、则每个通知都将执行相同的案例声明以及发送方式

启用通知时对应属性的通知值。

例如:我有 ATTR1和 ATTR2通知、当我启用 ATTR2通知时、其值应发送至 ATTR2。

如何以编程方式确定启用了哪个通知?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    为了澄清、您尝试从中心侧识别收到的通知属于哪个属性?

    此致、

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否 我说的是外设端 当外设接收到 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 );

    我希望这将有所帮助、

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如何在代码中使用 BTool?

    我找到办法去做。

    谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    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

    我希望这将有所帮助、

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我解决了。 谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    太棒了! 感谢您的确认。

    祝您在项目的后续步骤中一切顺利。

    此致、