felixdoerre 2024-04-26 11:32:30 +02:00 zatwierdzone przez GitHub
commit b4ca546d1e
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
5 zmienionych plików z 109 dodań i 30 usunięć

Wyświetl plik

@ -16,45 +16,45 @@ target_include_directories(micropy_extmod_btstack INTERFACE
target_sources(micropy_extmod_btstack INTERFACE
${BTSTACK_LIB_DIR}/platform/embedded/hci_dump_embedded_stdout.c
${BTSTACK_LIB_DIR}/src/ad_parser.c
#${BTSTACK_LIB_DIR}/src/ad_parser.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/ancs_client.c
${BTSTACK_LIB_DIR}/src/ble/att_db.c
${BTSTACK_LIB_DIR}/src/ble/att_db_util.c
${BTSTACK_LIB_DIR}/src/ble/att_dispatch.c
${BTSTACK_LIB_DIR}/src/ble/att_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/battery_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/cycling_power_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/cycling_speed_and_cadence_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/device_information_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/heart_rate_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/hids_device.c
${BTSTACK_LIB_DIR}/src/mesh/gatt-service/mesh_provisioning_service_server.c
${BTSTACK_LIB_DIR}/src/mesh/gatt-service/mesh_proxy_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/nordic_spp_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt-service/ublox_spp_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/battery_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/cycling_power_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/cycling_speed_and_cadence_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/device_information_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/heart_rate_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/hids_device.c
#${BTSTACK_LIB_DIR}/src/mesh/gatt-service/mesh_provisioning_service_server.c
#${BTSTACK_LIB_DIR}/src/mesh/gatt-service/mesh_proxy_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/nordic_spp_service_server.c
#${BTSTACK_LIB_DIR}/src/ble/gatt-service/ublox_spp_service_server.c
${BTSTACK_LIB_DIR}/src/ble/gatt_client.c
${BTSTACK_LIB_DIR}/src/ble/le_device_db_memory.c
${BTSTACK_LIB_DIR}/src/ble/le_device_db_tlv.c
${BTSTACK_LIB_DIR}/src/ble/sm.c
${BTSTACK_LIB_DIR}/src/btstack_audio.c
${BTSTACK_LIB_DIR}/src/btstack_base64_decoder.c
#${BTSTACK_LIB_DIR}/src/btstack_audio.c
#${BTSTACK_LIB_DIR}/src/btstack_base64_decoder.c
${BTSTACK_LIB_DIR}/src/btstack_crypto.c
${BTSTACK_LIB_DIR}/src/btstack_hid_parser.c
#${BTSTACK_LIB_DIR}/src/btstack_hid_parser.c
${BTSTACK_LIB_DIR}/src/btstack_linked_list.c
${BTSTACK_LIB_DIR}/src/btstack_memory.c
${BTSTACK_LIB_DIR}/src/btstack_memory_pool.c
${BTSTACK_LIB_DIR}/src/btstack_resample.c
${BTSTACK_LIB_DIR}/src/btstack_ring_buffer.c
#${BTSTACK_LIB_DIR}/src/btstack_resample.c
#${BTSTACK_LIB_DIR}/src/btstack_ring_buffer.c
${BTSTACK_LIB_DIR}/src/btstack_run_loop.c
${BTSTACK_LIB_DIR}/src/btstack_run_loop_base.c
${BTSTACK_LIB_DIR}/src/btstack_slip.c
#${BTSTACK_LIB_DIR}/src/btstack_slip.c
${BTSTACK_LIB_DIR}/src/btstack_tlv.c
${BTSTACK_LIB_DIR}/src/btstack_tlv_none.c
#${BTSTACK_LIB_DIR}/src/btstack_tlv_none.c
${BTSTACK_LIB_DIR}/src/btstack_util.c
${BTSTACK_LIB_DIR}/src/hci.c
${BTSTACK_LIB_DIR}/src/hci_cmd.c
${BTSTACK_LIB_DIR}/src/hci_dump.c
${BTSTACK_LIB_DIR}/src/hci_transport_em9304_spi.c
${BTSTACK_LIB_DIR}/src/hci_transport_h4.c
#${BTSTACK_LIB_DIR}/src/hci_transport_em9304_spi.c
#${BTSTACK_LIB_DIR}/src/hci_transport_h4.c
${BTSTACK_LIB_DIR}/src/l2cap.c
${BTSTACK_LIB_DIR}/src/l2cap_signaling.c
)

Wyświetl plik

@ -34,7 +34,7 @@ INC += -I$(BTSTACK_DIR)/3rd-party/yxml
SRC_BTSTACK_C = \
$(addprefix lib/btstack/src/, $(SRC_FILES)) \
$(addprefix lib/btstack/src/ble/, $(filter-out %_tlv.c, $(SRC_BLE_FILES))) \
$(addprefix lib/btstack/src/ble/, $(filter-out le_device_db_memory.c, $(SRC_BLE_FILES))) \
lib/btstack/platform/embedded/hci_dump_embedded_stdout.c \
ifeq ($(MICROPY_BLUETOOTH_BTSTACK_USB),1)

Wyświetl plik

@ -35,7 +35,7 @@
#define MAX_NR_LE_DEVICE_DB_ENTRIES 4
// Link Key DB and LE Device DB using TLV on top of Flash Sector interface
// #define NVM_NUM_DEVICE_DB_ENTRIES 16
#define NVM_NUM_DEVICE_DB_ENTRIES 16
// We don't give btstack a malloc, so use a fixed-size ATT DB.
#define MAX_ATT_DB_SIZE 512

Wyświetl plik

@ -34,6 +34,8 @@
#include "extmod/modbluetooth.h"
#include "lib/btstack/src/btstack.h"
#include "lib/btstack/src/ble/le_device_db_tlv.h"
#include "lib/btstack/src/btstack_tlv.h"
#define DEBUG_printf(...) // printf("btstack: " __VA_ARGS__)
@ -300,6 +302,12 @@ static void btstack_packet_handler_generic(uint8_t packet_type, uint16_t channel
desc->sm_connection_authenticated,
desc->sm_le_db_index != -1,
desc->sm_actual_encryption_key_size);
} else if (event_type == SM_EVENT_PASSKEY_DISPLAY_NUMBER) {
mp_bluetooth_gap_on_passkey_action(sm_event_passkey_display_number_get_handle(packet), MP_BLUETOOTH_PASSKEY_ACTION_DISPLAY, sm_event_passkey_display_number_get_passkey(packet));
} else if (event_type == SM_EVENT_PASSKEY_INPUT_NUMBER) {
mp_bluetooth_gap_on_passkey_action(sm_event_passkey_input_number_get_handle(packet), MP_BLUETOOTH_PASSKEY_ACTION_INPUT, 0);
} else if (event_type == SM_EVENT_NUMERIC_COMPARISON_REQUEST) {
mp_bluetooth_gap_on_passkey_action(sm_event_numeric_comparison_request_get_handle(packet), MP_BLUETOOTH_PASSKEY_ACTION_NUMERIC_COMPARISON, sm_event_numeric_comparison_request_get_passkey(packet));
#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
} else if (event_type == HCI_EVENT_DISCONNECTION_COMPLETE) {
DEBUG_printf(" --> hci disconnect complete\n");
@ -372,7 +380,10 @@ static void btstack_packet_handler_generic(uint8_t packet_type, uint16_t channel
}
}
static btstack_packet_callback_registration_t hci_event_callback_registration = {
static btstack_packet_callback_registration_t mp_hci_event_callback_registration = {
.callback = &btstack_packet_handler_generic
};
static btstack_packet_callback_registration_t mp_sm_event_callback_registration = {
.callback = &btstack_packet_handler_generic
};
@ -590,10 +601,13 @@ static void deinit_stack(void) {
hci_deinit();
btstack_memory_deinit();
btstack_run_loop_deinit();
btstack_crypto_deinit();
MP_STATE_PORT(bluetooth_btstack_root_pointers) = NULL;
}
static const btstack_tlv_t btstack_tlv_mp;
int mp_bluetooth_init(void) {
DEBUG_printf("mp_bluetooth_init\n");
@ -623,6 +637,8 @@ int mp_bluetooth_init(void) {
mp_bluetooth_btstack_state = MP_BLUETOOTH_BTSTACK_STATE_STARTING;
l2cap_init();
btstack_tlv_set_instance(&btstack_tlv_mp, NULL);
le_device_db_tlv_configure(&btstack_tlv_mp, NULL);
le_device_db_init();
sm_init();
@ -641,7 +657,9 @@ int mp_bluetooth_init(void) {
#endif // MICROPY_PY_BLUETOOTH_ENABLE_GATT_CLIENT
// Register for HCI events.
hci_add_event_handler(&hci_event_callback_registration);
hci_add_event_handler(&mp_hci_event_callback_registration);
sm_add_event_handler(&mp_sm_event_callback_registration);
// Register for ATT server events.
att_server_register_packet_handler(&btstack_packet_handler_att_server);
@ -771,10 +789,14 @@ void mp_bluetooth_set_address_mode(uint8_t addr_mode) {
set_random_address();
break;
}
case MP_BLUETOOTH_ADDRESS_MODE_RPA:
case MP_BLUETOOTH_ADDRESS_MODE_NRPA:
// Not yet supported.
mp_raise_OSError(MP_EINVAL);
case MP_BLUETOOTH_ADDRESS_MODE_RPA: {
gap_random_address_set_mode(GAP_RANDOM_ADDRESS_RESOLVABLE);
break;
}
case MP_BLUETOOTH_ADDRESS_MODE_NRPA: {
gap_random_address_set_mode(GAP_RANDOM_ADDRESS_NON_RESOLVABLE);
break;
}
}
}
@ -1264,7 +1286,26 @@ int mp_bluetooth_gap_pair(uint16_t conn_handle) {
int mp_bluetooth_gap_passkey(uint16_t conn_handle, uint8_t action, mp_int_t passkey) {
DEBUG_printf("mp_bluetooth_gap_passkey: conn_handle=%d action=%d passkey=%d\n", conn_handle, action, (int)passkey);
return MP_EOPNOTSUPP;
switch (action) {
case MP_BLUETOOTH_PASSKEY_ACTION_INPUT: {
sm_passkey_input(conn_handle, passkey);
break;
}
case MP_BLUETOOTH_PASSKEY_ACTION_DISPLAY: {
sm_use_fixed_passkey_in_display_role(passkey);
break;
}
case MP_BLUETOOTH_PASSKEY_ACTION_NUMERIC_COMPARISON: {
if (passkey != 0) {
sm_numeric_comparison_confirm(conn_handle);
}
break;
}
default: {
return MP_EINVAL;
}
}
return 0;
}
#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
@ -1545,4 +1586,41 @@ int mp_bluetooth_l2cap_recvinto(uint16_t conn_handle, uint16_t cid, uint8_t *buf
MP_REGISTER_ROOT_POINTER(struct _mp_bluetooth_btstack_root_pointers_t *bluetooth_btstack_root_pointers);
#if MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
static int btstack_tlv_mp_get_tag(void *context, uint32_t tag, uint8_t *buffer, uint32_t buffer_size) {
UNUSED(context);
const uint8_t *data;
size_t data_len;
if (!mp_bluetooth_gap_on_get_secret(0, 0, (uint8_t *)&tag, sizeof(tag), &data, &data_len)) {
return -1;
}
if (data_len > buffer_size) {
return -1;
}
memcpy(buffer, data, data_len);
return data_len;
}
static int btstack_tlv_mp_store_tag(void *context, uint32_t tag, const uint8_t *data, uint32_t data_size) {
UNUSED(context);
if (mp_bluetooth_gap_on_set_secret(0, (uint8_t *)&tag, sizeof(tag), (uint8_t *)data, data_size)) {
return 0;
} else {
return 1;
}
}
static void btstack_tlv_mp_delete_tag(void *context, uint32_t tag) {
mp_bluetooth_gap_on_set_secret(0, (uint8_t *)&tag, sizeof(tag), NULL, 0);
}
static const btstack_tlv_t btstack_tlv_mp = {
&btstack_tlv_mp_get_tag,
&btstack_tlv_mp_store_tag,
&btstack_tlv_mp_delete_tag,
};
#endif // MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING
#endif // MICROPY_PY_BLUETOOTH && MICROPY_BLUETOOTH_BTSTACK

Wyświetl plik

@ -260,6 +260,7 @@ if(MICROPY_PY_BLUETOOTH)
MICROPY_PY_BLUETOOTH=1
MICROPY_PY_BLUETOOTH_USE_SYNC_EVENTS=1
MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE=1
MICROPY_PY_BLUETOOTH_ENABLE_PAIRING_BONDING=1
)
endif()