2015-06-08 49 views
0

我有我的办公桌上这里有两个方面:如何阅读的特性(例如,在WICED智能例如 “speed_test”)

A)博通EVAL模块,BCM920737TAG,与Broadcom的蓝牙LE芯片和小皮层M0 MCU。 我也有一个终端程序运行,显示模块的跟踪文本输出。 这是用broadcom的“WICED Smart IDE”编程的。有一些例子附带。 我目前使用speed_test示例。

B)Xamarin的iOS,从2013的VisualStudio(和MAC作为构建主机),使用他们的跨平台BluetoothLE库Monkey.Robotics

我想实现: 我的最终目标是发送数据的一大块(〜500 KB - 我知道这将是缓慢的)从iPhone(BLE客户端)自定义设备是(BLE服务器)。由于我不能只发送数据包之后的20字节数据包而没有来自接收机的某种ACK而不会破坏数据(正确?),并且Broadcom通过控制特性发送ACK指定数量的收到的数据包,我用这个例子。 由于特征描述符似乎在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时,将“启动测试”命令发送到Broadcom模块。然后它会通过数据特征发送一些20字节的数据包,然后发送“结束测试”命令。 速度测试的开始和结束在我的串行终端的跟踪输出中得到确认,即broadcom模块正确地获得了此信息。 这个工作(2)只要我在下一个之后盲目地发送一个数据包,用一个用于“启动测试”的命令参数来有效地禁用ACK。 只要我将它设置为确认每个数据包,然后尝试对ICHamatic的ReadAsync(),就会出现问题。 (2)好了,程序结束得太早了,也就是说,所有的数据可能都没有真正接收到 - 因此我认为我需要服务器端的ACK,而speed_test通过在控制中写回一个值特性。

虽然我无法读取控制特性。 Xamarin项目出现异常,因为该特性没有设置CanRead标志 - 尽管我在broadcom端添加了这个标志。 我试着通过ICharacteristic.ReadAsync()读取。

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

回答

0

Duh。我现在可以阅读这些特性,而不需要在软件中进一步改变任何内容。 原来iPhone仍在缓存有关Broadcom模块特性的信息,但并未意识到我添加了“可读”标志。 所以我这样做对iPhone: - 系统设置中禁用蓝牙 - 关闭iPhone copletely - 再次 启动了iPhone - 启用蓝牙再次 然后,它只是工作...

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