Skip to content

Commit df8a17c

Browse files
committed
update conn param
1 parent 3fa4880 commit df8a17c

File tree

4 files changed

+23
-45
lines changed

4 files changed

+23
-45
lines changed

libraries/Bluefruit52Lib/src/BLECentral.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@
4242
*/
4343
BLECentral::BLECentral(void)
4444
{
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;
45+
_conn_param.min_conn_interval = _conn_param.max_conn_interval = BLE_GAP_CONN_MIN_INTERVAL_DFLT;
4746
_conn_param.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY;
4847
_conn_param.conn_sup_timeout = BLE_GAP_CONN_SUPERVISION_TIMEOUT_MS/10;
4948

@@ -174,7 +173,10 @@ void BLECentral::_event_handler(ble_evt_t* evt)
174173

175174
// Central could perform checks to accept or reject request
176175
// For now just accept parameter from prph
177-
sd_ble_gap_conn_param_update(conn_hdl, request_param);
176+
ble_gap_conn_params_t conn_param = *request_param;
177+
conn_param.max_conn_interval = conn_param.min_conn_interval;
178+
179+
sd_ble_gap_conn_param_update(conn_hdl, &conn_param);
178180
}
179181
break;
180182

libraries/Bluefruit52Lib/src/BLEGap.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ void BLEGap::_eventHandler(ble_evt_t* evt)
263263
// Init transmission buffer for notification
264264
peer->hvn_tx_sem = xSemaphoreCreateCounting(getHvnQueueSize(conn_hdl), getHvnQueueSize(conn_hdl));
265265
peer->wrcmd_tx_sem = xSemaphoreCreateCounting(getWriteCmdQueueSize(conn_hdl), getWriteCmdQueueSize(conn_hdl));
266+
267+
LOG_LV2("GAP", "Conn Interval= %f", para->conn_params.min_conn_interval*1.25f);
266268
}
267269
break;
268270

libraries/Bluefruit52Lib/src/bluefruit.cpp

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,11 @@ AdafruitBluefruit::AdafruitBluefruit(void)
133133

134134
_conn_hdl = BLE_CONN_HANDLE_INVALID;
135135

136-
_ppcp_min_conn = BLE_GAP_CONN_MIN_INTERVAL_DFLT;
137-
_ppcp_max_conn = BLE_GAP_CONN_MAX_INTERVAL_DFLT;
138-
_ppcp_conn_sup_timeout = BLE_GAP_CONN_SUPERVISION_TIMEOUT_MS / 10; // in 10ms unit
136+
_ppcp.min_conn_interval = BLE_GAP_CONN_MIN_INTERVAL_DFLT;
137+
_ppcp.max_conn_interval = BLE_GAP_CONN_MAX_INTERVAL_DFLT;
138+
_ppcp.slave_latency = 0;
139+
_ppcp.conn_sup_timeout = BLE_GAP_CONN_SUPERVISION_TIMEOUT_MS / 10; // in 10ms unit
140+
139141
_conn_interval = 0;
140142

141143
_connect_cb = NULL;
@@ -417,15 +419,7 @@ err_t AdafruitBluefruit::begin(uint8_t prph_count, uint8_t central_count)
417419
/*------------- Configure GAP -------------*/
418420

419421
// Peripheral Preferred Connection Parameters
420-
ble_gap_conn_params_t gap_conn_params =
421-
{
422-
.min_conn_interval = _ppcp_min_conn, // in 1.25ms unit
423-
.max_conn_interval = _ppcp_max_conn, // in 1.25ms unit
424-
.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY,
425-
.conn_sup_timeout = _ppcp_conn_sup_timeout, // in 10ms unit
426-
};
427-
428-
VERIFY_STATUS( sd_ble_gap_ppcp_set(&gap_conn_params) );
422+
VERIFY_STATUS( sd_ble_gap_ppcp_set(&_ppcp) );
429423

430424
// Default device name
431425
ble_gap_conn_sec_mode_t sec_mode = BLE_SECMODE_OPEN;
@@ -566,18 +560,10 @@ bool AdafruitBluefruit::disconnect(void)
566560

