如果你使用通知发送数据的话,受MTU尺寸限制,每个通知的长度为20字节。
请问可以修改这个值吗?比如一包数据传输125个字节,如何操作?谢谢!
你好,
MTU是可以修改的。可改为需要的值
我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常,对应的蓝牙接受软件也得做出相应得修改才行吧?
应用程序应该不用。你用的什么 应用程序,出现什么异常?
我们自己团队研发的一个应用程序,IOS和安卓系统都有,我搜索了一下工程里MTU把所有原本23的位置都换成了67,然后修改了如下函数,加了用户\u gattc\u exc\u mtu\u cmd(连接\u idx);
连接上的默认应用无效(uint8连接idx,结构gapc连接请求ind const*参数){
if(app_env[connection_idx].conidx!=GAP_INVALID_conidx){
if(user_default_hnd_conf.adv_scenario==DEF_adv_WITH_TIMEOUT)应用程序\u轻松\u间隙\u广告\u超时\u停止();默认的_播发_停止_操作();
应用程序prf启用(参数->控制HDL);用户\u gattc\u exc\u mtu\u cmd(连接\u idx);if((用户默认配置安全请求场景==DEF_SEC_REQ_ON_CONNECT)和&(BLE_APP_SEC)){应用程序轻松安全请求(连接idx);}}其他的{//尚未建立连接,请重新启动广告执行\u默认\u操作\u无效(默认\u操作\u adv);}返回;
}
发送出去的数据如果大于23字节,应用程序端是收不到的。发现发送缓存区的数据没有更新,还是指令交互的内容,不是这次更新的数据包
你好,我进行修改MTU的部分如下:
静态常量结构gapm\u配置用户\u gapm\u配置={.role=GAP\u peripal\u SLV,.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},///设备外观(0x0000-未知外观)//按https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml.外观=0,.appearance\u write\u perm=GAPM\u write\u DISABLE,.name\u write\u perm=GAPM\u write\u DISABLE,///最大MTU.max_mtu=67,//23,///仅限外围设备:*****************************************************************///从机首选最小连接间隔,在可编程双插槽中测量(1.25ms)///使用宏MS_TO_DOUBLESLOTS将毫秒(MS)转换为双插槽.con_intv_min=MS_至_双插槽(10),
......
连接函数中修改:
连接上的无效用户应用程序(uint8连接idx,结构gapc连接请求ind const*参数){连接上的默认应用程序(连接idx,参数);连接状态=真;用户\u gattc\u exc\u mtu\u cmd(连接\u idx);应用程序\u轻松\u间隙\u参数\u更新\u启动(连接\u idx);//诺蒂发送类型=0;通知计时器=0;
用Hollong BLE抓包的话,如附件情况:
但是空中ATT数据没有更新,还是上一条数据,不是我发的64字节数据,我在发64字节数据之前,上报了一个电量信息,是10字节。修改MTU之后,收到的ATT一直是10字节电量信息,使用的是通知
请提供更多信息以便分析:
附上实现 通知的代码
用于 通知的特征的 价值长度是多少?
提供 通知的抓包情况
你好,
MTU是可以修改的。可改为需要的值
我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常,对应的蓝牙接受软件也得做出相应得修改才行吧?
你好,
应用程序应该不用。你用的什么 应用程序,出现什么异常?
我们自己团队研发的一个应用程序,IOS和安卓系统都有,我搜索了一下工程里MTU把所有原本23的位置都换成了67,然后修改了如下函数,加了用户\u gattc\u exc\u mtu\u cmd(连接\u idx);
连接上的默认应用无效(uint8连接idx,结构gapc连接请求ind const*参数)
{
if(app_env[connection_idx].conidx!=GAP_INVALID_conidx)
{
if(user_default_hnd_conf.adv_scenario==DEF_adv_WITH_TIMEOUT)
应用程序\u轻松\u间隙\u广告\u超时\u停止();
默认的_播发_停止_操作();
应用程序prf启用(参数->控制HDL);
用户\u gattc\u exc\u mtu\u cmd(连接\u idx);
if((用户默认配置安全请求场景==DEF_SEC_REQ_ON_CONNECT)和&(BLE_APP_SEC))
{
应用程序轻松安全请求(连接idx);
}
}
其他的
{
//尚未建立连接,请重新启动广告
执行\u默认\u操作\u无效(默认\u操作\u adv);
}
返回;
}
发送出去的数据如果大于23字节,应用程序端是收不到的。发现发送缓存区的数据没有更新,还是指令交互的内容,不是这次更新的数据包
你好,我进行修改MTU的部分如下:
静态常量结构gapm\u配置用户\u gapm\u配置={
.role=GAP\u peripal\u SLV,
.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
///设备外观(0x0000-未知外观)
//按https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
.外观=0,
.appearance\u write\u perm=GAPM\u write\u DISABLE,
.name\u write\u perm=GAPM\u write\u DISABLE,
///最大MTU
.max_mtu=67,//23,
///仅限外围设备:*****************************************************************
///从机首选最小连接间隔,在可编程双插槽中测量(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(MS)转换为双插槽
.con_intv_min=MS_至_双插槽(10),
......
连接函数中修改:
连接上的无效用户应用程序(uint8连接idx,结构gapc连接请求ind const*参数)
{
连接上的默认应用程序(连接idx,参数);
连接状态=真;
用户\u gattc\u exc\u mtu\u cmd(连接\u idx);
应用程序\u轻松\u间隙\u参数\u更新\u启动(连接\u idx);
//诺蒂
发送类型=0;
通知计时器=0;
}
用Hollong BLE抓包的话,如附件情况:
但是空中ATT数据没有更新,还是上一条数据,不是我发的64字节数据,我在发64字节数据之前,上报了一个电量信息,是10字节。修改MTU之后,收到的ATT一直是10字节电量信息,使用的是通知
你好,
请提供更多信息以便分析:
附上实现 通知的代码
用于 通知的特征的 价值长度是多少?
提供 通知的抓包情况