Skip to content

Commit 8ca87a5

Browse files
Fix ble bonding fail
1 parent afdc3a5 commit 8ca87a5

File tree

12 files changed

+32
-85
lines changed

12 files changed

+32
-85
lines changed

ports/silabs/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ SRC_C += \
8888
mphalport.c \
8989
$(SILABS_BUILD)/pins.c\
9090

91-
ifeq ('$(BOARD)','brd2601b')
91+
ifneq (,$(wildcard boards/$(BOARD)/sensor.c))
9292
SRC_C += boards/$(BOARD)/sensor.c
9393
endif
9494

ports/silabs/boards/devkit_xg24_brd2601b/custom_brd2601b_cp_support.slcc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,3 @@ requires:
2424
recommends:
2525
- id: sensor_rht
2626
- id: sensor_lux
27-
- id: bt_rail_compatibility_fix

ports/silabs/boards/devkit_xg24_brd2601b/mpconfigboard.mk

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11

22
BOARD_BRD = brd2601b
3-
INTERNAL_FLASH_FILESYSTEM = 0
3+
INTERNAL_FLASH_FILESYSTEM = 1
44
QSPI_FLASH_FILESYSTEM = 0
5-
SPI_FLASH_FILESYSTEM = 1
5+
SPI_FLASH_FILESYSTEM = 0
66
EXTERNAL_FLASH_DEVICES = MX25R3235F
77

88
MCU_SERIES = MG24
99
MCU_VARIANT = EFR32MG24B310F1536IM48
1010

1111
CIRCUITPY_USB = 0
12+
CIRCUITPY_SDCARDIO = 1
1213

1314
CIRCUITPY_CREATOR_ID = 0x19960000
1415
CIRCUITPY_CREATION_ID = 0x00242601

ports/silabs/boards/devkit_xg24_brd2601b/pins.csv

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ PB2,BTN0,1,2
1010
PB3,BTN1,1,3
1111
PC0,FLASH_CS,2,0
1212
PC1,SCLK,2,1
13-
PC2,CIPO,2,2
14-
PC3,COPI,2,3
13+
PC2,MISO,2,2
14+
PC3,MOSI,2,3
1515
PC4,SCL,2,4
1616
PC5,SDA,2,5
1717
PC9,SENSOR_CS,2,9

ports/silabs/boards/explorerkit_xg24_brd2703a/custom_brd2703a_cp_support.slcc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,3 @@ provides:
1616
- name: custom_brd2703a_cp_support
1717
requires:
1818
- name: efr32mg24b210f1536im48
19-
recommends:
20-
- id: bt_rail_compatibility_fix

ports/silabs/boards/explorerkit_xg24_brd2703a/mpconfigboard.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
#define BOARD_HSE_SOURCE (RCC_HSE_BYPASS)
3838
#define BOARD_HAS_LOW_SPEED_CRYSTAL (0)
3939

40-
#define DEFAULT_I2C_BUS_SDA (&pin_PB5)
41-
#define DEFAULT_I2C_BUS_SCL (&pin_PB4)
40+
#define DEFAULT_I2C_BUS_SDA (&pin_PC5)
41+
#define DEFAULT_I2C_BUS_SCL (&pin_PC4)
4242
#define DEFAULT_I2C_PERIPHERAL I2C0
4343

4444
#define DEFAULT_SPI_BUS_SCK (&pin_PC1)

ports/silabs/boards/explorerkit_xg24_brd2703a/mpconfigboard.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ MCU_SERIES = MG24
77
MCU_VARIANT = EFR32MG24B210F1536IM48
88

99
CIRCUITPY_USB = 0
10+
CIRCUITPY_SDCARDIO = 1
1011

1112
CIRCUITPY_CREATOR_ID = 0x19960000
1213
CIRCUITPY_CREATION_ID = 0x00242703

ports/silabs/circuitpython_efr32.slcp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ component:
4242
- {id: sleeptimer}
4343
- {id: emlib_wdog}
4444
- {id: bluetooth_feature_connection}
45-
- {id: rail_lib_multiprotocol}
4645
- {id: bluetooth_feature_dynamic_gattdb}
4746
- {id: bluetooth_feature_system}
4847
- {id: bluetooth_feature_scanner}

