嗨,
在我的应用程序中,我已经定义了一个自定义档案,有一个客户服务这项服务有两个自定义特征(1,2)。第二个特征用于向客户端发送字节数组通知。我跟随了示例128示例(BTW这样的好文件)写下我的应用程序。我已经配置了我的计时器5秒每次在计时器中断处理程序到期时,我都会致电ke_msg_send()发送20个字节的数组。同时,在我的客户端应用程序(BLE扫描仪移动应用程序)上,当我启用特征2的通知时,我就可以看到了20字节不断到达5秒的间隔。
接下来,我发送的而不是20个字节64字节每次我的计时器到期。但是我注意到我的客户端应用程序(BLE扫描仪移动应用程序),当我启用特性2的通知时,我看到应用程序上只显示20个字节。但是,如果我明确读取特征2,我会看到所有64个字节。
- 这是对btle的限制。通知只能发送20个字节吗?
- 或者是我正在使用的客户端应用的限制吗?
- 我申请所做的更改如下,但我不知道还需要做些什么。
到目前为止我努力实现这一目标如下:
第1步:将ATT_MTU大小增加到67
在app_template_proj.c文件中,在内部app_configuration_func(...)
功能,我增加了:
......
......
//最大传输单元大小
cmd-> max_mtu = 67;// 23.
......
......
第2步:增加Total_size.
参数attmdb_add_service()
功能。
在template_task.c中,内部template_create_db_req_handler()
功能。
......
......
nb_att_16 = 4;// 4 UUID16属性声明类型
nb_att_32 = 0;// 0 UUID32属性声明类型
nb_att_128 = 2;// 2 uuid128属性声明类型
status = attmdb_add_service(&(reds_env.reds_shdl),
task_xxxx,
nb_att_16,
nb_att_32,
nb_att_128,
121 //请参阅下面的计算);
// GATT数据库的总数据部分= 58数据字节:
// 16主要服务声明
// + 19特征宣言1
// + 1个价值声明的特征1
// + 19特征声明2
// 64个价值声明特征2
// 2客户端配置声明特性2
// = 121数据字节总数
......
......
嗨Vikramtheone,
我想这篇文章补充了前一个......你可以通过手机阅读64个字节的数据库,但无法启用通知并接收所有64个字节。通知和指示仅支持外设的当前MTU,即使您在广告过程中更改MTU,您的客户必须接受它,以便在通知数据包中传输所有有效载荷。在app_configuration_func()中设置mtu后,您必须调用gatt_exc_mtu_cmd以便告诉Cenral遵循您的MTU。如果它会符合外围设备建议,它取决于中心。您可以在app_sps_device_project.c文件中找到如何在DSP应用程序中发出GattC_EXC_MTU_CMD。
谢谢mt_dialog.
哇!那工作。
我实施了,而是使用过
gattc_exc_mtu_cmd()
来自GSPS应用程序的功能(在第4.3节中还可以阅读更多条件:配置,在RW-BLE-GATT-IS.PDF中,并调用该功能app_connection_func()
呼叫后功能app_template_enable()
就像在GSPS应用程序中的那样。和Android手机应用程序(BLE扫描仪)已接受gatt_exc_mtu_req.
设备发送的请求,一旦我启用了特征2的通知,我开始看到64字节。结论:可以发送和接收大于20字节的通知。
感谢您的帮助。
这似乎很棒。感谢分享。