如何阅读特征(例如,在WICED智能示例" speed_test")

时间:2015-06-08 17:45:37

标签: xamarin bluetooth-lowenergy broadcom

我的桌子上有两面:

A)broadcom评估模块 BCM920737TAG ,带有broadcom蓝牙LE芯片和小型皮质M0 MCU。 我还有一个运行的终端程序,显示模块的跟踪文本输出。 这是使用broadcom" WICED Smart IDE "编程的。有一些例子随附。 我目前正在使用speed_test示例。

B) Xamarin iOS ,来自VisualStudio 2013(以及Mac作为构建主机),使用他们的跨平台BluetoothLE库 Monkey.Robotics

我想要实现的目标: 我最终的目标是从 iPhone(BLE客户端)自定义设备(BLE服务器)<发送大量数据(~500 KB - 我知道它会很慢)< / em>的。因为我不能在没有来自接收器的某种ACK的情况下发送20字节数据包而没有破坏数据(正确?),并且Broadcom speed_test 示例提供通过在指定数量的接收数据包之后控制特性,我使用那个例子。 由于在iOS(1)上的Monkey.Robotics中,特征描述符目前似乎已被破坏,因此我在broadcom speed_test中注释掉了部分,该部分检查配置为ACK。

(1)发现的特征中的属性保持为空;在Xamarin论坛有一个相应的帖子,没有修复

    else if (handle == HANDLE_SPEED_TEST_CHARACTERISTIC_DATA_VALUE)
{
    if (++speed_test.received_unacked == speed_test.num_to_receive_before_ack)
    {
        // TEST: do ACK notify w/o this config // if (speed_test.control_client_configuration & CCC_NOTIFICATION)
        {
            UINT8 result[1] = {0x01};
            bleprofile_sendNotification(HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL_VALUE, result, 1);
        }
        speed_test.received_unacked = 0;

- 我还注意到在speed_test中控制特性没有“可读性”。旗帜,所以我添加了它们。

    //CHARACTERISTIC_UUID128_WRITABLE
CHARACTERISTIC_UUID128(HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL, HANDLE_SPEED_TEST_CHARACTERISTIC_CONTROL_VALUE,
        UUID_SPEED_TEST_CHARACTERISTIC_CONTROL_POINT,
    LEGATTDB_CHAR_PROP_NOTIFY | LEGATTDB_CHAR_PROP_WRITE | LEGATTDB_CHAR_PROP_READ,
    LEGATTDB_PERM_WRITE_REQ | LEGATTDB_PERM_READABLE, 2),

-

我修改了Monkey.Robotics BLEExplorer示例。我添加了自己的页面,当选择了已发现的设备时,它会显示,并发现其服务和特征,当他们有正确的UUID时,发送&#34;开始测试&#34;命令到Broadcom模块。然后它将通过数据特征发送一些20字节的数据包,然后发送&#34;结束测试&#34;命令。 speed_test的开始和结束在跟踪输出我的串行终端中得到确认,即broadcom模块正确地得到了这一点。 只要我在下一个之后盲目地发送一个数据包,使用命令参数&#34;开始测试&#34;这就可以工作(2)。这有效地禁用了ACK。 一旦我将此设置为确认每个数据包,然后尝试在ICHaracteristic上的ReadAsync(),问题就开始了。

(2)好吧,程序太早结束,即所有数据可能都没有真正接收 - 因此我认为我需要来自服务器端的ACK,speed_test通过在控制特性中写回一个值来实现

但是,我无法读回控制特性。抛出Xamarin项目中的异常,因为该特性没有设置CanRead标志 - 尽管我在broadcom端添加了这个。 我尝试通过ICharacteristic.ReadAsync()进行阅读。

我做错了什么? 我很乐意在必要时提供更多细节。

1 个答案:

答案 0 :(得分:0)

咄。我现在可以阅读这些特性,而无需在软件中进一步改变。 事实证明,iPhone仍在缓存有关broadcom模块特征的信息,并且不知道我添加的“可读”标志。 所以我在iPhone上做了这个:   - 在系统设置中禁用蓝牙   - 完全关闭iPhone   - 再次启动iPhone   - 再次启用蓝牙 然后就行了......

这里建议类似的事情,但只做其中一个步骤对我没有用: https://bluegiga.zendesk.com/entries/22662197--TROUBLESHOOTING-GATT-database-service-and-characteristic-caching-on-iOS-and-Android