如果你使用notification发送数据的话,受MTU size限制,每个notification的长度为20字节。
请问可以修改这个值吗?比如一包数据传输125个字节,如何操作?谢谢!
你好,
MTU 是可以修改的。可改为需要的值
我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常,对应的蓝牙接受软件也得做出相应得修改才行吧?
app 应该不用。你用的什么 app,出现什么异常?
我们自己团队研发的一个APP ,IOS和安卓系统都有,我搜索了一下工程里MTU,把所有原本23的位置都换成了67,然后修改了如下函数,加了user_gattc_exc_mtu_cmd(connection_idx);
void default_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param){
if (app_env[connection_idx].conidx != GAP_INVALID_CONIDX){
if (user_default_hnd_conf.adv_scenario==DEF_ADV_WITH_TIMEOUT)app_easy_gap_advertise_with_timeout_stop( );default_advertise_stop_operation();
app_prf_enable (param->conhdl);user_gattc_exc_mtu_cmd(connection_idx);if ((user_default_hnd_conf.security_request_scenario==DEF_SEC_REQ_ON_CONNECT) && (BLE_APP_SEC)){app_easy_security_request(connection_idx);}}else{// No connection has been establish, restart advertisingEXECUTE_DEFAULT_OPERATION_VOID(default_operation_adv);}return;
}
发送出去的数据如果大于23字节,APP端是收不到的。发现发送缓存区的数据没有更新,还是指令交互的内容,不是这次更新的数据包
你好,我进行修改MTU的部分如下:
static const struct gapm_configuration user_gapm_conf={.role = GAP_PERIPHERAL_SLV,.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/// Device Appearance (0x0000 - Unknown appearance)//Fill in according tohttps://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml.appearance=0,.appearance_write_perm=GAPM_WRITE_DISABLE,.name_write_perm=GAPM_WRITE_DISABLE,/// Maximal MTU.max_mtu= 67,//23,/// Peripheral only: *****************************************************************/// Slave preferred Minimum of connection interval measured in ble double slots (1.25ms)/// use the macro MS_TO_DOUBLESLOTS to convert from milliseconds (ms) to double slots.con_intv_min = MS_TO_DOUBLESLOTS(10),
......
连接函数中修改:
void user_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param){default_app_on_connection(connection_idx, param);connection_status = true;user_gattc_exc_mtu_cmd(connection_idx);app_easy_gap_param_update_start(connection_idx);// notitysend_type = 0;notify_timer = 0;
用Hollong BLE抓包的话,如附件情况:
但是空中ATT数据没有更新,还是上一条数据,不是我发的64字节数据,我在发64字节数据之前,上报了一个电量信息,是10字节。修改MTU之后,收到的ATT一直是10字节电量信息,使用的是notification
请提供更多信息以便分析:
附上实现 Notify 的代码
用于 notify 的特征的 value 长度是多少?
提供 notify 的抓包情况
你好,
MTU 是可以修改的。可改为需要的值
我修改了,上位机对应蓝牙软件也收到返回值。但是数据发送异常,对应的蓝牙接受软件也得做出相应得修改才行吧?
你好,
app 应该不用。你用的什么 app,出现什么异常?
我们自己团队研发的一个APP ,IOS和安卓系统都有,我搜索了一下工程里MTU,把所有原本23的位置都换成了67,然后修改了如下函数,加了user_gattc_exc_mtu_cmd(connection_idx);
void default_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
if (app_env[connection_idx].conidx != GAP_INVALID_CONIDX)
{
if (user_default_hnd_conf.adv_scenario==DEF_ADV_WITH_TIMEOUT)
app_easy_gap_advertise_with_timeout_stop( );
default_advertise_stop_operation();
app_prf_enable (param->conhdl);
user_gattc_exc_mtu_cmd(connection_idx);
if ((user_default_hnd_conf.security_request_scenario==DEF_SEC_REQ_ON_CONNECT) && (BLE_APP_SEC))
{
app_easy_security_request(connection_idx);
}
}
else
{
// No connection has been establish, restart advertising
EXECUTE_DEFAULT_OPERATION_VOID(default_operation_adv);
}
return;
}
发送出去的数据如果大于23字节,APP端是收不到的。发现发送缓存区的数据没有更新,还是指令交互的内容,不是这次更新的数据包
你好,我进行修改MTU的部分如下:
static const struct gapm_configuration user_gapm_conf={
.role = GAP_PERIPHERAL_SLV,
.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/// Device Appearance (0x0000 - Unknown appearance)
//Fill in according tohttps://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
.appearance=0,
.appearance_write_perm=GAPM_WRITE_DISABLE,
.name_write_perm=GAPM_WRITE_DISABLE,
/// Maximal MTU
.max_mtu= 67,//23,
/// Peripheral only: *****************************************************************
/// Slave preferred Minimum of connection interval measured in ble double slots (1.25ms)
/// use the macro MS_TO_DOUBLESLOTS to convert from milliseconds (ms) to double slots
.con_intv_min = MS_TO_DOUBLESLOTS(10),
......
连接函数中修改:
void user_app_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)
{
default_app_on_connection(connection_idx, param);
connection_status = true;
user_gattc_exc_mtu_cmd(connection_idx);
app_easy_gap_param_update_start(connection_idx);
// notity
send_type = 0;
notify_timer = 0;
}
用Hollong BLE抓包的话,如附件情况:
但是空中ATT数据没有更新,还是上一条数据,不是我发的64字节数据,我在发64字节数据之前,上报了一个电量信息,是10字节。修改MTU之后,收到的ATT一直是10字节电量信息,使用的是notification
你好,
请提供更多信息以便分析:
附上实现 Notify 的代码
用于 notify 的特征的 value 长度是多少?
提供 notify 的抓包情况