Skip to content

Commit f39421f

Browse files
committed
Move Conn Cfg into BLEGap
1 parent bb7392a commit f39421f

File tree

5 files changed

+112
-87
lines changed

5 files changed

+112
-87
lines changed

libraries/Bluefruit52Lib/src/BLEGap.cpp

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,65 @@
3939
BLEGap::BLEGap(void)
4040
{
4141
memclr(_peers, sizeof(_peers));
42+
43+
#if SD_VER >= 500
44+
_cfg_prph.mtu_max = BLE_GATT_ATT_MTU_DEFAULT;
45+
_cfg_prph.event_len = BLE_GAP_EVENT_LENGTH_DEFAULT;
46+
_cfg_prph.hvn_tx_qsize = BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT;
47+
_cfg_prph.wr_cmd_qsize = BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT;
48+
49+
_cfg_central.mtu_max = BLE_GATT_ATT_MTU_DEFAULT;
50+
_cfg_central.event_len = BLE_GAP_EVENT_LENGTH_DEFAULT;
51+
_cfg_central.hvn_tx_qsize = BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT;
52+
_cfg_central.wr_cmd_qsize = BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT;
53+
#endif
54+
55+
56+
}
57+
58+
59+
void BLEGap::configPrphConn(uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize)
60+
{
61+
_cfg_prph.mtu_max = maxof(mtu_max, BLE_GATT_ATT_MTU_DEFAULT);
62+
#if SD_VER >= 500
63+
_cfg_prph.event_len = maxof(event_len, BLE_GAP_EVENT_LENGTH_MIN);
64+
#endif
65+
_cfg_prph.hvn_tx_qsize = hvn_qsize;
66+
_cfg_prph.wr_cmd_qsize = wrcmd_qsize;
67+
}
68+
69+
void BLEGap::configCentralConn(uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize)
70+
{
71+
_cfg_central.mtu_max = maxof(mtu_max, BLE_GATT_ATT_MTU_DEFAULT);
72+
#if SD_VER >= 500
73+
_cfg_central.event_len = maxof(event_len, BLE_GAP_EVENT_LENGTH_MIN);
74+
#endif
75+
_cfg_central.hvn_tx_qsize = hvn_qsize;
76+
_cfg_central.wr_cmd_qsize = wrcmd_qsize;
4277
}
4378

79+
80+
uint16_t BLEGap::getMaxMtuByConnCfg(uint8_t conn_cfg)
81+
{
82+
return (conn_cfg == CONN_CFG_PERIPHERAL) ? _cfg_prph.mtu_max : _cfg_central.mtu_max;
83+
}
84+
85+
uint16_t BLEGap::getMaxMtu (uint8_t conn_handle)
86+
{
87+
return (getRole(conn_handle) == BLE_GAP_ROLE_PERIPH) ? _cfg_prph.mtu_max : _cfg_central.mtu_max;
88+
}
89+
90+
uint8_t BLEGap::getHvnQueueSize (uint8_t conn_handle)
91+
{
92+
return (getRole(conn_handle) == BLE_GAP_ROLE_PERIPH) ? _cfg_prph.hvn_tx_qsize : _cfg_central.hvn_tx_qsize;
93+
}
94+
95+
uint8_t BLEGap::getWriteCmdQueueSize (uint8_t conn_handle)
96+
{
97+
return (getRole(conn_handle) == BLE_GAP_ROLE_PERIPH) ? _cfg_prph.wr_cmd_qsize : _cfg_central.wr_cmd_qsize;
98+
}
99+
100+
44101
/**
45102
* Get current Mac address and its type
46103
* @param mac address
@@ -160,10 +217,10 @@ void BLEGap::_eventHandler(ble_evt_t* evt)
160217
(void) sd_ble_tx_packet_count_get(conn_handle, &txbuf_max);
161218
peer->hvn_tx_sem = xSemaphoreCreateCounting(txbuf_max, txbuf_max);
162219
#else
163-
peer->hvn_tx_sem = xSemaphoreCreateCounting(Bluefruit.getHvnTxQueue(), Bluefruit.getHvnTxQueue());
220+
peer->hvn_tx_sem = xSemaphoreCreateCounting(getHvnQueueSize(conn_handle), getHvnQueueSize(conn_handle));
164221
#endif
165222

166-
peer->wrcmd_tx_sem = xSemaphoreCreateCounting(Bluefruit.getWriteCmdQueue(), Bluefruit.getWriteCmdQueue());
223+
peer->wrcmd_tx_sem = xSemaphoreCreateCounting(getWriteCmdQueueSize(conn_handle), getWriteCmdQueueSize(conn_handle));
167224
}
168225
break;
169226

@@ -267,7 +324,7 @@ void BLEGap::_eventHandler(ble_evt_t* evt)
267324

268325
case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST:
269326
{
270-
peer->att_mtu = minof(evt->evt.gatts_evt.params.exchange_mtu_request.client_rx_mtu, Bluefruit.getMaxMtu());
327+
peer->att_mtu = minof(evt->evt.gatts_evt.params.exchange_mtu_request.client_rx_mtu, getMaxMtu(conn_handle));
271328
VERIFY_STATUS( sd_ble_gatts_exchange_mtu_reply(conn_handle, peer->att_mtu), );
272329

273330
LOG_LV1("GAP", "ATT MTU is changed to %d", peer->att_mtu);

libraries/Bluefruit52Lib/src/BLEGap.h

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,30 @@ class BLEGap
4848

4949
BLEGap(void);
5050

51-
uint8_t getAddr(uint8_t mac[6]);
52-
bool setAddr(uint8_t mac[6], uint8_t type);
53-
// bool setPrivacy(); sd_ble_gap_privacy_set()
51+
uint8_t getAddr (uint8_t mac[6]);
52+
bool setAddr (uint8_t mac[6], uint8_t type);
53+
// bool setPrivacy (); sd_ble_gap_privacy_set()
5454

55-
bool connected(uint16_t conn_handle);
55+
bool connected (uint16_t conn_handle);
5656

57-
uint8_t getRole(uint16_t conn_handle);
57+
uint8_t getRole (uint16_t conn_handle);
5858

59-
uint8_t getPeerAddr(uint16_t conn_handle, uint8_t addr[6]);
60-
ble_gap_addr_t getPeerAddr(uint16_t conn_handle);
59+
uint8_t getPeerAddr (uint16_t conn_handle, uint8_t addr[6]);
60+
ble_gap_addr_t getPeerAddr (uint16_t conn_handle);
61+
uint16_t getPeerName (uint16_t conn_handle, char* buf, uint16_t bufsize);
6162

62-
uint16_t getPeerName(uint16_t conn_handle, char* buf, uint16_t bufsize);
63-
bool getHvnPacket(uint16_t conn_handle);
64-
bool getWriteCmdPacket(uint16_t conn_handle);
63+
void configPrphConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
64+
void configCentralConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
6565

66-
uint16_t getMTU(uint16_t conn_handle);
66+
uint16_t getMaxMtuByConnCfg (uint8_t conn_cfg);
67+
uint16_t getMaxMtu (uint8_t conn_handle);
68+
uint8_t getHvnQueueSize (uint8_t conn_handle);
69+
uint8_t getWriteCmdQueueSize (uint8_t conn_handle);
70+
71+
uint16_t getMTU (uint16_t conn_handle);
72+
73+
bool getHvnPacket (uint16_t conn_handle);
74+
bool getWriteCmdPacket (uint16_t conn_handle);
6775

6876
/*------------------------------------------------------------------*/
6977
/* INTERNAL USAGE ONLY
@@ -73,6 +81,13 @@ class BLEGap
7381
void _eventHandler(ble_evt_t* evt);
7482

7583
private:
84+
struct {
85+
uint16_t mtu_max;
86+
uint8_t event_len;
87+
uint8_t hvn_tx_qsize;
88+
uint8_t wr_cmd_qsize;
89+
} _cfg_prph, _cfg_central;
90+
7691
// Array of TX Packet semaphore, indexed by connection handle
7792
// Peer info where conn_handle serves as index
7893
typedef struct {
@@ -87,6 +102,8 @@ class BLEGap
87102
} gap_peer_t;
88103

89104
gap_peer_t _peers[BLE_MAX_CONN];
105+
106+
friend class AdafruitBluefruit;
90107
};
91108

92109
#endif /* BLEGAP_H_ */

libraries/Bluefruit52Lib/src/bluefruit.cpp

Lines changed: 18 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,6 @@ AdafruitBluefruit::AdafruitBluefruit(void)
110110
_sd_cfg.uuid128_max = BLE_UUID_VS_COUNT_DEFAULT;
111111
_sd_cfg.service_changed = 0;
112112

113-
_sd_cfg.prph.mtu_max = BLEGATT_ATT_MTU_MAX;
114-
_sd_cfg.central.mtu_max = BLE_GATT_ATT_MTU_DEFAULT;
115-
116-
#if SD_VER >= 500
117-
_sd_cfg.prph.event_len = BLE_GAP_EVENT_LENGTH_DEFAULT;
118-
_sd_cfg.prph.hvn_tx_qsize = 3;
119-
_sd_cfg.prph.wr_cmd_qsize = BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT;
120-
121-
_sd_cfg.central.event_len = BLE_GAP_EVENT_LENGTH_DEFAULT;
122-
_sd_cfg.central.hvn_tx_qsize = BLE_GATTS_HVN_TX_QUEUE_SIZE_DEFAULT;
123-
_sd_cfg.central.wr_cmd_qsize = BLE_GATTC_WRITE_CMD_TX_QUEUE_SIZE_DEFAULT;
124-
#endif
125-
126113

127114
_prph_count = 0;
128115
_central_count = 0;
@@ -185,37 +172,12 @@ void AdafruitBluefruit::configAttrTableSize(uint32_t attr_table_size)
185172

186173
void AdafruitBluefruit::configPrphConn(uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize)
187174
{
188-
_sd_cfg.prph.mtu_max = maxof(mtu_max, BLE_GATT_ATT_MTU_DEFAULT);
189-
#if SD_VER >= 500
190-
_sd_cfg.prph.event_len = maxof(event_len, BLE_GAP_EVENT_LENGTH_MIN);
191-
#endif
192-
_sd_cfg.prph.hvn_tx_qsize = hvn_qsize;
193-
_sd_cfg.prph.wr_cmd_qsize = wrcmd_qsize;
175+
Gap.configPrphConn(mtu_max, event_len, hvn_qsize, wrcmd_qsize);
194176
}
195177

196178
void AdafruitBluefruit::configCentralConn(uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize)
197179
{
198-
_sd_cfg.central.mtu_max = maxof(mtu_max, BLE_GATT_ATT_MTU_DEFAULT);
199-
#if SD_VER >= 500
200-
_sd_cfg.central.event_len = maxof(event_len, BLE_GAP_EVENT_LENGTH_MIN);
201-
#endif
202-
_sd_cfg.central.hvn_tx_qsize = hvn_qsize;
203-
_sd_cfg.central.wr_cmd_qsize = wrcmd_qsize;
204-
}
205-
206-
uint16_t AdafruitBluefruit::getMaxMtu(void)
207-
{
208-
return _sd_cfg.prph.mtu_max;
209-
}
210-
211-
uint8_t AdafruitBluefruit::getHvnTxQueue(void)
212-
{
213-
return _sd_cfg.prph.hvn_tx_qsize;
214-
}
215-
216-
uint8_t AdafruitBluefruit::getWriteCmdQueue(void)
217-
{
218-
return _sd_cfg.prph.wr_cmd_qsize;
180+
Gap.configCentralConn(mtu_max, event_len, hvn_qsize, wrcmd_qsize);
219181
}
220182

221183

@@ -334,26 +296,26 @@ err_t AdafruitBluefruit::begin(uint8_t prph_count, uint8_t central_count)
334296
// ATT MTU
335297
varclr(&blecfg);
336298
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_PERIPHERAL;
337-
blecfg.conn_cfg.params.gatt_conn_cfg.att_mtu = _sd_cfg.prph.mtu_max;
299+
blecfg.conn_cfg.params.gatt_conn_cfg.att_mtu = Gap._cfg_prph.mtu_max;
338300
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATT, &blecfg, ram_start) );
339301

340302
// Event length and max connection for this config
341303
varclr(&blecfg);
342304
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_PERIPHERAL;
343305
blecfg.conn_cfg.params.gap_conn_cfg.conn_count = _prph_count;
344-
blecfg.conn_cfg.params.gap_conn_cfg.event_length = _sd_cfg.prph.event_len;
306+
blecfg.conn_cfg.params.gap_conn_cfg.event_length = Gap._cfg_prph.event_len;
345307
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GAP, &blecfg, ram_start) );
346308

