esp32: Implement BLE using Nimble from IDF 4.x.
This commit is contained in:
parent
902bb4ceae
commit
6a9bd1c1ab
@ -174,6 +174,29 @@ INC_ESPCOMP += -I$(ESPCOMP)/spi_flash/private_include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/wpa_supplicant/include/esp_supplicant
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/xtensa/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/xtensa/esp32/include
|
||||
ifeq ($(CONFIG_BT_NIMBLE_ENABLED),y)
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/common/osi/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/common/btc/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/common/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/porting/nimble/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/ans/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/bas/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/gap/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/gatt/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/ias/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/lls/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/tps/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/util/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/store/ram/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/nimble/host/store/config/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/porting/npl/freertos/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/nimble/ext/tinycrypt/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/bt/host/nimble/esp-hci/include
|
||||
endif
|
||||
else
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/ethernet/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/expat/expat/expat/lib
|
||||
@ -185,6 +208,17 @@ INC_ESPCOMP += -I$(ESPCOMP)/nghttp/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/nghttp/nghttp2/lib/includes
|
||||
endif
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
ifeq ($(MICROPY_PY_BLUETOOTH),1)
|
||||
CFLAGS_MOD += -DMICROPY_PY_BLUETOOTH=1
|
||||
CFLAGS_MOD += -DMICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE=1
|
||||
|
||||
ifeq ($(MICROPY_BLUETOOTH_NIMBLE),1)
|
||||
CFLAGS_MOD += -DMICROPY_BLUETOOTH_NIMBLE=1
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# these flags are common to C and C++ compilation
|
||||
CFLAGS_COMMON = -Os -ffunction-sections -fdata-sections -fstrict-volatile-bitfields \
|
||||
-mlongcalls -nostdlib \
|
||||
@ -270,6 +304,7 @@ SRC_C = \
|
||||
modnetwork.c \
|
||||
network_lan.c \
|
||||
network_ppp.c \
|
||||
nimble.c \
|
||||
modsocket.c \
|
||||
modesp.c \
|
||||
esp32_partition.c \
|
||||
@ -286,6 +321,7 @@ SRC_C = \
|
||||
|
||||
EXTMOD_SRC_C = $(addprefix extmod/,\
|
||||
modonewire.c \
|
||||
modbluetooth_nimble.c \
|
||||
)
|
||||
|
||||
LIB_SRC_C = $(addprefix lib/,\
|
||||
@ -461,6 +497,31 @@ ESPIDF_ESP_EVENT_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/esp_event/*.c))
|
||||
|
||||
ESPIDF_ESP_WIFI_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/esp_wifi/src/*.c))
|
||||
|
||||
ifeq ($(CONFIG_BT_NIMBLE_ENABLED),y)
|
||||
ESPIDF_BT_NIMBLE_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/bt/controller/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/common/btc/core/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/common/osi/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/esp-hci/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/ext/tinycrypt/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/ans/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/bas/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/gap/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/gatt/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/ias/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/lls/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/services/tps/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/store/config/src/ble_store_config.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/store/config/src/ble_store_nvs.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/store/ram/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/host/util/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/nimble/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/porting/nimble/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bt/host/nimble/nimble/porting/npl/freertos/src/*.c) \
|
||||
)
|
||||
endif
|
||||
|
||||
$(BUILD)/$(ESPCOMP)/esp_eth/src/esp_eth_mac_dm9051.o: CFLAGS += -fno-strict-aliasing
|
||||
ESPIDF_ESP_ETH_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/esp_eth/src/*.c))
|
||||
|
||||
@ -521,6 +582,9 @@ ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
$(eval $(call gen_espidf_lib_rule,esp_common,$(ESPIDF_ESP_COMMON_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,esp_event,$(ESPIDF_ESP_EVENT_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,esp_wifi,$(ESPIDF_ESP_WIFI_O)))
|
||||
ifeq ($(CONFIG_BT_NIMBLE_ENABLED),y)
|
||||
$(eval $(call gen_espidf_lib_rule,bt_nimble,$(ESPIDF_BT_NIMBLE_O)))
|
||||
endif
|
||||
$(eval $(call gen_espidf_lib_rule,esp_eth,$(ESPIDF_ESP_ETH_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,xtensa,$(ESPIDF_XTENSA_O)))
|
||||
else
|
||||
@ -636,6 +700,7 @@ APP_LD_ARGS += -L$(dir $(LIBSTDCXX_FILE_NAME)) -lstdc++
|
||||
APP_LD_ARGS += $(LIBC_LIBM)
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
APP_LD_ARGS += -L$(ESPCOMP)/xtensa/esp32 -lhal
|
||||
APP_LD_ARGS += -L$(ESPCOMP)/bt/controller/lib -lbtdm_app
|
||||
APP_LD_ARGS += -L$(ESPCOMP)/esp_wifi/lib_esp32 -lcore -lmesh -lnet80211 -lphy -lrtc -lpp -lsmartconfig -lcoexist
|
||||
else
|
||||
APP_LD_ARGS += $(ESPCOMP)/esp32/libhal.a
|
||||
|
6
ports/esp32/boards/sdkconfig.ble
Normal file
6
ports/esp32/boards/sdkconfig.ble
Normal file
@ -0,0 +1,6 @@
|
||||
# Note this requires building with IDF 4.x
|
||||
CONFIG_BT_ENABLED=y
|
||||
CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y
|
||||
CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=
|
||||
CONFIG_BTDM_CTRL_MODE_BTDM=
|
||||
CONFIG_BT_NIMBLE_ENABLED=y
|
@ -162,6 +162,8 @@ void *esp_native_code_commit(void*, size_t);
|
||||
#define MICROPY_PY_WEBREPL (1)
|
||||
#define MICROPY_PY_FRAMEBUF (1)
|
||||
#define MICROPY_PY_USOCKET_EVENTS (MICROPY_PY_WEBREPL)
|
||||
#define MICROPY_PY_BLUETOOTH_RANDOM_ADDR (1)
|
||||
#define MICROPY_PY_BLUETOOTH_DEFAULT_NAME ("ESP32")
|
||||
|
||||
// fatfs configuration
|
||||
#define MICROPY_FATFS_ENABLE_LFN (1)
|
||||
@ -189,8 +191,15 @@ extern const struct _mp_obj_module_t uos_module;
|
||||
extern const struct _mp_obj_module_t mp_module_usocket;
|
||||
extern const struct _mp_obj_module_t mp_module_machine;
|
||||
extern const struct _mp_obj_module_t mp_module_network;
|
||||
extern const struct _mp_obj_module_t mp_module_bluetooth;
|
||||
extern const struct _mp_obj_module_t mp_module_onewire;
|
||||
|
||||
#if MICROPY_PY_BLUETOOTH
|
||||
#define BLUETOOTH_BUILTIN_MODULE { MP_ROM_QSTR(MP_QSTR_bluetooth), MP_ROM_PTR(&mp_module_bluetooth) },
|
||||
#else
|
||||
#define BLUETOOTH_BUILTIN_MODULE
|
||||
#endif
|
||||
|
||||
#define MICROPY_PORT_BUILTIN_MODULES \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_esp), (mp_obj_t)&esp_module }, \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_esp32), (mp_obj_t)&esp32_module }, \
|
||||
@ -199,6 +208,7 @@ extern const struct _mp_obj_module_t mp_module_onewire;
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_usocket), (mp_obj_t)&mp_module_usocket }, \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_machine), (mp_obj_t)&mp_module_machine }, \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_network), (mp_obj_t)&mp_module_network }, \
|
||||
BLUETOOTH_BUILTIN_MODULE \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR__onewire), (mp_obj_t)&mp_module_onewire }, \
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_uhashlib), (mp_obj_t)&mp_module_uhashlib }, \
|
||||
|
||||
@ -224,10 +234,18 @@ extern const struct _mp_obj_module_t mp_module_onewire;
|
||||
|
||||
struct _machine_timer_obj_t;
|
||||
|
||||
#if MICROPY_BLUETOOTH_NIMBLE
|
||||
struct mp_bluetooth_nimble_root_pointers_t;
|
||||
#define MICROPY_PORT_ROOT_POINTER_BLUETOOTH_NIMBLE struct _mp_bluetooth_nimble_root_pointers_t *bluetooth_nimble_root_pointers;
|
||||
#else
|
||||
#define MICROPY_PORT_ROOT_POINTER_BLUETOOTH_NIMBLE
|
||||
#endif
|
||||
|
||||
#define MICROPY_PORT_ROOT_POINTERS \
|
||||
const char *readline_hist[8]; \
|
||||
mp_obj_t machine_pin_irq_handler[40]; \
|
||||
struct _machine_timer_obj_t *machine_timer_obj_head; \
|
||||
MICROPY_PORT_ROOT_POINTER_BLUETOOTH_NIMBLE
|
||||
|
||||
// type definitions for the specific machine
|
||||
|
||||
|
57
ports/esp32/nimble.c
Normal file
57
ports/esp32/nimble.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2019 Jim Mussared
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "py/runtime.h"
|
||||
#include "py/mperrno.h"
|
||||
#include "py/mphal.h"
|
||||
|
||||
#if MICROPY_PY_BLUETOOTH && MICROPY_BLUETOOTH_NIMBLE
|
||||
|
||||
#include "esp_nimble_hci.h"
|
||||
#include "nimble/nimble_port.h"
|
||||
#include "nimble/nimble_port_freertos.h"
|
||||
|
||||
STATIC void ble_host_task(void *param) {
|
||||
nimble_port_run(); //This function will return only when nimble_port_stop() is executed.
|
||||
nimble_port_freertos_deinit();
|
||||
}
|
||||
|
||||
void mp_bluetooth_nimble_port_preinit(void) {
|
||||
esp_nimble_hci_and_controller_init();
|
||||
}
|
||||
|
||||
void mp_bluetooth_nimble_port_postinit(void) {
|
||||
nimble_port_freertos_init(ble_host_task);
|
||||
}
|
||||
|
||||
void mp_bluetooth_nimble_port_deinit(void) {
|
||||
nimble_port_stop();
|
||||
}
|
||||
|
||||
void mp_bluetooth_nimble_port_start(void) {
|
||||
}
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user