simplelink_cc2640r2_sdk_3_10_00_15 的blestack中的simple_peripheral和simple_central怎么设置连接参数更新,
把simple_peripheral中的
#define DEFAULT_ENABLE_UPDATE_REQUEST GAPROLE_LINK_PARAM_UPDATE_WAIT_REMOTE_PARAMS
改成 #define DEFAULT_ENABLE_UPDATE_REQUEST GAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS
在simple_periperal中没有定义了GAP_LINK_PARAM_UPDATE_EVENT和GAP_UPDATE_LINK_PARAM_REQ_EVENT这两个事件, 加了这两个事件页没有触发,
然后在simple_peripheral使用下面的函数更新, 设置更新不成功
GAPRole_SendUpdateParam(DEFAULT_DESIRED_MIN_CONN_INTERVAL,
DEFAULT_DESIRED_MAX_CONN_INTERVAL,
DEFAULT_DESIRED_SLAVE_LATENCY,
DEFAULT_DESIRED_CONN_TIMEOUT,
GAPROLE_TERMINATE_LINK);
在simple_central使用GAPCentralRole_UpdateLink(connHandle, 16, 36, 0, 300)返回SUCCESS, 但是simple_peripheral没有触发GAP_LINK_PARAM_UPDATE_EVENT和GAP_UPDATE_LINK_PARAM_REQ_EVENT这两个事件
在BLE4.2中 simple_peripheral和simple_central中怎么更新连接参数, 怎么获取连接参数
Alvin Chen:
有抓包文件?
参数需要符合下面的规定关系:
The connSupervisionTimeout shall be a multiple of 10 ms in the range of 100 ms to 32.0 s and it shall be larger than (1 + connSlaveLatency) * connInterval * 2.
Supervision Timeout > (1 +slaveLatency)* (connectionInterval)
Alvin Chen:
回复 Alvin Chen:
中文翻译版:
Timeout参数定义了连接超时的长度,connSupervisionTimeout= Timeout×10 ms,其取值范围在100 ms至32 s之间。不论是master还是slave,在其收到一个数据帧之后,如果等待了connSupervisionTimeout时长都没有下一个数据帧到来,则可以认为连接已经断开。在这里要强调的是,connSupervisionTimeout必须大于(1 + connSlaveLatency) × connInterval × 2,否则,slave设备即使是在Lantency状态,也会被误认为是连接超时,导致连接误断开。
WK C:
回复 Alvin Chen:
没有抓包文件
Alvin Chen:
回复 WK C:
这就很难帮你了。理论上改成 #define DEFAULT_ENABLE_UPDATE_REQUESTGAPROLE_LINK_PARAM_UPDATE_INITIATE_BOTH_PARAMS
会主动发送连接参数更新,只有抓包才能看一下发生了什么情况
WK C:
回复 Alvin Chen:
// Minimum connection interval (units of 1.25ms, 80=100ms) for automatic
// parameter update request
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL16// Maximum connection interval (units of 1.25ms, 800=1000ms) for automatic
// parameter update request
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL36// Slave latency to use for automatic parameter update request
#define DEFAULT_DESIRED_SLAVE_LATENCY0// Supervision timeout value (units of 10ms, 1000=10s) for automatic parameter
// update request
#define DEFAULT_DESIRED_CONN_TIMEOUT300connSupervisionTimeout 设置3s
connSlaveLatency 为0
connInterval 最大是45ms
这个条件应该满足啊
Alvin Chen:
回复 WK C:
看你的需求似乎在追求一个较小的连接间隔试一下以下参数是我之前测试过的:
// Minimum connection interval (units of 1.25ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 10// Maximum connection interval (units of 1.25ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 12// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY 0// Supervision timeout value (units of 10ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT 500
WK C:
回复 Alvin Chen:
有函数接口可以获取当前的连接参数吗
Alvin Chen:
回复 WK C:
/*** @briefGet information about a link**Copies relevant link info into pInfo.Uses the connection*handle to search the link database.** @paramconnectionHandle – controller link connection handle.* @parampInfo – address of link info item to copy information** @return@ref SUCCESS if connection found else FAILURE*/extern uint8 linkDB_GetInfo( uint16 connectionHandle, linkDBInfo_t * pInfo );
WK C:
回复 Alvin Chen:
手动更新参数后,linkDB_GetInfo() 获取到的连接间隔是一样的?获取到的值都是80, 但是设置的连接间隔最大是12, 这个为什么?
Alvin Chen:
回复 WK C:
你看一下返回的单位以及你更新成功了吗。此外连接不等于最大连接间隔,是由central根据连接参数决定的。