567561
bool AdafruitBluefruit::setConnInterval(uint16_t min, uint16_t max)
568562
{
569-
_ppcp_min_conn = min;
570-
_ppcp_max_conn = max;
563+
_ppcp.min_conn_interval = min;
564+
_ppcp.max_conn_interval = max;
571565

572-
ble_gap_conn_params_t gap_conn_params =
573-
{
574-
.min_conn_interval = _ppcp_min_conn, // in 1.25ms unit
575-
.max_conn_interval = _ppcp_max_conn, // in 1.25ms unit
576-
.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY,
577-
.conn_sup_timeout = _ppcp_conn_sup_timeout // in 10ms unit
578-
};
579-
580-
VERIFY_STATUS( sd_ble_gap_ppcp_set(&gap_conn_params), false);
566+
VERIFY_STATUS( sd_ble_gap_ppcp_set(&_ppcp), false);
581567

582568
return true;
583569
}
@@ -589,17 +575,9 @@ bool AdafruitBluefruit::setConnIntervalMS(uint16_t min_ms, uint16_t max_ms)
589575

590576
bool AdafruitBluefruit::setConnSupervisionTimeout(uint16_t timeout)
591577
{
592-
_ppcp_conn_sup_timeout = timeout;
578+
_ppcp.conn_sup_timeout = timeout;
593579

594-
ble_gap_conn_params_t gap_conn_params =
595-
{
596-
.min_conn_interval = _ppcp_min_conn, // in 1.25ms unit
597-
.max_conn_interval = _ppcp_max_conn, // in 1.25ms unit
598-
.slave_latency = BLE_GAP_CONN_SLAVE_LATENCY,
599-
.conn_sup_timeout = _ppcp_conn_sup_timeout // in 10ms unit
600-
};
601-
602-
VERIFY_STATUS( sd_ble_gap_ppcp_set(&gap_conn_params), false);
580+
VERIFY_STATUS( sd_ble_gap_ppcp_set(&_ppcp), false);
603581

604582
return true;
605583
}
@@ -804,11 +782,9 @@ void AdafruitBluefruit::_ble_handler(ble_evt_t* evt)
804782
_conn_hdl = evt->evt.gap_evt.conn_handle;
805783
_conn_interval = para->conn_params.min_conn_interval;
806784

807-
LOG_LV2("GAP", "Conn Interval= %f", _conn_interval*1.25f);
808-
809785
// Connection interval set by Central is out of preferred range
810786
// Try to negotiate with Central using our preferred values
811-
if ( !is_within(_ppcp_min_conn, para->conn_params.min_conn_interval, _ppcp_max_conn) )
787+
if ( !is_within(_ppcp.min_conn_interval, para->conn_params.min_conn_interval, _ppcp.max_conn_interval) )
812788
{
813789
// Null, value is set by sd_ble_gap_ppcp_set will be used
814790
VERIFY_STATUS( sd_ble_gap_conn_param_update(_conn_hdl, NULL), );
@@ -1013,12 +989,12 @@ void AdafruitBluefruit::printInfo(void)
1013989

1014990
// Connection Intervals
1015991
Serial.printf(title_fmt, "Conn Intervals");
1016-
Serial.printf("min = %.2f ms, ", _ppcp_min_conn*1.25f);
1017-
Serial.printf("max = %.2f ms", _ppcp_max_conn*1.25f);
992+
Serial.printf("min = %.2f ms, ", _ppcp.min_conn_interval*1.25f);
993+
Serial.printf("max = %.2f ms", _ppcp.max_conn_interval*1.25f);
1018994
Serial.println();
1019995

1020996
Serial.printf(title_fmt, "Conn Timeout");
1021-
Serial.printf("%.2f ms", _ppcp_conn_sup_timeout*10.0f);
997+
Serial.printf("%.2f ms", _ppcp.conn_sup_timeout*10.0f);
1022998
Serial.println();
1023999

10241000
/*------------- List the paried device -------------*/

libraries/Bluefruit52Lib/src/bluefruit.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,7 @@ class AdafruitBluefruit
203203
uint8_t _central_count;
204204

205205
// Peripheral Preferred Connection Parameters (PPCP)
206-
uint16_t _ppcp_min_conn;
207-
uint16_t _ppcp_max_conn;
208-
uint16_t _ppcp_conn_sup_timeout;
206+
ble_gap_conn_params_t _ppcp;
209207

210208
// Actual connection interval in use
211209
uint16_t _conn_interval;

0 commit comments

Comments
 (0)