嗨,对话,
1、 我看得见是的。是的属性协议的默认最大传输单元(MTU)为蓝牙低能量链路上的23个八位字节。如果一个设备想要发送更大的数据包,它必须协商一个更大的MTU大小。只有客户端才能启动此请求。但是,考虑到许多设备同时具有客户端和服务器功能,这应该不是一个关键问题。客户机请求包括客户机接收器的MTU大小;服务器请求包括服务器接收器的MTU大小。这两个值不能是相同的值。链路使用的MTU大小可以通过取客户端Rx MTU和服务器Rx MTU的最小值来计算。
2、
@文件应用程序\u sps\u proj.c
@简要介绍SPS项目源代码。
/**
****************************************************************************************
*@brief发送一个exchange MTU命令
*
*@返回无效
****************************************************************************************
*/
void gattc\u exc\u mtu\u命令(void)
{
结构gattc\u exc\u mtu\u cmd*cmd=KE\u MSG\u ALLOC(gattc\u exc\u mtu\u cmd,
生成ID(任务、应用程序)_环境conidx),任务应用程序,
gattc\u exc\u mtu\u cmd);
命令->请求类型=GATTC\u MTU\u EXCH;
发送消息(cmd);
}
#定义APP\u CFG\u MAX\u MTU 160
void app\u configuration\u func(ke\u task\u id\u t const task\u id,struct gapm\u set\u dev\u config\u cmd*cmd)
{
...
//定义的最大传输单位
cmd->max\u mtu=APP\u CFG\u max\u mtu;
}
3、 如何在sdk5中实现相同的功能
我懂了。
1步骤
[添加]
无效gattc\u exc\u mtu\u cmd(uint8\u t connection\u idx)
{
结构gattc\u exc\u mtu\u cmd*cmd=KE\u MSG\u ALLOC(gattc\u exc\u mtu\u cmd,
KE_BUILD_ID(TASK_GATTC,connection_idx),TASK_APP,
gattc\u exc\u mtu\u cmd);
命令->请求类型=GATTC\u MTU\u EXCH;
发送消息(cmd);
}
无效用户连接(uint8\u t connection\u idx,struct gapc\u connection\u req\u ind const*param)
{
默认\u app \u on \u connection(connection \u idx,param);
gattc\u exc\u mtu\u cmd(连接\u idx);
}
2步骤
@文件用户\ u config.h
静态const struct gapm\u configuration user\u gapm\u conf={
.role=GAP\u PERIPHERAL\u SLV,
.irk={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
///设备外观(0x0000-未知外观)
//填写依据https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi。。。
.外观=0,
.appearance\u write\u perm=GAPM\u write\u DISABLE,
.name\u write\u perm=GAPM\u write\u DISABLE,
///最大MTU
.max\u mtu=160,修改
///仅限外围设备:*****************************************************************
///从机首选的最小连接间隔,以双槽测量(1.25ms)
///使用宏MS_TO \u DOUBLESLOTS将毫秒(MS)转换为双插槽
.con_intv_min=MS_到_双插槽(10),
///从机首选连接间隔的最大值,在ble双插槽中测量(1.25ms)
///使用宏MS_TO \u DOUBLESLOTS将毫秒(MS)转换为双插槽
.con_intv_max=MS_到_双插槽(20),
///从属首选连接延迟。它是在跳过的连接事件中度量的
.con\u延迟=0,
///从机首选链路监控超时(以计时器单位测量)(10 ms)
///使用宏MS\ TO\ TIMERUNITS将毫秒(MS)转换为计时器单位
.superv\u to=毫秒\u to \u计时器(1000),
///隐私设置位字段(0b1=启用,0b0=禁用)
///-[位0]:隐私支持
///-[位1]:多键支持(仅限外围设备);如果启用,则显示隐私标志
///只读。
///-[位2]:重连地址可见。
.flags=0
};
嗨,天秤座13179,
您仍然可以按原样使用gattc\u exc\u mtu\cmd函数,并将user\u gapm\u conf结构中的.max\u mtu成员更改为要在user\u config.h文件中使用的mtu大小。打电话给gattc\u exc\u mtu\u cmd()在用户应用程序连接中运行,您应该准备好了。
谢谢你的对话
hi MT\u对话框
感谢您的回复。我尝试在user\u gapm\u conf结构中修改.max\u mtu=160,并在user\u app\u connection中调用gattc\u exc\u mtu\u cmd()函数,您应该准备好了。
我发现包的最大大小是128字节(MTU),如果超过128,发送几个包。我用一个手机应用程序DSP。为什么不是预定的最大值?
天秤座
嗨,天秤座13179,
对不起,我不知道我是否理解你的问题,你不能设置超过128字节的MTU?
谢谢你的对话