Fix ble bonding fail

This commit is contained in:
silabs-ChatNguyen 2023-05-16 09:46:15 +07:00
parent afdc3a5ced
commit 8ca87a5d27
12 changed files with 32 additions and 85 deletions

View File

@ -88,7 +88,7 @@ SRC_C += \
mphalport.c \ mphalport.c \
$(SILABS_BUILD)/pins.c\ $(SILABS_BUILD)/pins.c\
ifeq ('$(BOARD)','brd2601b') ifneq (,$(wildcard boards/$(BOARD)/sensor.c))
SRC_C += boards/$(BOARD)/sensor.c SRC_C += boards/$(BOARD)/sensor.c
endif endif

View File

@ -24,4 +24,3 @@ requires:
recommends: recommends:
- id: sensor_rht - id: sensor_rht
- id: sensor_lux - id: sensor_lux
- id: bt_rail_compatibility_fix

View File

@ -1,14 +1,15 @@
BOARD_BRD = brd2601b BOARD_BRD = brd2601b
INTERNAL_FLASH_FILESYSTEM = 0 INTERNAL_FLASH_FILESYSTEM = 1
QSPI_FLASH_FILESYSTEM = 0 QSPI_FLASH_FILESYSTEM = 0
SPI_FLASH_FILESYSTEM = 1 SPI_FLASH_FILESYSTEM = 0
EXTERNAL_FLASH_DEVICES = MX25R3235F EXTERNAL_FLASH_DEVICES = MX25R3235F
MCU_SERIES = MG24 MCU_SERIES = MG24
MCU_VARIANT = EFR32MG24B310F1536IM48 MCU_VARIANT = EFR32MG24B310F1536IM48
CIRCUITPY_USB = 0 CIRCUITPY_USB = 0
CIRCUITPY_SDCARDIO = 1
CIRCUITPY_CREATOR_ID = 0x19960000 CIRCUITPY_CREATOR_ID = 0x19960000
CIRCUITPY_CREATION_ID = 0x00242601 CIRCUITPY_CREATION_ID = 0x00242601

View File

@ -10,8 +10,8 @@ PB2,BTN0,1,2
PB3,BTN1,1,3 PB3,BTN1,1,3
PC0,FLASH_CS,2,0 PC0,FLASH_CS,2,0
PC1,SCLK,2,1 PC1,SCLK,2,1
PC2,CIPO,2,2 PC2,MISO,2,2
PC3,COPI,2,3 PC3,MOSI,2,3
PC4,SCL,2,4 PC4,SCL,2,4
PC5,SDA,2,5 PC5,SDA,2,5
PC9,SENSOR_CS,2,9 PC9,SENSOR_CS,2,9

1 mcu_name board_name port pin
10 PB3 BTN1 1 3
11 PC0 FLASH_CS 2 0
12 PC1 SCLK 2 1
13 PC2 CIPO MISO 2 2
14 PC3 COPI MOSI 2 3
15 PC4 SCL 2 4
16 PC5 SDA 2 5
17 PC9 SENSOR_CS 2 9

View File

@ -16,5 +16,3 @@ provides:
- name: custom_brd2703a_cp_support - name: custom_brd2703a_cp_support
requires: requires:
- name: efr32mg24b210f1536im48 - name: efr32mg24b210f1536im48
recommends:
- id: bt_rail_compatibility_fix

View File

@ -37,8 +37,8 @@
#define BOARD_HSE_SOURCE (RCC_HSE_BYPASS) #define BOARD_HSE_SOURCE (RCC_HSE_BYPASS)
#define BOARD_HAS_LOW_SPEED_CRYSTAL (0) #define BOARD_HAS_LOW_SPEED_CRYSTAL (0)
#define DEFAULT_I2C_BUS_SDA (&pin_PB5) #define DEFAULT_I2C_BUS_SDA (&pin_PC5)
#define DEFAULT_I2C_BUS_SCL (&pin_PB4) #define DEFAULT_I2C_BUS_SCL (&pin_PC4)
#define DEFAULT_I2C_PERIPHERAL I2C0 #define DEFAULT_I2C_PERIPHERAL I2C0
#define DEFAULT_SPI_BUS_SCK (&pin_PC1) #define DEFAULT_SPI_BUS_SCK (&pin_PC1)

