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:集中式从特征 FFF1/FFF2读取返回通知值

Guru**** 2595770 points
Other Parts Discussed in Thread: CC2340R5, LP-EM-CC2340R5, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1357193/cc2340r5-central-read-the-return-notification-value-from-characteristic-fff1-fff2

器件型号:CC2340R5
Thread 中讨论的其他器件:SysConfig

SDK 版本:7.40.00.64

CCS 版本:12.7.0

目前、我正在测试 CC2340作为中央设备并将其连接到另一个作为外设的设备。 连接后、我要通过 FFF1特征值将命令写入外设 CC2340。 电流设置如下

但当我查看 GATT_ReadCharValue() API 时,我发现它所替换的参数结构没有可存储值的变量。 attReadReq_t 结构只有一个包含特征值的句柄


我看了 Gatt_ReadCharValue()的描述,似乎当该 API 返回成功时,它会调用 BLE59gl()-> Util_Task GATT_MSG_EVENT -> BLEAppUtil_processGATTelevents 或 GATT_eventhandler ()?

您能否指导我读取通知的退货值的过程?



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

    您好、Ryan、

    我建议您看看 我们 GitHub 库中的 GATT 客户端示例。 该示例打算连接到运行 basic_ble 的器件作为外设。 在该页面中、您可以看到 GATT 写入的实现方式以及如何由外设(based_ble)获取。

    希望它有所帮助。

    大卫。

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

    您好、David

    我已经在您提供的链接中查看了样片计划、但我仍然只能获得下图的信息。 关于读取通知值是否有更详细的过程?

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

    您好、Ryan、

    我并不完全确定您想要实施的内容。 它是通过外设通知将信息发送到中央设备、还是使用中央设备从外设读取特征。 这是两种不同的信息传输方式。 您希望实现哪一个?

    Br、

    大卫。

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

    我要实现的是使用中央设备连接外围设备、将特征值(FFF1/FFF2)消息写入外围设备、然后外围设备将根据中央设备写入的消息给出相应的返回值。 ,并且将使用通知返回此返回值。

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

    您好、Ryan、

    我想您所介绍的内容是使用 我们 GitHub 库 (中央)中的 GATT Client 示例和 SDK 中的 based_ble (外设)示例实现的。 要尝试此操作、首先刷写 GATT 客户端示例、并使用两个按钮菜单连接到运行 based_ble 的外设(为两个器件打开串行终端)。 建立连接后、向特征3 (以及菜单)发送写入请求。 外设将接收写入请求并使用 SimpleGatt_notifyChar4 ()将具有相同值的通知发送回 CHAR 4。 请查看这一实现方式在 basic_ble -> APP_simple_GATT.c -> SimpleGTT_changeCB ()函数中如下所示:

    static void SimpleGatt_changeCB( uint8_t paramId )
    {
      uint8_t newValue = 0;
    
      switch( paramId )
      {
        
        ...
    
        case SIMPLEGATTPROFILE_CHAR3:
          {
            SimpleGattProfile_getParameter(SIMPLEGATTPROFILE_CHAR3, &newValue);
    
            // Print the new value of char 3
            MenuModule_printf(APP_MENU_PROFILE_STATUS_LINE, 0, "Profile status: Simple profile - "
                              "Char 3 value = " MENU_MODULE_COLOR_YELLOW "%d " MENU_MODULE_COLOR_RESET,
                              newValue);
    
            SimpleGatt_notifyChar4();
          }
          break;
          
          ...

    希望这对您有所帮助。

    大卫。

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

    David、您好!


    您提供的信息是由 外围 设备执行的通知。  
    但我的问题是"中央设备"如何从外围设备接收通知消息?

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

    您好、Ryan、

    首先、确保从中心"启用通知"。 有关如何在 GATT_CLIENT 示例中实现此功能的详细信息,请参阅 app_menu.c 内的函数 Menu_doEnableNotifications()。

    当中心设备接收到通知时、将生成 A GATT 事件。 在此示例中,这在 app_data.c 内部处理(有关 ATT_Handle_Value_Noti 情况,请参见函数 GATT_eventhandler ()。 请记住为 dataGATTHandler (也在 app_data.c 中)添加正确的事件掩码(BLEAPPUTIL_ATT_Handle_Value_Noti)

    它是一个很好的工具。 查看 GATT_CLIENT.c (在 SDK 中找到)中的内容并检查 gattClientProcessMsgCB()函数。 查找是否( notifyApp ),您将在其中看到通知 msg 如何转发到上层应用程序。 我认为您不需要深入了解、因此我建议使用 app_data.c 中使用的 ATT_Handle_Value_Noti 事件

    希望这对您有所帮助。

    大卫。

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

    David 您好!
    我勾选了 Menu_doEnableNotifications (),这是用于激活"外围设备"的通知功能,对吗?
    但我发现它需要 handle 参数,所以我怎么知道 FFF1的 Handle 呢?

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

    您好、Ryan、

    在 Menu_doEnableNotification ()函数中,您可以看到正在传递 GATT 表中通知特征对应的句柄(req.handle = 47;)。 这可以通过从中央侧执行服务和特征发现来完成、但出于此示例(已知 bbased_ble 示例中的 GATT 表是 GATT 表)的目的、它直接定义为47 (带通知的特征的句柄)。

    Br、

    大卫。

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

    尊敬的 David:

    我如何确定特征 FFF1的句柄?
    或者、示例中的 req.handle = 47是否代表特征 FFF1的句柄?

    因为我找不到在哪里定义47作为句柄、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    要标识特征的处理程序、您必须执行服务和特征发现、该发现会在中心器件中发现此表。 您可以在用户指南: 图74中看到 使用 BTool 收集的表及其值(包括处理程序值)。 请查看处理程序列(以十六进制值表示)。

    Br、

    大卫。

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

    你好,David


    (1)我正在使用 XDS110-LP

    我尝试使用 BTool 进行检查、但在打开 BTool 并选择端口和波特后、它会显示复位超时。

    我的设置有误吗?


    (2)我调用了 GATT_DiscCharsByUUID ()、似乎找到了对应于0xFFF1的句柄(句柄= 0x2D)。 我调用了 GATT_ReadCharValue ()以验证0x2D 是否对应于0xFFF1。

    这是否意味着我成功找到了与特征对应的句柄值?




    (3)如果我的第二点正确、那么如果我调用 GATT_WriteNoRsp ()并替换 handle = 0x2D、​​这是否意味着我可以启用0xFFF1特征的通知功能?

    (4)如果第三个点是正确的,那么我调用 GATT_WriteCharValue()并替换我要写入 FFF1的值。   返回"0x16"
    这是否意味着第三个点中的 GATT_WriteNoRsp ()仍在运行、从而返回0x16? 如下图所示
     

    PS。 外围设备设置了 FFF1通知、但我不知道激活是否成功

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

    您好、Ryan、

    1. 是否已首先将 host_test 映像刷入 cc23? 您可以在里面找到它 \examples\rtos\LP_EM_CC2340R5\ble5stack\hexfiles
    2. 您是否已从 based_ble 示例中修改 GATT 表? 特征#4 (FFF4)是为通知配置的值、它有一个1字节值、无法从 GATT 客户端设备直接读取或写入(此值可公布:可以配置此值、以将通知发送到 GATT 客户端设备。)。 您能否发送使用 BTool 发现的 GATT 表的屏幕截图?

    为了澄清,你写数据到一个特征(在示例和代码片段我分享它是 char3 ),然后使用 char4通知回中央。

    Br、

    大卫。

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

    尊敬的 David:

    (1)我使用的是 CC2340R5RGE 的定制电路板(QFN-24)。 当我打开 BTool 并尝试连接时、显示复位错误、如下所示。 我加载了"host_test.hex"、但仍然无法正常工作。  

     当我使用 LP-EM-CC2340R5时、BTool 可以正常连接。 是否需要更改 host_test 的 SYSCFG 配置? 如果是、应该更改哪种配置?

    (2)是的、我的外围器件已将 GATT 属性表设置为写入/通知、并且还使用我的手机连接并成功启动读/写通知。 这是否意味着我无法使用 FFF1启动通知并进行读写?

    我读取特征值 CCCD (0x2902)、Handle = 47、并确保其值为1、这意味着通知已启用。 但是当我在 handle = 47的情况下调用 GATT_WriteCharValue ()时、大约30秒后会将"ATT_WRITE_RSP"返回到 BLEAppUtil_processGATTelevents ()、但不会收到"ATT_Handle_Value_Noti"。

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

    您好、Ryan、

    很抱歉因为节假日而延迟。

    我懂了。 与评估板中使用的 RKP 相比、CC23xx 的 RGE 版本的引脚数更少(如果是在评估板中使用 RGE 版本、请更正我)。 您所使用的 host_test.hex 文件适用于 RKP 接口。 请导入 host_test 项目(您可以在内部找到它) \examples\rtos\LP_EM_CC2340R5\ble5stack)。 保存项目以进行迁移。 打开 SysConfig 并点击"Devices and Switch"。 然后按如下所示修改电路板和器件。 请解决因引脚冲突而出现的 SysConfig 问题(还应考虑您在定制板中用于 UART 的引脚)。

    您是否已将 ATT_Handle_Value_Noti 事件包含在 dataGATTHandler 的.EventMask 中?

    Br、

    大卫。

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

    尊敬的 David:

    (1)我已经尝试打开 host_test 并切换到 RGE 模式、并且还将 UART 引脚更改为定制板的 RX 和 TX、但我仍然无法使用 BTool、并且会弹出上述复位错误。 是因为也需要设置 SPI 吗?

    (2)此外、我使用了 LP-EM-CC2340R5并加载了 host_test。 当我打开 BTool 进行查看时、我发现没有 FFF1/FFF2等功能、因为 host_test 似乎没有打开 FFF1/FFF2、但如果我使用 basic_ble 项目、我无法打开 BTool。 BTool 只能绑定到 host_test 吗? 无法加载其他项目进行查看?

    (3)我已经解决了阅读通知的问题,但我有一个问题。 这是我在 GATT_WriteCharValue()中引入的参数,但必须使用 memcpy 填写 req.pValue,才能真正成功写入该参数? 由于我无法使用指标或循环来读取通知以填充 req.pValue、因此只能通过使用 memcpy 成功。

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

    您好、Ryan、

    1. 请确保您使用的波特率正确。 我在 BTool`s 配置终端中看到9600、如果 host_test 未修改、则看起来像是设置为115200 (NPI_UART_BR)。
    2. 想法是使用 BTool 作为中央设备作为服务器连接和发现外围设备(例如运行 GATT 表的 basic_ble)
    3. 您需要使用 memcpy 来修改要写入的值。 例如、在启用通知时:memcpy (req.pValue、configData、2)、其中 uint8 configData[2]={0x01、0x00};

    希望这对您有所帮助。

    大卫。