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-Q1:更新通知数据

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1633438/cc2340r5-q1-updating-notification-data

器件型号: CC2340R5-Q1

TI 团队大家好、

我们使用的是 SDK 9.14。

我们要做的是、每个连接间隔一次、使用 GATTServo App_Process、CharCfg() 更新通知数据。

更具体地说、在设置之前、我们要检查通知是否已配置、然后相应地设置或更新通知。 如果有推荐的方法来实现这一点、请告知我们。

目前,当我们调用 GATTServo App_Process CharCfg() 两次时,下一个连接事件会发送两个通知。 我们只希望发送包含最终配置数据的单个通知。

感谢您的帮助。

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

    嗨、Hiroki-san、

    由衷地为此处的晚通知而道歉。 我们最后遇到了一个问题、导致缺少一些新线程。 这个问题是否仍然存在? 如果是、我将确保立即分配。  

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

    您好 Evan、

    感谢您的答复。 此问题尚未解决、如果您能继续分配、我将不胜感激。

    谢谢你。

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

    嗨、Hiroki-san、

    对于发送通知、App_Process 正如我们在示例项目中所处、GATTServ.CharCfg 是正确的函数。 UG 中介绍了工作流程:

    通用属性配置文件 (GATT)—SimpleLinkTm 低功耗 F3 SDK BLE5-Stack 用户指南 9.14.01 文档

    函数反馈状态成功意味着发送要求已成功进入 BLE 栈的队列、它将对其进行处理。 但堆栈不会将以前的通知数据与当前的通知数据进行比较。 应用层需要处理数据更改。  

    此致、

    Barbara

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

    尊敬的 Barbara:

    感谢您的答复。

    我们还同意、使用 GATTServo App_Process CharCfg 是正确的方法。

    您能否解释一下应用层应如何处理数据更改、正如您提到的“应用层需要处理数据更改“?  

    感谢你的帮助。

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

    嗨、Hiroki-san、

    我的想法是应用层保存成功发送的先前数据、并 App_Process 在发送新数据时监控 GATTServo CharCfg 的反馈值。 如果反馈成功、则使用刚刚发送的数据更新先前数据。 因此,当应用层要发送“新数据“时,它可以比较“旧数据“与当前数据,看看它是否相同。  

    此致、

    Barbara

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

    尊敬的 Barbara:

    非常感谢您的答复。

    是否可以提供更具体的指导、例如代码片段?

    由于我们的预期行为可能尚未完全传达、我们已在下图中说明了所需的操作。

    提前感谢您的帮助。

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

    你好 hrkunied、

    似乎这里按顺序发送 0x00、0x01、0x02、0x03。 然后、如果只想发送 0x03、则只将 myCharValue 设置为 0x03 就可以满足要求。 类似:

    //将该值设置为 0x03 一次
    myCharValue = 0x03;

    //通知:只需在计时器上或在需要时调用它
    GATTServo App_Process CharCfg (myCharCfgTable、&myCharValue、false、
    myAttrTable、numAttrs、taskId、myReadAttrCB);

    此致、

    Barbara

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

    感谢您发送编修。

    我知道、通过使用 GATTServ.CharCf App_Process () 并仅设置 0x03、我只能发送 0x03。

    我想问的是、如何在单个连接间隔内、如果我决定更改通过通知发送的值、我只能发送我设置的最后一个值而不发送更改前的值(即,如果我已使用 GATTServo App_Process、CharCf () 将值设置为 0x00、但我要将更改发送到 0x03 的值,如何相应地更改?)。

    谢谢你。

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

    嗨、 Hiroki-san、

    应用层可以调用 GATTServo App_Process CharCf()、但何时发出通知取决于此时的堆栈和连接情况。 应用程序可以 先用 0x00 调用 GATTServo App_Process.CharCf ()、然后用 0x03 调用。 如果在短时间内一个接一个地调用、假设连接的连接间隔为 50ms、则发出的通知很可能会进入同一个连接事件。  但是、如果存在重新传输或其他弱连接条件、或者 en-queue 操作错过了同一连接事件、则它无法授权更改必须在一个连接间隔内发生。 通知自然不需要来自对等器件的 ACK。   

    此致、

    Barbara

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

    感谢您发送编修。

    我明白您的意思;不过、这与我想实现的目标有所不同。

    我要做的是,在一个连接间隔内,一旦通过 GATTServ,CharCf() 设置了值 App_Process ,就取消该值 App_Process 的通知,然后只发送最新值(通过 GATTServ,CharCf() 再次设置)作为通知。

    感谢您的帮助。

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

    嗨、Hiroki-san、

    每次调用 GATTServv App_Process CharCf() 时、都会通过无线方式发送 1 个通知包。 我不明白“取消“是什么意思。 停止 使用旧值调用 GATTServo App_Process CharCf、并 使用新值调用 GATTServo App_Process CharCf 将实现该功能。

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

    您好 Barbara。

    我举一个例子。

    有一个系统通过通知发送传感器值更新。 我将讨论在上一个连接事件和下一个连接事件之间传感器值更新两次的情况。 另外、假设每当更新传感器值时、我们都会调用“GATTServo App_Process CharCf g“。 在这种情况下、由于执行了两次“GATTServo App_Process CharCf g“、我认为下一个连接事件中将发送两个通知。

    因此、我要做的是在下一个连接事件中通过通知仅发送一次、并且只发送最新信息。

    感谢您的帮助。