ports/silabs/common-hal/_bleio/Adapter.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,10 @@ uint32_t _common_hal_bleio_adapter_start_advertising(
280280
const bleio_address_obj_t *directed_to) {
281281

282282
sl_status_t sc = SL_STATUS_FAIL;
283+
int16_t power = tx_power * 10; // TX power in 0.1 dBm steps
283284
int16_t set_power;
284-
uint32_t interval_min = 160;
285-
uint32_t interval_max = 160;
285+
uint32_t interval_min = (uint32_t)(interval * 1600); // (milliseconds * 1.6)
286+
uint32_t interval_max = (uint32_t)(interval * 1600); // (milliseconds * 1.6)
286287
bd_addr address;
287288
uint8_t address_type;
288289
uint8_t system_id[8];
@@ -328,7 +329,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(
328329
}
329330

330331
sc = sl_bt_advertiser_set_tx_power(self->advertising_handle,
331-
tx_power,
332+
power,
332333
&set_power);
333334
if (SL_STATUS_OK != sc) {
334335
return sc;

ports/silabs/common-hal/_bleio/__init__.c

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
STATIC conn_state_t conn_state;
4242
osMutexId_t bluetooth_connection_mutex_id;
4343
bleio_adapter_obj_t common_hal_bleio_adapter_obj;
44+
uint8_t ble_bonding_handle = 0xFF;
4445

4546
__ALIGNED(4) static uint8_t bluetooth_connection_mutex_cb[osMutexCbSize];
4647
const osMutexAttr_t bluetooth_connection_mutex_attr = {
@@ -106,7 +107,6 @@ void common_hal_bleio_check_connected(uint16_t conn_handle) {
106107

107108
// Bluetooth stack event handler.
108109
void sl_bt_on_event(sl_bt_msg_t *evt) {
109-
sl_status_t sc = SL_STATUS_OK;
110110
bd_addr address;
111111
uint8_t address_type = 0;
112112
STATIC uint8_t serv_idx = 0;
@@ -122,23 +122,18 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
122122

123123
case sl_bt_evt_system_boot_id:
124124

125-
sc = sl_bt_system_get_identity_address(&address, &address_type);
125+
sl_bt_system_get_identity_address(&address, &address_type);
126126

127127
snprintf((char *)device_name, 14 + 1,
128128
"CIRCUITPY-%X%X",address.addr[1], address.addr[0]);
129129
sl_bt_gatt_server_write_attribute_value(gattdb_device_name,
130130
0,14,device_name);
131131

132-
sc = sl_bt_sm_configure(0x00,sl_bt_sm_io_capability_noinputnooutput);
133-
if (SL_STATUS_OK != sc) {
134-
mp_raise_bleio_BluetoothError(translate("Sm configure fail"));
135-
}
132+
sl_bt_sm_store_bonding_configuration(5,2);
136133

137-
sc = sl_bt_sm_set_bondable_mode(1);
138-
if (SL_STATUS_OK != sc) {
139-
mp_raise_bleio_BluetoothError(translate("Set bondable mode fail"));
140-
}
141-
sl_bt_sm_delete_bondings();
134+
sl_bt_sm_configure(0x00,sl_bt_sm_io_capability_noinputnooutput);
135+
136+
sl_bt_sm_set_bondable_mode(1);
142137
break;
143138

144139
// This event indicates that a new connection was opened.
@@ -154,14 +149,7 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
154149
bleio_connections[0].is_central = false;
155150
bleio_connections[0].mtu = 0;
156151
}
157-
158-
sc = sl_bt_sm_increase_security(
159-
evt->data.evt_connection_opened.connection);
160-
161-
if (SL_STATUS_OK != sc) {
162-
mp_raise_bleio_BluetoothError(
163-
translate("Increase security fail."));
164-
}
152+
ble_bonding_handle = evt->data.evt_connection_opened.bonding;
165153
osMutexRelease(bluetooth_connection_mutex_id);
166154
break;
167155

@@ -181,6 +169,8 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
181169
case sl_bt_evt_connection_closed_id:
182170
common_hal_bleio_adapter_remove_connection(
183171
evt->data.evt_connection_closed.connection);
172+
// reset bonding handle variable to avoid deleting wrong bonding info
173+
ble_bonding_handle = 0xFF;
184174
break;
185175

186176
case sl_bt_evt_system_external_signal_id:
@@ -306,7 +296,7 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
306296
&& serv_idx < connection->remote_service_list->len) {
307297

308298
service = connection->remote_service_list->items[serv_idx];
309-
sc = sl_bt_gatt_discover_characteristics(
299+
sl_bt_gatt_discover_characteristics(
310300
evt->data.evt_gatt_procedure_completed.connection,
311301
service->handle);
312302

@@ -366,34 +356,20 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
366356
break;
367357

368358
case sl_bt_evt_sm_confirm_bonding_id:
369-
sc = sl_bt_sm_bonding_confirm(
370-
evt->data.evt_sm_confirm_bonding.connection,1);
371-
if (SL_STATUS_OK != sc) {
372-
mp_raise_bleio_BluetoothError(
373-
translate("Bonding confirm fail"));
374-
}
359+
sl_bt_sm_bonding_confirm(evt->data.evt_sm_confirm_bonding.connection,1);
375360
break;
376361

377362
case sl_bt_evt_sm_bonded_id:
378363
break;
379364

380365
case sl_bt_evt_sm_bonding_failed_id:
366+
if (ble_bonding_handle != 0xFF) {
367+
sl_bt_sm_delete_bonding(ble_bonding_handle);
368+
ble_bonding_handle = 0xFF;
369+
}
381370
break;
382371

383372
case sl_bt_evt_connection_parameters_id:
384-
switch (evt->data.evt_connection_parameters.security_mode)
385-
{
386-
case connection_mode1_level1:
387-
break;
388-
case connection_mode1_level2:
389-
break;
390-
case connection_mode1_level3:
391-
break;
392-
case connection_mode1_level4:
393-
break;
394-
default:
395-
break;
396-
}
397373
break;
398374

399375
default:

0 commit comments

Comments
 (0)