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.

[参考译文] RTOS/LAUNCHXL-CC2650:BLE 中央器件、GATT_DiscCharsByUUID ()

Guru**** 2549940 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/578293/rtos-launchxl-cc2650-ble-central-device-gatt_disccharsbyuuid

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2650

工具/软件:TI-RTOS

您好!

我正在 CC2650 Launchpad 上进行产品原型设计、 以简单中央设备(来自简单链路 GitHub)作为应用的起点。

我想读取并写入在 简单外设上运行的另一个 CC2650 Launchpad 的特性值。 阅读用户指南后、我将替换中的代码

buttoncb 函数( SimpleBLECentral_handleKeys() )。 在构建代码时、它会引发大量错误。

 在发现服务之前,我能否直接使用 GATT_DiscCharsByUUUUUUUUID()函数?

GATT_DiscCharsByUUID (uint16 connHandle、attReadByTypeReq_t *pReq、uint8 taskId) 

还有什么是 taskid 参数和 pReq?  是否有可用的实施示例?

在哪里可以获得支持?

谢谢你

此致、

Tom Victor
Technorip Innovations Pvt Ltd 首席技术官

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

    您需要服务的起始句柄和结束句柄才能使用 GATT_DiscCharsByUUUUUUID(),因此您必须首先执行 GATT_DiscPrimaryServiceByUUUUID()。 此外,当您完成 GATT_DiscPrimaryServiceByUUUUUID()后,您不必发现特性,因为它们是服务的一部分。 在 simple_central 中,查看 SimpleBLECentral_processGATTDiscEvent(),在这里发现了简单的配置文件,然后读取特征1。

    您可以在 BLE 内核规范中阅读有关请求交换(attReadByTypeREQ_t)和包含响应(ATT_find_BY_TYPE_RSP、ATT_READ_BY_TYPE_RSP 和 ATT_ERROR_RSP)的 GATT 事件的更多信息。 ( www.bluetooth.com/.../adopted-specifications)

    pReq 应该是指向 attReadByTypeReq_t 结构的指针、而 taskId 是您希望收到响应通知的任务。 如果使用 selfentity、则可以从 SimpleBLECentral_processGATTDiscEvent()中提取响应作为 pMsg。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢您 Marie、

    我还有一些疑问、

    在我的案例中、BLE 服务是使用蓝牙开发者工作室设计的、因此我可以直接使用 GATT_DiscPrimaryServiceByUUID ()上的已知 UUID (假设任务 ID 是 selfEntity)对吧?

    在 SimpleBLECentral_processStackMsg()函数中,我应该在何处处理响应。 我应该切换哪个事件?

    静态空 SimpleBLECentral_processStackMsg (iCall_HDR *pMsg)
    {
    switch (pMsg->event)
    {
    案例 GAP_MSG_EVENT:
    SimpleBLECentral_processRoleEvent (((gapCentralRoleEvent_t *) pMsg);
    中断;
    
    案例 GATT_MSG_EVENT:
    SimpleBLECentral_processGATTMsg (((gattMsgEvent_t *) pMsg);
    中断;
    
    案例 HCI_GAP_EVENT_EVENT:
    {
    //处理 HCI 消息
    switch (pMsg->status)
    {
    案例 HCI_COMMAND_COMPLET_EVENT_CODE:
    SimpleBLECentral_processCmdCompleteEvt ((hciEvt_CmdComplete_t *) pMsg);
    中断;
    
    默认值:
    中断;
    }
    }
    中断;
    
    默认值:
    中断;
    }
    
    

    谢谢你

    此致、

    Tom Victor

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

    您好、Tom、

    除非您已指定您的服务应为辅助服务(而不是默认的主服务),否则您可以使用 GATT_DiscPrimaryServiceByUUID ()。

    SimpleBLECentral_processStackMsg()将为您对事件进行排序。 GATT_DiscPrimaryServiceByUUID ()将返回 GATT_MSG_EVENT,因此您应转到 SimpleBLECentral_processGATTMsg()。

    如果需要、您可以在简单的中央位置获取已有的代码、以发现简单服务并将其 UUID 替换为您自己的 UUID。 同样,请查看 BLE 核心规范( www.bluetooth.com/.../adopted-specifications )第4.4.2章“按 Service UUID 查找主要服务”!

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

    尊敬的 Marie:

    感谢您提供信息。

    我刚刚浏览了指南和计划, 我没有什么疑问!

     在 SimpleBLECentral_processGATTDiscEvent()函数中,我要读取特性值(由 GATT_ReadUsingCharUUUUUUUUU()函数定义)。 我可以输入 if condition (以下代码)并打印显示代码。 但我无法理解 att.h 文件中包含特征值的正确数据指针。

    否则、如果(discState = BLE_DISC_State_char)
    {
    //找到特征,存储句柄
    if ((pMsg->method =ATT_READ_BY_TYPE_RSP)&&
    (pMsg->msg.readByTypeRsp.numPairs >0)
    {
    charHdl = build_uint16 (pMsg->msg.readByTypeRsp.pDataList[0]、
    pMsg->msg.readByTypeRsp.pDataList[1]);
    Display_print0 (dispHandle、ROW_Three、0、"Simple Svc found");
    过程入口= false;
    }
    discState = BLE_DISC_State_Idle;
    } 

    我希望"attMsg_t"是保存响应指针的数据结构吗?  

    我能否使用以下方法

    for (i=0;i< pMsg->msg.readRsp.len;i++){
    Response[i]= pMsg->msg.readRsp.pValue;
    } 

    谢谢你 Marie

    此致、

    Tom Victor

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

    您好、Tom、

    引用核心规范:"Read by Type Response 返回 Attribute handle 和 Attribute 值对列表[...]"、这意味着 DataList 也包含属性值。 因此、如果要查看属性的值、您也需要查看属于特征的所有属性的 pDataList[2]等。

    或者,也可以使用从 GATT_ReadUsingCharUUUUUUU()获取的特征句柄发送读取请求。 SimpleBLECentral_handleKeys、case menu_item_read_write 下的简单中央中有一个相关示例:

    //读取
    attReadReq_t req;
    req.handle = charHdl;
    status = GATT_ReadCharValue (connHandle、&req、self 实体);
    display_print0 (dispHandle、row_six、0、"read req sent (已发送读取请求)"); 

    回复内容在 SimpleBLECentral_processGATTMsg ()、 ATT_READ_RSP 中:

    if (pMsg->method =ATT_ERROR_RSP)
    {
    Display_Print1 (dispHandle、ROW_Six、0、"Read Error %d"、pMsg->msg.errorRsp.errCode);
    }
    否则
    {
    //成功读取后,显示读取值
    Display_Print1 (dispHandle、row_Six、0、"Read rs:%d"、pMsg->msg.readRsp.pValue[0]);
    } 

    电源 我知道这是超级令人困惑的、但我们将实现这一目标! )