@@ -108,6 +108,9 @@ STATIC uint32_t ble_stack_enable(void) {
108
108
109
109
ble_cfg_t ble_conf ;
110
110
ble_conf .conn_cfg .conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM ;
111
+ // Each additional connection costs:
112
+ // about 3700-4300 bytes when .hvn_tx_queue_size is 1
113
+ // about 9000 bytes when .hvn_tx_queue_size is 10
111
114
ble_conf .conn_cfg .params .gap_conn_cfg .conn_count = BLEIO_TOTAL_CONNECTION_COUNT ;
112
115
// Event length here can influence throughput so perhaps make multiple connection profiles
113
116
// available.
@@ -118,17 +121,23 @@ STATIC uint32_t ble_stack_enable(void) {
118
121
}
119
122
120
123
memset (& ble_conf , 0 , sizeof (ble_conf ));
124
+ // adv_set_count must be == 1 for S140. Cannot be increased.
121
125
ble_conf .gap_cfg .role_count_cfg .adv_set_count = 1 ;
122
- ble_conf .gap_cfg .role_count_cfg .periph_role_count = 2 ;
123
- ble_conf .gap_cfg .role_count_cfg .central_role_count = 1 ;
126
+ // periph_role_count costs 1232 bytes for 2 to 3, then ~1840 for each further increment.
127
+ ble_conf .gap_cfg .role_count_cfg .periph_role_count = 4 ;
128
+ // central_role_count costs 648 bytes for 1 to 2, then ~1250 for each further increment.
129
+ ble_conf .gap_cfg .role_count_cfg .central_role_count = 4 ;
124
130
err_code = sd_ble_cfg_set (BLE_GAP_CFG_ROLE_COUNT , & ble_conf , app_ram_start );
125
131
if (err_code != NRF_SUCCESS ) {
126
132
return err_code ;
127
133
}
128
134
129
135
memset (& ble_conf , 0 , sizeof (ble_conf ));
130
136
ble_conf .conn_cfg .conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM ;
131
- ble_conf .conn_cfg .params .gatts_conn_cfg .hvn_tx_queue_size = MAX_TX_IN_PROGRESS ;
137
+ // Each increment to hvn_tx_queue_size costs 2064 bytes.
138
+ // DevZone recommends not setting this directly, but instead changing gap_conn_cfg.event_length.
139
+ // However, we are setting connection extension, so this seems to make sense.
140
+ ble_conf .conn_cfg .params .gatts_conn_cfg .hvn_tx_queue_size = 9 ;
132
141
err_code = sd_ble_cfg_set (BLE_CONN_CFG_GATTS , & ble_conf , app_ram_start );
133
142
if (err_code != NRF_SUCCESS ) {
134
143
return err_code ;
@@ -143,10 +152,11 @@ STATIC uint32_t ble_stack_enable(void) {
143
152
return err_code ;
144
153
}
145
154
146
- // Triple the GATT Server attribute size to accomodate both the CircuitPython built-in service
155
+ // Increase the GATT Server attribute size to accomodate both the CircuitPython built-in service
147
156
// and anything the user does.
148
157
memset (& ble_conf , 0 , sizeof (ble_conf ));
149
- ble_conf .gatts_cfg .attr_tab_size .attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 3 ;
158
+ // Each increment to the BLE_GATTS_ATTR_TAB_SIZE_DEFAULT multiplier costs 1408 bytes.
159
+ ble_conf .gatts_cfg .attr_tab_size .attr_tab_size = BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 5 ;
150
160
err_code = sd_ble_cfg_set (BLE_GATTS_CFG_ATTR_TAB_SIZE , & ble_conf , app_ram_start );
151
161
if (err_code != NRF_SUCCESS ) {
152
162
return err_code ;
@@ -155,7 +165,8 @@ STATIC uint32_t ble_stack_enable(void) {
155
165
// Increase the number of vendor UUIDs supported. Apple uses a complete random number per
156
166
// service and characteristic.
157
167
memset (& ble_conf , 0 , sizeof (ble_conf ));
158
- ble_conf .common_cfg .vs_uuid_cfg .vs_uuid_count = 32 ; // Defaults to 10.
168
+ // Each additional vs_uuid_count costs 16 bytes.
169
+ ble_conf .common_cfg .vs_uuid_cfg .vs_uuid_count = 75 ; // Defaults to 10.
159
170
err_code = sd_ble_cfg_set (BLE_COMMON_CFG_VS_UUID , & ble_conf , app_ram_start );
160
171
if (err_code != NRF_SUCCESS ) {
161
172
return err_code ;
0 commit comments