esp32: Support building with ESP IDF 4.0-beta1.
This commit adds support for a second supported hash (currently set to the 4.0-beta1 tag). When this hash is detected, the relevant changes are applied. This allows to start using v4 features (e.g. BLE with Nimble), and also start doing testing, while still supporting the original, stable, v3.3 IDF. Note: this feature is experimental, not well tested, and network.LAN and network.PPP are currently unsupported.
This commit is contained in:
parent
b45f9de809
commit
96008ff59a
@ -50,7 +50,13 @@ SDKCONFIG_COMBINED = $(BUILD)/sdkconfig.combined
|
||||
SDKCONFIG_H = $(BUILD)/sdkconfig.h
|
||||
|
||||
# the git hash of the currently supported ESP IDF version
|
||||
ESPIDF_SUPHASH := 6ccb4cf5b7d1fdddb8c2492f9cbc926abaf230df
|
||||
ESPIDF_SUPHASH_V3 := 6ccb4cf5b7d1fdddb8c2492f9cbc926abaf230df
|
||||
ESPIDF_SUPHASH_V4 := 310beae373446ceb9a4ad9b36b5428d7fdf2705f
|
||||
|
||||
define print_supported_git_hash
|
||||
$(info Supported git hash (v3.3): $(ESPIDF_SUPHASH_V3))
|
||||
$(info Supported git hash (v4.0-beta1) (experimental): $(ESPIDF_SUPHASH_V4))
|
||||
endef
|
||||
|
||||
# paths to ESP IDF and its components
|
||||
ifeq ($(ESPIDF),)
|
||||
@ -59,10 +65,11 @@ ESPIDF = $(IDF_PATH)
|
||||
else
|
||||
$(info The ESPIDF variable has not been set, please set it to the root of the esp-idf repository.)
|
||||
$(info See README.md for installation instructions.)
|
||||
$(info Supported git hash: $(ESPIDF_SUPHASH))
|
||||
$(error ESPIDF not set)
|
||||
print_supported_git_hash
|
||||
endif
|
||||
endif
|
||||
|
||||
ESPCOMP = $(ESPIDF)/components
|
||||
ESPTOOL ?= $(ESPCOMP)/esptool_py/esptool/esptool.py
|
||||
ESPCOMP_KCONFIGS = $(shell find $(ESPCOMP) -name Kconfig)
|
||||
@ -70,13 +77,18 @@ ESPCOMP_KCONFIGS_PROJBUILD = $(shell find $(ESPCOMP) -name Kconfig.projbuild)
|
||||
|
||||
# verify the ESP IDF version
|
||||
ESPIDF_CURHASH := $(shell git -C $(ESPIDF) show -s --pretty=format:'%H')
|
||||
ifneq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH))
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V3))
|
||||
$(info Building with ESP IDF v3)
|
||||
else ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
$(info Building with ESP IDF v4)
|
||||
else
|
||||
$(info ** WARNING **)
|
||||
$(info The git hash of ESP IDF does not match the supported version)
|
||||
$(info The build may complete and the firmware may work but it is not guaranteed)
|
||||
$(info ESP IDF path: $(ESPIDF))
|
||||
$(info Current git hash: $(ESPIDF_CURHASH))
|
||||
$(info Supported git hash: $(ESPIDF_SUPHASH))
|
||||
print_supported_git_hash
|
||||
endif
|
||||
|
||||
# pretty format of ESP IDF version, used internally by the IDF
|
||||
@ -100,20 +112,13 @@ INC_ESPCOMP += -I$(ESPCOMP)/bootloader_support/include_bootloader
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/console
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/driver/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/driver/include/driver
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/nghttp/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/nghttp/nghttp2/lib/includes
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/efuse/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/efuse/esp32/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp32/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/espcoredump/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/soc/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/soc/esp32/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/ethernet/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/expat/expat/expat/lib
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/expat/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/heap/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/json/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/json/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/log/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/newlib/platform_include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/newlib/include
|
||||
@ -129,20 +134,41 @@ INC_ESPCOMP += -I$(ESPCOMP)/mbedtls/mbedtls/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/mbedtls/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/mdns/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/mdns/private_include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/micro-ecc/micro-ecc
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/spi_flash/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/ulp/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/vfs/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/xtensa-debug-module/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/wpa_supplicant/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/wpa_supplicant/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/ethernet/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/app_trace/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/app_update/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/pthread/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/smartconfig_ack/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/sdmmc/include
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_common/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_eth/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_event/private_include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_rom/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_wifi/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/esp_wifi/esp32/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/lwip/include/apps/sntp
|
||||
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
|
||||
else
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/ethernet/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/expat/expat/expat/lib
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/expat/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/json/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/json/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/micro-ecc/micro-ecc
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/nghttp/port/include
|
||||
INC_ESPCOMP += -I$(ESPCOMP)/nghttp/nghttp2/lib/includes
|
||||
endif
|
||||
|
||||
# these flags are common to C and C++ compilation
|
||||
CFLAGS_COMMON = -Os -ffunction-sections -fdata-sections -fstrict-volatile-bitfields \
|
||||
-mlongcalls -nostdlib \
|
||||
@ -156,6 +182,10 @@ CFLAGS += -DIDF_VER=\"$(IDF_VER)\"
|
||||
CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA)
|
||||
CFLAGS += -I$(BOARD_DIR)
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
CFLAGS += -DMICROPY_ESP_IDF_4=1
|
||||
endif
|
||||
|
||||
# this is what ESPIDF uses for c++ compilation
|
||||
CXXFLAGS = -std=gnu++11 $(CFLAGS_COMMON) $(INC) $(INC_ESPCOMP)
|
||||
|
||||
@ -164,6 +194,7 @@ LDFLAGS += --gc-sections -static -EL
|
||||
LDFLAGS += -u call_user_start_cpu0 -u uxTopUsedPriority -u ld_include_panic_highint_hdl
|
||||
LDFLAGS += -u __cxa_guard_dummy # so that implementation of static guards is taken from cxx_guards.o instead of libstdc++.a
|
||||
LDFLAGS += -L$(ESPCOMP)/esp32/ld
|
||||
LDFLAGS += -L$(ESPCOMP)/esp_rom/esp32/ld
|
||||
LDFLAGS += -T $(BUILD)/esp32_out.ld
|
||||
LDFLAGS += -T $(BUILD)/esp32.project.ld
|
||||
LDFLAGS += -T esp32.rom.ld
|
||||
@ -183,12 +214,19 @@ COPT += -Os -DNDEBUG
|
||||
#LDFLAGS += --gc-sections
|
||||
endif
|
||||
|
||||
# Enable SPIRAM support if CONFIG_SPIRAM_SUPPORT=y in sdkconfig
|
||||
ifeq ($(CONFIG_SPIRAM_SUPPORT),y)
|
||||
# Enable SPIRAM support if CONFIG_ESP32_SPIRAM_SUPPORT=y in sdkconfig
|
||||
ifeq ($(CONFIG_ESP32_SPIRAM_SUPPORT),y)
|
||||
CFLAGS_COMMON += -mfix-esp32-psram-cache-issue
|
||||
LIBC_LIBM = $(ESPCOMP)/newlib/lib/libc-psram-workaround.a $(ESPCOMP)/newlib/lib/libm-psram-workaround.a
|
||||
else
|
||||
# Additional newlib symbols that can only be used with spiram disabled.
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
LDFLAGS += -T esp32.rom.newlib-funcs.ld
|
||||
LDFLAGS += -T esp32.rom.newlib-locale.ld
|
||||
LDFLAGS += -T esp32.rom.newlib-data.ld
|
||||
else
|
||||
LDFLAGS += -T esp32.rom.spiram_incompatible_fns.ld
|
||||
endif
|
||||
LIBC_LIBM = $(ESPCOMP)/newlib/lib/libc.a $(ESPCOMP)/newlib/lib/libm.a
|
||||
endif
|
||||
|
||||
@ -283,7 +321,8 @@ $(SDKCONFIG_H): $(SDKCONFIG_COMBINED)
|
||||
--env "IDF_TARGET=esp32" \
|
||||
--env "IDF_CMAKE=n" \
|
||||
--env "COMPONENT_KCONFIGS=$(ESPCOMP_KCONFIGS)" \
|
||||
--env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)"
|
||||
--env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)" \
|
||||
--env "IDF_PATH=$(ESPIDF)"
|
||||
$(Q)touch $@
|
||||
|
||||
$(HEADER_BUILD)/qstrdefs.generated.h: $(SDKCONFIG_H) $(BOARD_DIR)/mpconfigboard.h
|
||||
@ -293,7 +332,9 @@ $(HEADER_BUILD)/qstrdefs.generated.h: $(SDKCONFIG_H) $(BOARD_DIR)/mpconfigboard.
|
||||
|
||||
ESPIDF_BOOTLOADER_SUPPORT_O = $(patsubst %.c,%.o,\
|
||||
$(filter-out $(ESPCOMP)/bootloader_support/src/bootloader_init.c,\
|
||||
$(wildcard $(ESPCOMP)/bootloader_support/src/*.c)))
|
||||
$(wildcard $(ESPCOMP)/bootloader_support/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/bootloader_support/src/idf/*.c) \
|
||||
))
|
||||
|
||||
ESPIDF_DRIVER_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/driver/*.c))
|
||||
|
||||
@ -315,22 +356,22 @@ ESPIDF_HEAP_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/heap/*.c))
|
||||
ESPIDF_SOC_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/soc/esp32/*.c) \
|
||||
$(wildcard $(ESPCOMP)/soc/src/*.c) \
|
||||
$(wildcard $(ESPCOMP)/soc/src/hal/*.c) \
|
||||
)
|
||||
|
||||
ESPIDF_CXX_O = $(patsubst %.cpp,%.o,$(wildcard $(ESPCOMP)/cxx/*.cpp))
|
||||
|
||||
ESPIDF_ETHERNET_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/ethernet/*.c) \
|
||||
$(wildcard $(ESPCOMP)/ethernet/eth_phy/*.c) \
|
||||
)
|
||||
|
||||
ESPIDF_PTHREAD_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/pthread/*.c))
|
||||
|
||||
# Assembler .S files need only basic flags, and in particular should not have
|
||||
# -Os because that generates subtly different code.
|
||||
# We also need custom CFLAGS for .c files because FreeRTOS has headers with
|
||||
# generic names (eg queue.h) which can clash with other files in the port.
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
CFLAGS_ASM = -I$(BUILD) -I$(ESPCOMP)/esp32/include -I$(ESPCOMP)/soc/esp32/include -I$(ESPCOMP)/freertos/include/freertos -I. -I$(ESPCOMP)/xtensa/include -I$(ESPCOMP)/xtensa/esp32/include -I$(ESPCOMP)/esp_common/include
|
||||
else
|
||||
CFLAGS_ASM = -I$(BUILD) -I$(ESPCOMP)/esp32/include -I$(ESPCOMP)/soc/esp32/include -I$(ESPCOMP)/freertos/include/freertos -I.
|
||||
endif
|
||||
$(BUILD)/$(ESPCOMP)/freertos/portasm.o: CFLAGS = $(CFLAGS_ASM)
|
||||
$(BUILD)/$(ESPCOMP)/freertos/xtensa_context.o: CFLAGS = $(CFLAGS_ASM)
|
||||
$(BUILD)/$(ESPCOMP)/freertos/xtensa_intr_asm.o: CFLAGS = $(CFLAGS_ASM)
|
||||
@ -343,8 +384,6 @@ ESPIDF_FREERTOS_O = \
|
||||
|
||||
ESPIDF_VFS_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/vfs/*.c))
|
||||
|
||||
ESPIDF_JSON_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/json/cJSON/cJSON*.c))
|
||||
|
||||
ESPIDF_LOG_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/log/*.c))
|
||||
|
||||
ESPIDF_XTENSA_DEBUG_MODULE_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/xtensa-debug-module/*.c))
|
||||
@ -382,11 +421,16 @@ ESPIDF_LWIP_O = $(patsubst %.c,%.o,\
|
||||
ESPIDF_MBEDTLS_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/mbedtls/mbedtls/library/*.c) \
|
||||
$(wildcard $(ESPCOMP)/mbedtls/port/*.c) \
|
||||
$(wildcard $(ESPCOMP)/mbedtls/port/esp32/*.c) \
|
||||
)
|
||||
|
||||
ESPIDF_MDNS_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/mdns/*.c))
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
$(BUILD)/$(ESPCOMP)/wpa_supplicant/%.o: CFLAGS += -DESP_SUPPLICANT -DIEEE8021X_EAPOL -DEAP_PEER_METHOD -DEAP_TLS -DEAP_TTLS -DEAP_PEAP -DEAP_MSCHAPv2 -DUSE_WPA2_TASK -DCONFIG_WPS2 -DCONFIG_WPS_PIN -DUSE_WPS_TASK -DESPRESSIF_USE -DESP32_WORKAROUND -DCONFIG_ECC -D__ets__ -Wno-strict-aliasing -I$(ESPCOMP)/wpa_supplicant/src -Wno-implicit-function-declaration
|
||||
else
|
||||
$(BUILD)/$(ESPCOMP)/wpa_supplicant/%.o: CFLAGS += -DEMBEDDED_SUPP -DIEEE8021X_EAPOL -DEAP_PEER_METHOD -DEAP_MSCHAPv2 -DEAP_TTLS -DEAP_TLS -DEAP_PEAP -DUSE_WPA2_TASK -DCONFIG_WPS2 -DCONFIG_WPS_PIN -DUSE_WPS_TASK -DESPRESSIF_USE -DESP32_WORKAROUND -DALLOW_EVEN_MOD -D__ets__ -Wno-strict-aliasing
|
||||
endif
|
||||
ESPIDF_WPA_SUPPLICANT_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/wpa_supplicant/port/*.c) \
|
||||
$(wildcard $(ESPCOMP)/wpa_supplicant/src/*/*.c) \
|
||||
@ -394,6 +438,29 @@ ESPIDF_WPA_SUPPLICANT_O = $(patsubst %.c,%.o,\
|
||||
|
||||
ESPIDF_SDMMC_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/sdmmc/*.c))
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
ESPIDF_ESP_COMMON_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/esp_common/src/*.c))
|
||||
|
||||
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))
|
||||
|
||||
$(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))
|
||||
|
||||
ESPIDF_XTENSA_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/xtensa/*.c) \
|
||||
$(wildcard $(ESPCOMP)/xtensa/esp32/*.c) \
|
||||
)
|
||||
else
|
||||
ESPIDF_JSON_O = $(patsubst %.c,%.o,$(wildcard $(ESPCOMP)/json/cJSON/cJSON*.c))
|
||||
|
||||
ESPIDF_ETHERNET_O = $(patsubst %.c,%.o,\
|
||||
$(wildcard $(ESPCOMP)/ethernet/*.c) \
|
||||
$(wildcard $(ESPCOMP)/ethernet/eth_phy/*.c) \
|
||||
)
|
||||
endif
|
||||
|
||||
OBJ_ESPIDF =
|
||||
LIB_ESPIDF =
|
||||
BUILD_ESPIDF_LIB = $(BUILD)/esp-idf
|
||||
@ -414,7 +481,6 @@ $(eval $(call gen_espidf_lib_rule,esp_ringbuf,$(ESPIDF_ESP_RINGBUF_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,heap,$(ESPIDF_HEAP_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,soc,$(ESPIDF_SOC_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,cxx,$(ESPIDF_CXX_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,ethernet,$(ESPIDF_ETHERNET_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,pthread,$(ESPIDF_PTHREAD_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,freertos,$(ESPIDF_FREERTOS_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,vfs,$(ESPIDF_VFS_O)))
|
||||
@ -435,6 +501,16 @@ $(eval $(call gen_espidf_lib_rule,mdns,$(ESPIDF_MDNS_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,wpa_supplicant,$(ESPIDF_WPA_SUPPLICANT_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,sdmmc,$(ESPIDF_SDMMC_O)))
|
||||
|
||||
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)))
|
||||
$(eval $(call gen_espidf_lib_rule,esp_eth,$(ESPIDF_ESP_ETH_O)))
|
||||
$(eval $(call gen_espidf_lib_rule,xtensa,$(ESPIDF_XTENSA_O)))
|
||||
else
|
||||
$(eval $(call gen_espidf_lib_rule,ethernet,$(ESPIDF_ETHERNET_O)))
|
||||
endif
|
||||
|
||||
# Create all destination build dirs before compiling IDF source
|
||||
OBJ_ESPIDF_DIRS = $(sort $(dir $(OBJ_ESPIDF))) $(BUILD_ESPIDF_LIB) $(addprefix $(BUILD_ESPIDF_LIB)/,$(LIB_ESPIDF))
|
||||
$(OBJ_ESPIDF): | $(OBJ_ESPIDF_DIRS)
|
||||
@ -451,6 +527,32 @@ LIB = $(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a)
|
||||
# ESP IDF ldgen
|
||||
|
||||
LDGEN_FRAGMENTS = $(shell find $(ESPCOMP) -name "*.lf")
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
|
||||
LDGEN_LIBRARIES=$(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a)
|
||||
|
||||
$(BUILD_ESPIDF_LIB)/ldgen_libraries: $(LDGEN_LIBRARIES) $(ESPIDF)/make/ldgen.mk
|
||||
printf "$(foreach library,$(LDGEN_LIBRARIES),$(library)\n)" > $(BUILD_ESPIDF_LIB)/ldgen_libraries
|
||||
|
||||
$(BUILD)/esp32.project.ld: $(ESPCOMP)/esp32/ld/esp32.project.ld.in $(LDGEN_FRAGMENTS) $(SDKCONFIG_COMBINED) $(BUILD_ESPIDF_LIB)/ldgen_libraries
|
||||
$(ECHO) "GEN $@"
|
||||
$(Q)$(PYTHON) $(ESPIDF)/tools/ldgen/ldgen.py \
|
||||
--input $< \
|
||||
--output $@ \
|
||||
--config $(SDKCONFIG_COMBINED) \
|
||||
--kconfig $(ESPIDF)/Kconfig \
|
||||
--fragments $(LDGEN_FRAGMENTS) \
|
||||
--libraries-file $(BUILD_ESPIDF_LIB)/ldgen_libraries \
|
||||
--env "IDF_TARGET=esp32" \
|
||||
--env "IDF_CMAKE=n" \
|
||||
--env "COMPONENT_KCONFIGS=$(ESPCOMP_KCONFIGS)" \
|
||||
--env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)" \
|
||||
--env "IDF_PATH=$(ESPIDF)" \
|
||||
--objdump $(OBJDUMP)
|
||||
|
||||
else
|
||||
|
||||
LDGEN_SECTIONS_INFO = $(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a.sections_info)
|
||||
LDGEN_SECTION_INFOS = $(BUILD_ESPIDF_LIB)/ldgen.section_infos
|
||||
|
||||
@ -477,7 +579,10 @@ $(BUILD)/esp32.project.ld: $(ESPCOMP)/esp32/ld/esp32.project.ld.in $(LDGEN_FRAGM
|
||||
--env "IDF_TARGET=esp32" \
|
||||
--env "IDF_CMAKE=n" \
|
||||
--env "COMPONENT_KCONFIGS=$(ESPCOMP_KCONFIGS)" \
|
||||
--env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)"
|
||||
--env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)" \
|
||||
--env "IDF_PATH=$(ESPIDF)"
|
||||
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Main targets
|
||||
@ -513,8 +618,13 @@ APP_LD_ARGS += --start-group
|
||||
APP_LD_ARGS += -L$(dir $(LIBGCC_FILE_NAME)) -lgcc
|
||||
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)/esp_wifi/lib_esp32 -lcore -lmesh -lnet80211 -lphy -lrtc -lpp -lsmartconfig -lcoexist
|
||||
else
|
||||
APP_LD_ARGS += $(ESPCOMP)/esp32/libhal.a
|
||||
APP_LD_ARGS += -L$(ESPCOMP)/esp32/lib -lcore -lmesh -lnet80211 -lphy -lrtc -lpp -lwpa -lsmartconfig -lcoexist -lwps -lwpa2
|
||||
endif
|
||||
APP_LD_ARGS += $(OBJ)
|
||||
APP_LD_ARGS += $(LIB)
|
||||
APP_LD_ARGS += --end-group
|
||||
@ -553,7 +663,14 @@ $(BUILD)/%.o: %.cpp
|
||||
BOOTLOADER_LIB_DIR = $(BUILD)/bootloader
|
||||
BOOTLOADER_LIB_ALL =
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
$(BUILD)/bootloader/$(ESPCOMP)/%.o: CFLAGS += -DBOOTLOADER_BUILD=1 -I$(ESPCOMP)/bootloader_support/include_priv -I$(ESPCOMP)/bootloader_support/include -I$(ESPCOMP)/efuse/include -I$(ESPCOMP)/esp_rom/include -Wno-error=format \
|
||||
-I$(ESPCOMP)/esp_common/include \
|
||||
-I$(ESPCOMP)/xtensa/include \
|
||||
-I$(ESPCOMP)/xtensa/esp32/include
|
||||
else
|
||||
$(BUILD)/bootloader/$(ESPCOMP)/%.o: CFLAGS += -DBOOTLOADER_BUILD=1 -I$(ESPCOMP)/bootloader_support/include_priv -I$(ESPCOMP)/bootloader_support/include -I$(ESPCOMP)/micro-ecc/micro-ecc -I$(ESPCOMP)/efuse/include -I$(ESPCOMP)/esp32 -Wno-error=format
|
||||
endif
|
||||
|
||||
# libbootloader_support.a
|
||||
BOOTLOADER_LIB_ALL += bootloader_support
|
||||
@ -563,15 +680,27 @@ BOOTLOADER_LIB_BOOTLOADER_SUPPORT_OBJ = $(addprefix $(BUILD)/bootloader/$(ESPCOM
|
||||
bootloader_support/src/bootloader_flash.o \
|
||||
bootloader_support/src/bootloader_init.o \
|
||||
bootloader_support/src/bootloader_random.o \
|
||||
bootloader_support/src/bootloader_sha.o \
|
||||
bootloader_support/src/bootloader_utility.o \
|
||||
bootloader_support/src/flash_qio_mode.o \
|
||||
bootloader_support/src/secure_boot_signatures.o \
|
||||
bootloader_support/src/secure_boot.o \
|
||||
bootloader_support/src/esp_image_format.o \
|
||||
bootloader_support/src/flash_encrypt.o \
|
||||
bootloader_support/src/flash_partitions.o \
|
||||
)
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
BOOTLOADER_LIB_BOOTLOADER_SUPPORT_OBJ += $(addprefix $(BUILD)/bootloader/$(ESPCOMP)/,\
|
||||
bootloader_support/src/esp32/bootloader_sha.o \
|
||||
bootloader_support/src/bootloader_flash_config.o \
|
||||
bootloader_support/src/esp32/secure_boot.o \
|
||||
)
|
||||
else
|
||||
BOOTLOADER_LIB_BOOTLOADER_SUPPORT_OBJ += $(addprefix $(BUILD)/bootloader/$(ESPCOMP)/,\
|
||||
bootloader_support/src/bootloader_sha.o \
|
||||
bootloader_support/src/secure_boot_signatures.o \
|
||||
bootloader_support/src/secure_boot.o \
|
||||
)
|
||||
endif
|
||||
|
||||
$(BOOTLOADER_LIB_DIR)/libbootloader_support.a: $(BOOTLOADER_LIB_BOOTLOADER_SUPPORT_OBJ)
|
||||
$(ECHO) "AR $@"
|
||||
$(Q)$(AR) cr $@ $^
|
||||
@ -594,6 +723,7 @@ $(BOOTLOADER_LIB_DIR)/libspi_flash.a: $(BOOTLOADER_LIB_SPI_FLASH_OBJ)
|
||||
$(ECHO) "AR $@"
|
||||
$(Q)$(AR) cr $@ $^
|
||||
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V3))
|
||||
# libmicro-ecc.a
|
||||
BOOTLOADER_LIB_ALL += micro-ecc
|
||||
BOOTLOADER_LIB_MICRO_ECC_OBJ = $(addprefix $(BUILD)/bootloader/$(ESPCOMP)/,\
|
||||
@ -602,6 +732,7 @@ BOOTLOADER_LIB_MICRO_ECC_OBJ = $(addprefix $(BUILD)/bootloader/$(ESPCOMP)/,\
|
||||
$(BOOTLOADER_LIB_DIR)/libmicro-ecc.a: $(BOOTLOADER_LIB_MICRO_ECC_OBJ)
|
||||
$(ECHO) "AR $@"
|
||||
$(Q)$(AR) cr $@ $^
|
||||
endif
|
||||
|
||||
# libsoc.a
|
||||
$(BUILD)/bootloader/$(ESPCOMP)/soc/esp32/rtc_clk.o: CFLAGS += -fno-jump-tables -fno-tree-switch-conversion
|
||||
@ -651,7 +782,11 @@ BOOTLOADER_LIBS =
|
||||
BOOTLOADER_LIBS += -Wl,--start-group
|
||||
BOOTLOADER_LIBS += $(BOOTLOADER_OBJ)
|
||||
BOOTLOADER_LIBS += -L$(BUILD)/bootloader $(addprefix -l,$(BOOTLOADER_LIB_ALL))
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
BOOTLOADER_LIBS += -L$(ESPCOMP)/esp_wifi/lib_esp32 -lrtc
|
||||
else
|
||||
BOOTLOADER_LIBS += -L$(ESPCOMP)/esp32/lib -lrtc
|
||||
endif
|
||||
BOOTLOADER_LIBS += -L$(dir $(LIBGCC_FILE_NAME)) -lgcc
|
||||
BOOTLOADER_LIBS += -Wl,--end-group
|
||||
|
||||
@ -666,8 +801,13 @@ BOOTLOADER_LDFLAGS += -Wl,-EL
|
||||
BOOTLOADER_LDFLAGS += -Wl,-Map=$(@:.elf=.map) -Wl,--cref
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/bootloader/subproject/main/esp32.bootloader.ld
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/bootloader/subproject/main/esp32.bootloader.rom.ld
|
||||
ifeq ($(ESPIDF_CURHASH),$(ESPIDF_SUPHASH_V4))
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/esp_rom/esp32/ld/esp32.rom.ld
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/esp_rom/esp32/ld/esp32.rom.newlib-funcs.ld
|
||||
else
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/esp32/ld/esp32.rom.ld
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/esp32/ld/esp32.rom.spiram_incompatible_fns.ld
|
||||
endif
|
||||
BOOTLOADER_LDFLAGS += -T $(ESPCOMP)/esp32/ld/esp32.peripherals.ld
|
||||
|
||||
BOOTLOADER_OBJ_DIRS = $(sort $(dir $(BOOTLOADER_OBJ_ALL)))
|
||||
|
@ -1,3 +1,4 @@
|
||||
CONFIG_FLASHMODE_QIO=y
|
||||
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
|
||||
CONFIG_SPIRAM_SPEED_80M=y
|
||||
CONFIG_ESP32_REV_MIN_1=y
|
||||
|
@ -8,7 +8,7 @@ CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
|
||||
CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
|
||||
|
||||
# Bootloader config
|
||||
CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y
|
||||
CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y
|
||||
|
||||
# ESP32-specific
|
||||
CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
|
||||
@ -21,10 +21,15 @@ CONFIG_PM_ENABLE=y
|
||||
|
||||
# FreeRTOS
|
||||
CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
|
||||
CONFIG_SUPPORT_STATIC_ALLOCATION=y
|
||||
CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y
|
||||
CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
|
||||
CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y
|
||||
|
||||
# UDP
|
||||
CONFIG_PPP_SUPPORT=y
|
||||
CONFIG_PPP_PAP_SUPPORT=y
|
||||
CONFIG_PPP_CHAP_SUPPORT=y
|
||||
|
||||
# v3.3-only (renamed in 4.0)
|
||||
CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y
|
||||
CONFIG_SUPPORT_STATIC_ALLOCATION=y
|
||||
CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y
|
||||
|
@ -1,5 +1,9 @@
|
||||
# MicroPython on ESP32, ESP IDF configuration with SPIRAM support
|
||||
|
||||
CONFIG_SPIRAM_SUPPORT=y
|
||||
CONFIG_ESP32_SPIRAM_SUPPORT=y
|
||||
CONFIG_SPIRAM_CACHE_WORKAROUND=y
|
||||
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
|
||||
CONFIG_SPIRAM_USE_MEMMAP=y
|
||||
|
||||
# v3.3-only (renamed in 4.0)
|
||||
CONFIG_SPIRAM_SUPPORT=y
|
||||
|
@ -85,7 +85,11 @@ STATIC const mp_rom_map_elem_t esp32_ulp_locals_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_set_wakeup_period), MP_ROM_PTR(&esp32_ulp_set_wakeup_period_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_load_binary), MP_ROM_PTR(&esp32_ulp_load_binary_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_run), MP_ROM_PTR(&esp32_ulp_run_obj) },
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
{ MP_ROM_QSTR(MP_QSTR_RESERVE_MEM), MP_ROM_INT(CONFIG_ULP_COPROC_RESERVE_MEM) },
|
||||
#else
|
||||
{ MP_ROM_QSTR(MP_QSTR_RESERVE_MEM), MP_ROM_INT(CONFIG_ESP32_ULP_COPROC_RESERVE_MEM) },
|
||||
#endif
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(esp32_ulp_locals_dict, esp32_ulp_locals_dict_table);
|
||||
|
||||
|
@ -37,7 +37,11 @@
|
||||
#include "esp_task.h"
|
||||
#include "soc/cpu.h"
|
||||
#include "esp_log.h"
|
||||
#if MICROPY_ESP_IDF_4
|
||||
#include "esp32/spiram.h"
|
||||
#else
|
||||
#include "esp_spiram.h"
|
||||
#endif
|
||||
|
||||
#include "py/stackctrl.h"
|
||||
#include "py/nlr.h"
|
||||
@ -70,7 +74,7 @@ void mp_task(void *pvParameter) {
|
||||
#endif
|
||||
uart_init();
|
||||
|
||||
#if CONFIG_SPIRAM_SUPPORT
|
||||
#if CONFIG_ESP32_SPIRAM_SUPPORT
|
||||
// Try to use the entire external SPIRAM directly for the heap
|
||||
size_t mp_task_heap_size;
|
||||
void *mp_task_heap = (void*)0x3f800000;
|
||||
@ -150,7 +154,11 @@ soft_reset:
|
||||
}
|
||||
|
||||
void app_main(void) {
|
||||
nvs_flash_init();
|
||||
esp_err_t ret = nvs_flash_init();
|
||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
||||
nvs_flash_erase();
|
||||
nvs_flash_init();
|
||||
}
|
||||
xTaskCreatePinnedToCore(mp_task, "mp_task", MP_TASK_STACK_LEN, NULL, MP_TASK_PRIORITY, &mp_main_task_handle, MP_TASK_COREID);
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,9 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "rom/gpio.h"
|
||||
#endif
|
||||
#include "esp_log.h"
|
||||
#include "esp_spi_flash.h"
|
||||
|
||||
|
@ -32,9 +32,15 @@
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#if MICROPY_ESP_IDF_4
|
||||
#include "esp32/rom/rtc.h"
|
||||
#include "esp32/clk.h"
|
||||
#include "esp_sleep.h"
|
||||
#else
|
||||
#include "rom/ets_sys.h"
|
||||
#include "rom/rtc.h"
|
||||
#include "esp_clk.h"
|
||||
#endif
|
||||
#include "esp_pm.h"
|
||||
#include "driver/touch_pad.h"
|
||||
|
||||
|
@ -43,20 +43,23 @@
|
||||
#include "netutils.h"
|
||||
#include "esp_eth.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_event_loop.h"
|
||||
#include "lwip/dns.h"
|
||||
#include "tcpip_adapter.h"
|
||||
#include "mdns.h"
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_event_loop.h"
|
||||
#endif
|
||||
|
||||
#include "modnetwork.h"
|
||||
|
||||
#define MODNETWORK_INCLUDE_CONSTANTS (1)
|
||||
|
||||
NORETURN void _esp_exceptions(esp_err_t e) {
|
||||
switch (e) {
|
||||
case ESP_ERR_WIFI_NOT_INIT:
|
||||
case ESP_ERR_WIFI_NOT_INIT:
|
||||
mp_raise_msg(&mp_type_OSError, "Wifi Not Initialized");
|
||||
case ESP_ERR_WIFI_NOT_STARTED:
|
||||
mp_raise_msg(&mp_type_OSError, "Wifi Not Started");
|
||||
@ -93,7 +96,7 @@ NORETURN void _esp_exceptions(esp_err_t e) {
|
||||
case ESP_ERR_TCPIP_ADAPTER_DHCPC_START_FAILED:
|
||||
mp_raise_msg(&mp_type_OSError, "TCP/IP DHCP Client Start Failed");
|
||||
case ESP_ERR_TCPIP_ADAPTER_NO_MEM:
|
||||
mp_raise_OSError(MP_ENOMEM);
|
||||
mp_raise_OSError(MP_ENOMEM);
|
||||
default:
|
||||
nlr_raise(mp_obj_new_exception_msg_varg(
|
||||
&mp_type_RuntimeError, "Wifi Unknown Error 0x%04x", e
|
||||
@ -650,9 +653,12 @@ STATIC mp_obj_t esp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs
|
||||
ESP_EXCEPTIONS(esp_wifi_get_mac(self->if_id, mac));
|
||||
return mp_obj_new_bytes(mac, sizeof(mac));
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
case ESP_IF_ETH:
|
||||
esp_eth_get_mac(mac);
|
||||
return mp_obj_new_bytes(mac, sizeof(mac));
|
||||
#endif
|
||||
|
||||
default:
|
||||
goto unknown;
|
||||
}
|
||||
@ -734,8 +740,10 @@ STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_network) },
|
||||
{ MP_ROM_QSTR(MP_QSTR___init__), MP_ROM_PTR(&esp_initialize_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_WLAN), MP_ROM_PTR(&get_wlan_obj) },
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
{ MP_ROM_QSTR(MP_QSTR_LAN), MP_ROM_PTR(&get_lan_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PPP), MP_ROM_PTR(&ppp_make_new_obj) },
|
||||
#endif
|
||||
{ MP_ROM_QSTR(MP_QSTR_phy_mode), MP_ROM_PTR(&esp_phy_mode_obj) },
|
||||
|
||||
#if MODNETWORK_INCLUDE_CONSTANTS
|
||||
@ -757,12 +765,14 @@ STATIC const mp_rom_map_elem_t mp_module_network_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_PHY_TLK110), MP_ROM_INT(PHY_TLK110) },
|
||||
|
||||
// ETH Clock modes from ESP-IDF
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
{ MP_ROM_QSTR(MP_QSTR_ETH_CLOCK_GPIO0_IN), MP_ROM_INT(ETH_CLOCK_GPIO0_IN) },
|
||||
// Disabled at Aug 22nd 2018, reenabled Jan 28th 2019 in ESP-IDF
|
||||
// Because we use older SDK, it's currently disabled
|
||||
//{ MP_ROM_QSTR(MP_QSTR_ETH_CLOCK_GPIO0_OUT), MP_ROM_INT(ETH_CLOCK_GPIO0_OUT) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ETH_CLOCK_GPIO16_OUT), MP_ROM_INT(ETH_CLOCK_GPIO16_OUT) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_ETH_CLOCK_GPIO17_OUT), MP_ROM_INT(ETH_CLOCK_GPIO17_OUT) },
|
||||
#endif
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_STAT_IDLE), MP_ROM_INT(STAT_IDLE)},
|
||||
{ MP_ROM_QSTR(MP_QSTR_STAT_CONNECTING), MP_ROM_INT(STAT_CONNECTING)},
|
||||
|
@ -56,6 +56,18 @@
|
||||
#include "lwip/igmp.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#define lwip_bind lwip_bind_r
|
||||
#define lwip_listen lwip_listen_r
|
||||
#define lwip_accept lwip_accept_r
|
||||
#define lwip_setsockopt lwip_setsockopt_r
|
||||
#define lwip_fnctl lwip_fnctl_r
|
||||
#define lwip_recvfrom lwip_recvfrom_r
|
||||
#define lwip_write lwip_write_r
|
||||
#define lwip_sendto lwip_sendto_r
|
||||
#define lwip_close lwip_close_r
|
||||
#endif
|
||||
|
||||
#define SOCKET_POLL_US (100000)
|
||||
#define MDNS_QUERY_TIMEOUT_MS (5000)
|
||||
#define MDNS_LOCAL_SUFFIX ".local"
|
||||
@ -277,17 +289,17 @@ STATIC mp_obj_t socket_bind(const mp_obj_t arg0, const mp_obj_t arg1) {
|
||||
socket_obj_t *self = MP_OBJ_TO_PTR(arg0);
|
||||
struct addrinfo *res;
|
||||
_socket_getaddrinfo(arg1, &res);
|
||||
int r = lwip_bind_r(self->fd, res->ai_addr, res->ai_addrlen);
|
||||
int r = lwip_bind(self->fd, res->ai_addr, res->ai_addrlen);
|
||||
lwip_freeaddrinfo(res);
|
||||
if (r < 0) exception_from_errno(errno);
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_bind_obj, socket_bind);
|
||||
|
||||
|
||||
STATIC mp_obj_t socket_listen(const mp_obj_t arg0, const mp_obj_t arg1) {
|
||||
socket_obj_t *self = MP_OBJ_TO_PTR(arg0);
|
||||
int backlog = mp_obj_get_int(arg1);
|
||||
int r = lwip_listen_r(self->fd, backlog);
|
||||
int r = lwip_listen(self->fd, backlog);
|
||||
if (r < 0) exception_from_errno(errno);
|
||||
return mp_const_none;
|
||||
}
|
||||
@ -302,7 +314,7 @@ STATIC mp_obj_t socket_accept(const mp_obj_t arg0) {
|
||||
int new_fd = -1;
|
||||
for (int i=0; i<=self->retries; i++) {
|
||||
MP_THREAD_GIL_EXIT();
|
||||
new_fd = lwip_accept_r(self->fd, &addr, &addr_len);
|
||||
new_fd = lwip_accept(self->fd, &addr, &addr_len);
|
||||
MP_THREAD_GIL_ENTER();
|
||||
if (new_fd >= 0) break;
|
||||
if (errno != EAGAIN) exception_from_errno(errno);
|
||||
@ -342,7 +354,7 @@ STATIC mp_obj_t socket_connect(const mp_obj_t arg0, const mp_obj_t arg1) {
|
||||
struct addrinfo *res;
|
||||
_socket_getaddrinfo(arg1, &res);
|
||||
MP_THREAD_GIL_EXIT();
|
||||
int r = lwip_connect_r(self->fd, res->ai_addr, res->ai_addrlen);
|
||||
int r = lwip_connect(self->fd, res->ai_addr, res->ai_addrlen);
|
||||
MP_THREAD_GIL_ENTER();
|
||||
lwip_freeaddrinfo(res);
|
||||
if (r != 0) {
|
||||
@ -363,7 +375,7 @@ STATIC mp_obj_t socket_setsockopt(size_t n_args, const mp_obj_t *args) {
|
||||
// level: SOL_SOCKET
|
||||
case SO_REUSEADDR: {
|
||||
int val = mp_obj_get_int(args[3]);
|
||||
int ret = lwip_setsockopt_r(self->fd, SOL_SOCKET, opt, &val, sizeof(int));
|
||||
int ret = lwip_setsockopt(self->fd, SOL_SOCKET, opt, &val, sizeof(int));
|
||||
if (ret != 0) {
|
||||
exception_from_errno(errno);
|
||||
}
|
||||
@ -424,9 +436,9 @@ void _socket_settimeout(socket_obj_t *sock, uint64_t timeout_ms) {
|
||||
.tv_sec = 0,
|
||||
.tv_usec = timeout_ms ? SOCKET_POLL_US : 0
|
||||
};
|
||||
lwip_setsockopt_r(sock->fd, SOL_SOCKET, SO_SNDTIMEO, (const void *)&timeout, sizeof(timeout));
|
||||
lwip_setsockopt_r(sock->fd, SOL_SOCKET, SO_RCVTIMEO, (const void *)&timeout, sizeof(timeout));
|
||||
lwip_fcntl_r(sock->fd, F_SETFL, timeout_ms ? 0 : O_NONBLOCK);
|
||||
lwip_setsockopt(sock->fd, SOL_SOCKET, SO_SNDTIMEO, (const void *)&timeout, sizeof(timeout));
|
||||
lwip_setsockopt(sock->fd, SOL_SOCKET, SO_RCVTIMEO, (const void *)&timeout, sizeof(timeout));
|
||||
lwip_fcntl(sock->fd, F_SETFL, timeout_ms ? 0 : O_NONBLOCK);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t socket_settimeout(const mp_obj_t arg0, const mp_obj_t arg1) {
|
||||
@ -459,7 +471,7 @@ STATIC mp_uint_t _socket_read_data(mp_obj_t self_in, void *buf, size_t size,
|
||||
socket_obj_t *sock = MP_OBJ_TO_PTR(self_in);
|
||||
|
||||
// If the peer closed the connection then the lwIP socket API will only return "0" once
|
||||
// from lwip_recvfrom_r and then block on subsequent calls. To emulate POSIX behaviour,
|
||||
// from lwip_recvfrom and then block on subsequent calls. To emulate POSIX behaviour,
|
||||
// which continues to return "0" for each call on a closed socket, we set a flag when
|
||||
// the peer closed the socket.
|
||||
if (sock->peer_closed) {
|
||||
@ -482,7 +494,7 @@ STATIC mp_uint_t _socket_read_data(mp_obj_t self_in, void *buf, size_t size,
|
||||
if (release_gil) {
|
||||
MP_THREAD_GIL_EXIT();
|
||||
}
|
||||
int r = lwip_recvfrom_r(sock->fd, buf, size, 0, from, from_len);
|
||||
int r = lwip_recvfrom(sock->fd, buf, size, 0, from, from_len);
|
||||
if (release_gil) {
|
||||
MP_THREAD_GIL_ENTER();
|
||||
}
|
||||
@ -543,13 +555,13 @@ int _socket_send(socket_obj_t *sock, const char *data, size_t datalen) {
|
||||
int sentlen = 0;
|
||||
for (int i=0; i<=sock->retries && sentlen < datalen; i++) {
|
||||
MP_THREAD_GIL_EXIT();
|
||||
int r = lwip_write_r(sock->fd, data+sentlen, datalen-sentlen);
|
||||
int r = lwip_write(sock->fd, data+sentlen, datalen-sentlen);
|
||||
MP_THREAD_GIL_ENTER();
|
||||
if (r < 0 && errno != EWOULDBLOCK) exception_from_errno(errno);
|
||||
if (r > 0) sentlen += r;
|
||||
check_for_exceptions();
|
||||
}
|
||||
if (sentlen == 0) mp_raise_OSError(MP_ETIMEDOUT);
|
||||
if (sentlen == 0) mp_raise_OSError(MP_ETIMEDOUT);
|
||||
return sentlen;
|
||||
}
|
||||
|
||||
@ -590,7 +602,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_
|
||||
// send the data
|
||||
for (int i=0; i<=self->retries; i++) {
|
||||
MP_THREAD_GIL_EXIT();
|
||||
int ret = lwip_sendto_r(self->fd, bufinfo.buf, bufinfo.len, 0, (struct sockaddr*)&to, sizeof(to));
|
||||
int ret = lwip_sendto(self->fd, bufinfo.buf, bufinfo.len, 0, (struct sockaddr*)&to, sizeof(to));
|
||||
MP_THREAD_GIL_ENTER();
|
||||
if (ret > 0) return mp_obj_new_int_from_uint(ret);
|
||||
if (ret == -1 && errno != EWOULDBLOCK) {
|
||||
@ -598,7 +610,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_
|
||||
}
|
||||
check_for_exceptions();
|
||||
}
|
||||
mp_raise_OSError(MP_ETIMEDOUT);
|
||||
mp_raise_OSError(MP_ETIMEDOUT);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(socket_sendto_obj, socket_sendto);
|
||||
|
||||
@ -622,7 +634,7 @@ STATIC mp_uint_t socket_stream_write(mp_obj_t self_in, const void *buf, mp_uint_
|
||||
socket_obj_t *sock = self_in;
|
||||
for (int i=0; i<=sock->retries; i++) {
|
||||
MP_THREAD_GIL_EXIT();
|
||||
int r = lwip_write_r(sock->fd, buf, size);
|
||||
int r = lwip_write(sock->fd, buf, size);
|
||||
MP_THREAD_GIL_ENTER();
|
||||
if (r > 0) return r;
|
||||
if (r < 0 && errno != EWOULDBLOCK) { *errcode = errno; return MP_STREAM_ERROR; }
|
||||
@ -663,7 +675,7 @@ STATIC mp_uint_t socket_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintpt
|
||||
socket->events_callback = MP_OBJ_NULL;
|
||||
}
|
||||
#endif
|
||||
int ret = lwip_close_r(socket->fd);
|
||||
int ret = lwip_close(socket->fd);
|
||||
if (ret != 0) {
|
||||
*errcode = errno;
|
||||
return MP_STREAM_ERROR;
|
||||
@ -731,7 +743,7 @@ STATIC mp_obj_t esp_socket_getaddrinfo(size_t n_args, const mp_obj_t *args) {
|
||||
mp_obj_new_str(resi->ai_canonname, strlen(resi->ai_canonname)),
|
||||
mp_const_none
|
||||
};
|
||||
|
||||
|
||||
if (resi->ai_family == AF_INET) {
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)resi->ai_addr;
|
||||
// This looks odd, but it's really just a u32_t
|
||||
|
@ -6,7 +6,10 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <alloca.h>
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "rom/ets_sys.h"
|
||||
#endif
|
||||
|
||||
// object representation and NLR handling
|
||||
#define MICROPY_OBJ_REPR (MICROPY_OBJ_REPR_A)
|
||||
|
@ -31,7 +31,12 @@
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
#if MICROPY_ESP_IDF_4
|
||||
#include "esp32/rom/uart.h"
|
||||
#else
|
||||
#include "rom/uart.h"
|
||||
#endif
|
||||
|
||||
#include "py/obj.h"
|
||||
#include "py/stream.h"
|
||||
|
@ -33,6 +33,9 @@
|
||||
#include "mpthreadport.h"
|
||||
|
||||
#include "esp_task.h"
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "freertos/semphr.h"
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_THREAD
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "py/runtime.h"
|
||||
#include "py/mphal.h"
|
||||
|
||||
@ -216,3 +217,5 @@ const mp_obj_type_t lan_if_type = {
|
||||
.name = MP_QSTR_LAN,
|
||||
.locals_dict = (mp_obj_dict_t*)&lan_if_locals_dict,
|
||||
};
|
||||
|
||||
#endif // !MICROPY_ESP_IDF_4
|
||||
|
@ -26,6 +26,7 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#if !MICROPY_ESP_IDF_4
|
||||
#include "py/runtime.h"
|
||||
#include "py/mphal.h"
|
||||
#include "py/objtype.h"
|
||||
@ -282,3 +283,5 @@ const mp_obj_type_t ppp_if_type = {
|
||||
.name = MP_QSTR_PPP,
|
||||
.locals_dict = (mp_obj_dict_t*)&ppp_if_locals_dict,
|
||||
};
|
||||
|
||||
#endif // !MICROPY_ESP_IDF_4
|
||||
|
Loading…
x
Reference in New Issue
Block a user