我有我的办公桌上这里有两个方面:如何阅读的特性(例如,在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()读取。
我在做什么错? 我会很乐意在必要时提供更多细节。