├── .cargo └── config ├── .gitignore ├── .gitmodules ├── Cargo.lock ├── Cargo.toml ├── Makefile ├── bindgen.sh ├── build.sh ├── esp32-sys ├── Cargo.toml └── src │ ├── bindings.h │ ├── bindings.rs │ └── lib.rs ├── main ├── component.mk └── hello_world_main.c ├── sdkconfig ├── setenv.sh └── src └── main.rs /.cargo/config: -------------------------------------------------------------------------------- 1 | [build] 2 | target = "xtensa-none-elf" 3 | 4 | [target.xtensa-none-elf] 5 | rustflags = [ 6 | "-C", "target-cpu=esp32", 7 | "-C", "save-temps", 8 | "-C", "link-arg=-nostdlib", 9 | 10 | "-C", "link-arg=-ucall_user_start_cpu0", 11 | "-C", "link-arg=-u__cxa_guard_dummy", 12 | "-C", "link-arg=-u__cxx_fatal_exception", 13 | "-C", "link-arg=-uld_include_panic_highint_hdl", 14 | "-C", "link-arg=-uesp_app_desc", 15 | 16 | "-C", "link-arg=-Wl,--gc-sections", 17 | "-C", "link-arg=-Wl,-static", 18 | "-C", "link-arg=-Wl,--start-group", 19 | 20 | "-C", "link-arg=-Lbuild/app_update", "-C", "link-arg=-lapp_update", 21 | "-C", "link-arg=-Lbuild/driver", "-C", "link-arg=-ldriver", 22 | "-C", "link-arg=-Lbuild/esp-tls", "-C", "link-arg=-lesp-tls", 23 | "-C", "link-arg=-Lbuild/esp32", "-C", "link-arg=-lesp32", 24 | "-C", "link-arg=esp-idf/components/esp32/libhal.a", 25 | "-C", "link-arg=-Lesp-idf/components/esp32/lib", "-C", "link-arg=-lcore", 26 | 27 | "-C", "link-arg=-Lesp-idf/components/esp32/ld", 28 | "-C", "link-arg=-Tesp32_out.ld", 29 | "-C", "link-arg=-Tbuild/esp32/esp32.project.ld", 30 | "-C", "link-arg=-Tesp32.rom.ld", 31 | "-C", "link-arg=-Tesp32.peripherals.ld", 32 | "-C", "link-arg=-Tesp32.rom.libgcc.ld", 33 | "-C", "link-arg=-Tesp32.rom.spiram_incompatible_fns.ld", 34 | 35 | "-C", "link-arg=-Lbuild/esp_ringbuf", "-C", "link-arg=-lesp_ringbuf", 36 | "-C", "link-arg=-Lbuild/freertos", "-C", "link-arg=-lfreertos", 37 | 38 | "-C", "link-arg=-Wl,--undefined=uxTopUsedPriority", 39 | 40 | "-C", "link-arg=-Lbuild/heap", "-C", "link-arg=-lheap", 41 | "-C", "link-arg=-Lbuild/log", "-C", "link-arg=-llog", 42 | 43 | "-C", "link-arg=esp-idf/components/newlib/lib/libc.a", 44 | "-C", "link-arg=esp-idf/components/newlib/lib/libm.a", 45 | 46 | "-C", "link-arg=-Lbuild/newlib", "-C", "link-arg=-lnewlib", 47 | "-C", "link-arg=-Lbuild/pthread", "-C", "link-arg=-lpthread", 48 | "-C", "link-arg=-Lbuild/soc", "-C", "link-arg=-lsoc", 49 | "-C", "link-arg=-Lbuild/spi_flash", "-C", "link-arg=-lspi_flash", 50 | "-C", "link-arg=-Lbuild/vfs", "-C", "link-arg=-lvfs", 51 | "-C", "link-arg=-Lbuild/xtensa-debug-module", "-C", "link-arg=-lxtensa-debug-module", 52 | 53 | "-C", "link-arg=-lgcc", 54 | "-C", "link-arg=-lstdc++", 55 | "-C", "link-arg=-lgcov", 56 | "-C", "link-arg=-Wl,--end-group", 57 | "-C", "link-arg=-Wl,-EL", 58 | ] 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /build 3 | **/*.rs.bk 4 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "esp-idf"] 2 | path = esp-idf 3 | url = git@github.com:espressif/esp-idf.git 4 | tag = v3.1.3 5 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "esp32-hello" 5 | version = "0.1.0" 6 | dependencies = [ 7 | "esp32-sys 0.1.0", 8 | ] 9 | 10 | [[package]] 11 | name = "esp32-sys" 12 | version = "0.1.0" 13 | 14 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "esp32-hello" 3 | version = "0.1.0" 4 | edition = "2018" 5 | 6 | [dependencies] 7 | esp32-sys = { path = "esp32-sys" } 8 | 9 | [profile.dev] 10 | lto = false 11 | incremental = false 12 | debug = false # debug adds frame pointers - which must be omitted 13 | codegen-units = 1 14 | 15 | [profile.release] 16 | lto = false 17 | incremental = false 18 | debug = false # debug adds frame pointers - which must be omitted 19 | codegen-units = 1 20 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # This is a project Makefile. It is assumed the directory this Makefile resides in is a 3 | # project subdirectory. 4 | # 5 | 6 | PROJECT_NAME := hello-world 7 | 8 | include $(IDF_PATH)/make/project.mk 9 | 10 | -------------------------------------------------------------------------------- /bindgen.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | source setenv.sh 6 | 7 | COMPS=$IDF_PATH/components 8 | SYSROOT=$HOME/xtensa-esp32-elf/xtensa-esp32-elf/sysroot 9 | TARGET=xtensa-none-elf 10 | 11 | BINDGEN=bindgen 12 | LIBCLANG_PATH=$HOME/git/rust/xtensa/llvm_build/lib 13 | CLANG_FLAGS="\ 14 | --sysroot=$SYSROOT \ 15 | -I$(pwd)/build/include \ 16 | -D__bindgen \ 17 | -target xtensa \ 18 | -x c" 19 | 20 | for INC in `ls -d $COMPS/**/*/include`; do 21 | #echo $INC 22 | CLANG_FLAGS+=" -I$INC" 23 | done 24 | for INC in `ls -d $COMPS/*/include`; do 25 | #echo $INC 26 | CLANG_FLAGS+=" -I$INC" 27 | done 28 | 29 | #echo $CLANG_FLAGS 30 | 31 | function generate_bindings () 32 | { 33 | declare -r crate=$1 34 | 35 | cd "$crate" 36 | #source ./bindings.env 37 | 38 | LIBCLANG_PATH="$LIBCLANG_PATH" \ 39 | "$BINDGEN" \ 40 | --use-core \ 41 | --no-layout-tests \ 42 | $BINDGEN_FLAGS \ 43 | --output src/bindings.rs \ 44 | src/bindings.h \ 45 | -- $CLANG_FLAGS 46 | 47 | rustup run nightly rustfmt src/bindings.rs 48 | } 49 | 50 | generate_bindings $@ 51 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source setenv.sh 4 | 5 | # export V=1 6 | make -j6 app 7 | 8 | cargo build --release #--verbose 9 | 10 | $IDF_PATH/components/esptool_py/esptool/esptool.py \ 11 | --chip esp32 \ 12 | elf2image \ 13 | --flash_mode "dio" \ 14 | --flash_freq "40m" \ 15 | --flash_size "2MB" \ 16 | -o $TARGET_DIR/esp32-hello.bin \ 17 | $TARGET_DIR/esp32-hello 18 | 19 | -------------------------------------------------------------------------------- /esp32-sys/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "esp32-sys" 3 | version = "0.1.0" 4 | edition = "2015" 5 | 6 | [dependencies] 7 | -------------------------------------------------------------------------------- /esp32-sys/src/bindings.h: -------------------------------------------------------------------------------- 1 | #include "driver/uart.h" 2 | -------------------------------------------------------------------------------- /esp32-sys/src/lib.rs: -------------------------------------------------------------------------------- 1 | #![no_std] 2 | #![allow(non_upper_case_globals)] 3 | #![allow(non_camel_case_types)] 4 | #![allow(non_snake_case)] 5 | 6 | pub mod std { 7 | pub use core::*; 8 | pub mod os { 9 | pub mod raw { 10 | pub enum c_void {} 11 | pub type c_uchar = u8; 12 | pub type c_schar = i8; 13 | pub type c_char = i8; 14 | pub type c_short = i16; 15 | pub type c_ushort = u16; 16 | pub type c_int = i32; 17 | pub type c_uint = u32; 18 | pub type c_long = i32; 19 | pub type c_ulong = u32; 20 | pub type c_longlong = i64; 21 | pub type c_ulonglong = u64; 22 | } 23 | } 24 | } 25 | 26 | include!("bindings.rs"); 27 | -------------------------------------------------------------------------------- /main/component.mk: -------------------------------------------------------------------------------- 1 | # 2 | # "main" pseudo-component makefile. 3 | # 4 | # (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) 5 | 6 | -------------------------------------------------------------------------------- /main/hello_world_main.c: -------------------------------------------------------------------------------- 1 | void app_main() {} 2 | -------------------------------------------------------------------------------- /sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file; DO NOT EDIT. 3 | # Espressif IoT Development Framework Configuration 4 | # 5 | CONFIG_IDF_TARGET="esp32" 6 | 7 | # 8 | # SDK tool configuration 9 | # 10 | CONFIG_TOOLPREFIX="xtensa-esp32-elf-" 11 | CONFIG_PYTHON="python" 12 | CONFIG_MAKE_WARN_UNDEFINED_VARIABLES=y 13 | 14 | # 15 | # Application manager 16 | # 17 | CONFIG_APP_COMPILE_TIME_DATE=y 18 | CONFIG_APP_EXCLUDE_PROJECT_VER_VAR= 19 | CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR= 20 | 21 | # 22 | # Bootloader config 23 | # 24 | CONFIG_LOG_BOOTLOADER_LEVEL_NONE= 25 | CONFIG_LOG_BOOTLOADER_LEVEL_ERROR= 26 | CONFIG_LOG_BOOTLOADER_LEVEL_WARN= 27 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 28 | CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG= 29 | CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE= 30 | CONFIG_LOG_BOOTLOADER_LEVEL=3 31 | CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V= 32 | CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y 33 | CONFIG_BOOTLOADER_FACTORY_RESET= 34 | CONFIG_BOOTLOADER_APP_TEST= 35 | CONFIG_BOOTLOADER_WDT_ENABLE=y 36 | CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE= 37 | CONFIG_BOOTLOADER_WDT_TIME_MS=9000 38 | CONFIG_APP_ROLLBACK_ENABLE= 39 | 40 | # 41 | # Security features 42 | # 43 | CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT= 44 | CONFIG_SECURE_BOOT_ENABLED= 45 | CONFIG_FLASH_ENCRYPTION_ENABLED= 46 | 47 | # 48 | # Serial flasher config 49 | # 50 | CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0" 51 | CONFIG_ESPTOOLPY_BAUD_115200B=y 52 | CONFIG_ESPTOOLPY_BAUD_230400B= 53 | CONFIG_ESPTOOLPY_BAUD_921600B= 54 | CONFIG_ESPTOOLPY_BAUD_2MB= 55 | CONFIG_ESPTOOLPY_BAUD_OTHER= 56 | CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 57 | CONFIG_ESPTOOLPY_BAUD=115200 58 | CONFIG_ESPTOOLPY_COMPRESSED=y 59 | CONFIG_FLASHMODE_QIO= 60 | CONFIG_FLASHMODE_QOUT= 61 | CONFIG_FLASHMODE_DIO=y 62 | CONFIG_FLASHMODE_DOUT= 63 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 64 | CONFIG_ESPTOOLPY_FLASHFREQ_80M= 65 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 66 | CONFIG_ESPTOOLPY_FLASHFREQ_26M= 67 | CONFIG_ESPTOOLPY_FLASHFREQ_20M= 68 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 69 | CONFIG_ESPTOOLPY_FLASHSIZE_1MB= 70 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 71 | CONFIG_ESPTOOLPY_FLASHSIZE_4MB= 72 | CONFIG_ESPTOOLPY_FLASHSIZE_8MB= 73 | CONFIG_ESPTOOLPY_FLASHSIZE_16MB= 74 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 75 | CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y 76 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 77 | CONFIG_ESPTOOLPY_BEFORE_NORESET= 78 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 79 | CONFIG_ESPTOOLPY_AFTER_RESET=y 80 | CONFIG_ESPTOOLPY_AFTER_NORESET= 81 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 82 | CONFIG_MONITOR_BAUD_9600B= 83 | CONFIG_MONITOR_BAUD_57600B= 84 | CONFIG_MONITOR_BAUD_115200B=y 85 | CONFIG_MONITOR_BAUD_230400B= 86 | CONFIG_MONITOR_BAUD_921600B= 87 | CONFIG_MONITOR_BAUD_2MB= 88 | CONFIG_MONITOR_BAUD_OTHER= 89 | CONFIG_MONITOR_BAUD_OTHER_VAL=115200 90 | CONFIG_MONITOR_BAUD=115200 91 | 92 | # 93 | # Partition Table 94 | # 95 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 96 | CONFIG_PARTITION_TABLE_TWO_OTA= 97 | CONFIG_PARTITION_TABLE_CUSTOM= 98 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 99 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 100 | CONFIG_PARTITION_TABLE_OFFSET=0x8000 101 | CONFIG_PARTITION_TABLE_MD5=y 102 | 103 | # 104 | # Compiler options 105 | # 106 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 107 | CONFIG_OPTIMIZATION_LEVEL_RELEASE= 108 | CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y 109 | CONFIG_OPTIMIZATION_ASSERTIONS_SILENT= 110 | CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED= 111 | CONFIG_CXX_EXCEPTIONS= 112 | CONFIG_STACK_CHECK_NONE=y 113 | CONFIG_STACK_CHECK_NORM= 114 | CONFIG_STACK_CHECK_STRONG= 115 | CONFIG_STACK_CHECK_ALL= 116 | CONFIG_STACK_CHECK= 117 | CONFIG_WARN_WRITE_STRINGS= 118 | CONFIG_DISABLE_GCC8_WARNINGS= 119 | 120 | # 121 | # Component config 122 | # 123 | 124 | # 125 | # Application Level Tracing 126 | # 127 | CONFIG_ESP32_APPTRACE_DEST_TRAX= 128 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 129 | CONFIG_ESP32_APPTRACE_ENABLE= 130 | CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y 131 | CONFIG_AWS_IOT_SDK= 132 | 133 | # 134 | # Bluetooth 135 | # 136 | CONFIG_BT_ENABLED= 137 | CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=0 138 | CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 139 | CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 140 | CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 141 | CONFIG_BT_RESERVE_DRAM=0 142 | 143 | # 144 | # Driver configurations 145 | # 146 | 147 | # 148 | # ADC configuration 149 | # 150 | CONFIG_ADC_FORCE_XPD_FSM= 151 | CONFIG_ADC2_DISABLE_DAC=y 152 | 153 | # 154 | # SPI configuration 155 | # 156 | CONFIG_SPI_MASTER_IN_IRAM= 157 | CONFIG_SPI_MASTER_ISR_IN_IRAM=y 158 | CONFIG_SPI_SLAVE_IN_IRAM= 159 | CONFIG_SPI_SLAVE_ISR_IN_IRAM=y 160 | 161 | # 162 | # eFuse Bit Manager 163 | # 164 | CONFIG_EFUSE_CUSTOM_TABLE= 165 | CONFIG_EFUSE_VIRTUAL= 166 | CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE= 167 | CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y 168 | CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT= 169 | CONFIG_EFUSE_MAX_BLK_LEN=192 170 | 171 | # 172 | # ESP32-specific 173 | # 174 | CONFIG_IDF_TARGET_ESP32=y 175 | CONFIG_ESP32_DEFAULT_CPU_FREQ_80= 176 | CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y 177 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240= 178 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 179 | CONFIG_SPIRAM_SUPPORT= 180 | CONFIG_MEMMAP_TRACEMEM= 181 | CONFIG_MEMMAP_TRACEMEM_TWOBANKS= 182 | CONFIG_ESP32_TRAX= 183 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 184 | CONFIG_TWO_UNIVERSAL_MAC_ADDRESS= 185 | CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y 186 | CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 187 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 188 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 189 | CONFIG_MAIN_TASK_STACK_SIZE=3584 190 | CONFIG_IPC_TASK_STACK_SIZE=1024 191 | CONFIG_TIMER_TASK_STACK_SIZE=3584 192 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y 193 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF= 194 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR= 195 | CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF= 196 | CONFIG_NEWLIB_STDIN_LINE_ENDING_LF= 197 | CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y 198 | CONFIG_NEWLIB_NANO_FORMAT= 199 | CONFIG_CONSOLE_UART_DEFAULT=y 200 | CONFIG_CONSOLE_UART_CUSTOM= 201 | CONFIG_CONSOLE_UART_NONE= 202 | CONFIG_CONSOLE_UART_NUM=0 203 | CONFIG_CONSOLE_UART_BAUDRATE=115200 204 | CONFIG_ULP_COPROC_ENABLED= 205 | CONFIG_ULP_COPROC_RESERVE_MEM=0 206 | CONFIG_ESP32_PANIC_PRINT_HALT= 207 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 208 | CONFIG_ESP32_PANIC_SILENT_REBOOT= 209 | CONFIG_ESP32_PANIC_GDBSTUB= 210 | CONFIG_ESP32_DEBUG_OCDAWARE=y 211 | CONFIG_ESP32_DEBUG_STUBS_ENABLE=y 212 | CONFIG_INT_WDT=y 213 | CONFIG_INT_WDT_TIMEOUT_MS=300 214 | CONFIG_INT_WDT_CHECK_CPU1=y 215 | CONFIG_TASK_WDT=y 216 | CONFIG_TASK_WDT_PANIC= 217 | CONFIG_TASK_WDT_TIMEOUT_S=5 218 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y 219 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 220 | CONFIG_BROWNOUT_DET=y 221 | CONFIG_BROWNOUT_DET_LVL_SEL_0=y 222 | CONFIG_BROWNOUT_DET_LVL_SEL_1= 223 | CONFIG_BROWNOUT_DET_LVL_SEL_2= 224 | CONFIG_BROWNOUT_DET_LVL_SEL_3= 225 | CONFIG_BROWNOUT_DET_LVL_SEL_4= 226 | CONFIG_BROWNOUT_DET_LVL_SEL_5= 227 | CONFIG_BROWNOUT_DET_LVL_SEL_6= 228 | CONFIG_BROWNOUT_DET_LVL_SEL_7= 229 | CONFIG_BROWNOUT_DET_LVL=0 230 | CONFIG_REDUCE_PHY_TX_POWER=y 231 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 232 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC= 233 | CONFIG_ESP32_TIME_SYSCALL_USE_FRC1= 234 | CONFIG_ESP32_TIME_SYSCALL_USE_NONE= 235 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 236 | CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL= 237 | CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC= 238 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256= 239 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 240 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 241 | CONFIG_ESP32_XTAL_FREQ_40=y 242 | CONFIG_ESP32_XTAL_FREQ_26= 243 | CONFIG_ESP32_XTAL_FREQ_AUTO= 244 | CONFIG_ESP32_XTAL_FREQ=40 245 | CONFIG_DISABLE_BASIC_ROM_CONSOLE= 246 | CONFIG_NO_BLOBS= 247 | CONFIG_ESP_TIMER_PROFILING= 248 | CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS= 249 | CONFIG_ESP_ERR_TO_NAME_LOOKUP=y 250 | 251 | # 252 | # Wi-Fi 253 | # 254 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 255 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 256 | CONFIG_ESP32_WIFI_STATIC_TX_BUFFER= 257 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 258 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 259 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 260 | CONFIG_ESP32_WIFI_CSI_ENABLED= 261 | CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y 262 | CONFIG_ESP32_WIFI_TX_BA_WIN=6 263 | CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y 264 | CONFIG_ESP32_WIFI_RX_BA_WIN=6 265 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 266 | CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y 267 | CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1= 268 | CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 269 | CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 270 | CONFIG_ESP32_WIFI_DEBUG_LOG_ENABLE= 271 | CONFIG_ESP32_WIFI_IRAM_OPT=y 272 | 273 | # 274 | # PHY 275 | # 276 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 277 | CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION= 278 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 279 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 280 | 281 | # 282 | # Power Management 283 | # 284 | CONFIG_PM_ENABLE= 285 | 286 | # 287 | # ADC-Calibration 288 | # 289 | CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y 290 | CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y 291 | CONFIG_ADC_CAL_LUT_ENABLE=y 292 | 293 | # 294 | # Event Loop Library 295 | # 296 | CONFIG_EVENT_LOOP_PROFILING= 297 | 298 | # 299 | # ESP HTTP client 300 | # 301 | CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y 302 | 303 | # 304 | # HTTP Server 305 | # 306 | CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 307 | CONFIG_HTTPD_MAX_URI_LEN=512 308 | CONFIG_HTTPD_ERR_RESP_NO_DELAY=y 309 | 310 | # 311 | # ESP HTTPS OTA 312 | # 313 | CONFIG_OTA_ALLOW_HTTP= 314 | 315 | # 316 | # Core dump 317 | # 318 | CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH= 319 | CONFIG_ESP32_ENABLE_COREDUMP_TO_UART= 320 | CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y 321 | CONFIG_ESP32_ENABLE_COREDUMP= 322 | 323 | # 324 | # Ethernet 325 | # 326 | CONFIG_DMA_RX_BUF_NUM=10 327 | CONFIG_DMA_TX_BUF_NUM=10 328 | CONFIG_EMAC_L2_TO_L3_RX_BUF_MODE=y 329 | CONFIG_EMAC_CHECK_LINK_PERIOD_MS=2000 330 | CONFIG_EMAC_TASK_PRIORITY=20 331 | CONFIG_EMAC_TASK_STACK_SIZE=3072 332 | 333 | # 334 | # FAT Filesystem support 335 | # 336 | CONFIG_FATFS_CODEPAGE_DYNAMIC= 337 | CONFIG_FATFS_CODEPAGE_437=y 338 | CONFIG_FATFS_CODEPAGE_720= 339 | CONFIG_FATFS_CODEPAGE_737= 340 | CONFIG_FATFS_CODEPAGE_771= 341 | CONFIG_FATFS_CODEPAGE_775= 342 | CONFIG_FATFS_CODEPAGE_850= 343 | CONFIG_FATFS_CODEPAGE_852= 344 | CONFIG_FATFS_CODEPAGE_855= 345 | CONFIG_FATFS_CODEPAGE_857= 346 | CONFIG_FATFS_CODEPAGE_860= 347 | CONFIG_FATFS_CODEPAGE_861= 348 | CONFIG_FATFS_CODEPAGE_862= 349 | CONFIG_FATFS_CODEPAGE_863= 350 | CONFIG_FATFS_CODEPAGE_864= 351 | CONFIG_FATFS_CODEPAGE_865= 352 | CONFIG_FATFS_CODEPAGE_866= 353 | CONFIG_FATFS_CODEPAGE_869= 354 | CONFIG_FATFS_CODEPAGE_932= 355 | CONFIG_FATFS_CODEPAGE_936= 356 | CONFIG_FATFS_CODEPAGE_949= 357 | CONFIG_FATFS_CODEPAGE_950= 358 | CONFIG_FATFS_CODEPAGE=437 359 | CONFIG_FATFS_LFN_NONE=y 360 | CONFIG_FATFS_LFN_HEAP= 361 | CONFIG_FATFS_LFN_STACK= 362 | CONFIG_FATFS_FS_LOCK=0 363 | CONFIG_FATFS_TIMEOUT_MS=10000 364 | CONFIG_FATFS_PER_FILE_CACHE=y 365 | 366 | # 367 | # Modbus configuration 368 | # 369 | CONFIG_MB_QUEUE_LENGTH=20 370 | CONFIG_MB_SERIAL_TASK_STACK_SIZE=2048 371 | CONFIG_MB_SERIAL_BUF_SIZE=256 372 | CONFIG_MB_SERIAL_TASK_PRIO=10 373 | CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT= 374 | CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 375 | CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 376 | CONFIG_MB_CONTROLLER_STACK_SIZE=4096 377 | CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 378 | CONFIG_MB_TIMER_PORT_ENABLED=y 379 | CONFIG_MB_TIMER_GROUP=0 380 | CONFIG_MB_TIMER_INDEX=0 381 | 382 | # 383 | # FreeRTOS 384 | # 385 | CONFIG_FREERTOS_UNICORE= 386 | CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF 387 | CONFIG_FREERTOS_CORETIMER_0=y 388 | CONFIG_FREERTOS_CORETIMER_1= 389 | CONFIG_FREERTOS_HZ=100 390 | CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y 391 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE= 392 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL= 393 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 394 | CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK= 395 | CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y 396 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 397 | CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y 398 | CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE= 399 | CONFIG_FREERTOS_ASSERT_DISABLE= 400 | CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 401 | CONFIG_FREERTOS_ISR_STACKSIZE=1536 402 | CONFIG_FREERTOS_LEGACY_HOOKS= 403 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 404 | CONFIG_SUPPORT_STATIC_ALLOCATION= 405 | CONFIG_TIMER_TASK_PRIORITY=1 406 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 407 | CONFIG_TIMER_QUEUE_LENGTH=10 408 | CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 409 | CONFIG_FREERTOS_USE_TRACE_FACILITY= 410 | CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS= 411 | CONFIG_FREERTOS_DEBUG_INTERNALS= 412 | CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y 413 | CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y 414 | 415 | # 416 | # Heap memory debugging 417 | # 418 | CONFIG_HEAP_POISONING_DISABLED=y 419 | CONFIG_HEAP_POISONING_LIGHT= 420 | CONFIG_HEAP_POISONING_COMPREHENSIVE= 421 | CONFIG_HEAP_TRACING= 422 | 423 | # 424 | # libsodium 425 | # 426 | CONFIG_LIBSODIUM_USE_MBEDTLS_SHA=y 427 | 428 | # 429 | # Log output 430 | # 431 | CONFIG_LOG_DEFAULT_LEVEL_NONE= 432 | CONFIG_LOG_DEFAULT_LEVEL_ERROR= 433 | CONFIG_LOG_DEFAULT_LEVEL_WARN= 434 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 435 | CONFIG_LOG_DEFAULT_LEVEL_DEBUG= 436 | CONFIG_LOG_DEFAULT_LEVEL_VERBOSE= 437 | CONFIG_LOG_DEFAULT_LEVEL=3 438 | CONFIG_LOG_COLORS=y 439 | 440 | # 441 | # LWIP 442 | # 443 | CONFIG_L2_TO_L3_COPY= 444 | CONFIG_LWIP_IRAM_OPTIMIZATION= 445 | CONFIG_LWIP_MAX_SOCKETS=10 446 | CONFIG_USE_ONLY_LWIP_SELECT= 447 | CONFIG_LWIP_SO_REUSE=y 448 | CONFIG_LWIP_SO_REUSE_RXTOALL=y 449 | CONFIG_LWIP_SO_RCVBUF= 450 | CONFIG_LWIP_DHCP_MAX_NTP_SERVERS=1 451 | CONFIG_LWIP_IP_FRAG= 452 | CONFIG_LWIP_IP_REASSEMBLY= 453 | CONFIG_LWIP_STATS= 454 | CONFIG_LWIP_ETHARP_TRUST_IP_MAC= 455 | CONFIG_ESP_GRATUITOUS_ARP=y 456 | CONFIG_GARP_TMR_INTERVAL=60 457 | CONFIG_TCPIP_RECVMBOX_SIZE=32 458 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 459 | CONFIG_LWIP_DHCP_RESTORE_LAST_IP= 460 | 461 | # 462 | # DHCP server 463 | # 464 | CONFIG_LWIP_DHCPS_LEASE_UNIT=60 465 | CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 466 | CONFIG_LWIP_AUTOIP= 467 | CONFIG_LWIP_NETIF_LOOPBACK=y 468 | CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 469 | 470 | # 471 | # TCP 472 | # 473 | CONFIG_LWIP_MAX_ACTIVE_TCP=16 474 | CONFIG_LWIP_MAX_LISTENING_TCP=16 475 | CONFIG_TCP_MAXRTX=12 476 | CONFIG_TCP_SYNMAXRTX=6 477 | CONFIG_TCP_MSS=1436 478 | CONFIG_TCP_MSL=60000 479 | CONFIG_TCP_SND_BUF_DEFAULT=5744 480 | CONFIG_TCP_WND_DEFAULT=5744 481 | CONFIG_TCP_RECVMBOX_SIZE=6 482 | CONFIG_TCP_QUEUE_OOSEQ=y 483 | CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES= 484 | CONFIG_TCP_OVERSIZE_MSS=y 485 | CONFIG_TCP_OVERSIZE_QUARTER_MSS= 486 | CONFIG_TCP_OVERSIZE_DISABLE= 487 | 488 | # 489 | # UDP 490 | # 491 | CONFIG_LWIP_MAX_UDP_PCBS=16 492 | CONFIG_UDP_RECVMBOX_SIZE=6 493 | CONFIG_TCPIP_TASK_STACK_SIZE=3072 494 | CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y 495 | CONFIG_TCPIP_TASK_AFFINITY_CPU0= 496 | CONFIG_TCPIP_TASK_AFFINITY_CPU1= 497 | CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF 498 | CONFIG_PPP_SUPPORT= 499 | 500 | # 501 | # ICMP 502 | # 503 | CONFIG_LWIP_MULTICAST_PING= 504 | CONFIG_LWIP_BROADCAST_PING= 505 | 506 | # 507 | # LWIP RAW API 508 | # 509 | CONFIG_LWIP_MAX_RAW_PCBS=16 510 | 511 | # 512 | # mbedTLS 513 | # 514 | CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y 515 | CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC= 516 | CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC= 517 | CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=16384 518 | CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN= 519 | CONFIG_MBEDTLS_DEBUG= 520 | CONFIG_MBEDTLS_HARDWARE_AES=y 521 | CONFIG_MBEDTLS_HARDWARE_MPI= 522 | CONFIG_MBEDTLS_HARDWARE_SHA= 523 | CONFIG_MBEDTLS_HAVE_TIME=y 524 | CONFIG_MBEDTLS_HAVE_TIME_DATE= 525 | CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y 526 | CONFIG_MBEDTLS_TLS_SERVER_ONLY= 527 | CONFIG_MBEDTLS_TLS_CLIENT_ONLY= 528 | CONFIG_MBEDTLS_TLS_DISABLED= 529 | CONFIG_MBEDTLS_TLS_SERVER=y 530 | CONFIG_MBEDTLS_TLS_CLIENT=y 531 | CONFIG_MBEDTLS_TLS_ENABLED=y 532 | 533 | # 534 | # TLS Key Exchange Methods 535 | # 536 | CONFIG_MBEDTLS_PSK_MODES= 537 | CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y 538 | CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA=y 539 | CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y 540 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y 541 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y 542 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y 543 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y 544 | CONFIG_MBEDTLS_SSL_RENEGOTIATION=y 545 | CONFIG_MBEDTLS_SSL_PROTO_SSL3= 546 | CONFIG_MBEDTLS_SSL_PROTO_TLS1=y 547 | CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=y 548 | CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y 549 | CONFIG_MBEDTLS_SSL_PROTO_DTLS= 550 | CONFIG_MBEDTLS_SSL_ALPN=y 551 | CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y 552 | 553 | # 554 | # Symmetric Ciphers 555 | # 556 | CONFIG_MBEDTLS_AES_C=y 557 | CONFIG_MBEDTLS_CAMELLIA_C= 558 | CONFIG_MBEDTLS_DES_C= 559 | CONFIG_MBEDTLS_RC4_DISABLED=y 560 | CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT= 561 | CONFIG_MBEDTLS_RC4_ENABLED= 562 | CONFIG_MBEDTLS_BLOWFISH_C= 563 | CONFIG_MBEDTLS_XTEA_C= 564 | CONFIG_MBEDTLS_CCM_C=y 565 | CONFIG_MBEDTLS_GCM_C=y 566 | CONFIG_MBEDTLS_RIPEMD160_C= 567 | 568 | # 569 | # Certificates 570 | # 571 | CONFIG_MBEDTLS_PEM_PARSE_C=y 572 | CONFIG_MBEDTLS_PEM_WRITE_C=y 573 | CONFIG_MBEDTLS_X509_CRL_PARSE_C=y 574 | CONFIG_MBEDTLS_X509_CSR_PARSE_C=y 575 | CONFIG_MBEDTLS_ECP_C=y 576 | CONFIG_MBEDTLS_ECDH_C=y 577 | CONFIG_MBEDTLS_ECDSA_C=y 578 | CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y 579 | CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y 580 | CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y 581 | CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y 582 | CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y 583 | CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y 584 | CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y 585 | CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y 586 | CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y 587 | CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y 588 | CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y 589 | CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y 590 | CONFIG_MBEDTLS_ECP_NIST_OPTIM=y 591 | 592 | # 593 | # mDNS 594 | # 595 | CONFIG_MDNS_MAX_SERVICES=10 596 | 597 | # 598 | # ESP-MQTT Configurations 599 | # 600 | CONFIG_MQTT_PROTOCOL_311=y 601 | CONFIG_MQTT_TRANSPORT_SSL=y 602 | CONFIG_MQTT_TRANSPORT_WEBSOCKET=y 603 | CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y 604 | CONFIG_MQTT_USE_CUSTOM_CONFIG= 605 | CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED= 606 | CONFIG_MQTT_CUSTOM_OUTBOX= 607 | 608 | # 609 | # NVS 610 | # 611 | 612 | # 613 | # OpenSSL 614 | # 615 | CONFIG_OPENSSL_DEBUG= 616 | CONFIG_OPENSSL_ASSERT_DO_NOTHING=y 617 | CONFIG_OPENSSL_ASSERT_EXIT= 618 | 619 | # 620 | # PThreads 621 | # 622 | CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 623 | CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 624 | CONFIG_PTHREAD_STACK_MIN=768 625 | CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y 626 | CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0= 627 | CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1= 628 | CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 629 | CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" 630 | 631 | # 632 | # SPI Flash driver 633 | # 634 | CONFIG_SPI_FLASH_VERIFY_WRITE= 635 | CONFIG_SPI_FLASH_ENABLE_COUNTERS= 636 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 637 | 638 | # 639 | # SPIFFS Configuration 640 | # 641 | CONFIG_SPIFFS_MAX_PARTITIONS=3 642 | 643 | # 644 | # SPIFFS Cache Configuration 645 | # 646 | CONFIG_SPIFFS_CACHE=y 647 | CONFIG_SPIFFS_CACHE_WR=y 648 | CONFIG_SPIFFS_CACHE_STATS= 649 | CONFIG_SPIFFS_PAGE_CHECK=y 650 | CONFIG_SPIFFS_GC_MAX_RUNS=10 651 | CONFIG_SPIFFS_GC_STATS= 652 | CONFIG_SPIFFS_PAGE_SIZE=256 653 | CONFIG_SPIFFS_OBJ_NAME_LEN=32 654 | CONFIG_SPIFFS_USE_MAGIC=y 655 | CONFIG_SPIFFS_USE_MAGIC_LENGTH=y 656 | CONFIG_SPIFFS_META_LENGTH=4 657 | CONFIG_SPIFFS_USE_MTIME=y 658 | 659 | # 660 | # Debug Configuration 661 | # 662 | CONFIG_SPIFFS_DBG= 663 | CONFIG_SPIFFS_API_DBG= 664 | CONFIG_SPIFFS_GC_DBG= 665 | CONFIG_SPIFFS_CACHE_DBG= 666 | CONFIG_SPIFFS_CHECK_DBG= 667 | CONFIG_SPIFFS_TEST_VISUALISATION= 668 | 669 | # 670 | # TCP/IP Adapter 671 | # 672 | CONFIG_IP_LOST_TIMER_INTERVAL=120 673 | CONFIG_TCPIP_LWIP=y 674 | 675 | # 676 | # Unity unit testing library 677 | # 678 | CONFIG_UNITY_ENABLE_FLOAT=y 679 | CONFIG_UNITY_ENABLE_DOUBLE=y 680 | CONFIG_UNITY_ENABLE_COLOR= 681 | CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y 682 | CONFIG_UNITY_ENABLE_FIXTURE= 683 | 684 | # 685 | # Virtual file system 686 | # 687 | CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y 688 | CONFIG_SUPPORT_TERMIOS=y 689 | 690 | # 691 | # Wear Levelling 692 | # 693 | CONFIG_WL_SECTOR_SIZE_512= 694 | CONFIG_WL_SECTOR_SIZE_4096=y 695 | CONFIG_WL_SECTOR_SIZE=4096 696 | -------------------------------------------------------------------------------- /setenv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export PATH=/opt/gcc-xtensa-esp32-elf-1.22.0-80-g6c4433a-5.2.0/bin:$PATH 4 | export IDF_PATH=$(pwd)/esp-idf 5 | export TARGET_DIR=target/xtensa-none-elf/release 6 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![no_std] 2 | #![no_main] 3 | 4 | extern crate esp32_sys; 5 | 6 | use core::panic::PanicInfo; 7 | use core::ptr; 8 | use esp32_sys::*; 9 | 10 | #[panic_handler] 11 | fn panic(_info: &PanicInfo) -> ! { 12 | loop {} 13 | } 14 | 15 | const BLINK_GPIO: gpio_num_t = gpio_num_t_GPIO_NUM_2; 16 | const UART_NUM: uart_port_t = uart_port_t_UART_NUM_1; 17 | const ECHO_TEST_TXD: i32 = gpio_num_t_GPIO_NUM_17 as i32; 18 | const ECHO_TEST_RXD: i32 = gpio_num_t_GPIO_NUM_16 as i32; 19 | const ECHO_TEST_RTS: i32 = UART_PIN_NO_CHANGE; 20 | const ECHO_TEST_CTS: i32 = UART_PIN_NO_CHANGE; 21 | 22 | const BUF_SIZE: i32 = 1024; 23 | 24 | #[no_mangle] 25 | pub fn app_main() { 26 | unsafe { 27 | rust_blink_and_write(); 28 | } 29 | } 30 | 31 | unsafe fn rust_blink_and_write() { 32 | gpio_pad_select_gpio(BLINK_GPIO as u8); 33 | 34 | /* Set the GPIO as a push/pull output */ 35 | gpio_set_direction(BLINK_GPIO, gpio_mode_t_GPIO_MODE_OUTPUT); 36 | 37 | /* Configure parameters of an UART driver, 38 | * communication pins and install the driver */ 39 | let uart_config = uart_config_t { 40 | baud_rate: 115200, 41 | data_bits: uart_word_length_t_UART_DATA_8_BITS, 42 | parity: uart_parity_t_UART_PARITY_DISABLE, 43 | stop_bits: uart_stop_bits_t_UART_STOP_BITS_1, 44 | flow_ctrl: uart_hw_flowcontrol_t_UART_HW_FLOWCTRL_DISABLE, 45 | rx_flow_ctrl_thresh: 0, 46 | use_ref_tick: false, 47 | }; 48 | 49 | uart_param_config(UART_NUM, &uart_config); 50 | uart_set_pin(UART_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS); 51 | uart_driver_install(UART_NUM, BUF_SIZE * 2, 0, 0, ptr::null_mut(), 0); 52 | 53 | loop { 54 | /* Blink off (output low) */ 55 | gpio_set_level(BLINK_GPIO, 0); 56 | 57 | //vTaskDelay(1000 / portTICK_PERIOD_MS); 58 | ets_delay_us(1_000_000); 59 | 60 | // Write data to UART. 61 | let test_str = "This is a test string.\n"; 62 | uart_write_bytes(UART_NUM, test_str.as_ptr() as *const _, test_str.len()); 63 | 64 | /* Blink on (output high) */ 65 | gpio_set_level(BLINK_GPIO, 1); 66 | 67 | // vTaskDelay(1000 / portTICK_PERIOD_MS); 68 | ets_delay_us(1_000_000); 69 | } 70 | } 71 | --------------------------------------------------------------------------------