347309
// HVN queue size
348310
varclr(&blecfg);
349311
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_PERIPHERAL;
350-
blecfg.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = _sd_cfg.prph.hvn_tx_qsize;
312+
blecfg.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = Gap._cfg_prph.hvn_tx_qsize;
351313
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &blecfg, ram_start) );
352314

353315
// WRITE COMMAND queue size
354316
varclr(&blecfg);
355317
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_PERIPHERAL;
356-
blecfg.conn_cfg.params.gattc_conn_cfg.write_cmd_tx_queue_size = _sd_cfg.prph.wr_cmd_qsize;
318+
blecfg.conn_cfg.params.gattc_conn_cfg.write_cmd_tx_queue_size = Gap._cfg_prph.wr_cmd_qsize;
357319
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATTC, &blecfg, ram_start) );
358320
}
359321

@@ -362,26 +324,26 @@ err_t AdafruitBluefruit::begin(uint8_t prph_count, uint8_t central_count)
362324
// ATT MTU
363325
varclr(&blecfg);
364326
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_CENTRAL;
365-
blecfg.conn_cfg.params.gatt_conn_cfg.att_mtu = _sd_cfg.central.mtu_max;
327+
blecfg.conn_cfg.params.gatt_conn_cfg.att_mtu = Gap._cfg_central.mtu_max;
366328
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATT, &blecfg, ram_start) );
367329

368330
// Event length and max connection for this config
369331
varclr(&blecfg);
370332
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_CENTRAL;
371333
blecfg.conn_cfg.params.gap_conn_cfg.conn_count = _central_count;
372-
blecfg.conn_cfg.params.gap_conn_cfg.event_length = _sd_cfg.central.event_len;
334+
blecfg.conn_cfg.params.gap_conn_cfg.event_length = Gap._cfg_central.event_len;
373335
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GAP, &blecfg, ram_start) );
374336

375337
// HVN queue size
376338
varclr(&blecfg);
377339
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_CENTRAL;
378-
blecfg.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = _sd_cfg.central.hvn_tx_qsize;
340+
blecfg.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = Gap._cfg_central.hvn_tx_qsize;
379341
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &blecfg, ram_start) );
380342

381343
// WRITE COMMAND queue size
382344
varclr(&blecfg);
383345
blecfg.conn_cfg.conn_cfg_tag = CONN_CFG_CENTRAL;
384-
blecfg.conn_cfg.params.gattc_conn_cfg.write_cmd_tx_queue_size = _sd_cfg.central.wr_cmd_qsize;
346+
blecfg.conn_cfg.params.gattc_conn_cfg.write_cmd_tx_queue_size = Gap._cfg_central.wr_cmd_qsize;
385347
VERIFY_STATUS ( sd_ble_cfg_set(BLE_CONN_CFG_GATTC, &blecfg, ram_start) );
386348
}
387349

@@ -660,19 +622,19 @@ void AdafruitBluefruit::printInfo(void)
660622

661623
Serial.print(" - ");
662624
Serial.printf(title_fmt, "Max MTU");
663-
Serial.println(_sd_cfg.prph.mtu_max);
625+
Serial.println(Gap._cfg_prph.mtu_max);
664626

665627
Serial.print(" - ");
666628
Serial.printf(title_fmt, "Event Length");
667-
Serial.println(_sd_cfg.prph.event_len);
629+
Serial.println(Gap._cfg_prph.event_len);
668630

669631
Serial.print(" - ");
670632
Serial.printf(title_fmt, "HVN Queue Size");
671-
Serial.println(_sd_cfg.prph.hvn_tx_qsize);
633+
Serial.println(Gap._cfg_prph.hvn_tx_qsize);
672634

673635
Serial.print(" - ");
674636
Serial.printf(title_fmt, "WrCmd Queue Size");
675-
Serial.println(_sd_cfg.prph.wr_cmd_qsize);
637+
Serial.println(Gap._cfg_prph.wr_cmd_qsize);
676638
}
677639

678640
if ( _central_count )
@@ -681,19 +643,19 @@ void AdafruitBluefruit::printInfo(void)
681643

