diff --git a/.gitignore b/.gitignore index 03f4a3c..d2aa341 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .pio +src/config.priv.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dc3507..46a7c3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,4 +3,5 @@ cmake_minimum_required(VERSION 3.5) include($ENV{IDF_PATH}/tools/cmake/project.cmake) +list(APPEND EXTRA_COMPONENT_DIRS components/esp32-rmt-uart) project(uart_echo) diff --git a/README.md b/README.md new file mode 100644 index 0000000..14650ec --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +esp32-dalek +=========== + +This is another reincarnation of HSWAW Dalek IO interface - this time around based on ESP32. + +* `//hw` - contains basic IO schematic +* `//src` (...and the rest) - contains ESP-IDF+platformio-based ESP32 project + +## Building and running + +Create `src/config.priv.h` based on `src/config.priv.h.dist` with proper network credentials, then check `src/main.c` for GPIO assignments. + +```sh +pio run -t upload -t monitor -e esp32dev +``` + +## Usage + +ESP32 exposes plain TCP server on port 1337 (check USB-UART output for currently assigned IP address) and passes ASCII/Unicode input/output data through to TTY line. Multiple clients receive copy of all the data and can send data simultaneously. All data sent to the teletype is echoed back (to all clients). + +Motor should start up only when there's an active TCP connection - wait a couple of seconds before sending data to ensure motor is up and running. + +No text wrapping is implemented - limit to ~80 columns on client-side. + +Check Baudot ↔ ASCII/Unicode conversion routines in `src/baudot.c` for supported characters. \ No newline at end of file diff --git a/hw/hw.kicad_sch b/hw/hw.kicad_sch index a09316b..8087563 100644 --- a/hw/hw.kicad_sch +++ b/hw/hw.kicad_sch @@ -467,7 +467,7 @@ ) ) ) - (symbol "Transistor_BJT:BC547" + (symbol "Transistor_BJT:2N2219" (pin_names (offset 0) hide) (exclude_from_sim no) @@ -482,7 +482,7 @@ (justify left) ) ) - (property "Value" "BC547" + (property "Value" "2N2219" (at 5.08 0 0) (effects (font @@ -491,7 +491,7 @@ (justify left) ) ) - (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" + (property "Footprint" "Package_TO_SOT_THT:TO-39-3" (at 5.08 -1.905 0) (effects (font @@ -502,7 +502,7 @@ (hide yes) ) ) - (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BC550-D.pdf" + (property "Datasheet" "http://www.onsemi.com/pub_link/Collateral/2N2219-D.PDF" (at 0 0 0) (effects (font @@ -512,7 +512,7 @@ (hide yes) ) ) - (property "Description" "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92" + (property "Description" "800mA Ic, 50V Vce, NPN Transistor, TO-39" (at 0 0 0) (effects (font @@ -530,7 +530,7 @@ (hide yes) ) ) - (property "ki_fp_filters" "TO?92*" + (property "ki_fp_filters" "TO?39*" (at 0 0 0) (effects (font @@ -539,19 +539,7 @@ (hide yes) ) ) - (symbol "BC547_0_1" - (polyline - (pts - (xy 0 0) (xy 0.635 0) - ) - (stroke - (width 0) - (type default) - ) - (fill - (type none) - ) - ) + (symbol "2N2219_0_1" (polyline (pts (xy 0.635 0.635) (xy 2.54 2.54) @@ -612,11 +600,11 @@ ) ) ) - (symbol "BC547_1_1" + (symbol "2N2219_1_1" (pin passive line - (at 2.54 5.08 270) + (at 2.54 -5.08 90) (length 2.54) - (name "C" + (name "E" (effects (font (size 1.27 1.27) @@ -631,9 +619,9 @@ ) ) ) - (pin input line + (pin passive line (at -5.08 0 0) - (length 5.08) + (length 5.715) (name "B" (effects (font @@ -650,9 +638,9 @@ ) ) (pin passive line - (at 2.54 -5.08 90) + (at 2.54 5.08 270) (length 2.54) - (name "E" + (name "C" (effects (font (size 1.27 1.27) @@ -887,7 +875,7 @@ ) ) (junction - (at 81.28 72.39) + (at 81.28 81.28) (diameter 0) (color 0 0 0 0) (uuid "362a7e93-dd37-44ee-935b-def9920a1ee4") @@ -903,12 +891,12 @@ (uuid "487432ff-8dc9-44d3-8ef1-e7e755cb8a6b") ) (no_connect - (at 86.36 74.93) + (at 86.36 83.82) (uuid "9f504306-72dd-474d-812c-51b1fedad886") ) (wire (pts - (xy 113.03 69.85) (xy 114.3 69.85) + (xy 113.03 78.74) (xy 114.3 78.74) ) (stroke (width 0) @@ -928,7 +916,7 @@ ) (wire (pts - (xy 101.6 69.85) (xy 105.41 69.85) + (xy 101.6 78.74) (xy 105.41 78.74) ) (stroke (width 0) @@ -938,7 +926,7 @@ ) (wire (pts - (xy 81.28 74.93) (xy 81.28 72.39) + (xy 81.28 83.82) (xy 81.28 81.28) ) (stroke (width 0) @@ -958,7 +946,7 @@ ) (wire (pts - (xy 77.47 69.85) (xy 86.36 69.85) + (xy 77.47 78.74) (xy 86.36 78.74) ) (stroke (width 0) @@ -966,6 +954,16 @@ ) (uuid "8311f28f-7487-4ee1-828f-8f4bf3f89135") ) + (wire + (pts + (xy 114.3 58.42) (xy 107.95 58.42) + ) + (stroke + (width 0) + (type default) + ) + (uuid "8f237521-f2e7-489d-9484-0d3c25957522") + ) (wire (pts (xy 63.5 43.18) (xy 86.36 43.18) @@ -988,7 +986,7 @@ ) (wire (pts - (xy 81.28 48.26) (xy 81.28 72.39) + (xy 81.28 48.26) (xy 81.28 81.28) ) (stroke (width 0) @@ -1006,6 +1004,16 @@ ) (uuid "b1627a60-a8c0-415d-a03e-c95aa5febd17") ) + (wire + (pts + (xy 107.95 58.42) (xy 107.95 48.26) + ) + (stroke + (width 0) + (type default) + ) + (uuid "c51c655e-48dd-4b27-a1de-67756dda803e") + ) (wire (pts (xy 107.95 48.26) (xy 114.3 48.26) @@ -1018,7 +1026,7 @@ ) (wire (pts - (xy 69.85 74.93) (xy 81.28 74.93) + (xy 69.85 83.82) (xy 81.28 83.82) ) (stroke (width 0) @@ -1028,7 +1036,7 @@ ) (wire (pts - (xy 69.85 64.77) (xy 69.85 49.53) + (xy 69.85 73.66) (xy 69.85 49.53) ) (stroke (width 0) @@ -1038,7 +1046,7 @@ ) (wire (pts - (xy 81.28 72.39) (xy 86.36 72.39) + (xy 81.28 81.28) (xy 86.36 81.28) ) (stroke (width 0) @@ -1088,7 +1096,7 @@ ) (text "common → motor => 75v open, 120mA closed\ncommon → data => -71v open, -70mA closed" (exclude_from_sim no) - (at 44.45 32.766 0) + (at 46.736 32.004 0) (effects (font (size 1.27 1.27) @@ -1096,6 +1104,27 @@ ) (uuid "cbb12b6d-75e2-42bd-a3dc-93a90b966123") ) + (text "YOLO x-D" + (exclude_from_sim no) + (at 82.296 45.72 0) + (effects + (font + (size 1.27 1.27) + (color 0 0 0 0.04) + ) + ) + (uuid "cfcd1392-acb5-4ab5-860e-aeeb678d8b7d") + ) + (text "Yes, this is an optodarlington, fight me." + (exclude_from_sim no) + (at 78.994 87.884 0) + (effects + (font + (size 1.27 1.27) + ) + ) + (uuid "dccd118c-a738-49f0-9230-e99b26b1850f") + ) (global_label "TTY_ENABLE" (shape bidirectional) (at 63.5 55.88 180) @@ -1186,7 +1215,7 @@ ) (global_label "ESP32_TX" (shape bidirectional) - (at 114.3 69.85 0) + (at 114.3 78.74 0) (fields_autoplaced yes) (effects (font @@ -1196,7 +1225,7 @@ ) (uuid "fc6bed03-bb4a-4ab8-bef6-b1a148721365") (property "Intersheetrefs" "${INTERSHEET_REFS}" - (at 127.5887 69.85 0) + (at 127.5887 78.74 0) (effects (font (size 1.27 1.27) @@ -1208,16 +1237,15 @@ ) (symbol (lib_id "Device:R") - (at 107.95 52.07 0) + (at 118.11 58.42 90) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) - (fields_autoplaced yes) (uuid "16c0fddc-2686-406b-91db-36c724d7d8ef") (property "Reference" "R1" - (at 110.49 50.7999 0) + (at 119.634 53.34 90) (effects (font (size 1.27 1.27) @@ -1226,7 +1254,7 @@ ) ) (property "Value" "10k" - (at 110.49 53.3399 0) + (at 119.888 55.88 90) (effects (font (size 1.27 1.27) @@ -1235,7 +1263,7 @@ ) ) (property "Footprint" "" - (at 106.172 52.07 90) + (at 118.11 60.198 90) (effects (font (size 1.27 1.27) @@ -1244,7 +1272,7 @@ ) ) (property "Datasheet" "~" - (at 107.95 52.07 0) + (at 118.11 58.42 0) (effects (font (size 1.27 1.27) @@ -1253,7 +1281,7 @@ ) ) (property "Description" "Resistor" - (at 107.95 52.07 0) + (at 118.11 58.42 0) (effects (font (size 1.27 1.27) @@ -1276,94 +1304,17 @@ ) ) ) - (symbol - (lib_id "Transistor_BJT:BC547") - (at 72.39 69.85 180) - (unit 1) - (exclude_from_sim no) - (in_bom yes) - (on_board yes) - (dnp no) - (fields_autoplaced yes) - (uuid "2a7df132-da68-4c81-898b-4fcafece4f65") - (property "Reference" "Q1" - (at 67.31 68.5799 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Value" "BC547" - (at 67.31 71.1199 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - ) - ) - (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" - (at 67.31 67.945 0) - (effects - (font - (size 1.27 1.27) - (italic yes) - ) - (justify left) - (hide yes) - ) - ) - (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BC550-D.pdf" - (at 72.39 69.85 0) - (effects - (font - (size 1.27 1.27) - ) - (justify left) - (hide yes) - ) - ) - (property "Description" "0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92" - (at 72.39 69.85 0) - (effects - (font - (size 1.27 1.27) - ) - (hide yes) - ) - ) - (pin "2" - (uuid "fbb8de1c-0fc2-487e-abbc-4c83e59b37a0") - ) - (pin "1" - (uuid "3591438f-606b-4456-af27-21c04e142fb0") - ) - (pin "3" - (uuid "74838997-3fef-414a-80f9-835c68328064") - ) - (instances - (project "hw" - (path "/a3d15243-7f01-4c75-a5ec-0d2fb509d510" - (reference "Q1") - (unit 1) - ) - ) - ) - ) (symbol (lib_id "power:+3.3V") - (at 107.95 55.88 180) + (at 121.92 58.42 270) (unit 1) (exclude_from_sim no) (in_bom yes) (on_board yes) (dnp no) - (fields_autoplaced yes) (uuid "2c2f1f40-1927-4a0f-aa86-4ffc81c35823") (property "Reference" "#PWR02" - (at 107.95 52.07 0) + (at 118.11 58.42 0) (effects (font (size 1.27 1.27) @@ -1372,7 +1323,7 @@ ) ) (property "Value" "+3.3V" - (at 107.95 60.96 0) + (at 128.27 58.42 90) (effects (font (size 1.27 1.27) @@ -1380,7 +1331,7 @@ ) ) (property "Footprint" "" - (at 107.95 55.88 0) + (at 121.92 58.42 0) (effects (font (size 1.27 1.27) @@ -1389,7 +1340,7 @@ ) ) (property "Datasheet" "" - (at 107.95 55.88 0) + (at 121.92 58.42 0) (effects (font (size 1.27 1.27) @@ -1398,7 +1349,7 @@ ) ) (property "Description" "Power symbol creates a global label with name \"+3.3V\"" - (at 107.95 55.88 0) + (at 121.92 58.42 0) (effects (font (size 1.27 1.27) @@ -1484,9 +1435,85 @@ ) ) ) + (symbol + (lib_id "Transistor_BJT:2N2219") + (at 72.39 78.74 180) + (unit 1) + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (dnp no) + (fields_autoplaced yes) + (uuid "648a6d44-3f55-473e-ae6b-55d16dc9f873") + (property "Reference" "Q2" + (at 67.31 77.4699 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Value" "2N2222" + (at 67.31 80.0099 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + ) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-39-3" + (at 67.31 76.835 0) + (effects + (font + (size 1.27 1.27) + (italic yes) + ) + (justify left) + (hide yes) + ) + ) + (property "Datasheet" "http://www.onsemi.com/pub_link/Collateral/2N2219-D.PDF" + (at 72.39 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (justify left) + (hide yes) + ) + ) + (property "Description" "800mA Ic, 50V Vce, NPN Transistor, TO-39" + (at 72.39 78.74 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (pin "1" + (uuid "7ac990e8-1783-4e7b-8d5a-38ed74fbf256") + ) + (pin "3" + (uuid "8de0d214-126a-4b2d-809d-d5dee07e2fe0") + ) + (pin "2" + (uuid "88d25663-6500-4c05-9899-9ffd1cb9a6b7") + ) + (instances + (project "hw" + (path "/a3d15243-7f01-4c75-a5ec-0d2fb509d510" + (reference "Q2") + (unit 1) + ) + ) + ) + ) (symbol (lib_id "power:GND") - (at 101.6 74.93 90) + (at 101.6 83.82 90) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -1495,7 +1522,7 @@ (fields_autoplaced yes) (uuid "77e5c414-3808-4813-95b8-5ca7e2a806b8") (property "Reference" "#PWR03" - (at 107.95 74.93 0) + (at 107.95 83.82 0) (effects (font (size 1.27 1.27) @@ -1504,7 +1531,7 @@ ) ) (property "Value" "GND" - (at 105.41 74.9299 90) + (at 105.41 83.8199 90) (effects (font (size 1.27 1.27) @@ -1513,7 +1540,7 @@ ) ) (property "Footprint" "" - (at 101.6 74.93 0) + (at 101.6 83.82 0) (effects (font (size 1.27 1.27) @@ -1522,7 +1549,7 @@ ) ) (property "Datasheet" "" - (at 101.6 74.93 0) + (at 101.6 83.82 0) (effects (font (size 1.27 1.27) @@ -1531,7 +1558,7 @@ ) ) (property "Description" "Power symbol creates a global label with name \"GND\" , ground" - (at 101.6 74.93 0) + (at 101.6 83.82 0) (effects (font (size 1.27 1.27) @@ -1553,7 +1580,7 @@ ) (symbol (lib_id "Device:R") - (at 109.22 69.85 90) + (at 109.22 78.74 90) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -1562,15 +1589,15 @@ (fields_autoplaced yes) (uuid "a5b47767-87a2-47ab-b4bd-3c6358237c5b") (property "Reference" "R2" - (at 109.22 63.5 90) + (at 109.22 72.39 90) (effects (font (size 1.27 1.27) ) ) ) - (property "Value" "R" - (at 109.22 66.04 90) + (property "Value" "220" + (at 109.22 74.93 90) (effects (font (size 1.27 1.27) @@ -1578,7 +1605,7 @@ ) ) (property "Footprint" "" - (at 109.22 71.628 90) + (at 109.22 80.518 90) (effects (font (size 1.27 1.27) @@ -1587,7 +1614,7 @@ ) ) (property "Datasheet" "~" - (at 109.22 69.85 0) + (at 109.22 78.74 0) (effects (font (size 1.27 1.27) @@ -1596,7 +1623,7 @@ ) ) (property "Description" "Resistor" - (at 109.22 69.85 0) + (at 109.22 78.74 0) (effects (font (size 1.27 1.27) @@ -1704,7 +1731,7 @@ ) (symbol (lib_id "Isolator:4N35") - (at 93.98 72.39 180) + (at 93.98 81.28 180) (unit 1) (exclude_from_sim no) (in_bom yes) @@ -1713,7 +1740,7 @@ (fields_autoplaced yes) (uuid "f12d17c2-5fd1-492b-b9da-05404c187a71") (property "Reference" "U2" - (at 93.98 63.5 0) + (at 93.98 72.39 0) (effects (font (size 1.27 1.27) @@ -1721,7 +1748,7 @@ ) ) (property "Value" "4N35" - (at 93.98 66.04 0) + (at 93.98 74.93 0) (effects (font (size 1.27 1.27) @@ -1729,7 +1756,7 @@ ) ) (property "Footprint" "Package_DIP:DIP-6_W7.62mm" - (at 99.06 67.31 0) + (at 99.06 76.2 0) (effects (font (size 1.27 1.27) @@ -1740,7 +1767,7 @@ ) ) (property "Datasheet" "https://www.vishay.com/docs/81181/4n35.pdf" - (at 93.98 72.39 0) + (at 93.98 81.28 0) (effects (font (size 1.27 1.27) @@ -1750,7 +1777,7 @@ ) ) (property "Description" "Optocoupler, Phototransistor Output, with Base Connection, Vce 70V, CTR 100%, Viso 5000V, DIP6" - (at 93.98 72.39 0) + (at 93.98 81.28 0) (effects (font (size 1.27 1.27) diff --git a/platformio.ini b/platformio.ini index 9615cf6..648d4e3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,6 +10,7 @@ [env] platform = espressif32 framework = espidf +upload_speed = 921600 monitor_speed = 115200 monitor_filters = direct @@ -17,6 +18,3 @@ monitor_filters = [env:esp32dev] board = esp32dev - -[env:dfrobot_beetle_esp32c3] -board = dfrobot_beetle_esp32c3 diff --git a/sdkconfig.esp32dev b/sdkconfig.esp32dev new file mode 100644 index 0000000..29ff84e --- /dev/null +++ b/sdkconfig.esp32dev @@ -0,0 +1,1830 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration +# +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=301 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y +CONFIG_SOC_UART_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SDM_SUPPORTED=y +CONFIG_SOC_GPSPI_SUPPORTED=y +CONFIG_SOC_LEDC_SUPPORTED=y +CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y +CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 +CONFIG_SOC_XTAL_SUPPORT_26M=y +CONFIG_SOC_XTAL_SUPPORT_40M=y +CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DMA_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 +CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 +CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y +CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_CPU_INTR_NUM=32 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_SIZE=64 +CONFIG_SOC_DAC_CHAN_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_CMD_REG_NUM=16 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_APB=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y +CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MMU_PERIPH_NUM=2 +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SDM_GROUPS=1 +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 +CONFIG_SOC_SDM_CLK_SUPPORT_APB=y +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAX_CS_NUM=3 +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TOUCH_VERSION_1=y +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TWAI_CONTROLLER_NUM=1 +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_REF_TICK=y +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y +CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y +CONFIG_SOC_APLL_MULTIPLIER_OUT_MIN_HZ=350000000 +CONFIG_SOC_APLL_MULTIPLIER_OUT_MAX_HZ=500000000 +CONFIG_SOC_APLL_MIN_HZ=5303031 +CONFIG_SOC_APLL_MAX_HZ=125000000 +CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y +CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y +CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_WIFI_WAPI_SUPPORT=y +CONFIG_SOC_WIFI_CSI_SUPPORT=y +CONFIG_SOC_WIFI_MESH_SUPPORT=y +CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y +CONFIG_SOC_WIFI_NAN_SUPPORT=y +CONFIG_SOC_BLE_SUPPORTED=y +CONFIG_SOC_BLE_MESH_SUPPORTED=y +CONFIG_SOC_BT_CLASSIC_SUPPORTED=y +CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y +CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# +# Build type +# +CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y +# CONFIG_APP_BUILD_TYPE_RAM is not set +CONFIG_APP_BUILD_GENERATE_BINARIES=y +CONFIG_APP_BUILD_BOOTLOADER=y +CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y +# CONFIG_APP_REPRODUCIBLE_BUILD is not set +# CONFIG_APP_NO_BLOBS is not set +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set +# end of Build type + +# +# Bootloader config +# +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 +CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set +CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y +# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set +CONFIG_BOOTLOADER_LOG_LEVEL=3 +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Bootloader config + +# +# Security features +# +CONFIG_SECURE_BOOT_V1_SUPPORTED=y +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT is not set +# CONFIG_SECURE_FLASH_ENC_ENABLED is not set +# end of Security features + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_MZ_CRC32=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y +CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y + +# +# Serial flasher config +# +# CONFIG_ESPTOOLPY_NO_STUB is not set +# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set +# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set +CONFIG_ESPTOOLPY_FLASHMODE_DIO=y +# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set +CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y +CONFIG_ESPTOOLPY_FLASHMODE="dio" +# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="2MB" +# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +CONFIG_PARTITION_TABLE_SINGLE_APP=y +# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +# CONFIG_PARTITION_TABLE_CUSTOM is not set +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table + +# +# Echo Example Configuration +# +CONFIG_ENV_GPIO_RANGE_MIN=0 +CONFIG_ENV_GPIO_RANGE_MAX=39 +CONFIG_ENV_GPIO_IN_RANGE_MAX=39 +CONFIG_ENV_GPIO_OUT_RANGE_MAX=33 +CONFIG_EXAMPLE_UART_PORT_NUM=2 +CONFIG_EXAMPLE_UART_BAUD_RATE=115200 +CONFIG_EXAMPLE_UART_RXD=5 +CONFIG_EXAMPLE_UART_TXD=4 +CONFIG_EXAMPLE_TASK_STACK_SIZE=2048 +# end of Echo Example Configuration + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y +# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set +# CONFIG_COMPILER_OPTIMIZATION_NONE is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y +# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES is not set +# end of Compiler options + +# +# Component config +# + +# +# Application Level Tracing +# +# CONFIG_APPTRACE_DEST_JTAG is not set +CONFIG_APPTRACE_DEST_NONE=y +# CONFIG_APPTRACE_DEST_UART1 is not set +# CONFIG_APPTRACE_DEST_UART2 is not set +CONFIG_APPTRACE_DEST_UART_NONE=y +CONFIG_APPTRACE_UART_TASK_PRIO=1 +CONFIG_APPTRACE_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# Bluetooth +# +# CONFIG_BT_ENABLED is not set +# end of Bluetooth + +# +# Driver Configurations +# + +# +# Legacy ADC Configuration +# +CONFIG_ADC_DISABLE_DAC=y +# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set + +# +# Legacy ADC Calibration Configuration +# +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy ADC Calibration Configuration +# end of Legacy ADC Configuration + +# +# SPI Configuration +# +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of SPI Configuration + +# +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y +CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y +CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y +CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y +CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y +# end of TWAI Configuration + +# +# UART Configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART Configuration + +# +# GPIO Configuration +# +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of GPIO Configuration + +# +# Sigma Delta Modulator Configuration +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of Sigma Delta Modulator Configuration + +# +# GPTimer Configuration +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of GPTimer Configuration + +# +# PCNT Configuration +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of PCNT Configuration + +# +# RMT Configuration +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of RMT Configuration + +# +# MCPWM Configuration +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of MCPWM Configuration + +# +# I2S Configuration +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of I2S Configuration + +# +# DAC Configuration +# +# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set +# CONFIG_DAC_ISR_IRAM_SAFE is not set +# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_DAC_ENABLE_DEBUG_LOG is not set +CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y +# end of DAC Configuration +# end of Driver Configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set +# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + +# +# ADC and ADC Calibration +# +# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set + +# +# ADC Calibration Configurations +# +CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y +CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CALI_LUT_ENABLE=y +# end of ADC Calibration Configurations + +CONFIG_ADC_DISABLE_DAC_OUTPUT=y +# end of ADC and ADC Calibration + +# +# Wireless Coexistence +# +# end of Wireless Coexistence + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related + +# +# Ethernet +# +CONFIG_ETH_ENABLED=y +CONFIG_ETH_USE_ESP32_EMAC=y +CONFIG_ETH_PHY_INTERFACE_RMII=y +CONFIG_ETH_RMII_CLK_INPUT=y +# CONFIG_ETH_RMII_CLK_OUTPUT is not set +CONFIG_ETH_RMII_CLK_IN_GPIO=0 +CONFIG_ETH_DMA_BUFFER_SIZE=512 +CONFIG_ETH_DMA_RX_BUFFER_NUM=10 +CONFIG_ETH_DMA_TX_BUFFER_NUM=10 +# CONFIG_ETH_IRAM_OPTIMIZATION is not set +CONFIG_ETH_USE_SPI_ETHERNET=y +# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set +# CONFIG_ETH_SPI_ETHERNET_W5500 is not set +# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set +# CONFIG_ETH_USE_OPENETH is not set +# CONFIG_ETH_TRANSMIT_MUTEX is not set +# end of Ethernet + +# +# Event Loop Library +# +# CONFIG_ESP_EVENT_LOOP_PROFILING is not set +CONFIG_ESP_EVENT_POST_FROM_ISR=y +CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y +# end of Event Loop Library + +# +# GDB Stub +# +# end of GDB Stub + +# +# ESP HTTP client +# +CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y +# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_HTTPD_WS_SUPPORT is not set +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set +# end of HTTP Server + +# +# ESP HTTPS OTA +# +# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set +# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# Hardware Settings +# + +# +# Chip revision +# +CONFIG_ESP32_REV_MIN_0=y +# CONFIG_ESP32_REV_MIN_1 is not set +# CONFIG_ESP32_REV_MIN_1_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +# CONFIG_ESP32_REV_MIN_3_1 is not set +CONFIG_ESP32_REV_MIN=0 +CONFIG_ESP32_REV_MIN_FULL=0 +CONFIG_ESP_REV_MIN_FULL=0 + +# +# Maximum Supported ESP32 Revision (Rev v3.99) +# +CONFIG_ESP32_REV_MAX_FULL=399 +CONFIG_ESP_REV_MAX_FULL=399 +# end of Chip revision + +# +# MAC Config +# +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y +CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y +CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y +# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set +# end of MAC Config + +# +# Sleep Config +# +# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set +CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y +# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_INT_RC=y +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_RTC_CLK_CAL_CYCLES=1024 +# end of RTC Clock Config + +# +# Peripheral Control +# +CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# end of Peripheral Control + +# +# Main XTAL Config +# +# CONFIG_XTAL_FREQ_26 is not set +CONFIG_XTAL_FREQ_40=y +# CONFIG_XTAL_FREQ_AUTO is not set +CONFIG_XTAL_FREQ=40 +# end of Main XTAL Config +# end of Hardware Settings + +# +# LCD and Touch Panel +# + +# +# LCD Touch Drivers are maintained in the IDF Component Registry +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# end of LCD Peripheral Configuration +# end of LCD and Touch Panel + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +CONFIG_ESP_NETIF_TCPIP_LWIP=y +# CONFIG_ESP_NETIF_LOOPBACK is not set +CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y +# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# CONFIG_ESP_NETIF_BRIDGE_EN is not set +# end of ESP NETIF Adapter + +# +# Partition API Configuration +# +# end of Partition API Configuration + +# +# PHY +# +CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP_PHY_MAX_TX_POWER=20 +# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set +CONFIG_ESP_PHY_RF_CAL_PARTIAL=y +# CONFIG_ESP_PHY_RF_CAL_NONE is not set +# CONFIG_ESP_PHY_RF_CAL_FULL is not set +CONFIG_ESP_PHY_CALIBRATION_MODE=0 +# end of PHY + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +# end of Power Management + +# +# ESP PSRAM +# +# CONFIG_SPIRAM is not set +# end of ESP PSRAM + +# +# ESP Ringbuf +# +# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set +# end of ESP Ringbuf + +# +# ESP System Settings +# +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set + +# +# Non-backward compatible options +# +# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set +# end of Non-backward compatible options +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + +# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set +CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y +# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set +# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set +CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 + +# +# Memory protection +# +# end of Memory protection + +CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set +# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 +CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +CONFIG_ESP_CONSOLE_UART=y +CONFIG_ESP_CONSOLE_MULTIPLE_UART=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT_EN=y +CONFIG_ESP_TASK_WDT_INIT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP_PANIC_HANDLER_IRAM is not set +# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP_DEBUG_OCDAWARE=y +# CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set +CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 +# end of Brownout Detector + +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y +# end of ESP System Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y +CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set +CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 +CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y +CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 +CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y +# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y +# end of High resolution timer (esp_timer) + +# +# Wi-Fi +# +CONFIG_ESP_WIFI_ENABLED=y +CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y +# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set +CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 +CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 +# CONFIG_ESP_WIFI_CSI_ENABLED is not set +CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP_WIFI_TX_BA_WIN=6 +CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP_WIFI_RX_BA_WIN=6 +CONFIG_ESP_WIFI_NVS_ENABLED=y +CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP_WIFI_IRAM_OPT=y +# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set +CONFIG_ESP_WIFI_RX_IRAM_OPT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP_WIFI_ENABLE_SAE_PK=y +CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y +# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set +CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 +# CONFIG_ESP_WIFI_NAN_ENABLE is not set +CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y +CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y +# CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_11KV_SUPPORT is not set +# CONFIG_ESP_WIFI_MBO_SUPPORT is not set +# CONFIG_ESP_WIFI_DPP_SUPPORT is not set +# CONFIG_ESP_WIFI_11R_SUPPORT is not set +# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set + +# +# WPS Configuration Options +# +# CONFIG_ESP_WIFI_WPS_STRICT is not set +# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set +# end of WPS Configuration Options + +# CONFIG_ESP_WIFI_DEBUG_PRINT is not set +# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set +CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y +# end of Wi-Fi + +# +# Core dump +# +# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set +# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set +CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y +# end of Core dump + +# +# FAT Filesystem support +# +CONFIG_FATFS_VOLUME_COUNT=2 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +# CONFIG_FATFS_SECTOR_512 is not set +CONFIG_FATFS_SECTOR_4096=y +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# end of FAT Filesystem support + +# +# FreeRTOS +# + +# +# Kernel +# +# CONFIG_FREERTOS_SMP is not set +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_HZ=100 +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 +# CONFIG_FREERTOS_USE_IDLE_HOOK is not set +# CONFIG_FREERTOS_USE_TICK_HOOK is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 +# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +# end of Kernel + +# +# Port +# +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y +# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y +# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# end of Port + +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_DEBUG_OCDAWARE=y +# end of FreeRTOS + +# +# Hardware Abstraction Layer (HAL) and Low Level (LL) +# +CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y +# CONFIG_HAL_ASSERTION_DISABLE is not set +# CONFIG_HAL_ASSERTION_SILENT is not set +# CONFIG_HAL_ASSERTION_ENABLE is not set +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y +CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y +# end of Hardware Abstraction Layer (HAL) and Low Level (LL) + +# +# Heap memory debugging +# +CONFIG_HEAP_POISONING_DISABLED=y +# CONFIG_HEAP_POISONING_LIGHT is not set +# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set +CONFIG_HEAP_TRACING_OFF=y +# CONFIG_HEAP_TRACING_STANDALONE is not set +# CONFIG_HEAP_TRACING_TOHOST is not set +# CONFIG_HEAP_USE_HOOKS is not set +# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set +# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set +# end of Heap memory debugging + +CONFIG_IEEE802154_CCA_THRESHOLD=-60 +CONFIG_IEEE802154_PENDING_TABLE_SIZE=20 + +# +# Log output +# +# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y +# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=3 +CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y +# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set +# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set +CONFIG_LOG_MAXIMUM_LEVEL=3 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +# CONFIG_LWIP_NETIF_API is not set +CONFIG_LWIP_TCPIP_TASK_PRIO=18 +# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set +# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set +CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y +# CONFIG_LWIP_L2_TO_L3_COPY is not set +# CONFIG_LWIP_IRAM_OPTIMIZATION is not set +# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set +CONFIG_LWIP_TIMERS_ONDEMAND=y +CONFIG_LWIP_ND6=y +CONFIG_LWIP_MAX_SOCKETS=10 +# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set +# CONFIG_LWIP_SO_LINGER is not set +CONFIG_LWIP_SO_REUSE=y +CONFIG_LWIP_SO_REUSE_RXTOALL=y +# CONFIG_LWIP_SO_RCVBUF is not set +# CONFIG_LWIP_NETBUF_RECVINFO is not set +CONFIG_LWIP_IP4_FRAG=y +CONFIG_LWIP_IP6_FRAG=y +# CONFIG_LWIP_IP4_REASSEMBLY is not set +# CONFIG_LWIP_IP6_REASSEMBLY is not set +CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 +# CONFIG_LWIP_IP_FORWARD is not set +# CONFIG_LWIP_STATS is not set +CONFIG_LWIP_ESP_GRATUITOUS_ARP=y +CONFIG_LWIP_GARP_TMR_INTERVAL=60 +CONFIG_LWIP_ESP_MLDV6_REPORT=y +CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 +CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y +# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set +CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y +# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set +CONFIG_LWIP_DHCP_OPTIONS_LEN=68 +CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 +CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 + +# +# DHCP server +# +CONFIG_LWIP_DHCPS=y +CONFIG_LWIP_DHCPS_LEASE_UNIT=60 +CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +# end of DHCP server + +# CONFIG_LWIP_AUTOIP is not set +CONFIG_LWIP_IPV4=y +CONFIG_LWIP_IPV6=y +# CONFIG_LWIP_IPV6_AUTOCONFIG is not set +CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 +# CONFIG_LWIP_IPV6_FORWARD is not set +# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=y +CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 + +# +# TCP +# +CONFIG_LWIP_MAX_ACTIVE_TCP=16 +CONFIG_LWIP_MAX_LISTENING_TCP=16 +CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y +CONFIG_LWIP_TCP_MAXRTX=12 +CONFIG_LWIP_TCP_SYNMAXRTX=12 +CONFIG_LWIP_TCP_MSS=1440 +CONFIG_LWIP_TCP_TMR_INTERVAL=250 +CONFIG_LWIP_TCP_MSL=60000 +CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_QUEUE_OOSEQ=y +# CONFIG_LWIP_TCP_SACK_OUT is not set +CONFIG_LWIP_TCP_OVERSIZE_MSS=y +# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set +CONFIG_LWIP_TCP_RTO_TIME=1500 +# end of TCP + +# +# UDP +# +CONFIG_LWIP_MAX_UDP_PCBS=16 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 +# end of UDP + +# +# Checksums +# +# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set +# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set +CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y +# end of Checksums + +CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_LWIP_PPP_SUPPORT is not set +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 +# CONFIG_LWIP_SLIP_SUPPORT is not set + +# +# ICMP +# +CONFIG_LWIP_ICMP=y +# CONFIG_LWIP_MULTICAST_PING is not set +# CONFIG_LWIP_BROADCAST_PING is not set +# end of ICMP + +# +# LWIP RAW API +# +CONFIG_LWIP_MAX_RAW_PCBS=16 +# end of LWIP RAW API + +# +# SNTP +# +CONFIG_LWIP_SNTP_MAX_SERVERS=1 +# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set +CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +# end of SNTP + +CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 +CONFIG_LWIP_ESP_LWIP_ASSERT=y + +# +# Hooks +# +# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set +CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y +# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y +# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set +CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y +# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set +# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set +CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set +# end of Hooks + +# CONFIG_LWIP_DEBUG is not set +# end of LWIP + +# +# mbedTLS +# +CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y +# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set +# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 +CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 +# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set +# CONFIG_MBEDTLS_DEBUG is not set + +# +# mbedTLS v3.x related +# +# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set +# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set +# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set +# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set +CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y +CONFIG_MBEDTLS_PKCS7_C=y +# end of mbedTLS v3.x related + +# +# Certificate Bundle +# +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set +# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 +# end of Certificate Bundle + +# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +CONFIG_MBEDTLS_ROM_MD5=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y +# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set +# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set +# CONFIG_MBEDTLS_TLS_DISABLED is not set +CONFIG_MBEDTLS_TLS_SERVER=y +CONFIG_MBEDTLS_TLS_CLIENT=y +CONFIG_MBEDTLS_TLS_ENABLED=y + +# +# TLS Key Exchange Methods +# +# CONFIG_MBEDTLS_PSK_MODES is not set +CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y +CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y +# end of TLS Key Exchange Methods + +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y +# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set +# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set +CONFIG_MBEDTLS_SSL_ALPN=y +CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y +CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y + +# +# Symmetric Ciphers +# +CONFIG_MBEDTLS_AES_C=y +# CONFIG_MBEDTLS_CAMELLIA_C is not set +# CONFIG_MBEDTLS_DES_C is not set +# CONFIG_MBEDTLS_BLOWFISH_C is not set +# CONFIG_MBEDTLS_XTEA_C is not set +CONFIG_MBEDTLS_CCM_C=y +CONFIG_MBEDTLS_GCM_C=y +# CONFIG_MBEDTLS_NIST_KW_C is not set +# end of Symmetric Ciphers + +# CONFIG_MBEDTLS_RIPEMD160_C is not set + +# +# Certificates +# +CONFIG_MBEDTLS_PEM_PARSE_C=y +CONFIG_MBEDTLS_PEM_WRITE_C=y +CONFIG_MBEDTLS_X509_CRL_PARSE_C=y +CONFIG_MBEDTLS_X509_CSR_PARSE_C=y +# end of Certificates + +CONFIG_MBEDTLS_ECP_C=y +# CONFIG_MBEDTLS_DHM_C is not set +CONFIG_MBEDTLS_ECDH_C=y +CONFIG_MBEDTLS_ECDSA_C=y +# CONFIG_MBEDTLS_ECJPAKE_C is not set +CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y +CONFIG_MBEDTLS_ECP_NIST_OPTIM=y +CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y +# CONFIG_MBEDTLS_POLY1305_C is not set +# CONFIG_MBEDTLS_CHACHA20_C is not set +# CONFIG_MBEDTLS_HKDF_C is not set +# CONFIG_MBEDTLS_THREADING_C is not set +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set +# end of mbedTLS + +# +# ESP-MQTT Configurations +# +CONFIG_MQTT_PROTOCOL_311=y +# CONFIG_MQTT_PROTOCOL_5 is not set +CONFIG_MQTT_TRANSPORT_SSL=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y +# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set +# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set +# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set +# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set +# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +# CONFIG_MQTT_CUSTOM_OUTBOX is not set +# end of ESP-MQTT Configurations + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set +# end of Newlib + +# +# NVS +# +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# end of NVS + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set + +# +# Thread Operational Dataset +# +CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" +CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" +CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 +CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 +CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" +CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" +CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" +# end of Thread Operational Dataset + +CONFIG_OPENTHREAD_XTAL_ACCURACY=130 +# end of OpenThread + +# +# Protocomm +# +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y +# end of Protocomm + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + +# +# SPI Flash driver +# +# CONFIG_SPI_FLASH_VERIFY_WRITE is not set +# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set +CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set +# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set +# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set +# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set +CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y +CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 +CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 +CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 +# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set +# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set +# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set + +# +# SPI Flash behavior when brownout +# +CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y +CONFIG_SPI_FLASH_BROWNOUT_RESET=y +# end of SPI Flash behavior when brownout + +# +# Auto-detect flash chips +# +CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y +CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y +# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set +# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set +# end of Auto-detect flash chips + +CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set +# end of Websocket +# end of TCP Transport + +# +# Ultra Low Power (ULP) Co-processor +# +# CONFIG_ULP_COPROC_ENABLED is not set +# end of Ultra Low Power (ULP) Co-processor + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_64BIT is not set +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# Root Hub configuration +# +# end of Root Hub configuration + +# +# Virtual file system +# +CONFIG_VFS_SUPPORT_IO=y +CONFIG_VFS_SUPPORT_DIR=y +CONFIG_VFS_SUPPORT_SELECT=y +CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_VFS_SUPPORT_TERMIOS=y +CONFIG_VFS_MAX_COUNT=8 + +# +# Host File System I/O (Semihosting) +# +CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 +# end of Host File System I/O (Semihosting) +# end of Virtual file system + +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +# end of Wear Levelling + +# +# Wi-Fi Provisioning Manager +# +CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 +CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 +# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set +CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y +# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set +# end of Wi-Fi Provisioning Manager +# end of Component config + +# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set + +# Deprecated options for backward compatibility +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_MONITOR_BAUD=115200 +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_OTA_ALLOW_HTTP is not set +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +# CONFIG_ESP_SYSTEM_PD_FLASH is not set +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +# CONFIG_ESP32_XTAL_FREQ_26 is not set +CONFIG_ESP32_XTAL_FREQ_40=y +# CONFIG_ESP32_XTAL_FREQ_AUTO is not set +CONFIG_ESP32_XTAL_FREQ=40 +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +# CONFIG_REDUCE_PHY_TX_POWER is not set +# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set +# CONFIG_SPIRAM_SUPPORT is not set +# CONFIG_ESP32_SPIRAM_SUPPORT is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +# CONFIG_ESP_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART=y +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +CONFIG_TASK_WDT=y +CONFIG_ESP_TASK_WDT=y +# CONFIG_TASK_WDT_PANIC is not set +CONFIG_TASK_WDT_TIMEOUT_S=5 +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_IPC_TASK_STACK_SIZE=1024 +CONFIG_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP32_WIFI_ENABLED=y +CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 +CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 +CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y +CONFIG_WPA_MBEDTLS_CRYPTO=y +CONFIG_WPA_MBEDTLS_TLS_CLIENT=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +# CONFIG_HAL_ASSERTION_SILIENT is not set +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_MSS=1440 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +CONFIG_TCP_RECVMBOX_SIZE=6 +CONFIG_TCP_QUEUE_OOSEQ=y +CONFIG_TCP_OVERSIZE_MSS=y +# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set +# CONFIG_TCP_OVERSIZE_DISABLE is not set +CONFIG_UDP_RECVMBOX_SIZE=6 +CONFIG_TCPIP_TASK_STACK_SIZE=3072 +CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y +# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set +# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_ESP32_PTHREAD_STACK_MIN=768 +CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" +CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set +# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set +# CONFIG_ESP32_ULP_COPROC_ENABLED is not set +CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_SUPPORT_TERMIOS=y +CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 +# End of deprecated options diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cf2c455..fc5ab2f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "main.c" +idf_component_register(SRCS "main.c" "baudot.c" "softuart.c" "network.c" "rmtuart.c" INCLUDE_DIRS ".") diff --git a/src/baudot.c b/src/baudot.c new file mode 100644 index 0000000..be68561 --- /dev/null +++ b/src/baudot.c @@ -0,0 +1,182 @@ +// This performs unicode-to-baudot and baudot-to-unicode conversion. +// Character table has been adjusted to what is present in (Polish-market) Zbrojovka Brno T100 +// +// Same context should be used for both transmit and receive - this stores figures/letters shift state +// which should be in sync with the teletype. + +#include "baudot.h" +#include "esp_log.h" +static const char *TAG = "baudot"; + +/* +'\0', '\0' 000-00 +'E', '3' 000-01 +'\n', '\n' 000-10 +'A', '-' 000-11 +' ', ' ' 001-00 +'S', '\'' 001-01 +'I', '8' 001-10 +'U', '7' 001-11 +'\r', '\r' 010-00 +'D', '\5' 010-01 +'R', '4' 010-10 +'J', '\7' 010-11 +'N', ',' 011-00 +'F', '!' 011-01 +'C', ':' 011-10 +'K', '(' 011-11 +'T', '5' 100-00 +'Z', '+' 100-01 +'L', ')' 100-10 +'W', '2' 100-11 +'H', '$' 101-00 +'Y', '6' 101-01 +'P', '0' 101-10 +'Q', '1' 101-11 +'O', '9' 110-00 +'B', '?' 110-01 +'G', '&' 110-10 +'\0', '\0' 110-11 +'M', '.' 111-00 +'X', '/' 111-01 +'V', ';' 111-10 +'\0', '\0' 111-11 +*/ + +#define BAUDOT_FIGS 0b11011 +#define BAUDOT_LTRS 0b11111 + +uint32_t baudot_map[] = { + // Letters + '\0', + 'E', + '\n', + 'A', + ' ', + 'S', + 'I', + 'U', + '\r', + 'D', + 'R', + 'J', + 'N', + 'F', + 'C', + 'K', + 'T', + 'Z', + 'L', + 'W', + 'H', + 'Y', + 'P', + 'Q', + 'O', + 'B', + 'G', + '\0', + 'M', + 'X', + 'V', + '\0', + + // Figures + '\0', + '3', + '\n', + '-', + ' ', + '\'', + '8', + '7', + '\r', + '\5', + '4', + '\7', + ',', + 'ą', // originally: ! + ':', + '(', + '5', + '+', + ')', + '2', + 'ł', // originally: $ + '6', + '0', + '1', + '9', + '?', + 'ę', // originally: & + '\0', + '.', + '/', + '=', // originally: ; + '\0', +}; + +size_t baudot_to_unicode(baudot_context_t *ctx, uint8_t *input, uint8_t input_len, uint8_t *output, uint8_t output_len) +{ + int out_pos = 0; + for (int i = 0; i < input_len; i++) + { + uint8_t c = input[i]; + if (c == BAUDOT_FIGS) + { + ctx->figures = 1; + ESP_LOGI(TAG, "figures switch: %d", ctx->figures); + } + else if (c == BAUDOT_LTRS) + { + ctx->figures = 0; + ESP_LOGI(TAG, "figures switch: %d", ctx->figures); + } + else + { + output[out_pos++] = baudot_map[c | (ctx->figures << 5)]; + ESP_LOGI(TAG, "index: %d, emitting: %ld", c | (ctx->figures << 5), baudot_map[c | (ctx->figures << 5)]); + if (out_pos >= output_len) + { + ESP_LOGI(TAG, "overflow"); + return out_pos; + } + } + } + return out_pos; +} + +size_t unicode_to_baudot(baudot_context_t *ctx, uint8_t *input, uint8_t input_len, uint8_t *output, uint8_t output_len) +{ + int out_pos = 0; + + for (int i = 0; i < input_len; i++) + { + uint8_t c = (input[i] >= 'a' && input[i] <= 'z') ? (input[i] - 'a' + 'A') : input[i]; + + uint8_t found = 0; + for (int x = 0; x < sizeof(baudot_map); x++) + { + if (baudot_map[x] == c) + { + if (ctx->figures != x >> 5) + { + output[out_pos++] = ctx->figures ? BAUDOT_LTRS : BAUDOT_FIGS; + ctx->figures = !ctx->figures; + ESP_LOGI(TAG, "figures switch: %d", ctx->figures); + } + ESP_LOGI(TAG, "emitting: %d", x & 0b11111); + output[out_pos++] = x & 0b11111; + found = 1; + break; + } + } + + if (!found) + { + ESP_LOGW(TAG, "unable to map: %d", c); + // TODO: logging + } + } + return out_pos; +} \ No newline at end of file diff --git a/src/baudot.h b/src/baudot.h new file mode 100644 index 0000000..7eb4151 --- /dev/null +++ b/src/baudot.h @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +typedef struct +{ + uint8_t figures; +} baudot_context_t; + +size_t baudot_to_unicode(baudot_context_t *ctx, uint8_t *input, uint8_t input_len, uint8_t *output, uint8_t output_len); +size_t unicode_to_baudot(baudot_context_t *ctx, uint8_t *input, uint8_t input_len, uint8_t *output, uint8_t output_len); diff --git a/src/config.priv.h.dist b/src/config.priv.h.dist new file mode 100644 index 0000000..4c421d5 --- /dev/null +++ b/src/config.priv.h.dist @@ -0,0 +1,4 @@ +#pragma once + +#define CONFIG_WIFI_ESSID "wifi-essid" +#define CONFIG_WIFI_PSK "wifi-password" diff --git a/src/main.c b/src/main.c index 4239827..6808de3 100644 --- a/src/main.c +++ b/src/main.c @@ -1,135 +1,90 @@ -/* UART Echo Example - - This example code is in the Public Domain (or CC0 licensed, at your option.) - - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ #include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "driver/uart.h" -#include "driver/gpio.h" -#include "rom/gpio.h" #include "sdkconfig.h" #include "esp_log.h" -/** - * This is an example which echos any data it receives on configured UART back to the sender, - * with hardware flow control turned off. It does not use UART driver event queue. - * - * - Port: configured UART - * - Receive (Rx) buffer: on - * - Transmit (Tx) buffer: off - * - Flow control: off - * - Event queue: off - * - Pin assignment: see defines below (See Kconfig) - */ +#include "baudot.h" +#include "softuart.h" +#include "network.h" +#include "rmtuart.h" -#define ECHO_TEST_TXD (CONFIG_EXAMPLE_UART_TXD) -#define ECHO_TEST_RXD (CONFIG_EXAMPLE_UART_RXD) -#define ECHO_TEST_RTS (UART_PIN_NO_CHANGE) -#define ECHO_TEST_CTS (UART_PIN_NO_CHANGE) +static const char *TAG = "main"; -#define ECHO_UART_PORT_NUM (CONFIG_EXAMPLE_UART_PORT_NUM) -#define ECHO_UART_BAUD_RATE (CONFIG_EXAMPLE_UART_BAUD_RATE) -#define ECHO_TASK_STACK_SIZE (CONFIG_EXAMPLE_TASK_STACK_SIZE) +// TODO: move this to config +const uint32_t TTY_TX_GPIO = 22; +const uint32_t TTY_RX_GPIO = 23; +const uint32_t TTY_EN_GPIO = 2; -static const char *TAG = "UART TEST"; +rmtuart_ctx_t rmtuart = { + .tx_gpio = TTY_TX_GPIO, + .rx_gpio = TTY_RX_GPIO, + .baudrate = 50, + .data_bits = 5, + .stop_bits = 1, +}; -#define BUF_SIZE (1024) +network_ctx_t network = { + .tty_en_gpio = TTY_EN_GPIO, +}; -static void echo_task(void *arg) +void softuart_test() { - /* Configure parameters of an UART driver, - * communication pins and install the driver */ - uart_config_t uart_config = { - .baud_rate = 50, // ECHO_UART_BAUD_RATE, - .data_bits = UART_DATA_5_BITS, - .parity = UART_PARITY_DISABLE, - .stop_bits = UART_STOP_BITS_1, - .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, - .source_clk = UART_SCLK_DEFAULT, + + softuart_ctx_t softuart = { + .tx_gpio = TTY_TX_GPIO, + .rx_gpio = TTY_RX_GPIO, }; - int intr_alloc_flags = 0; -#if CONFIG_UART_ISR_IN_IRAM - intr_alloc_flags = ESP_INTR_FLAG_IRAM; -#endif + softuart_start(&softuart); - ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags)); - ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config)); - ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS)); - - // Configure a temporary buffer for the incoming data - uint8_t *data = (uint8_t *) malloc(BUF_SIZE); - - while (1) { - ESP_LOGI(TAG, "hello!"); - data[0] = 0xaa; - uart_write_bytes(ECHO_UART_PORT_NUM, (const char*) data, 1); - // Read data from the UART - // int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS); - // Write data back to the UART - //uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) data, len); - //if (len) { - // data[len] = '\0'; - // ESP_LOGI(TAG, "Recv str: %s", (char *) data); - //} - } -} - -#define BLINK_GPIO 22 - -void bitbang_word(uint8_t word) -{ - const TickType_t bitDelay = 20 / portTICK_PERIOD_MS; - const TickType_t stopDelay = 20 / portTICK_PERIOD_MS; - - gpio_set_level(BLINK_GPIO, 1); - vTaskDelay( bitDelay ); - - for (uint8_t i = 0 ; i < 5; i++) { - // ESP_LOGI(TAG, "[%d]: %d", i, !(word & (1 << (4-i)))); - gpio_set_level(BLINK_GPIO, !(word & (1 << i))); - vTaskDelay( bitDelay ); - } - - gpio_set_level(BLINK_GPIO, 0); - vTaskDelay( stopDelay ); -} - -static void bitbang_task(void* arg) -{ - const TickType_t xDelay = 1000 / portTICK_PERIOD_MS; - - ESP_LOGI(TAG, "hello!"); - - gpio_pad_select_gpio(BLINK_GPIO); - gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); - - for( ;; ) + while (1) { - bitbang_word(0b11011); - bitbang_word(0b01001); - //bitbang_word(0b11111); - //bitbang_word(0b01101); - //bitbang_word(0b11000); - //bitbang_word(0b01101); - //bitbang_word(0b11000); - //bitbang_word(0b00100); - //bitbang_word(0b10110); - //bitbang_word(0b00011); - //bitbang_word(0b10110); - //bitbang_word(0b00011); - ESP_LOGI(TAG, "done"); - vTaskDelay( xDelay ); + ESP_LOGI(TAG, "sending..."); + uint8_t data[] = {1, 2, 3, 4, 0b10101 /* 21 */, 0b01010 /* 10 */}; + xStreamBufferSend(softuart.tx_buffer, &data, sizeof(data), pdMS_TO_TICKS(1000)); + for (int t = 0; t < 20; t++) + { + uint8_t rx_data[32] = {0}; + size_t rx_data_len = xStreamBufferReceive(softuart.rx_buffer, &rx_data, sizeof(rx_data), pdMS_TO_TICKS(100)); + if (rx_data_len > 0) + { + // ESP_LOGI(TAG, "%d bytes received:", rx_data_len); + for (size_t i = 0; i < rx_data_len; i++) + { + ESP_LOGI(TAG, "data[%d] = %02x (%d)", i, rx_data[i], rx_data[i]); + } + } + } + } +} + +void rmtuart_test() +{ + rmtuart_start(&rmtuart); + while (true) + { + ESP_LOGI(TAG, "Done"); + for (int i = 0; i < 1; i++) + { + rmtuart_transmit_word(&rmtuart, 1); + // rmtuart_transmit_word(&rmtuart, 2); + // rmtuart_transmit_word(&rmtuart, 3); + // rmtuart_transmit_word(&rmtuart, 4); + // rmtuart_transmit_word(&rmtuart, 0b10101); + // rmtuart_transmit_word(&rmtuart, 0b01010); + } + + vTaskDelay(pdMS_TO_TICKS(1000)); } } void app_main(void) { - xTaskCreate(bitbang_task, "bitbang_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL); - // xTaskCreate(echo_task, "uart_echo_task", ECHO_TASK_STACK_SIZE, NULL, 10, NULL); + ESP_LOGI(TAG, "starting up"); + + rmtuart_start(&rmtuart); + + network.rx_buffer = rmtuart.rx_buffer; + network.tx_buffer = rmtuart.tx_buffer; + + network_start(&network); } diff --git a/src/network.c b/src/network.c new file mode 100644 index 0000000..d55dd5d --- /dev/null +++ b/src/network.c @@ -0,0 +1,275 @@ +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/stream_buffer.h" +#include "esp_log.h" + +#include "driver/gpio.h" +#include "nvs_flash.h" +#include "esp_wifi.h" + +#include "lwip/sockets.h" + +#include "network.h" +#include "baudot.h" + +#include "config.priv.h" + +static const char *TAG = "network"; + +static void tcp_server_task(network_ctx_t *ctx) +{ + // gpio_pad_select_gpio(ctx->tty_en_gpio); + gpio_set_level(ctx->tty_en_gpio, 0); + gpio_set_direction(ctx->tty_en_gpio, GPIO_MODE_OUTPUT); + + struct sockaddr_in dest_addr; + dest_addr.sin_addr.s_addr = htonl(INADDR_ANY); + dest_addr.sin_family = AF_INET; + dest_addr.sin_port = htons(1337); + + int listen_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + if (listen_sock < 0) + { + ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); + return; + } + + int opt = 1; + setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); + + int err = bind(listen_sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); + if (err != 0) + { + ESP_LOGE(TAG, "Socket unable to bind: errno %d", errno); + return; + } + err = listen(listen_sock, 1); + if (err != 0) + { + ESP_LOGE(TAG, "Error occurred during listen: errno %d", errno); + } + + fd_set readfds; + int client_sockets[MAX_CLIENTS]; + for (int i = 0; i < MAX_CLIENTS; i++) + { + client_sockets[i] = 0; + } + int max_sd = listen_sock; + + ESP_LOGI(TAG, "Socket listening"); + + baudot_context_t unicode_ctx = {0}; + + while (1) + { + // clear the socket set + FD_ZERO(&readfds); + + // add master socket to set + FD_SET(listen_sock, &readfds); + max_sd = listen_sock; + + int client_count = 0; + // add child sockets to set + for (int i = 0; i < MAX_CLIENTS; i++) + { + // socket descriptor + int sd = client_sockets[i]; + + // if valid socket descriptor then add to read list + if (sd > 0) + { + FD_SET(sd, &readfds); + client_count += 1; + } + + // highest file descriptor number, need it for the select function + if (sd > max_sd) + { + max_sd = sd; + } + } + + gpio_set_level(ctx->tty_en_gpio, client_count > 0 ? 1 : 0); + + uint8_t rx_data[32] = {0}; + size_t rx_data_len = xStreamBufferReceive(ctx->rx_buffer, &rx_data, sizeof(rx_data), pdMS_TO_TICKS(100)); + + uint8_t rx_unicode_data[64] = {1}; + size_t rx_unicode_data_len = baudot_to_unicode(&unicode_ctx, rx_data, rx_data_len, rx_unicode_data, sizeof(rx_unicode_data)); + /* + for (int i = 0; i < rx_data_len; i++) + { + ESP_LOGI(TAG, "raw[%d] = %02x", i, rx_data[i]); + } + + for (int i = 0; i < rx_unicode_data_len; i++) + { + ESP_LOGI(TAG, "unicode[%d] = %02x", i, rx_unicode_data[i]); + } + */ + + struct timeval tv = {0, 10000}; + int activity = select(max_sd + 1, &readfds, NULL, NULL, &tv); + + // ESP_LOGI(TAG, "select() = %d; rx_data_len = %d", activity, rx_data_len); + if ((activity < 0) && (errno != EINTR)) + { + ESP_LOGE(TAG, "select error"); + } + + // else its some IO operation on some other socket + for (int i = 0; i < MAX_CLIENTS; i++) + { + int sd = client_sockets[i]; + + if (client_sockets[i] > 0 && FD_ISSET(sd, &readfds)) + { + // Check if it was for closing , and also read the + // incoming message + int read_buffer_len; + uint8_t read_buffer[32]; + if ((read_buffer_len = read(sd, read_buffer, sizeof(read_buffer))) == 0) + { + ESP_LOGI(TAG, "Client disconnected"); + close(sd); + client_sockets[i] = 0; + } + else if (read_buffer_len > 0) + { + ESP_LOGI(TAG, "Sending %d bytes", read_buffer_len); + uint8_t tx_baudot_data[64] = {0}; + size_t tx_baudot_data_len = unicode_to_baudot(&unicode_ctx, read_buffer, read_buffer_len, tx_baudot_data, sizeof(tx_baudot_data)); + xStreamBufferSend(ctx->tx_buffer, &tx_baudot_data, tx_baudot_data_len, pdMS_TO_TICKS(1000)); + } + } + + if (client_sockets[i] && rx_unicode_data_len > 0) + { + ESP_LOGI(TAG, "Sending %d bytes to %d: %s", rx_unicode_data_len, client_sockets[i], rx_unicode_data); + send(client_sockets[i], &rx_unicode_data, rx_unicode_data_len, 0); + } + } + + // If something happened on the master socket , + // then its an incoming connection + if (FD_ISSET(listen_sock, &readfds)) + { + struct sockaddr_storage source_addr; // Large enough for both IPv4 or IPv6 + socklen_t addr_len = sizeof(source_addr); + int sock = accept(listen_sock, (struct sockaddr *)&source_addr, &addr_len); + if (sock < 0) + { + ESP_LOGE(TAG, "Unable to accept connection: errno %d", errno); + break; + } + + int keepAlive = 1; + int keepIdle = 5; + int keepInterval = 5; + int keepCount = 3; + + // Set tcp keepalive option + setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(int)); + setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &keepIdle, sizeof(int)); + setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &keepInterval, sizeof(int)); + setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &keepCount, sizeof(int)); + + char addr_str[128]; + if (source_addr.ss_family == PF_INET) + { + inet_ntoa_r(((struct sockaddr_in *)&source_addr)->sin_addr, addr_str, sizeof(addr_str) - 1); + } + + bool connected = false; + // add new socket to array of sockets + for (int i = 0; i < MAX_CLIENTS; i++) + { + // if position is empty + if (client_sockets[i] == 0) + { + client_sockets[i] = sock; + connected = true; + + ESP_LOGI(TAG, "Adding to list of sockets as %d", i); + break; + } + } + + if (!connected) + { + ESP_LOGW(TAG, "max clients exceeded"); + close(sock); + } + else + { + ESP_LOGI(TAG, "Socket accepted ip address: %s", addr_str); + } + } + } +} + +static void wifi_event_handler(void *arg, esp_event_base_t event_base, + int32_t event_id, void *event_data) +{ + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) + { + ESP_LOGI(TAG, "wifi connecting..."); + esp_wifi_connect(); + } + else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) + { + esp_wifi_connect(); + ESP_LOGI(TAG, "connect to the AP fail"); + } + else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) + { + ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; + ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); + } +} + +void network_start(network_ctx_t *ctx) +{ + + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + esp_netif_create_default_wifi_sta(); + + esp_event_handler_instance_t instance_any_id; + esp_event_handler_instance_t instance_got_ip; + ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, + ESP_EVENT_ANY_ID, + &wifi_event_handler, + NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &wifi_event_handler, + NULL, + &instance_got_ip)); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + wifi_config_t wifi_config = { + .sta = { + .ssid = CONFIG_WIFI_ESSID, + .password = CONFIG_WIFI_PSK, + + .threshold.authmode = WIFI_AUTH_WPA_WPA2_PSK, + // .sae_pwe_h2e = ESP_WIFI_SAE_MODE, + // .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER, + }, + }; + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); + ESP_ERROR_CHECK(esp_wifi_start()); + + ESP_LOGI(TAG, "wifi_init_sta finished."); + + xTaskCreate((TaskFunction_t)tcp_server_task, "tcp_server_task", 4096, ctx, 10, NULL); +} \ No newline at end of file diff --git a/src/network.h b/src/network.h new file mode 100644 index 0000000..d67ba4e --- /dev/null +++ b/src/network.h @@ -0,0 +1,15 @@ +#pragma once + +#include "softuart.h" +#define MAX_CLIENTS 32 + +typedef struct +{ + int tty_en_gpio; + // softuart_ctx_t *softuart; + + StreamBufferHandle_t rx_buffer; + StreamBufferHandle_t tx_buffer; +} network_ctx_t; + +void network_start(network_ctx_t *network); \ No newline at end of file diff --git a/src/rmtuart.c b/src/rmtuart.c new file mode 100644 index 0000000..955c735 --- /dev/null +++ b/src/rmtuart.c @@ -0,0 +1,218 @@ +// +// This is a fairly naive RMT-based UART implementation - built mostly because native ESP32 UART is unable to clock down to 50bps. +// +// Transmission works fairly well. +// Reception is slightly flawed - multiple consecutive words are buffered in a limited hardware buffer - approx. 10-20 characters can be received until its overflow. +// +// NOTE: This has only been tested in 5-bit-per-word mode at 50bps, reception at any other rate may need rmtuart_receive_words adjustment. +// + +#include "esp_log.h" + +#include "rmtuart.h" + +static const char *TAG = "rmtuart"; + +static bool rmt_rx_done_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *edata, void *user_data) +{ + BaseType_t high_task_wakeup = pdFALSE; + QueueHandle_t receive_queue = (QueueHandle_t)user_data; + xQueueSendFromISR(receive_queue, edata, &high_task_wakeup); + return high_task_wakeup == pdTRUE; +} + +void rmtuart_transmit_words(rmtuart_ctx_t *ctx) +{ + while (true) + { + uint8_t word; + size_t read_len = xStreamBufferReceive(ctx->tx_buffer, &word, 1, pdMS_TO_TICKS(1000)); + if (read_len == 1) + { + rmtuart_transmit_word(ctx, word); + ESP_LOGI(TAG, "Done %d", word); + } + else + { + ESP_LOGI(TAG, "Nothing to transmit"); + } + } +} + +void rmtuart_receive_words(rmtuart_ctx_t *ctx) +{ + uint32_t bit_length_ns = 1000000000 / ctx->baudrate; + rmt_receive_config_t receive_config = { + .signal_range_min_ns = bit_length_ns / 128, + .signal_range_max_ns = bit_length_ns * (ctx->data_bits + 2), // we don't care about stop bits here + }; + + rmt_symbol_word_t raw_symbols[64]; + rmt_rx_done_event_data_t rx_data; + + ESP_ERROR_CHECK(rmt_receive(ctx->rx_chan, raw_symbols, sizeof(raw_symbols), &receive_config)); + while (1) + { + // wait for RX done signal + if (xQueueReceive(ctx->receive_queue, &rx_data, pdMS_TO_TICKS(1000)) == pdPASS) + { + // TODO: I think we should probably do some double buffering fuckery here maybe? + ESP_ERROR_CHECK(rmt_receive(ctx->rx_chan, raw_symbols, sizeof(raw_symbols), &receive_config)); + + uint16_t *raw_helper = (uint16_t *)&raw_symbols; + + // bit length in RMT ticks + int bit_length = 128; // FIXME: derive this from RMT clock divider... + int sym_idx = 0; + int time_offs = 64; + int bitcnt = 0; + int bytecnt = 0; + uint8_t payload[32] = {0}; + while (sym_idx < rx_data.num_symbols * 2) + { + int len = raw_helper[sym_idx] & 0x7fff; + int val = raw_helper[sym_idx] >> 15; + // ESP_LOGI(TAG, "sym[%d] = %d, %d - %d", sym_idx, len, val, time_offs); + // Last 0 value is always 0-length - extend it so that we can fill the trailing bits of the last byte + if (len > time_offs || (len == 0 && bitcnt <= ctx->data_bits + 1)) + { + // ESP_LOGI(TAG, "%d: bit: %d", bitcnt, val); + + if (bitcnt >= 1 && bitcnt <= ctx->data_bits + 1) + { + // ESP_LOGI(TAG, "payload[%d] |= %d", bytecnt, (!val << (bitcnt - 1))); + payload[bytecnt] |= (!val << (bitcnt - 1)); + } + + bitcnt += 1; + time_offs += bit_length; + + if (bitcnt == ctx->data_bits + 1) + { + // ESP_LOGI(TAG, "payload[%d] = %d", bytecnt, payload[bytecnt]); + + // jump to next rising edge + time_offs = 64; + + if (val) + { + sym_idx += 2; + } + else + { + sym_idx += 1; + } + + bytecnt += 1; + payload[bytecnt] = 0; + bitcnt = 0; + } + } + else + { + // We are past current period, move to the next symbol + time_offs -= len; + sym_idx += 1; + } + } + + ESP_LOGI(TAG, "data received! symbols: %d", rx_data.num_symbols); + for (int sym = 0; sym < rx_data.num_symbols; sym++) + { + ESP_LOGI(TAG, "%d: %d@%d, %d@%d", sym, raw_symbols[sym].duration0, raw_symbols[sym].level0, raw_symbols[sym].duration1, raw_symbols[sym].level1); + } + + if (bytecnt) + { + int sent = xStreamBufferSend(ctx->rx_buffer, &payload, bytecnt, pdMS_TO_TICKS(100)); + ESP_LOGI(TAG, "bytecnt: %d; sent: %d", bytecnt, sent); + } + else + { + ESP_LOGI(TAG, "bytecnt: %d", bytecnt); + } + } + } +} + +void rmtuart_transmit_word(rmtuart_ctx_t *ctx, uint32_t word) +{ + rmt_transmit_config_t tx_config = { + .loop_count = 0, // no transfer loop + }; + + // Let's just assume data_bits + stop_bits + 1 < 15 + uint16_t bit_ticks = ctx->resolution_hz / ctx->baudrate; + + int data_len = 1; + uint16_t data[16] = { + bit_ticks | (1 << 15), + }; + + for (int bit = 0; bit < ctx->data_bits; bit++) + { + data[data_len++] = bit_ticks | (!((word >> bit) & 1) << 15); + } + + for (int bit = 0; bit < ctx->stop_bits; bit++) + { + data[data_len++] = bit_ticks | (0 << 15); + } + + // RMT data needs to be 32-bit aligned - add a dummy item + if (data_len % 2 == 1) + { + data[data_len++] = 0; + } + + ESP_ERROR_CHECK(rmt_transmit(ctx->tx_chan, ctx->copy_encoder, data, data_len * 2, &tx_config)); + ESP_ERROR_CHECK(rmt_tx_wait_all_done(ctx->tx_chan, portMAX_DELAY)); +} + +void rmtuart_start(rmtuart_ctx_t *ctx) +{ + ctx->clk_src = RMT_CLK_SRC_REF_TICK; + ctx->resolution_hz = 128 * 50; + + ESP_LOGI(TAG, "Create RMT RX channel"); + rmt_rx_channel_config_t rx_channel_cfg = { + .clk_src = ctx->clk_src, + .resolution_hz = ctx->resolution_hz, + .mem_block_symbols = 64, + .gpio_num = ctx->rx_gpio, + }; + + ctx->receive_queue = xQueueCreate(1, sizeof(rmt_rx_done_event_data_t)); + ESP_ERROR_CHECK(rmt_new_rx_channel(&rx_channel_cfg, &ctx->rx_chan)); + + rmt_rx_event_callbacks_t cbs = { + .on_recv_done = rmt_rx_done_callback, + }; + ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(ctx->rx_chan, &cbs, ctx->receive_queue)); + ESP_ERROR_CHECK(rmt_enable(ctx->rx_chan)); + + ESP_LOGI(TAG, "Create RMT TX channel"); + rmt_tx_channel_config_t tx_chan_config = { + // TODO automatic clocksource/resolution adjustment + // .clk_src = RMT_CLK_SRC_APB, + .clk_src = RMT_CLK_SRC_REF_TICK, // select source clock + .resolution_hz = ctx->resolution_hz, + + .gpio_num = ctx->tx_gpio, + .mem_block_symbols = 64, + .trans_queue_depth = 4, + }; + ESP_ERROR_CHECK(rmt_new_tx_channel(&tx_chan_config, &ctx->tx_chan)); + + rmt_copy_encoder_config_t encoder_config = {}; + ESP_ERROR_CHECK(rmt_new_copy_encoder(&encoder_config, &ctx->copy_encoder)); + ESP_ERROR_CHECK(rmt_enable(ctx->tx_chan)); + + ctx->rx_buffer = xStreamBufferCreate(128, 1); + ctx->tx_buffer = xStreamBufferCreate(128, 1); + + xTaskCreate((TaskFunction_t)rmtuart_transmit_words, "rmtuart_transmit_words", 2048, ctx, 40, NULL); + xTaskCreate((TaskFunction_t)rmtuart_receive_words, "rmtuart_receive_words", 4096, ctx, 40, NULL); + + ESP_LOGI(TAG, "Init finished"); +} diff --git a/src/rmtuart.h b/src/rmtuart.h new file mode 100644 index 0000000..bf85bbb --- /dev/null +++ b/src/rmtuart.h @@ -0,0 +1,34 @@ +#pragma once + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/queue.h" +#include "freertos/stream_buffer.h" + +#include "driver/rmt_tx.h" +#include "driver/rmt_rx.h" + +typedef struct +{ + int tx_gpio; + int rx_gpio; + + int baudrate; + int data_bits; + int stop_bits; + + StreamBufferHandle_t rx_buffer; + StreamBufferHandle_t tx_buffer; + + rmt_clock_source_t clk_src; + int resolution_hz; + + rmt_channel_handle_t tx_chan; + rmt_channel_handle_t rx_chan; + rmt_encoder_handle_t copy_encoder; + + QueueHandle_t receive_queue; +} rmtuart_ctx_t; + +void rmtuart_start(rmtuart_ctx_t *ctx); +void rmtuart_transmit_word(rmtuart_ctx_t *ctx, uint32_t word); \ No newline at end of file diff --git a/src/softuart.c b/src/softuart.c new file mode 100644 index 0000000..9eccb31 --- /dev/null +++ b/src/softuart.c @@ -0,0 +1,103 @@ +#include "softuart.h" +// #include "rom/gpio.h" +#include "driver/gpio.h" +#include "esp_log.h" + +static const char *TAG = "softuart"; + +void softuart_bitbang_word(softuart_ctx_t *ctx, uint8_t word) +{ + const TickType_t bitDelay = 20 / portTICK_PERIOD_MS; + const TickType_t stopDelay = 30 / portTICK_PERIOD_MS; + + gpio_set_level(ctx->tx_gpio, 1); + vTaskDelay(bitDelay); + + for (uint8_t i = 0; i < 5; i++) + { + // ESP_LOGI(TAG, "[%d]: %d", i, !(word & (1 << (4-i)))); + gpio_set_level(ctx->tx_gpio, !(word & (1 << i))); + vTaskDelay(bitDelay); + } + + gpio_set_level(ctx->tx_gpio, 0); + vTaskDelay(stopDelay); +} + +uint8_t softuart_receive_word(softuart_ctx_t *ctx) +{ + const TickType_t idleDelay = 10 / portTICK_PERIOD_MS; + const TickType_t bitDelay = 20 / portTICK_PERIOD_MS; + + while (gpio_get_level(ctx->rx_gpio) == 1) + { + vTaskDelay(idleDelay); + } + + while (gpio_get_level(ctx->rx_gpio) == 0) + { + vTaskDelay(idleDelay); + } + + uint8_t word = 0; + // 5 data bits, 1 start bit, 1 stop bit + for (uint8_t i = 0; i < 6; i++) + { + word |= (!gpio_get_level(ctx->rx_gpio)) << i; + vTaskDelay(bitDelay); + } + + return (word >> 1) & 0b11111; +} + +static void softuart_receive_task(softuart_ctx_t *ctx) +{ + // gpio_install_isr_service(0); + // gpio_pad_select_gpio(ctx->rx_gpio); + gpio_set_direction(ctx->rx_gpio, GPIO_MODE_INPUT); + gpio_pulldown_en(ctx->rx_gpio); + + while (true) + { + uint8_t word = softuart_receive_word(ctx); + int sent = xStreamBufferSend(ctx->rx_buffer, &word, 1, pdMS_TO_TICKS(1)); + if (sent != 1) + { + ESP_LOGW(TAG, "rx overflow! %02x", word); + } + } + // gpio_set_intr_type(TTY_RX_GPIO, GPIO_INTR_POSEDGE); + // gpio_isr_handler_add(TTY_RX_GPIO, softuart_receive, 0); + // gpio_intr_enable(TTY_RX_GPIO); +} + +static void softuart_transmit_task(softuart_ctx_t *ctx) +{ + // gpio_pad_select_gpio(ctx->tx_gpio); + gpio_set_level(ctx->tx_gpio, 0); + gpio_set_direction(ctx->tx_gpio, GPIO_MODE_OUTPUT); + + for (;;) + { + uint8_t word; + size_t read_len = xStreamBufferReceive(ctx->tx_buffer, &word, 1, pdMS_TO_TICKS(1000)); + if (read_len == 1) + { + softuart_bitbang_word(ctx, word); + // ESP_LOGI(TAG, "done"); + } + else + { + ESP_LOGI(TAG, "Nothing to transmit"); + } + } +} + +void softuart_start(softuart_ctx_t *ctx) +{ + ctx->rx_buffer = xStreamBufferCreate(128, 1); + ctx->tx_buffer = xStreamBufferCreate(128, 1); + + xTaskCreate((TaskFunction_t)softuart_transmit_task, "softuart_transmit_task", 2048, ctx, 40, NULL); + xTaskCreate((TaskFunction_t)softuart_receive_task, "softuart_receive_task", 2048, ctx, 40, NULL); +} \ No newline at end of file diff --git a/src/softuart.h b/src/softuart.h new file mode 100644 index 0000000..96cb36a --- /dev/null +++ b/src/softuart.h @@ -0,0 +1,16 @@ +#pragma once + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/stream_buffer.h" + +typedef struct +{ + int tx_gpio; + int rx_gpio; + + StreamBufferHandle_t rx_buffer; + StreamBufferHandle_t tx_buffer; +} softuart_ctx_t; + +void softuart_start(softuart_ctx_t *ctx); \ No newline at end of file