Skip to content

Commit ffc51ef

Browse files
sandeepmistrycalvinatintel
authored andcommitted
Add setConnectionInterval API to CurieBle
1 parent f11de80 commit ffc51ef

File tree

5 files changed

+61
-21
lines changed

5 files changed

+61
-21
lines changed

libraries/CurieBLE/keywords.txt

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ begin KEYWORD2
5252
setAdvertisedServiceUuid KEYWORD2
5353
setLocalName KEYWORD2
5454
setAppearance KEYWORD2
55+
setConnectionInterval KEYWORD2
5556
addAttribute KEYWORD2
5657
central KEYWORD2
5758

libraries/CurieBLE/src/BLEPeripheral.cpp

+22-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ BLEPeripheral::BLEPeripheral(void) :
4848
_advertise_service_uuid(NULL),
4949
_local_name(NULL),
5050
_appearance(0),
51+
_min_conn_interval(DEFAULT_MIN_CONN_INTERVAL),
52+
_max_conn_interval(DEFAULT_MAX_CONN_INTERVAL),
5153
_central(this),
5254
_attributes(NULL),
5355
_num_attributes(0),
@@ -164,6 +166,25 @@ BLEPeripheral::setAppearance(const uint16_t appearance)
164166
_appearance = appearance;
165167
}
166168

169+
void
170+
BLEPeripheral::setConnectionInterval(const unsigned short minConnInterval, const unsigned short maxConnInterval)
171+
{
172+
_min_conn_interval = minConnInterval;
173+
_max_conn_interval = maxConnInterval;
174+
175+
if (_min_conn_interval < MIN_CONN_INTERVAL) {
176+
_min_conn_interval = MIN_CONN_INTERVAL;
177+
} else if (_min_conn_interval > MAX_CONN_INTERVAL) {
178+
_min_conn_interval = MAX_CONN_INTERVAL;
179+
}
180+
181+
if (_max_conn_interval < _min_conn_interval) {
182+
_max_conn_interval = _min_conn_interval;
183+
} else if (_max_conn_interval > MAX_CONN_INTERVAL) {
184+
_max_conn_interval = MAX_CONN_INTERVAL;
185+
}
186+
}
187+
167188
void
168189
BLEPeripheral::setEventHandler(BLEPeripheralEvent event, BLEPeripheralEventHandler callback)
169190
{
@@ -244,7 +265,7 @@ BLEPeripheral::_init()
244265
return status;
245266
}
246267

247-
status = ble_client_gap_set_enable_config(_device_name, &_local_bda, _appearance, txPower);
268+
status = ble_client_gap_set_enable_config(_device_name, &_local_bda, _appearance, txPower, _min_conn_interval, _max_conn_interval);
248269
if (BLE_STATUS_SUCCESS != status) {
249270
return status;
250271
}

libraries/CurieBLE/src/BLEPeripheral.h

+12
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@ class BLEPeripheral {
100100
*/
101101
void setAppearance(const unsigned short appearance);
102102

103+
/**
104+
* Set the min and max connection interval BLE Peripheral Device
105+
*
106+
* @param minConnInterval Minimum connection interval (1.25 ms units), minimum 0x0006 (7.5ms)
107+
* @param maxConnInterval Maximum connection interval (1.25 ms units), maximum 0x095f (2998.75ms)
108+
*
109+
* @note This method must be called before the begin method
110+
*/
111+
void setConnectionInterval(const unsigned short minConnInterval, const unsigned short maxConnInterval);
112+
103113
/**
104114
* Add an attribute to the BLE Peripheral Device
105115
*
@@ -186,6 +196,8 @@ class BLEPeripheral {
186196
const char* _local_name;
187197
char _device_name[BLE_MAX_DEVICE_NAME+1];
188198
uint16_t _appearance;
199+
uint16_t _min_conn_interval;
200+
uint16_t _max_conn_interval;
189201
uint8_t _adv_data[BLE_MAX_ADV_SIZE];
190202
uint8_t _adv_data_len;
191203
ble_addr_t _local_bda;

libraries/CurieBLE/src/internal/ble_client.c

+7-19
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,6 @@
4848
#include "ble_client.h"
4949
#include "platform.h"
5050

51-
enum {
52-
UNIT_0_625_MS = 625, /**< Number of microseconds in 0.625 milliseconds. */
53-
UNIT_1_25_MS = 1250, /**< Number of microseconds in 1.25 milliseconds. */
54-
UNIT_10_MS = 10000 /**< Number of microseconds in 10 milliseconds. */
55-
};
56-
57-
#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
58-
59-
/* Connection parameters used for Peripheral Preferred Connection Parameterss (PPCP) and update request */
60-
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(80, UNIT_1_25_MS)
61-
#define MAX_CONN_INTERVAL MSEC_TO_UNITS(150, UNIT_1_25_MS)
62-
#define SLAVE_LATENCY 0
63-
#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(6000, UNIT_10_MS)
64-
6551
/* Advertising parameters */
6652
#define BLE_GAP_ADV_TYPE_ADV_IND 0x00 /**< Connectable undirected. */
6753
#define BLE_GAP_ADV_FP_ANY 0x00 /**< Allow scan requests and connect requests from any device. */
@@ -496,7 +482,9 @@ BleStatus ble_client_init(ble_client_gap_event_cb_t gap_event_cb, void *gap_even
496482
BleStatus ble_client_gap_set_enable_config(const char *name,
497483
const ble_addr_t *bda,
498484
const uint16_t appearance,
499-
const int8_t tx_power)
485+
const int8_t tx_power,
486+
const uint16_t min_conn_interval,
487+
const uint16_t max_conn_interval)
500488
{
501489
struct ble_wr_config config;
502490
BleStatus status;
@@ -505,12 +493,12 @@ BleStatus ble_client_gap_set_enable_config(const char *name,
505493
config.p_name = (uint8_t *)name;
506494
config.appearance = appearance;
507495
config.tx_power = tx_power;
508-
config.peripheral_conn_params.interval_min = MIN_CONN_INTERVAL;
509-
config.peripheral_conn_params.interval_max = MAX_CONN_INTERVAL;
496+
config.peripheral_conn_params.interval_min = min_conn_interval;
497+
config.peripheral_conn_params.interval_max = max_conn_interval;
510498
config.peripheral_conn_params.slave_latency = SLAVE_LATENCY;
511499
config.peripheral_conn_params.link_sup_to = CONN_SUP_TIMEOUT;
512-
config.central_conn_params.interval_min = MIN_CONN_INTERVAL;
513-
config.central_conn_params.interval_max = MAX_CONN_INTERVAL;
500+
config.central_conn_params.interval_min = min_conn_interval;
501+
config.central_conn_params.interval_max = max_conn_interval;
514502
config.central_conn_params.slave_latency = SLAVE_LATENCY;
515503
config.central_conn_params.link_sup_to = CONN_SUP_TIMEOUT;
516504

libraries/CurieBLE/src/internal/ble_client.h

+19-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,22 @@
3333

3434
#include "BLECommon.h"
3535

36+
enum {
37+
UNIT_0_625_MS = 625, /**< Number of microseconds in 0.625 milliseconds. */
38+
UNIT_1_25_MS = 1250, /**< Number of microseconds in 1.25 milliseconds. */
39+
UNIT_10_MS = 10000 /**< Number of microseconds in 10 milliseconds. */
40+
};
41+
42+
#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
43+
44+
/* Connection parameters used for Peripheral Preferred Connection Parameterss (PPCP) and update request */
45+
#define DEFAULT_MIN_CONN_INTERVAL MSEC_TO_UNITS(80, UNIT_1_25_MS)
46+
#define DEFAULT_MAX_CONN_INTERVAL MSEC_TO_UNITS(150, UNIT_1_25_MS)
47+
#define MIN_CONN_INTERVAL 0x0006
48+
#define MAX_CONN_INTERVAL 0x095f
49+
#define SLAVE_LATENCY 0
50+
#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(6000, UNIT_10_MS)
51+
3652
/* Borrowed from ble_service_utils.h */
3753
#define UINT8_TO_LESTREAM(p, i) \
3854
do { *(p)++ = (uint8_t)(i); } \
@@ -98,7 +114,9 @@ BleStatus ble_client_init(ble_client_gap_event_cb_t gap_event_cb,
98114
BleStatus ble_client_gap_set_enable_config(const char *name,
99115
const ble_addr_t *bda,
100116
const uint16_t appearance,
101-
const int8_t tx_power);
117+
const int8_t tx_power,
118+
const uint16_t min_conn_interval,
119+
const uint16_t max_conn_interval);
102120
BleStatus ble_client_gap_get_bda(ble_addr_t *p_bda);
103121
BleStatus ble_client_gap_wr_adv_data(uint8_t *adv_data,
104122
const uint8_t adv_data_len);

0 commit comments

Comments
 (0)