682644
Serial.print(" - ");
683645
Serial.printf(title_fmt, "Max MTU");
684-
Serial.println(_sd_cfg.central.mtu_max);
646+
Serial.println(Gap._cfg_central.mtu_max);
685647

686648
Serial.print(" - ");
687649
Serial.printf(title_fmt, "Event Length");
688-
Serial.println(_sd_cfg.central.event_len);
650+
Serial.println(Gap._cfg_central.event_len);
689651

690652
Serial.print(" - ");
691653
Serial.printf(title_fmt, "HVN Queue Size");
692-
Serial.println(_sd_cfg.central.hvn_tx_qsize);
654+
Serial.println(Gap._cfg_central.hvn_tx_qsize);
693655

694656
Serial.print(" - ");
695657
Serial.printf(title_fmt, "WrCmd Queue Size");
696-
Serial.println(_sd_cfg.central.wr_cmd_qsize);
658+
Serial.println(Gap._cfg_central.wr_cmd_qsize);
697659
}
698660
#endif
699661

libraries/Bluefruit52Lib/src/bluefruit.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,12 @@ class AdafruitBluefruit
129129
void configUuid128Count (uint8_t uuid128_max);
130130
void configAttrTableSize (uint32_t attr_table_size);
131131

132-
// Bandwidth affection function
132+
// Bandwidth config for connections
133133
void configPrphConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
134134
void configCentralConn (uint16_t mtu_max, uint8_t event_len, uint8_t hvn_qsize, uint8_t wrcmd_qsize);
135135

136136
err_t begin(uint8_t prph_count = 1, uint8_t central_count = 0);
137137

138-
/*------------- Config Retrieval -------------*/
139-
uint16_t getMaxMtu(void);
140-
uint8_t getHvnTxQueue (void);
141-
uint8_t getWriteCmdQueue(void);
142-
143-
144138
/*------------------------------------------------------------------*/
145139
/* General Functions
146140
*------------------------------------------------------------------*/
@@ -204,13 +198,6 @@ class AdafruitBluefruit
204198
uint32_t attr_table_size;
205199
uint8_t service_changed;
206200
uint8_t uuid128_max;
207-
208-
struct {
209-
uint16_t mtu_max;
210-
uint8_t event_len;
211-
uint8_t hvn_tx_qsize;
212-
uint8_t wr_cmd_qsize;
213-
}prph, central;
214201
}_sd_cfg;
215202

216203
uint8_t _prph_count;

libraries/Bluefruit52Lib/src/services/BLEUart.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ void BLEUart::bufferTXD(uint8_t enable)
160160
if ( _tx_fifo == NULL )
161161
{
162162
_tx_fifo = new Adafruit_FIFO(1);
163-
_tx_fifo->begin( Bluefruit.getMaxMtu() );
163+
_tx_fifo->begin( Bluefruit.Gap.getMaxMtuByConnCfg(CONN_CFG_PERIPHERAL) );
164164
}
165165
}else
166166
{
@@ -178,11 +178,13 @@ err_t BLEUart::begin(void)
178178
// Invoke base class begin()
179179
VERIFY_STATUS( BLEService::begin() );
180180

181+
uint16_t max_mtu = Bluefruit.Gap.getMaxMtuByConnCfg(CONN_CFG_PERIPHERAL);
182+
181183
// Add TXD Characteristic
182184
_txd.setProperties(CHR_PROPS_NOTIFY);
183185
// TODO enable encryption when bonding is enabled
184186
_txd.setPermission(SECMODE_OPEN, SECMODE_NO_ACCESS);
185-
_txd.setMaxLen( Bluefruit.getMaxMtu() );
187+
_txd.setMaxLen( max_mtu );
186188
_txd.setUserDescriptor("TXD");
187189
VERIFY_STATUS( _txd.begin() );
188190

@@ -192,7 +194,7 @@ err_t BLEUart::begin(void)
192194

193195
// TODO enable encryption when bonding is enabled
194196
_rxd.setPermission(SECMODE_NO_ACCESS, SECMODE_OPEN);
195-
_rxd.setMaxLen( Bluefruit.getMaxMtu() );
197+
_rxd.setMaxLen( max_mtu );
196198
_rxd.setUserDescriptor("RXD");
197199
VERIFY_STATUS(_rxd.begin());
198200

0 commit comments

Comments
 (0)