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.

[参考译文] CC2541:CC2541 ->SimpleBleCentral ->通知/指示

Guru**** 2581585 points
Other Parts Discussed in Thread: CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/589219/cc2541-cc2541----simpleblecentral----notification-indication

器件型号:CC2541

您好!

我必须使用三个器件...

运行 SimpleBleCentral 代码的 CC2541 (1)。

2.用于广播数据的 CC2541 (2)

3.具有 BLE Scanner 应用的移动电话

我做了什么...

(a)首先、我使用我的移动和扫描设备(2)、然后转到"自定义特性"、然后启用0xFFF4 UUID 通知。 它显示了数据0x03。

(b)第二次运行设备(1)、然后发现0xFFF0特征(#define SIMPLEPROFILE_SERV_UUID 0xFFF0)、在此情况下、我读取0xFFF1、并获得所需的数据。

(C)第三次运行设备(2)、然后 发现0xFFF0特征(#define SIMPLEPROFILE_SERV_UUID 0xFFF0)、在此情况下、我尝试启用0xFFF4通知、但无法执行相同操作。

 

我还在使用 GATT_ReadUsingCharUUID (simpleBLEConnHandle、&req、simpleBLETaskId)后检查(simpleBLECharHdl!= 0)此函数,并返回0。

 

我的问题是...

(1) 我们需要如何以及在何处在 SimpleBleCentral 代码中启用通知?

(2)我们能否将((GATT_ReadUsingCharUUID)函数用于0xFFF4?

(3)如何使用 SimpleBleCentral 代码从0xFFF4读取数据(我在(a)中执行的操作)?

 

希望得到积极的答复。

提前感谢。

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

    在场景(C)中、您要将 SimpleBLECentral (器件1)连接到器件2吗?
    每个连接都会保存通知。 因此、您必须为每个器件分别启用通知。 然后、当您重新连接时、它应该会记住通知配置。

    中央项目仅显示如何读取/写入 Char.1、要启用通知、您必须写入 CCCD。 下面是从另一个项目中获取的特征写入 CCCD 的示例:

    IF (事件和 SBC_NOTI_ENABLE_EVT)

    //处理消息。
    uint8返回值;
    attWriteReq_t req;
    uint8 configData[2]={0x01、0x00};

    REQ.pValue = GATT_BM_alloc (connHandle、ATT_WRITE_REQ、2、NULL);

    if ((charCCCDHdl = NULL)&&(charDataHdl!= NULL)){charCCCDHdl = charDataHdl + 1;}//硬编码
    if ((req.pValue!= NULL)&& charCCCDHdl)

    REQ.Handle = charCCCDHdl;//数据特性的 CCCD 句柄
    Req.len = 2;
    memcpy (req.pValue、configData、2);
    REQ.cmd = true;//对于来自服务器的 NoRsp 必须为 true (命令,而不是请求)
    REQ.SIG = false;
    RetVal = GATT_WriteNoRsp (connHandle、&req);
    if (RetVal!=成功)

    调试("启用通知时出错...\n\n");

    其他

    调试("通知已启用...\n\r\n);




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

    是、在场景(C)中、我将器件(1)连接到器件(2)。 在这里、我希望启用特性通知0xFFF4。

    yaaaaaa...我很快就会作为您的解决方案并告诉您。

    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我错误地发布了错误信息。 情况(C)类似于...

    (C)第三次运行设备(1)、然后发现0xFFF0特征(#define SIMPLEPROFILE_SERV_UUID 0xFFF0)、在此情况下、我尝试启用0xFFF4通知、但无法执行相同操作。

    其余都可以。

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

    您好!

    我是按照你的建议做的、但无法获得结果。

    我所做的...(不同的场景)

    (a)我尝试使用[ GATT_WriteNoRsp (connHandle、&req);]函数发送请求,该函数具有您建议的所有标志。 它返回成功(0)、但在未发生任何情况后返回。

    (b)我运行设备(1)、然后使用具有 UUID 0xFFF4的[ GATT_DiscCharsByUUUUUUUUUUUAR]函数连接设备(2)、然后使用[ GATT_ReadCharValue ]函数读取 UUID 0xFFF4。 我得到了一些我解码并理解的响应。

    (c)我运行设备(1)、然后使用具有 UUID 0xFFF4的[ GATT_ReadUsingCharUUID ]函数连接设备(2)。 在[ void simpleBLEGATTDiscoveryEvent ]函数中,我得到0x01作为[ pMsg->method ]中的方法,这意味着错误响应。

    我的问题是...

    (a)如果按照您的建议启用了通知,如何从0xFFF4读取数据(我是指使用哪个函数)?

    (b)什么是 CCCD?

    谢谢你。

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

    您好!

    我没有做任何更改(如上所示)、但成功了。

    attWriteReq_t req;

    REQ.pValue = GATT_BM_alloc (simpleBLEConnHandle、ATT_WRITE_REQ、2、NULL);

    if (女士)  

    REQ.Handle = conHnle_write+1

    Req.len = 2;

    REQ.pValue[0]= LO_UINT16 (GATT_CLIENT_CFG_NOTIY);

    REQ.pValue[1]= HI_UINT16 (GATT_CLIENT_CFG_NOTIY);

    REQ.SIG = 0

    REQ.cmd = 1

    RetVal = GATT_WriteNoRsp (simpleBLEConnHandle、&req);

    if (RetVal!=成功)

    //debug ("启用通知时出错...\n\n");
    sendDataToHost ("\r\n\r\n 启用通知时出错!!!!");

    其他

    //debug ("通知已启用...\n"\});
    sendDataToHost ("\r\n\r\n 通知已启用");

    感谢你的帮助。