Skip to content

Commit ee23edf

Browse files
authored
Merge pull request #594 from ogatatsu/fix_connection
Fix connection parameter
2 parents 405d48c + 2794dfe commit ee23edf

File tree

4 files changed

+32
-14
lines changed

4 files changed

+32
-14
lines changed

libraries/Bluefruit52Lib/src/BLEConnection.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ BLEConnection::BLEConnection(uint16_t conn_hdl, ble_gap_evt_connected_t const* e
4848
_mtu = BLE_GATT_ATT_MTU_DEFAULT;
4949
_data_length = BLE_GATT_ATT_MTU_DEFAULT + 4; // 27
5050
_phy = BLE_GAP_PHY_1MBPS;
51-
_conn_interval = 0;
51+
_conn_interval = evt_connected->conn_params.max_conn_interval;
52+
_slave_latency = evt_connected->conn_params.slave_latency;
53+
_sup_timeout = evt_connected->conn_params.conn_sup_timeout;
5254
_peer_addr = evt_connected->peer_addr;
5355
_role = evt_connected->role;
5456

@@ -108,6 +110,16 @@ uint16_t BLEConnection::getConnectionInterval(void)
108110
return _conn_interval;
109111
}
110112

113+
uint16_t BLEConnection::getSlaveLatency(void)
114+
{
115+
return _slave_latency;
116+
}
117+
118+
uint16_t BLEConnection::getSupervisionTimeout(void)
119+
{
120+
return _sup_timeout;
121+
}
122+
111123
uint16_t BLEConnection::getDataLength(void)
112124
{
113125
return _data_length;
@@ -318,8 +330,10 @@ void BLEConnection::_eventHandler(ble_evt_t* evt)
318330
{
319331
ble_gap_conn_params_t* param = &evt->evt.gap_evt.params.conn_param_update.conn_params;
320332
_conn_interval = param->max_conn_interval;
333+
_slave_latency = param->slave_latency;
334+
_sup_timeout = param->conn_sup_timeout;
321335

322-
LOG_LV1("GAP", "Conn Interval= %.2f ms, Latency = %d, Supervisor Timeout = %d ms", _conn_interval*1.25f, param->slave_latency, 10*param->conn_sup_timeout);
336+
LOG_LV1("GAP", "Conn Interval= %.2f ms, Latency = %d, Supervisor Timeout = %d ms", _conn_interval*1.25f, _slave_latency, 10*_sup_timeout);
323337
}
324338
break;
325339

libraries/Bluefruit52Lib/src/BLEConnection.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class BLEConnection
4747
uint16_t _conn_hdl;
4848
uint16_t _mtu;
4949
uint16_t _conn_interval;
50+
uint16_t _slave_latency;
51+
uint16_t _sup_timeout;
5052
uint16_t _data_length;
5153
uint8_t _phy;
5254

@@ -80,6 +82,8 @@ class BLEConnection
8082
uint8_t getRole(void);
8183
uint16_t getMtu (void);
8284
uint16_t getConnectionInterval(void);
85+
uint16_t getSlaveLatency(void);
86+
uint16_t getSupervisionTimeout(void);
8387
uint16_t getDataLength(void);
8488
uint8_t getPHY(void);
8589

libraries/Bluefruit52Lib/src/BLEPeriph.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ bool BLEPeriph::setConnIntervalMS (uint16_t min_ms, uint16_t max_ms)
9898
return setConnInterval( MS100TO125(min_ms), MS100TO125(max_ms) );
9999
}
100100

101+
bool BLEPeriph::setConnSlaveLatency(uint16_t latency)
102+
{
103+
_ppcp.slave_latency = latency;
104+
105+
VERIFY_STATUS( sd_ble_gap_ppcp_set(&_ppcp), false);
106+
107+
return true;
108+
}
109+
101110
bool BLEPeriph::setConnSupervisionTimeout(uint16_t timeout)
102111
{
103112
_ppcp.conn_sup_timeout = timeout;
@@ -125,22 +134,13 @@ void BLEPeriph::setDisconnectCallback( ble_disconnect_callback_t fp )
125134

126135
void BLEPeriph::_eventHandler(ble_evt_t* evt)
127136
{
128-
uint16_t const conn_hdl = evt->evt.common_evt.conn_handle;
137+
// uint16_t const conn_hdl = evt->evt.common_evt.conn_handle;
129138
// BLEConnection* conn = Bluefruit.Connection(conn_hdl);
130139

131140
switch ( evt->header.evt_id )
132141
{
133142
case BLE_GAP_EVT_CONNECTED:
134-
{
135-
ble_gap_evt_connected_t* para = &evt->evt.gap_evt.params.connected;
136-
137-
// Connection interval set by Central is out of preferred range
138-
// Try to negotiate with Central using our preferred values
139-
if ( !is_within(_ppcp.min_conn_interval, para->conn_params.min_conn_interval, _ppcp.max_conn_interval) )
140-
{
141-
VERIFY_STATUS( sd_ble_gap_conn_param_update(conn_hdl, &_ppcp), );
142-
}
143-
}
143+
144144
break;
145145

146146
case BLE_GAP_EVT_DISCONNECTED:
@@ -166,4 +166,3 @@ void BLEPeriph::printInfo(void)
166166
logger.printf("%d ms", _ppcp.conn_sup_timeout*10);
167167
logger.println();
168168
}
169-

libraries/Bluefruit52Lib/src/BLEPeriph.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class BLEPeriph
5454

5555
bool setConnInterval (uint16_t min, uint16_t max);
5656
bool setConnIntervalMS (uint16_t min_ms, uint16_t max_ms);
57+
bool setConnSlaveLatency(uint16_t latency);
5758
bool setConnSupervisionTimeout(uint16_t timeout);
5859
bool setConnSupervisionTimeoutMS(uint16_t timeout_ms);
5960

0 commit comments

Comments
 (0)