Merge pull request #2569 from dhalbert/nrf-increase-connections
increase max BLE connections from 2 to 5
This commit is contained in:
commit
8258cb851e
@ -33,8 +33,6 @@
|
||||
|
||||
#include "ble.h"
|
||||
|
||||
#define MAX_TX_IN_PROGRESS 10
|
||||
|
||||
#ifndef BLE_GATT_ATT_MTU_DEFAULT
|
||||
#define BLE_GATT_ATT_MTU_DEFAULT GATT_MTU_SIZE_DEFAULT
|
||||
#endif
|
||||
|
@ -19,14 +19,13 @@ MEMORY
|
||||
|
||||
|
||||
/* 0x2000000 - RAM:ORIGIN is reserved for Softdevice */
|
||||
/* SoftDevice 6.1.0 takes 0x7b78 bytes (30.86 kb) minimum with high ATT MTU. */
|
||||
/* SoftDevice 6.1.0 with 5 connections and various increases takes just under 64kiB.
|
||||
/* To measure the minimum required amount of memory for given configuration, set this number
|
||||
high enough to work and then check the mutation of the value done by sd_ble_enable. */
|
||||
RAM (xrw) : ORIGIN = 0x20000000 + 32K, LENGTH = 256K - 32K
|
||||
RAM (xrw) : ORIGIN = 0x20000000 + 64K, LENGTH = 256K - 64K
|
||||
}
|
||||
|
||||
/* produce a link error if there is not this amount of RAM for these sections */
|
||||
_minimum_stack_size = 40K;
|
||||
/* produce a link error if there is not this amount of RAM available */
|
||||
_minimum_heap_size = 0;
|
||||
|
||||
/* top end of the stack */
|
||||
@ -125,7 +124,7 @@ SECTIONS
|
||||
.stack :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
. = . + _minimum_stack_size;
|
||||
. = . + ${CIRCUITPY_DEFAULT_STACK_SIZE};
|
||||
. = ALIGN(4);
|
||||
} >RAM
|
||||
|
||||
|
@ -108,6 +108,9 @@ STATIC uint32_t ble_stack_enable(void) {
|
||||
|
||||
ble_cfg_t ble_conf;
|
||||
ble_conf.conn_cfg.conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM;
|
||||
// Each additional connection costs:
|
||||
// about 3700-4300 bytes when .hvn_tx_queue_size is 1
|
||||
// about 9000 bytes when .hvn_tx_queue_size is 10
|
||||
ble_conf.conn_cfg.params.gap_conn_cfg.conn_count = BLEIO_TOTAL_CONNECTION_COUNT;
|
||||
// Event length here can influence throughput so perhaps make multiple connection profiles
|
||||
// available.
|
||||
@ -118,9 +121,12 @@ STATIC uint32_t ble_stack_enable(void) {
|
||||
}
|
||||
|
||||
memset(&ble_conf, 0, sizeof(ble_conf));
|
||||
// adv_set_count must be == 1 for S140. Cannot be increased.
|
||||
ble_conf.gap_cfg.role_count_cfg.adv_set_count = 1;
|
||||
ble_conf.gap_cfg.role_count_cfg.periph_role_count = 2;
|
||||
ble_conf.gap_cfg.role_count_cfg.central_role_count = 1;
|
||||
// periph_role_count costs 1232 bytes for 2 to 3, then ~1840 for each further increment.
|
||||
ble_conf.gap_cfg.role_count_cfg.periph_role_count = 4;
|
||||
// central_role_count costs 648 bytes for 1 to 2, then ~1250 for each further increment.
|
||||
ble_conf.gap_cfg.role_count_cfg.central_role_count = 4;
|
||||
err_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_conf, app_ram_start);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return err_code;
|
||||
@ -128,7 +134,10 @@ STATIC uint32_t ble_stack_enable(void) {
|
||||
|
||||
memset(&ble_conf, 0, sizeof(ble_conf));
|
||||
ble_conf.conn_cfg.conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM;
|
||||
ble_conf.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = MAX_TX_IN_PROGRESS;
|
||||
// Each increment to hvn_tx_queue_size costs 2064 bytes.
|
||||
// DevZone recommends not setting this directly, but instead changing gap_conn_cfg.event_length.
|
||||
// However, we are setting connection extension, so this seems to make sense.
|
||||
ble_conf.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = 9;
|
||||
err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &ble_conf, app_ram_start);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return err_code;
|
||||
@ -143,10 +152,11 @@ STATIC uint32_t ble_stack_enable(void) {
|
||||
return err_code;
|
||||
}
|
||||
|
||||
// Triple the GATT Server attribute size to accomodate both the CircuitPython built-in service
|
||||
// Increase the GATT Server attribute size to accomodate both the CircuitPython built-in service
|
||||
// and anything the user does.
|
||||
memset(&ble_conf, 0, sizeof(ble_conf));
|
||||
ble_conf.gatts_cfg.attr_tab_size.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 3;
|
||||
// Each increment to the BLE_GATTS_ATTR_TAB_SIZE_DEFAULT multiplier costs 1408 bytes.
|
||||
ble_conf.gatts_cfg.attr_tab_size.attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 5;
|
||||
err_code = sd_ble_cfg_set(BLE_GATTS_CFG_ATTR_TAB_SIZE, &ble_conf, app_ram_start);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return err_code;
|
||||
@ -155,7 +165,8 @@ STATIC uint32_t ble_stack_enable(void) {
|
||||
// Increase the number of vendor UUIDs supported. Apple uses a complete random number per
|
||||
// service and characteristic.
|
||||
memset(&ble_conf, 0, sizeof(ble_conf));
|
||||
ble_conf.common_cfg.vs_uuid_cfg.vs_uuid_count = 32; // Defaults to 10.
|
||||
// Each additional vs_uuid_count costs 16 bytes.
|
||||
ble_conf.common_cfg.vs_uuid_cfg.vs_uuid_count = 75; // Defaults to 10.
|
||||
err_code = sd_ble_cfg_set(BLE_COMMON_CFG_VS_UUID, &ble_conf, app_ram_start);
|
||||
if (err_code != NRF_SUCCESS) {
|
||||
return err_code;
|
||||
|
@ -35,7 +35,7 @@
|
||||
#include "shared-bindings/_bleio/Connection.h"
|
||||
#include "shared-bindings/_bleio/ScanResults.h"
|
||||
|
||||
#define BLEIO_TOTAL_CONNECTION_COUNT 2
|
||||
#define BLEIO_TOTAL_CONNECTION_COUNT 5
|
||||
|
||||
extern bleio_connection_internal_t bleio_connections[BLEIO_TOTAL_CONNECTION_COUNT];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user