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

Lines changed: 1 addition & 0 deletions
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

Lines changed: 22 additions & 1 deletion
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

Lines changed: 12 additions & 0 deletions
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

Lines changed: 7 additions & 19 deletions
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

Lines changed: 19 additions & 1 deletion
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy