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.

[参考译文] CC2640R2F:缺少通知

Guru**** 2577385 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/589515/cc2640r2f-missing-notify

器件型号:CC2640R2F

大家好、

我遇到一个问题、即 当中央写入外设特性时、中央不会收到通知。 通知由外设发送(被 bleepacketsniffer 看到)、但中央设备不接收通知。 (请参阅随附的 PSD 文件  pairing_sniff_complete.psd pktn 618)

如果我们延迟外设的通知时间主要大于连接间隔、则中央接收通知(请参阅随附的 PSD 文件 log_pairing.psd pktn 125)。
您能帮我解决这个问题吗?
提前感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Roberto:

    我将尝试重现您的问题、并返回给您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Roberto:

    我无法重现此问题:在同一连接事件中,我可以收到一条书面通知和通知。 (也适用于较短的连接间隔。)

    如果(pMsg->method == ATT_Handle_value_Noti)并查看它们是否到达断点、您能否在 else 内部设置断点

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

    在代码片段下面:

    函数中的参数

    bStatus_t SimpleProfile_SetParameter (uint8 param、uint8 len、void * value){
    attHandleValueNoti_t 通知;
    bStatus_t status;
    NOTI.Handle = 0x1E;
    NOTI.LEN = 2;
    (笑声)

    switch (param){
    (笑声)

    SIMPLEPROFILE_CHAR6案例:
    如果(len == SIMPLEPROFILE_CHAR6_LEN)

    void memcpy (simpleProfileChar6,Value,SIMPLEPROFILE_CHAR6_LEN);

    NOTI.pValue =(uint8 *) GATT_BM_alloc (0、ATT_Handle_value_Noti、GATT_MAX_MTU、&len);
    if (NOti.pValue!= NULL)//if allocated

    //位置索引
    memcpy (oti.pValue、value、sizeof (uint8_t));
    memcpy (oti.pValue+(1*sizeof (uint8_t)))、value+(1*sizeof (uint8_t))、sizeof (uint8_t)));
    NOTI.pValue[0]=(uint8_t)*值;
    NOTI.pValue[1]=(uint8_t)*(value+(1*sizeof (uint8_t)));
    状态= GATT_Notification (0、&Noti、0);//尝试发送
    如果(status != Success)//如果未发送通知

    GATT_BM_FREE ((gattMsg_t *)&NOTI、ATT_Handle_Value_NOTI);
    DebugPush ("Errore Nell'invio della notifica %d"、status);

    否则{
    DebugPush ("Notifica inviata con sesso");




    其他

    RET = bleInvalidRange;

    中断;
    (笑声)


    奇怪的是,如果我延迟通知,中央会正确接收通知。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Roberto:

    是否可以尝试从 multi_role.c 中的 multi_role_processCharValueChangeEvt()发送通知?

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

    尊敬的 Roberto:

    请尝试以下操作:

    在 multi_role.c 中、将858行从 IF 更改为 while:

    while (iCall_fetchServiceMsg (&src、&dest、
    
    (void **)&pMsg)=ICALL_errno_Success)
    
    {
    
    uint8_t safeToDealloc = true;
    
    IF (((src =ICALL_SERVICE_CLASS_BLE)&&(dest =self Entity))
    
    { 

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

    感谢您的回复。
    我已经尝试过您的建议、似乎工作正常。
    非常感谢