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:在对 uuid [SimpleBLECentral]执行写操作后、cc2541断开连接

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

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/593130/cc2541-cc2541-gets-disconnected-after-writing-on-uuid-simpleblecentral

器件型号:CC2541

您好!

我正在处理一个使用 SimpleBLECentral 示例的应用、并根据我的要求对其进行了修改。 在此应用中、我有2个 devices...device(1)运行 SimpleBLECentral 代码、并与其他 BLE 外设(2)连接。 现在我想写入其中一个具有 uuid [8A81]的器件(2)特性。 为此、我执行了以下操作...  

1.使用以下函数查找具有 uuid [8A81]的特征-> GATT_DiscCharsByUUID (simpleBLEConnHandle、&req、simpleBLETaskId);

2.然后我使用以下函数存储其连接句柄-> constle_write = pMsg->msg.readByTypeRsp.pDataList[0];

3.然后我使用以下代码写入该特征->  

//执行写操作
attWriteReq_t req;
sendDataToHost ("\r\n\r\nXOR 结果写入...");
REQ.pValue = GATT_BM_alloc (simpleBLEConnHandle、ATT_WRITE_REQ、5、NULL);
if (req.pValue!= NULL)

//notification2[0]= 0x20;
/*notification2[1]=108;
notification2[2]=243;
notification2[3]=123;
通知2[4]= 152;*/

REQ.Handle = conHnle_write+1;
Req.len = 5;
//req.pValue[0]=通知2[0];
memcpy (req.pValue、notification2,5);
REQ.SIG = 0;
REQ.cmd = 0;
状态= GATT_WriteCharValue( simpleBLEConnHandle,&req, simpleBLETaskId );
如果(status == Success)

sendDataToHost ("\r\nXOR 结果被写入。");

其他

sendDataToHost ("\r\nXOR 结果写入失败!!!!");
GATT_BM_FREE ((gattMsg_t *)&req、ATT_WRITE_REQ);

现在我得到的结果是...我打印了"XOR result written (写入 XOR 结果)",然后我的设备(1)自动从设备(2)断开连接。 那么,这种断开连接问题的原因可能是什么?

提前感谢。

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

    在 GAPRole 状态机的终止事件中、您得到的断开原因是什么?

    监听器日志还会显示更多信息。

    如果您在中断中执行此操作、UART 组件可能会导致问题(以及硬件中止)

    此外、外设是否具有写入功能? 同样、通过查看监听器日志可以了解很多这方面的信息。

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

    您能给 sendDataToHost ("\r\n 写入 XOR 结果。");。 然后再次检查它们。 我们需要找到原因。 在您的代码中、我只担心 sendDataToHost。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Luu Vy:

    这只是一个修改后的函数、仅在 UART 上发送数据、除此之外什么都没有。 因此不会有任何与此相关的问题。

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

    你好,Rebel,

    我已经定义了通知2,就像...

    uint8通知2[5]

    notification2[0]= 32
    notification2[1]=108;
    notification2[2]=243;
    notification2[3]=123;
    Notification2[4]= 152;

    现在我知道、如果我在 通知的第0个位置写入32、那么器件(1)将与器件(2)断开连接、但如果在通知的第0个位置写入除32以外的任何值2、则器件(1)将与器件(2)保持连接、我的意思是它不会断开连接。

    所有值都以十进制表示。 因此、32十进制是 ASCII 的空格。 那么、是否存在与此 ASCII 术语相关的任何问题?

    这32个原因可能是什么?

    除此32个外、所有器件均正常工作、且器件(1)与器件(2)保持连接。

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

    就我所能说的、发送32应该没有任何问题。

    嗅探器日志将帮助吨。 您是否看到外设端是否有任何信息?

    您是否尝试更改长度? 它甚至是您也在编写的有效特征句柄吗?

    如果不了解这里的实际情况、我们可以做的事情不多。

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

    你好,Rebel,

    外设正在工作、就像在 uuid (8A91)上提供一些数据作为指示、然后如果我在 uuid (8A81)上成功发送了这些数据、则它将在 uuid (8A91)上发送另一个数据作为指示。 因此、我非常确信我成功启用了指示、因为在请求时、我从(8A91)接收到了该数据、然后我将在(8A81)上发送数据并断开其 Get 连接。

    是的、我还尝试了不同的长度、并尝试了(GATT_WriteLongCharValue)函数。 但仍会断开连接。

    是的、非常确定我要写入的句柄是正确的。 因为如果我使用上述方法(第0个位置上的32个以外的方法)写入数据,那么当  成功写入 simpleBLECentralProcessGATTMsg()函数时,它会成功发送并保持连接,同时在 simpleBLECentralProcessGATTMPsg()函数上获得 ATT_WRITE_RSP 响应。

    yaa 无法获取监听日志、因为我将此 cc2541与 TI 调试器结合使用。

    但我仍然不知道具体原因是什么。 请在这方面提供帮助。

    谢谢你。

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

    如果没有其他信息、我可以做的事情不多。 如果可以、我建议您购买 BLE 监听器。

    除此之外、请尝试仅发送一个字节、如果需要、请调整 GATT 表。

    您能否通过简单的中心和简单的外皮来重现此问题? 并告诉我具体要更改什么以及在哪里?

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

    你好,Rebel,

    感谢您的善意帮助。

    我完成了这项工作。 我弄错了。

    器件(2) BLE 外设正在使用 BLP 协议。 因此、在这种情况下、我必须以小端模式发送数据。 因此、它解决了。

    现在我有另一个问题,要说明这个问题,我重复顺序....
    a.我从 uuid (8A92)接收指示数据、
    b.然后我对该数据进行监测、然后将其发送到 uuid (8A81)、
    c.然后、我必须在 uuid (8A81)上发送 UTC 时间、这也是我成功完成的、
    d.然后、我需要在同一 uuid (8A81)上发送0x22。
    e.之后、另一个指示数据必须出现在 uuid (8A91)上。

    我相信这种情况一定会发生、因为我们有 Android 应用程序及其数据、我们在 Android Studio 上看到它、而 Android 应用程序中正是这样。

    所以问题是我们没有得到 uuid (8A91)上的另一个指示数据。 然后我知道我们需要使用(ATT_HandleValueCfm)命令向器件(2) BLE 外设发送确认,然后只有器件(2)发送另一个指示,我们得到它在我们的一侧(器件(1))。因此,根据我在下面的文章中找到并参考它。

    www.deyisupport.com/.../20827.aspx

    因此、我执行了上述帖子中提到的操作、但第2个指示数据不是 uuid (8A91)上的数据。

    我有几个疑问...

    1.我们可以处理两个指示吗?
    2.我是否需要在步骤 A 和步骤 B 之间发送步骤 A 的确认信息?
    3.如果是,我需要使用哪一个句柄发送确认?

    提前感谢。