View File

@ -7,6 +7,7 @@ MCU_SERIES = MG24
MCU_VARIANT = EFR32MG24B210F1536IM48 MCU_VARIANT = EFR32MG24B210F1536IM48
CIRCUITPY_USB = 0 CIRCUITPY_USB = 0
CIRCUITPY_SDCARDIO = 1
CIRCUITPY_CREATOR_ID = 0x19960000 CIRCUITPY_CREATOR_ID = 0x19960000
CIRCUITPY_CREATION_ID = 0x00242703 CIRCUITPY_CREATION_ID = 0x00242703

View File

@ -42,7 +42,6 @@ component:
- {id: sleeptimer} - {id: sleeptimer}
- {id: emlib_wdog} - {id: emlib_wdog}
- {id: bluetooth_feature_connection} - {id: bluetooth_feature_connection}
- {id: rail_lib_multiprotocol}
- {id: bluetooth_feature_dynamic_gattdb} - {id: bluetooth_feature_dynamic_gattdb}
- {id: bluetooth_feature_system} - {id: bluetooth_feature_system}
- {id: bluetooth_feature_scanner} - {id: bluetooth_feature_scanner}

View File

@ -280,9 +280,10 @@ uint32_t _common_hal_bleio_adapter_start_advertising(
const bleio_address_obj_t *directed_to) { const bleio_address_obj_t *directed_to) {
sl_status_t sc = SL_STATUS_FAIL; sl_status_t sc = SL_STATUS_FAIL;
int16_t power = tx_power * 10; // TX power in 0.1 dBm steps
int16_t set_power; int16_t set_power;
uint32_t interval_min = 160; uint32_t interval_min = (uint32_t)(interval * 1600); // (milliseconds * 1.6)
uint32_t interval_max = 160; uint32_t interval_max = (uint32_t)(interval * 1600); // (milliseconds * 1.6)
bd_addr address; bd_addr address;
uint8_t address_type; uint8_t address_type;
uint8_t system_id[8]; uint8_t system_id[8];
@ -328,7 +329,7 @@ uint32_t _common_hal_bleio_adapter_start_advertising(
} }
sc = sl_bt_advertiser_set_tx_power(self->advertising_handle, sc = sl_bt_advertiser_set_tx_power(self->advertising_handle,
tx_power, power,
&set_power); &set_power);
if (SL_STATUS_OK != sc) { if (SL_STATUS_OK != sc) {
return sc; return sc;

View File

@ -41,6 +41,7 @@
STATIC conn_state_t conn_state; STATIC conn_state_t conn_state;
osMutexId_t bluetooth_connection_mutex_id; osMutexId_t bluetooth_connection_mutex_id;
bleio_adapter_obj_t common_hal_bleio_adapter_obj; bleio_adapter_obj_t common_hal_bleio_adapter_obj;
uint8_t ble_bonding_handle = 0xFF;
__ALIGNED(4) static uint8_t bluetooth_connection_mutex_cb[osMutexCbSize]; __ALIGNED(4) static uint8_t bluetooth_connection_mutex_cb[osMutexCbSize];
const osMutexAttr_t bluetooth_connection_mutex_attr = { const osMutexAttr_t bluetooth_connection_mutex_attr = {
@ -106,7 +107,6 @@ void common_hal_bleio_check_connected(uint16_t conn_handle) {
// Bluetooth stack event handler. // Bluetooth stack event handler.
void sl_bt_on_event(sl_bt_msg_t *evt) { void sl_bt_on_event(sl_bt_msg_t *evt) {
sl_status_t sc = SL_STATUS_OK;
bd_addr address; bd_addr address;
uint8_t address_type = 0; uint8_t address_type = 0;
STATIC uint8_t serv_idx = 0; STATIC uint8_t serv_idx = 0;
@ -122,23 +122,18 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
case sl_bt_evt_system_boot_id: case sl_bt_evt_system_boot_id:
sc = sl_bt_system_get_identity_address(&address, &address_type); sl_bt_system_get_identity_address(&address, &address_type);
snprintf((char *)device_name, 14 + 1, snprintf((char *)device_name, 14 + 1,
"CIRCUITPY-%X%X",address.addr[1], address.addr[0]); "CIRCUITPY-%X%X",address.addr[1], address.addr[0]);
sl_bt_gatt_server_write_attribute_value(gattdb_device_name, sl_bt_gatt_server_write_attribute_value(gattdb_device_name,
0,14,device_name); 0,14,device_name);
sc = sl_bt_sm_configure(0x00,sl_bt_sm_io_capability_noinputnooutput); sl_bt_sm_store_bonding_configuration(5,2);
if (SL_STATUS_OK != sc) {
mp_raise_bleio_BluetoothError(translate("Sm configure fail"));
}
sc = sl_bt_sm_set_bondable_mode(1); sl_bt_sm_configure(0x00,sl_bt_sm_io_capability_noinputnooutput);
if (SL_STATUS_OK != sc) {
mp_raise_bleio_BluetoothError(translate("Set bondable mode fail")); sl_bt_sm_set_bondable_mode(1);
}
sl_bt_sm_delete_bondings();
break; break;
// This event indicates that a new connection was opened. // This event indicates that a new connection was opened.
@ -154,14 +149,7 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
bleio_connections[0].is_central = false; bleio_connections[0].is_central = false;
bleio_connections[0].mtu = 0; bleio_connections[0].mtu = 0;
} }
ble_bonding_handle = evt->data.evt_connection_opened.bonding;
sc = sl_bt_sm_increase_security(
evt->data.evt_connection_opened.connection);
if (SL_STATUS_OK != sc) {
mp_raise_bleio_BluetoothError(
translate("Increase security fail."));
}
osMutexRelease(bluetooth_connection_mutex_id); osMutexRelease(bluetooth_connection_mutex_id);
break; break;
@ -181,6 +169,8 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
case sl_bt_evt_connection_closed_id: case sl_bt_evt_connection_closed_id:
common_hal_bleio_adapter_remove_connection( common_hal_bleio_adapter_remove_connection(
evt->data.evt_connection_closed.connection); evt->data.evt_connection_closed.connection);
// reset bonding handle variable to avoid deleting wrong bonding info
ble_bonding_handle = 0xFF;
break; break;
case sl_bt_evt_system_external_signal_id: case sl_bt_evt_system_external_signal_id:
@ -306,7 +296,7 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
&& serv_idx < connection->remote_service_list->len) { && serv_idx < connection->remote_service_list->len) {
service = connection->remote_service_list->items[serv_idx]; service = connection->remote_service_list->items[serv_idx];
sc = sl_bt_gatt_discover_characteristics( sl_bt_gatt_discover_characteristics(
evt->data.evt_gatt_procedure_completed.connection, evt->data.evt_gatt_procedure_completed.connection,
service->handle); service->handle);
@ -366,34 +356,20 @@ void sl_bt_on_event(sl_bt_msg_t *evt) {
break; break;
case sl_bt_evt_sm_confirm_bonding_id: case sl_bt_evt_sm_confirm_bonding_id:
sc = sl_bt_sm_bonding_confirm( sl_bt_sm_bonding_confirm(evt->data.evt_sm_confirm_bonding.connection,1);
evt->data.evt_sm_confirm_bonding.connection,1);
if (SL_STATUS_OK != sc) {
mp_raise_bleio_BluetoothError(
translate("Bonding confirm fail"));
}
break; break;
case sl_bt_evt_sm_bonded_id: case sl_bt_evt_sm_bonded_id:
break; break;
case sl_bt_evt_sm_bonding_failed_id: case sl_bt_evt_sm_bonding_failed_id:
if (ble_bonding_handle != 0xFF) {
sl_bt_sm_delete_bonding(ble_bonding_handle);
ble_bonding_handle = 0xFF;
}
break; break;
case sl_bt_evt_connection_parameters_id: case sl_bt_evt_connection_parameters_id:
switch (evt->data.evt_connection_parameters.security_mode)
{
case connection_mode1_level1:
break;
case connection_mode1_level2:
break;
case connection_mode1_level3:
break;
case connection_mode1_level4:
break;
default:
break;
}
break; break;
default: default:

View File

@ -91,10 +91,10 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self,
// Resolution is not configurable directly but is based on the // Resolution is not configurable directly but is based on the
// selected oversampling ratio (osrHighSpeed), which defaults to // selected oversampling ratio (osrHighSpeed), which defaults to
// 2x and generates 12-bit results. // 2x and generates 12-bit results.
initAllConfigs.configs[0].reference = iadcCfgReferenceInt1V2; initAllConfigs.configs[0].reference = iadcCfgReferenceVddx;
initAllConfigs.configs[0].vRef = 1210; initAllConfigs.configs[0].vRef = 3300;
initAllConfigs.configs[0].osrHighSpeed = iadcCfgOsrHighSpeed2x; initAllConfigs.configs[0].osrHighSpeed = iadcCfgOsrHighSpeed2x;
initAllConfigs.configs[0].analogGain = iadcCfgAnalogGain0P5x; initAllConfigs.configs[0].analogGain = iadcCfgAnalogGain1x;
// Divide CLK_SRC_ADC to set the CLK_ADC frequency // Divide CLK_SRC_ADC to set the CLK_ADC frequency
initAllConfigs.configs[0].adcClkPrescale initAllConfigs.configs[0].adcClkPrescale
@ -212,5 +212,5 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
// Get adc ref value // Get adc ref value
float common_hal_analogio_analogin_get_reference_voltage float common_hal_analogio_analogin_get_reference_voltage
(analogio_analogin_obj_t *self) { (analogio_analogin_obj_t *self) {
return 2.42f; return 3.3f;
} }

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="ASCII"?>
<device:XMLDevice xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:device="http://www.silabs.com/ss/hwconfig/document/device.ecore" name="pin_tool.EFR32MG24B310F1536IM48" partId="mcu.arm.efr32.mg24.efr32mg24b310f1536im48" contextId="com.silabs.sdk.stack.super:4.1.0._-50688992">
<mode name="DefaultMode">
<property object="DefaultMode" propertyId="mode.diagramLocation" value="100, 100"/>
<property object="PC00" propertyId="ABModule.selectedRequirement" value="gpio%T%SL_MX25_FLASH_SHUTDOWN_CS%T%sl_mx25_flash_shutdown_eusart_config.h"/>
<property object="PC00" propertyId="pin.reserve" value="Reserved"/>
<property object="PC08" propertyId="ABModule.selectedRequirement" value="gpio%T%SL_BOARD_ENABLE_SENSOR_MICROPHONE%T%sl_board_control_config.h"/>
<property object="PC08" propertyId="pin.reserve" value="Reserved"/>
<property object="PC09" propertyId="ABModule.selectedRequirement" value="gpio%T%SL_BOARD_ENABLE_SENSOR_IMU%T%sl_board_control_config.h"/>
<property object="PC09" propertyId="pin.reserve" value="Reserved"/>
<property object="PORTIO" propertyId="portio.pti.enable.dframe" value="Enabled"/>
<property object="PORTIO" propertyId="portio.pti.enable.dout" value="Enabled"/>
<property object="PORTIO" propertyId="portio.pti.location.dframe" value="39"/>
<property object="PORTIO" propertyId="portio.pti.location.dout" value="38"/>
<property object="PORTIO" propertyId="portio.usart0.enable.rx" value="Enabled"/>
<property object="PORTIO" propertyId="portio.usart0.enable.tx" value="Enabled"/>
<property object="PORTIO" propertyId="portio.usart0.location.rx" value="6"/>
<property object="PORTIO" propertyId="portio.usart0.location.tx" value="5"/>
<property object="PTI" propertyId="ABModule.selectedRequirement" value="pti%T%SL_RAIL_UTIL_PTI%T%sl_rail_util_pti_config.h"/>
<property object="PTI" propertyId="ABPeripheral.included" value="true"/>
<property object="USART0" propertyId="ABModule.selectedRequirement" value="usart%T%SL_IOSTREAM_USART_VCOM%T%sl_iostream_usart_vcom_config.h"/>
<property object="USART0" propertyId="ABPeripheral.included" value="true"/>
</mode>
<modeTransition>
<property object="RESET &#x2192; DefaultMode" propertyId="modeTransition.source" value="RESET"/>
<property object="RESET &#x2192; DefaultMode" propertyId="modeTransition.target" value="DefaultMode"/>
</modeTransition>
</device:XMLDevice>