Skip to content

Commit 9a0da08

Browse files
committed
Central handle BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST
1 parent 294e056 commit 9a0da08

File tree

5 files changed

+22
-45
lines changed

5 files changed

+22
-45
lines changed

libraries/Bluefruit52Lib/examples/Central/central_custom_hrm/central_custom_hrm.ino

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ void connect_callback(uint16_t conn_handle)
118118

119119
// Once HRM service is found, we continue to discover its characteristic
120120
Serial.println("Found it");
121-
122121

123122
Serial.print("Discovering Measurement characteristic ... ");
124123
if ( !hrmc.discover() )

libraries/Bluefruit52Lib/src/BLECentral.cpp

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
*/
4343
BLECentral::BLECentral(void)
4444
{
45-
_ppcp_min_conn = BLE_GAP_CONN_MIN_INTERVAL_DFLT;
46-
_ppcp_max_conn = BLE_GAP_CONN_MAX_INTERVAL_DFLT;
45+
_conn_param.min_conn_interval = 30; //BLE_GAP_CONN_MIN_INTERVAL_DFLT;
46+
_conn_param.max_conn_interval = 30; //BLE_GAP_CONN_MAX_INTERVAL_DFLT;
47+
_conn_param.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY;
48+
_conn_param.conn_sup_timeout = BLE_GAP_CONN_SUPERVISION_TIMEOUT_MS/10;
4749

4850
_connect_cb = NULL;
4951
_disconnect_cb = NULL;
@@ -60,8 +62,8 @@ void BLECentral::begin(void)
6062
*------------------------------------------------------------------*/
6163
bool BLECentral::setConnInterval(uint16_t min, uint16_t max)
6264
{
63-
_ppcp_min_conn = min;
64-
_ppcp_max_conn = max;
65+
_conn_param.min_conn_interval = min;
66+
_conn_param.max_conn_interval = max;
6567

6668
return true;
6769
}
@@ -73,15 +75,8 @@ bool BLECentral::setConnIntervalMS (uint16_t min_ms, uint16_t max_ms)
7375

7476
bool BLECentral::connect(const ble_gap_addr_t* peer_addr)
7577
{
76-
ble_gap_conn_params_t gap_conn_params =
77-
{
78-
.min_conn_interval = _ppcp_min_conn, // in 1.25ms unit
79-
.max_conn_interval = _ppcp_max_conn, // in 1.25ms unit
80-
.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY,
81-
.conn_sup_timeout = BLE_GAP_CONN_SUPERVISION_TIMEOUT_MS / 10 // in 10ms unit
82-
};
83-
84-
VERIFY_STATUS( sd_ble_gap_connect(peer_addr, Bluefruit.Scanner.getParams(), &gap_conn_params, CONN_CFG_CENTRAL), false );
78+
// Connect with default connection parameter
79+
VERIFY_STATUS( sd_ble_gap_connect(peer_addr, Bluefruit.Scanner.getParams(), &_conn_param, CONN_CFG_CENTRAL), false );
8580

8681
return true;
8782
}
@@ -171,36 +166,15 @@ void BLECentral::_event_handler(ble_evt_t* evt)
171166

172167
case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:
173168
{
169+
// Peripheral request to change connection parameter
174170
ble_gap_conn_params_t* request_param = &evt->evt.gap_evt.params.conn_param_update_request.conn_params;
175171

176-
PRINT_INT(request_param->min_conn_interval);
177-
PRINT_INT(request_param->max_conn_interval);
178-
PRINT_INT(request_param->slave_latency);
179-
PRINT_INT(request_param->conn_sup_timeout);
172+
LOG_LV2("GAP", "Conn Param Update Request: (min, max, lattency, sup) = (%.2f, %.2f, %d, %d)",
173+
request_param->min_conn_interval*1.25f, request_param->max_conn_interval*1.25f, request_param->slave_latency, request_param->conn_sup_timeout*10);
180174

181-
// Accept request parameter if it is within our supported range, otherwise reject
182-
if ( ( request_param->max_conn_interval < _ppcp_min_conn ) || ( request_param->min_conn_interval > _ppcp_max_conn ) )
183-
{
184-
LOG_LV1("GAP", "Reject Conn Param Update Request: our = ( %.2f, %.2f ), request = ( %.2f, %.2f )",
185-
ppcp_min_conn*1.25f, _ppcp_max_conn*1.25f, request_param->min_conn_interval*1.25f, request_param->max_conn_interval*1.25f);
186-
187-
sd_ble_gap_conn_param_update(conn_hdl, NULL); // reject request
188-
}else
189-
{
190-
uint16_t const conn_interval = max16(_ppcp_min_conn, request_param->min_conn_interval);
191-
192-
ble_gap_conn_params_t resp_param =
193-
{
194-
.min_conn_interval = conn_interval,
195-
.max_conn_interval = conn_interval, // central set min = max
196-
.slave_latency = request_param->slave_latency, // TODO check save latency
197-
.conn_sup_timeout = request_param->conn_sup_timeout, // TODO check supervisor timeout
198-
};
199-
200-
LOG_LV2("GAP", "Conn Interval is updated to %.2f ms", conn_interval*1.25f);
201-
202-
sd_ble_gap_conn_param_update(conn_hdl, &resp_param);
203-
}
175+
// Central could perform checks to accept or reject request
176+
// For now just accept parameter from prph
177+
sd_ble_gap_conn_param_update(conn_hdl, request_param);
204178
}
205179
break;
206180

libraries/Bluefruit52Lib/src/BLECentral.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ class BLECentral
7979

8080
private:
8181
// Peripheral Preferred Connection Parameters (PPCP)
82-
uint16_t _ppcp_min_conn;
83-
uint16_t _ppcp_max_conn;
82+
ble_gap_conn_params_t _conn_param;
8483

8584
BLEGap::connect_callback_t _connect_cb;
8685
BLEGap::disconnect_callback_t _disconnect_cb;

libraries/Bluefruit52Lib/src/BLEGap.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,13 @@ void BLEGap::_eventHandler(ble_evt_t* evt)
281281
}
282282
break;
283283

284+
case BLE_GAP_EVT_CONN_PARAM_UPDATE:
285+
{
286+
ble_gap_conn_params_t* param = &evt->evt.gap_evt.params.conn_param_update.conn_params;
287+
LOG_LV2("GAP", "Conn Interval= %f", param->min_conn_interval*1.25f);
288+
}
289+
break;
290+
284291
case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
285292
{
286293
// Pairing in progress, Peer asking for our info

libraries/Bluefruit52Lib/src/bluefruit.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,6 @@ void AdafruitBluefruit::_ble_handler(ble_evt_t* evt)
825825
// min conn = max conn = actual used interval
826826
ble_gap_conn_params_t* param = &evt->evt.gap_evt.params.conn_param_update.conn_params;
827827
_conn_interval = param->min_conn_interval;
828-
829-
LOG_LV2("GAP", "Conn Interval= %f", _conn_interval*1.25f);
830828
}
831829
break;
832830

0 commit comments

Comments
 (0)