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.

[参考译文] LAUNCHXL-CC2650:ProjectZero 如何使对等器件接收发送的所有特征值

Guru**** 2553450 points
Other Parts Discussed in Thread: LAUNCHXL-CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/573738/launchxl-cc2650-projectzero-how-to-make-peer-receive-all-characteristic-values-sent

器件型号:LAUNCHXL-CC2650

我正在尝试在'Case GAPROLE_CONNECTED:'(在 user_processGapStateChangeEvt()中)的循环中使用 DataService_SetParameter()。

每次迭代通过我的循环时、我会发送特征中的不同数据。

在我的 iOS 应用程序(对等设备)中、我仅接收我在循环中发送的最后一个值。

如果我再次使用 DataService_SetParameter(),而无需等待数据被发送的确认,那么 BLE 不会发送出之前 DataService_SetParameter()的数据。

是否有办法在循环中阻止 DataService_SetParameter(),以便每次使用它时,我都可以确保数据被发送给对等方,或者更好的是,对等方收到了数据?

我希望这对你来说不会像对我一样令人困惑:)

谢谢

戴尔

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

    因此、我现在尝试调节同一特征的不同值的发送、方法是让对等器件在接收到更新的特征值时更改最后一个位并将数据发回。  不过、这必须是一种更好的方法、希望使用 ProjectZero 作为基础。

    ProjectZero DATA_SERVICE 必须接受对等项的写回数据,因为存在 USER_DataService_ValueChangeHandler()。  

    在该处理程序中、我应该能够仅等待数据包含0xFE 的最后一个字节、当我拥有该字节时、我就会为该数据特征发送下一个数据。 听起来很简单。

    无论如何、在我的 IOS 应用程序中、我会看到 Xcode 核心蓝牙项目的 didDiscoveristicsForService 中的第一个数据特征值、然后再次看到 didUpdateValueForCharacteristic 中的第一个数据特征值。

    因此、我将第一个数据存储在 iOS 应用程序中、然后在 didUpdateValueForCharacteristic 的末尾、执行以下操作:

    [newcharacteristic.value GetBytes:&CV length:256];

    CV[255]=0xFE;

    NSData * newvalBytes =[NSData dataWithBytes:&CV length:256];

    [self.sensorTag writeValue:newvalBytes forCharacteristic:newCharacteristic type:CBCharacteristic WriteWithResponse];  

    这将触发从 iOS 应用发送数据、并且在执行期间没有错误、因此我认为我将数据发送回 ProjectZero。

    但是, USER_DataService_ValueChangeHandler()函数不会被触发,有什么原因???????????????

    我对 LAUNCHXL-CC2650上的 LED 控制使用了相同的回写操作、并且其更改处理程序工作正常、因此我知道我的进度是正确的。

    戴尔

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

    对于您的原始问题、发送值的速度可能会很快、以至于您的应用程序只收集最后一个值。 解决此问题的另一个选择是使用另一个特性通知 ProjectZero 设备下一个数据块已准备好供应用接收。

    对于第二个问题、我建议打印到显示器以确定是否已达到 USER_DataService_ValueChangeHandler 函数。

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

    我有一个数据包监听器来帮助回答其中的一些问题、但我确实更改了 ProjectZero 代码、以便在重复时钟完成后发送特征中的不同数据。 即使我每隔3秒发送一次数据、我的 IOS 应用程序也只在连接时触发了 DiscoverCharacteristicsForService 函数、并且它具有的特性值是一些缓存值、而不是 ProjectZero 发送的当前值。 然后我发现,如果我将 readValueForCharacteristicistic 放入 didDiscoverCharacteristicsForService 中,它最初仍然是缓存的数据,但突然之间,dideValueForCharacteristic 将每隔一秒左右开始触发一次(不确定为什么数据只发生更改,并且每隔3秒从 ProjectUpdateZero 发送一次)。

    我在 ProjectZero 端没有显示、并且我正在使用修改后的 ProjectZero 对外部闪存进行读取和写入、因此我必须删除 UART 日志记录才能获得内存。 我必须使用断点等调试 ProjectZero 代码,方法是使用过时的:(,这样我就能够确定未达到 USER_DataService_ValueChangeHandler。

    感谢大家提出的想法、我仍在进行这方面的工作。
    戴尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Nathan、

    原来的问题仍然困扰着我,我假设无论我在'Case GAPROLE_CONNECTED:'(在 USER_processGapChangeStateEvt()中)发出循环的速度有多快, 在 BLE 上发送的实际数据将放入队列中、并尽快有序地发送到我的 IOS 应用。

    在上面的'Case GAPROLE_Connected:'中,当我开始使用信标通过 DataService_SetParameter()发送数据特性时,我会在何处画线? 该函数和大小写是否已经在使用 ICall 信号量?

    然后,在 IOS 应用程序中,数据更改将在一系列 DidUpdateValueForCharacteristic 中触发,所有更改都很好。 我的假设无效吗?

    遗憾的是、在 IOS 应用中、didUpdateValueForCharacteristic 不会触发、因此我的数据包监听器可能会帮助调试其中的问题。

    戴尔

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

    您的假设是合理的。 我会使用监听器来查看发送的数据包是否与您的预期不同、或者问题是 IOS 应用是如何处理的。

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

    我正在尝试弄清楚如何确保所有特征都已设置为"是"、我为此创建了一个新主题:

    戴尔