Skip to content

Commit 05d6469

Browse files
committed
Fix Jria 671 Support update connection interval in central/peripheral
1. Central can update the connection interval. 2. Unify the interval unit to ms at user API.
1 parent 17e2629 commit 05d6469

File tree

5 files changed

+108
-15
lines changed

5 files changed

+108
-15
lines changed

libraries/CurieBLE/src/BLECentralRole.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ void BLECentralRole::handleParamUpdated(struct bt_conn *conn,
246246
if (_event_handlers[BLEUpdateParam])
247247
{
248248
BLEPeripheralHelper *temp = peripheral(conn);
249-
temp->setConnParames(interval, interval, latency, timeout);
249+
temp->setConnectionParameters(interval, interval, latency, timeout);
250250
_event_handlers[BLEUpdateParam](*temp);
251251
}
252252
}

libraries/CurieBLE/src/BLEHelper.cpp

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,47 @@ const struct bt_le_conn_param *BLEHelper::getConnParams()
9898
return &_conn_params;
9999
}
100100

101-
void BLEHelper::setConnParames(uint16_t intervalmin,
102-
uint16_t intervalmax,
103-
uint16_t latency,
104-
uint16_t timeout)
101+
void BLEHelper::setConnectionParameters(uint16_t intervalmin,
102+
uint16_t intervalmax,
103+
uint16_t latency,
104+
uint16_t timeout)
105105
{
106106
_conn_params.interval_max = intervalmin;
107107
_conn_params.interval_min = intervalmax;
108108
_conn_params.latency = latency;
109109
_conn_params.timeout = timeout;
110-
111110
}
112111

112+
void BLEHelper::updateConnectionInterval(uint16_t intervalmin,
113+
uint16_t intervalmax,
114+
uint16_t latency,
115+
uint16_t timeout)
116+
{
117+
setConnectionParameters(intervalmin, intervalmax, latency, timeout);
118+
updateConnectionInterval();
119+
}
120+
121+
void BLEHelper::updateConnectionInterval()
122+
{
123+
struct bt_conn* conn = bt_conn_lookup_addr_le(&_address);
124+
int ret = 0;
125+
if (NULL != conn)
126+
{
127+
ret = bt_conn_le_param_update(conn, &_conn_params);
128+
pr_debug(LOG_MODULE_BLE, "%s-ret:%d",__FUNCTION__, ret);
129+
bt_conn_unref(conn);
130+
}
131+
}
132+
133+
void BLEHelper::setConnectionInterval(float minInterval,
134+
float maxInterval)
135+
{
136+
uint16_t minVal = (uint16_t)MSEC_TO_UNITS(minInterval, UNIT_1_25_MS);
137+
uint16_t maxVal = (uint16_t)MSEC_TO_UNITS(maxInterval, UNIT_1_25_MS);
138+
_conn_params.interval_min = minVal;
139+
_conn_params.interval_max = maxVal;
140+
updateConnectionInterval();
141+
}
142+
143+
113144

libraries/CurieBLE/src/BLEHelper.h

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,72 @@ class BLEHelper {
6464
bool operator!=(const BLEHelper& rhs) const;
6565

6666
const struct bt_le_conn_param *getConnParams();
67-
void setConnParames(uint16_t intervalmin,
68-
uint16_t intervalmax,
69-
uint16_t latency,
70-
uint16_t timeout);
67+
68+
/**
69+
* @brief Set the connection paramter and send connection
70+
* update request
71+
*
72+
* @param[in] intervalmin Minimum Connection Interval (ms)
73+
*
74+
* @param[in] intervalmax Maximum Connection Interval (ms)
75+
*
76+
* @return none
77+
*
78+
* @note none
79+
*/
80+
void setConnectionInterval(float minInterval,
81+
float maxInterval);
82+
83+
/**
84+
* @brief Just set the connection parameter.
85+
* Not send out connection update request.
86+
*
87+
* @param[in] intervalmin Minimum Connection Interval (N * 1.25 ms)
88+
*
89+
* @param[in] intervalmax Maximum Connection Interval (N * 1.25 ms)
90+
*
91+
* @param[in] latency Connection Latency
92+
*
93+
* @param[in] timeout Supervision Timeout (N * 10 ms)
94+
*
95+
* @return none
96+
*
97+
* @note The user should care the unit
98+
*/
99+
void setConnectionParameters(uint16_t intervalmin,
100+
uint16_t intervalmax,
101+
uint16_t latency,
102+
uint16_t timeout);
103+
104+
/**
105+
* @brief Schedule the link connection update request
106+
*
107+
* @param[in] intervalmin Minimum Connection Interval (N * 1.25 ms)
108+
*
109+
* @param[in] intervalmax Maximum Connection Interval (N * 1.25 ms)
110+
*
111+
* @param[in] latency Connection Latency
112+
*
113+
* @param[in] timeout Supervision Timeout (N * 10 ms)
114+
*
115+
* @return none
116+
*
117+
* @note The user should care the unit
118+
*/
119+
void updateConnectionInterval(uint16_t intervalmin,
120+
uint16_t intervalmax,
121+
uint16_t latency,
122+
uint16_t timeout);
123+
124+
/**
125+
* @brief Schedule the link connection update request
126+
*
127+
* @return none
128+
*
129+
* @note The connection update request will not send if
130+
* parameter doesn't changed
131+
*/
132+
void updateConnectionInterval();
71133

72134
protected:
73135
void setAddress(const bt_addr_le_t &address);

libraries/CurieBLE/src/BLEPeripheralRole.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ void BLEPeripheralRole::handleParamUpdated(struct bt_conn *conn,
295295
conn, interval, latency, timeout);
296296
if (_event_handlers[BLEUpdateParam])
297297
{
298-
_central.setConnParames(interval, interval, latency, timeout);
298+
_central.setConnectionParameters(interval, interval, latency, timeout);
299299
_event_handlers[BLEUpdateParam](_central);
300300
}
301301
}

libraries/CurieBLE/src/BLERoleBase.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,20 @@ class BLERoleBase{
105105
*
106106
* @param conn The connection object that need to process the update request
107107
*
108-
* @param interval The connection interval
108+
* @param interval The connection interval (N*1.25)ms
109109
*
110110
* @param latency The connection latency
111111
*
112-
* @param timeout The connection timeout
112+
* @param timeout The connection timeout (N*10)ms
113113
*
114114
* @return none
115115
*
116116
* @note virtual function. Just define the interface and the children need to implement
117117
*/
118118
virtual void handleParamUpdated (struct bt_conn *conn,
119119
uint16_t interval,
120-
uint16_t latency,
121-
uint16_t timeout) = 0;
120+
uint16_t latency,
121+
uint16_t timeout) = 0;
122122

123123
char _device_name[BLE_MAX_DEVICE_NAME+1];
124124
bt_addr_le_t _local_bda;

0 commit comments

Comments
 (0)