kopia lustrzana https://github.com/micropython/micropython
Merge 6634fea239
into e60e8079a7
commit
b4ca546d1e
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue