@@ -116,6 +116,8 @@ BOOLEAN L2CA_UpdateBleConnParams (BD_ADDR rem_bda, UINT16 min_int, UINT16 max_in
116
116
{
117
117
tL2C_LCB * p_lcb ;
118
118
tACL_CONN * p_acl_cb = btm_bda_to_acl (rem_bda , BT_TRANSPORT_LE );
119
+ UINT8 status = HCI_SUCCESS ;
120
+ BOOLEAN need_cb = false;
119
121
120
122
/* See if we have a link control block for the remote device */
121
123
p_lcb = l2cu_find_lcb_by_bd_addr (rem_bda , BT_TRANSPORT_LE );
@@ -135,19 +137,29 @@ BOOLEAN L2CA_UpdateBleConnParams (BD_ADDR rem_bda, UINT16 min_int, UINT16 max_in
135
137
return (FALSE);
136
138
}
137
139
140
+ /* Check whether the request conn params is already set */
141
+ if ((max_int == p_lcb -> current_used_conn_interval ) && (latency == p_lcb -> current_used_conn_latency ) &&
142
+ (timeout == p_lcb -> current_used_conn_timeout )) {
143
+ status = HCI_SUCCESS ;
144
+ need_cb = true;
145
+ L2CAP_TRACE_WARNING ("%s connection parameter already set" , __func__ );
146
+ }
147
+
138
148
if (p_lcb -> conn_update_mask & L2C_BLE_UPDATE_PARAM_FULL ){
139
- UINT8 status = HCI_ERR_ILLEGAL_COMMAND ;
149
+ status = HCI_ERR_ILLEGAL_COMMAND ;
150
+ need_cb = true;
140
151
L2CAP_TRACE_ERROR ("There are two connection parameter requests that are being updated, please try later " );
141
- if (conn_param_update_cb .update_conn_param_cb != NULL ) {
142
- tBTM_LE_UPDATE_CONN_PRAMS update_param ;
143
- update_param .max_conn_int = max_int ;
144
- update_param .min_conn_int = min_int ;
145
- update_param .conn_int = p_lcb -> current_used_conn_interval ;
146
- update_param .slave_latency = p_lcb -> current_used_conn_latency ;
147
- update_param .supervision_tout = p_lcb -> current_used_conn_timeout ;
148
- (conn_param_update_cb .update_conn_param_cb )(status , p_lcb -> remote_bd_addr , & update_param );
149
- }
150
- return (FALSE);
152
+ }
153
+
154
+ if ((need_cb == TRUE) && (conn_param_update_cb .update_conn_param_cb != NULL )) {
155
+ tBTM_LE_UPDATE_CONN_PRAMS update_param ;
156
+ update_param .max_conn_int = max_int ;
157
+ update_param .min_conn_int = min_int ;
158
+ update_param .conn_int = p_lcb -> current_used_conn_interval ;
159
+ update_param .slave_latency = p_lcb -> current_used_conn_latency ;
160
+ update_param .supervision_tout = p_lcb -> current_used_conn_timeout ;
161
+ (conn_param_update_cb .update_conn_param_cb )(status , p_lcb -> remote_bd_addr , & update_param );
162
+ return (status == HCI_SUCCESS );
151
163
}
152
164
153
165
p_lcb -> waiting_update_conn_min_interval = min_int ;
0 commit comments