From 9b4fba818f32d8ee236351186d8d14888f819c08 Mon Sep 17 00:00:00 2001 From: Jelmer Date: Sat, 18 Mar 2023 01:50:39 +0100 Subject: [PATCH] working dual port flasher, direct usb only --- esp32_fw/CMakeLists.txt | 3 + esp32_fw/dependencies.lock | 9 + esp32_fw/include/settings.h | 22 + esp32_fw/include/usbflasher.h | 4 + esp32_fw/include/zbs_interface.h | 30 +- esp32_fw/platformio.ini | 31 +- esp32_fw/readtest.bin2 | Bin 0 -> 65536 bytes esp32_fw/sdkconfig.openepaperlink-flasher-ap | 1450 ++++++++++++++++++ esp32_fw/src/CMakeLists.txt | 6 + esp32_fw/src/flasher.cpp | 53 +- esp32_fw/src/main.cpp | 22 +- esp32_fw/src/serial.cpp | 4 +- esp32_fw/src/usbflasher.cpp | 348 +++++ esp32_fw/src/zbs_interface.cpp | 125 +- 14 files changed, 2002 insertions(+), 105 deletions(-) create mode 100644 esp32_fw/CMakeLists.txt create mode 100644 esp32_fw/dependencies.lock create mode 100644 esp32_fw/include/usbflasher.h create mode 100644 esp32_fw/readtest.bin2 create mode 100644 esp32_fw/sdkconfig.openepaperlink-flasher-ap create mode 100644 esp32_fw/src/CMakeLists.txt create mode 100644 esp32_fw/src/usbflasher.cpp diff --git a/esp32_fw/CMakeLists.txt b/esp32_fw/CMakeLists.txt new file mode 100644 index 00000000..be4981fa --- /dev/null +++ b/esp32_fw/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.16.0) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp32_fw) diff --git a/esp32_fw/dependencies.lock b/esp32_fw/dependencies.lock new file mode 100644 index 00000000..356f9c13 --- /dev/null +++ b/esp32_fw/dependencies.lock @@ -0,0 +1,9 @@ +dependencies: + idf: + component_hash: null + source: + type: idf + version: 4.4.4 +manifest_hash: dcf4d39b94252de130019eadceb989d72b0dbc26b552cfdcbb50f6da531d2b92 +target: esp32s3 +version: 1.0.0 diff --git a/esp32_fw/include/settings.h b/esp32_fw/include/settings.h index d1ab28cd..520dfe6a 100644 --- a/esp32_fw/include/settings.h +++ b/esp32_fw/include/settings.h @@ -10,6 +10,28 @@ // flasher options #define CUSTOM_MAC_HDR 0x0000 + +#define FLASHER_AP_SS 4 +#define FLASHER_AP_CLK 5 +#define FLASHER_AP_MOSI 7 +#define FLASHER_AP_MISO 6 +#define FLASHER_AP_RESET 15 +#define FLASHER_AP_POWER 0 +#define FLASHER_AP_TXD 17 +#define FLASHER_AP_RXD 18 +#define FLASHER_AP_TEST 16 + +#define FLASHER_EXT_SS 40 +#define FLASHER_EXT_CLK 41 +#define FLASHER_EXT_MOSI 2 +#define FLASHER_EXT_MISO 42 +#define FLASHER_EXT_RESET 1 +#define FLASHER_EXT_POWER 8 +#define FLASHER_EXT_TXD 47 +#define FLASHER_EXT_RXD 39 +#define FLASHER_EXT_TEST 38 + + /* Lolin32 lite connections to AP tag #define RXD1 16 #define TXD1 17 diff --git a/esp32_fw/include/usbflasher.h b/esp32_fw/include/usbflasher.h new file mode 100644 index 00000000..037b5cf3 --- /dev/null +++ b/esp32_fw/include/usbflasher.h @@ -0,0 +1,4 @@ +#include + + +void usbFlasherTask(void* parameter); \ No newline at end of file diff --git a/esp32_fw/include/zbs_interface.h b/esp32_fw/include/zbs_interface.h index edaea3ce..fd18463a 100644 --- a/esp32_fw/include/zbs_interface.h +++ b/esp32_fw/include/zbs_interface.h @@ -1,15 +1,16 @@ #pragma once -#include #include +#include +#include /* Autor: Aaron Christophel ATCnetz.de */ #include -void simplePowerOn(); - -class ZBS_interface { - public: - uint8_t begin(); +class ZBS_interface +{ +public: + uint8_t begin(uint8_t SS, uint8_t CLK, uint8_t MOSI, uint8_t MISO, uint8_t RESET, uint8_t POWER = -1, uint32_t spi_speed = 8000000); + void setSpeed(uint32_t speed); void set_power(uint8_t state); void enable_debug(); void reset(); @@ -27,8 +28,11 @@ class ZBS_interface { uint8_t select_flash(uint8_t page); void erase_flash(); void erase_infoblock(); + ~ZBS_interface(); - private: +private: + SPIClass *spi = NULL; + SPISettings spiSettings; uint8_t _SS_PIN = -1; uint8_t _CLK_PIN = -1; uint8_t _MOSI_PIN = -1; @@ -36,8 +40,11 @@ class ZBS_interface { uint8_t _RESET_PIN = -1; uint8_t _POWER_PIN = -1; int ZBS_spi_delay = 1; + uint8_t spi_ready = 0; + uint32_t after_byte_delay = 10; - typedef enum { + typedef enum + { ZBS_CMD_W_RAM = 0x02, ZBS_CMD_R_RAM = 0x03, ZBS_CMD_W_FLASH = 0x08, @@ -48,10 +55,9 @@ class ZBS_interface { ZBS_CMD_ERASE_INFOBLOCK = 0x48, } ZBS_CMD_LIST; - typedef enum { + typedef enum + { ZBS_ON = 1, ZBS_OFF = 0, } ZBS_POWER_STATE; -}; - -extern ZBS_interface zbs; \ No newline at end of file +}; \ No newline at end of file diff --git a/esp32_fw/platformio.ini b/esp32_fw/platformio.ini index e92c1d78..ff4b7172 100644 --- a/esp32_fw/platformio.ini +++ b/esp32_fw/platformio.ini @@ -8,11 +8,15 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:lolin32_lite] -platform = espressif32 -board = esp32dev +; ---------------------------------------------------------------------------------------- +; !!! this configuration expects the 16MB Flash / 8MB Ram version of the ESP32-S3-DevkitC1 +; ---------------------------------------------------------------------------------------- + +[env:openepaperlink-flasher-ap] +platform = https://github.com/platformio/platform-espressif32.git +board = esp32-s3-devkitc-1 framework = arduino -board_build.partitions = no_ota.csv +board_build.partitions =default_16MB.csv platform_packages = monitor_filters = esp32_exception_decoder monitor_speed = 115200 @@ -26,5 +30,20 @@ lib_deps = https://github.com/Bodmer/TJpg_Decoder.git https://github.com/garretlab/shoddyxml2 https://github.com/Bodmer/U8g2_for_TFT_eSPI -upload_port = COM12 -monitor_port = COM12 +upload_port = COM7 +monitor_port = COM7 +build_unflags = + -D ARDUINO_USB_MODE=1 +build_flags = + -D ARDUINO_USB_MODE=0 + -D CONFIG_ESP32S3_SPIRAM_SUPPORT=1 + -D BOARD_HAS_PSRAM + -D CONFIG_SPIRAM_USE_MALLOC=y + +board_build.flash_mode=qio +board_build.arduino.memory_type = qio_opi +board_build.psram_type=qspi_opi + +board_upload.maximum_size = 16777216 +board_upload.maximum_ram_size = 327680 +board_upload.flash_size = 16MB \ No newline at end of file diff --git a/esp32_fw/readtest.bin2 b/esp32_fw/readtest.bin2 new file mode 100644 index 0000000000000000000000000000000000000000..7a2e5540a94795dfe72a2bd3dca5831087f7601c GIT binary patch literal 65536 zcmdqK34ByVwm*LRc9ITZN$3EA1k;9~D2q`**@Q>};z}gZako*TG9pB{tsqM-9YI7O zcMt|t1U1eZQIVPF_#6SDrEwY83=ZRNE=e~{_UqD+?kxTPo~nCqcPBxe_vZimecmt7 zcR6*c>eQ)Ir%qL!sw)aNT_o^7(HUY7#=CJB@3b(ucxQF@;frhI;NovRqV*2fs>$}J zuJgN{R#CWN=~uP+cIV)S)0OH!F8SE?Y{2)#4;9IO6~x46zx?T|A6(Byd`luHzi3|~ zoX8iPDN6;{v#RgM9$&OA`S?V>&Dm>dvZ4w;t>TNeFT+aBU_5C^Rasi<(l$yF`|V5Y zw@;R?_o&iS9@W0c*MC+2RW5h3{ifdbS)VF%id@=tKKq6xtD>e!J++lR4-97S zXKi$QY@Q_hxpu$1GO5z$EZ&&dm>p~zvqf!f$QFX``mt)TOl?zY2dJ&yhNlbqA+#N# zZH*M#K%w=TQhSEVfDG+nVWY5A@FaQ?JXVkB5j+;D-YkQERd!2ol@hvDb*9a#iZ zLmBlH!iml%qV2zFbh-PY;{D}0>KRJ-L8(KNQcwv`n}RAQ5x7lL)@8c1lZG@aq1pE3 zHbougqx_SFf{fQqXZABFbnI!z7C)TT|sKJgOxlqycdW>n-3nBVFzc`%OP8 zk%$xtYWABK+i&+OA6?*kBC=9Y0{f*D64i3|#xf>=+wxvLC80?6||F)fhEwx6JapmC!9+DjqG;YES+W zL8|ji`|Q1nFx-Bl-Q^xgm6*QP$LdfXWWRp4BHkDc`G?1)S$wEompctabQY&u)Do*` z`$!2dS34@yh*ui9L$d75?E&GVkfb9@cqI!t;5h4`WpLNBA)NHCoaAzgls?e2En0;- zR?w92GSvw&zJpzzs&k4G%2gu=A*I7y?p}mF`JhXC&nP;D2Hp0HH?qJVxB4H<9w^gX^xHpZ|nlG);4&0c0P)tP4LbHS=MgZM|VB>VnnV|$c zO;k#>N0g?{Nmae=WmKt{_?eMr9E$ZsEQ%6-NR6n@gytL-Wx{jz*9DLp;-$+ivn!qr z?usvQ@nZ--lC+he3Q>9eVyZKlrE_rTHM#_MsYX`GXK=ZXsa7~k>aBcne=;NNn;Y$G&(g`}IZz8@ zw#BvMb-2+emB1&waW!q0n>UxBpHI0Zz8xC1K`qpN`FmVM0qi2wC8?B{(ZIx%S$HKO z?fsTu>7&csQ{&o{z{fBLw&!L%EUdRI7wWxFw$^PAdnNg4NnWSjrO8{gg8NK#V1pN& z_M~`iB+WOK8@HZV3!H%#N+KgIi3_F9Ij*;|&w5^GMbE!-{Ur9dCce!Z`37~wbD^$! zkh+Rbi8JVDS>yDg1CtLJeSxB$$66U{&+FYA$~J07Pn4w#3e3|(zr)4lw%VPg8?BGK zaofOe>)oQW)JTijNfwWw$4gw5xC-6Sk1e}a4LW`*`FM|0Kc5m(eR0*mHA%^9Y>4)K z%bJAbHHquR4c3hP5zCOetDOBw5}lmXNP)lH zNYzoAkuRRr2vn!D)QFU21i9Ra0P_s|ZigB)FwkbQ_CS&D*4h;HqGoC?XfzFEo{nbX z>T;v!h3(n%Im$7bo{01iLk(A`trf)M^_Isd>&N+R9X%^*4oDeY7`M4{3#R?Ei> zTEw1*T<$l;p3k}5FXL+PeNPz`a{}qUX!bXo#X%4e%F4Zwa^z z82o*O@wY+euiwbr6bpN=C5S6c(j=9*FdiyG5d?d$m5MqE-B#gHMV*ZMjKPX}Den2{ ziaG`Nf}V;x4flvu?7dG~9oHldArnK$6q74eb%-= z>?1F*FH<9mnx`F%BsKS=2mHv&k&-=RW?Gyf2FqN1nkU4-fkM-$V*YD zH)st`l!&oja&TT>p#;9fa0~si5vGU01RA9TzA(b5%21W8%SMo08j1WnXP~yJ&WnJk zwp6I03f7=b3~#9&6RH~%t{>BikP}*Mg;rNVRz`z2o#iXPtEl->2I?taZ3{0GQuYd# zo^{!u(I_T>Q9!FRZyzkIDGdbjF;Lt7UZR|`KUI`7_NNV#&uV<#D#}Bo>2V}M76N~- z*W^Sca0Ej}q@FEmZTqu@+%2DF_3<|EK)=;Tl;(7bWVBU7M|#|zGLPm_btT!{vL-Qk zO#;NNvE_L3449OCN0F%xK&WMnn7mBDQ+tcg`_xIv@^tb^_J&J+$Q$^5k3jP8sdX0g z0i-diZlR$XNmD_qLeU)8l8;wtz-Vn*<4#^vmb?alE@Tb0_YC;ml|wsg(vpOrTh1l@ zEGDn9`Z^*kp}KQU)+b+lvI)Ot{1AM6RD1IA$!#Vf-mNF0`L~`F(+Z$T0Y-D`oOV_h zDs<)my`4(G##&dBSYMRtg!K$FqZ07%bvD^Q*7YxO%VaJ}@m$w37&?YUXUTf&HmB8Z z7IHIVa=NOdFRE5;Rh>PU`dyYLPcviK5F@!6F@~BkY;`3Anu|&)*5Ap1>`_iSc3HCA z3u;R5ZkAEW+gp;+wXsnC7W=X$VLe3yiA+It;Rs4}=(P1R(_>ZA1p9-R={;|M>UY~) z8qPV{7*ji?Btz&{A!tdB-lyA}c6Knpe~^T?X{0R&Jfs}E125MYFH2Y-cEFN&5W0}UrQs|s<=A}tvIj^ZZn8kJQoM&5>c)if zM6Z;*-S>6nnz(}Tp^(?Nqrnv=J@J4?P!s1QmmypN5Lzqb@$aYq;jxS?DmR zKa5ez#E|P@@gKVZwm;)Rc1J<7a_l#fhygC$Efk0j^VkeFQlytu5vqG8T)(|_t^2XEb(-8?dMmC%V0~fO@QYg2Y^j@L zT574F9NVlLs5GdT5_nVG#+%~f?)7CGv?jADN(m!ceUr(=LA4-eJ@qeq5UCt{N)7Lg zpjA9cceKX3l0M3@ZE6WPxLr!r zLd_Gy6gT3rx!m?n0WGBh$B+^|>SOM8BsDL(ca^=Qkt}Vm(<*Jv*)u|zZA2Q|)fPh0 z%EeS-bg1riW_ArY(wTbJmJcS2^7wAswb!?^1F1%kYP%;%ngRYmRg{xqx5Q1&v76CH zXDv<%=lITmxG{k`>p;YksZ@_+QYG8)#O7hDC!lRrPsDE$O=MJGsvQ!KY=wYxDXbpH zqz}fbjTwaxR;+d>uP*DcT1yG`Br+g(x?wUp35bSDiV(yRHb?`cD?U z>Ck>k^%PB>(VYDZnN-JuWvOagllK{bC#sJ#ET$vFQnL5yAl@7FXcX^C4bUBw117Vp zCpI9%8!5vn>g{-kg|1Xz!V11j@HXsde7YbJP+;+(Nk&jT*Bgst_WO+O8UOKQn(C9pn?Wfce3euU-KK@M~yd za{&$4l>D9LFCXe$5j5hjo`zCihDrTlD%Nz;RhO3ZLiX=Er0wG{>s38XZ9iO;IvRC8 zHCX0*Vwl=in3%duXauC5L8c{8?5h#AAC)L_Fd-F>)Fv?o3}V9LwX8kbt2E}W&evzp z*ve3}hqTN6lxhqQRc9j1J?Qy6$X5Hh>+CZ>6xX5$MLUkMcn#fNJu^nPE7da@ z`*~k3_2-&h*IZqUEcFIj62g4#KG7;VmhN+ia*usyTg9_37tfy8seqlcM}a$6gi?LE z8djadx@kU-eA5}ZOL{R3>x@eboT&zTVMe1jetqyumHH3s73}33*E`tTH?B{xk8fOR zFx3~d2h&&E(^jYV_4?B`&-C{Nhv)m#O0GDvb+x_U>h%7;;DF#6{(gwt&)*-B`}+qV z_5lAGh<*kvHuQytqF>$5y}Ezd>H(Vnj2Lyf%l@!XOZuaZt>}eWZ6(@$uiGC@Oqa`! zZ0%C8b=P$+k9f9QYDGp-@#zxj-_Knxi=9c)S=$dR?T_C8{LTPt`vv>?#`O>O_l+A6 z9N-&w26z)p3-(=|W?$Vm-Rrl5wdsttcE;MYUaR}|_67R{Q~kXVx0k;+BKP+9LF_*M zR76kh#M)l&)xFDB_tE^Rv8+w&jfPz5YJ0X^fJ87KY4|>r zvbB}!tD%i~;ot$m7weEdj5nqF8q?zJ4V&X?OwUzcE#CDwFU1j_!x5GP(Ly15cl8fr zv8VbUYH&PS_XPYVzBK;j39n3CM;(!k`W>vtJvFY#*78@&9g^kzcHg9q^=!Px;8tsq zwf!w|de@MlLn*{MVqN0nNih)|#|P~m|LTN26Q#bRXwYCTr-1LBP>XDs6TPcz$~;f& z6Oi6O<*7vUQ)l^@6S;dh-2ER#K_KI;3vNiY?nWhIz8q zY&SGO;0`4j<%uiFy(LN7WQOuq1(yhk#(z=$!eiK_=i{KMa;;MRjlngg`YYB7mI@CG z-rA?@winz<&EYZO1WnvkCRAGGL3H(4Jfid;W;MQMDr}T!I264cwebub}8Zz+IXkn_nVQ|6U(fSb_$Kaa_^j7FM^E^R$`lEUJelgDzMxHUT zPN+Ozaa*#fM9yGJB=jx!@=-$HO8qn?)GX0d{;Se#O$xDjdL{5@tlnVuT?qvk>U<^i zom$kAe>NahYSEAR@8jWSHIjgv+KkIF>2giVrwDMxpy6rAZ$iEmvo?@bT&o>QJJQ!a z_pf+VVGk-tZMl=(ec#x1asqOK$ERL(6bpX_c{nyB~O_E~PnQ zd)6OgQTI08-UVamKFqZ;R~t&qc_}gNx7{#prol8PJv=ooL=F#OB~+k~>grJZtS+f{ z%KvQ|7o9t&3tBu8=*2xu$rr6&pwu zE51tNbrvL{S@Qpiy#L$cbrO?YcE~tfZX!zP6!LDSS9IZc{lR=4K(F5$ui+*1`lI=} zl=r-$p8#n>^a@I2g|;$;nT~3o)B_%Q8_Uqsoihrhf;^jIThCm{`jETf`9X-~@a8zF z?E$Gh^OvRe{03C>zeQ?~Kc!SxNqxcg#VATllEdDNm0gI<`DgrE@ogvZ?SS|)hasi9 zURA=2^&GMwZuJni^Wb!{Sn5MdzQ{Mr`;kC-y4lJ3^{grZInyk_l87|Cmq`8GlrNBvc@ zj%x8u3Dso}4A+mX#nhjMdDII0(AQg-L*$Z~+$cb?<1EH@v{86YvJPtlEL-H02+zn@ z;GKc=Z4KGywl$3nbrdGrHehnmT$1^zeLdQ=Iy;eWjc^;#jU?Tvqxy%qDU*{vO_yo( zJo;!#ss15mjvtOwQorGvZvwi|iTF(dI}*o1IYn#YW!`1A!bo8SKQXec_R{vcDIN7w zBW8!z>OHZ&_L;gJ^*amZ#z;MSvX|XPMD$~i>yAk8#mg9au_)TU6T9N|fPLiE&;o`_ zY4u4>96eU=l+hO})hBt!Byp8mL3)(wk?1hw{4N&6`OpMYR3|WhlmfKSgF6hE)7TUB z&<^&k^C@^{H$7(!4_@&dX?Zp5_~`3nZ|Nk!GX1tgM;cW4W8LNB{;a!#v~6i_o|y&O&fJ-gCWSRCde5D9XKJ% z!w=NL)8;_K`SRJ++^uHc!<)Iyd5JDWD2(1cbV_9f^RZzbD|~Rl8+z3G^VV+}*sx_# z9hE;m{NU;*1c8=Q17(^*^ITfX?ycC1!J1BGg_O+ z*0!w>_&Ow7aO(=#X{X2ssIC6|aN}gGK%J_iMaVt}gtt@W14`|gys3APEraR)Q!K%z z*Ar~buP5^1SOOc4(MTnvMSSfaA0Aqy;_~tRALD+1TQlA>uW6^7+EFSg(N7H{L`+@{SI zave!HaYadA>AN^4$Q_R*l?qr286f=_7odb@VABJ}5Hn6_<_I!ujv(7%$xD~RxB43V zuAqK7Y#0s8;r2g6rQI%&iE$V5$)kq{E~{Pd#xwJkv5(nL`T@?shSQ|JNI)A3s2m%$ zs27IR4#KM8#!&09FT0*b(VNieVtkaClbF51vQb=uw8+ZE7qU28(0Z;yy@{M22QeV8-Byyw-}ej}KFwX{^qQ zQmM*{G`+@Xg&O8KNJef_27a})T1yq!U{5=LkDF_r=8{xtFamd&Q>ly+40mg+YJ`$o zA?OoGKJPQ_k^?K0HHpkb^ZK5V(smT|z`GAd5qMvdfL;|%ZOndsEL&-l`p2x7mkYk| z2T1dS!yo+i1KfTaIf0d^E5o>IA>WAB+R1Hom$o-!VZA0%w}}kOjdl26q}&$ALnU-M zmN_qH-h)(^8A}22L7ZxmsmU=%`I=sxWC+a=g44lW*)CbUV&KYJV?r23qec6dwKi_o z7~+CiB}nl#q89}uz+ zrk$;XZI{KPjSPVB$G0>Z>fKU%?Bd| zEJz0q^I)2L#g3mR&+xlfm%*tTTNJQE;I;VrCZ_vsp9z0rQ6~_x~F^2gjeBryGLufrX*c*cES*{&?#7Y zZ$v$@xoh4fTR{SZN#vfu;Ec2+K_#+t#NDwRfIgGaZg~7e+BIVg~fxk zB`zpt4!tJb=xb}z^`4atsHvl4+wI^mO$L9ov$GZSQ$iQVEWER|xY>{lv_UhGh(4`P zJ*^TNVt;5L)lkf z^;BvG@O}&4Ff{|X|69!fbJ@s#$!^rkEymuYVd&cI;}-Fqc}&VvaitmI*rFmKrj=s2ON-dZ1y$`~s_!3(kqpU-wsh zIj%OvDL+xCL9QHT$A(>G(@`DNmtfx&Y)_^M-!bEHO{mnElt_I#Pr;xk#au!H>v|HQ z5V%rap19tcQSY40cXRPT^a9+_dPy^91a#}hFc$k>{xWkSt9N?j(NHBus@QJEHXPk> zAK&a3-G<7uqs^$HTvDcF(J`YkR^>3EOJJ1$lAvMMx_e0@4m0=1n!(H^tSiUSqfCAK z*NfedsMrnB#coI^v72j%9rkFDu)!L`9$WjkfBd5S4f(b5H{~aiKcfj_;Gs7`n75tm zAtiK~>Dk0KZ1P>3fRb+$cdmg|6C>P8&0tm_+Ek*{W;3?wn}$LYVL%Tj!GXxE99UW# z6%+^wP2jzvwbP=5VOn9uS2ti_wsNuLOo(kdnP$_;G$`t-O4|0rv1eNLeydf?tJq*lF6sRNeZf3yisHue|E&l9}d`WULnCQ+I~R-=iRl*{;!q z^d9@7HN2-J@|BuQHJE`l=pp!>^ zzF(CUglWIrPBeoThS|*9CAY8h;OH=r%*4Sh`u03BvZ;W4Wu^-QXT{LK_NDv}`KY&+ zIBrUoVHqu8TIiLt_^hmb>_QB(pzMq`1hugro3Zi=yOc7jP%brPfs5Wt887oXV%=7> zJBs0q)Mr>m7#X*|a+b+h(v_VzG_sA&&|TVr%V_E}1NJsLvu~w=7+Z9|yi3!u zdZ)5=zCL*Cp?7JB!!~GR7A0mum}Y1@#lYgQbQv`;~In`fuRPeGT z-@Cz+Ut02=nL={BICg15X44tGpTe>XU+qa1FaOeo8wwKQKJ;V2UW86PvKKQICwc zgN(TFHN(7A_zuiYK@}QD4Mfi$Kmu%cM3k;)ztZE@4#GC-vnhvu26^RX4m)vl22n3( z5(0O23EU?|5uTl@Cxdeh2JmRna}A7R4aP##ZWd8`4Qf^b6&Hdyt0@PZ$LFrho_ zvpZn}`3jtvpwylP6$j&k&S|L~!k=+ii&C4xpIfmAR6CeIx8OjcSkG@dlxV7%8M^3` zK{|7xJL1gjvSPA3J0?3vOm><7T6Q(Vr5@R5YQC{>mn5}WGXm_`BwgIK#B@dkhWRza z4cnPd@1pn}7)4y2aUjK#is))b^Xo}g@v26`G85mgb&Tw`I<6IXbzGoV$2EUfYDUIX#|36} zGm#}$pZw%6&TLV{ZXY2Evz zVf+E=clYb2e&Px+PCNBO4N8Tk3LukNR{*ZA)ty4fG_~4Am96fIJdKbSbVg<(E&QB% zmdZ@hO$`mr`!AO)f%2z0)Gow!Q?hJAUeOsD#9}=V+lBv3Cq(>bGRC)8+#p_^rBC;) z)A1Mi_~7Pr9nU6dYz%v#<@tFxy(rHoI_DYJ%k(l?@uw9=Ek-*b-oYZh|AfBfJ?ti< z_hpq#IZ>yQh@6zrjcnZ`bW_}^TG%zBGYDm1M|ol2Eqam=w$#R)_|+Ayh@)Nq3uv=B zTH(*4=@PdjhD$^`HBaKvA50o`@uYf*J6b5(-_y7`0mltdbMN+)A;$H+T~owv`)K2f zIjm@&~1G+=Mx~r%q z6LMyE$hUSyW)0+`&d5Jspe~Bu(3Y3|Tsoba?P(h9nM8bk=X6M=cFP!6)~mas&oeae zeQ@F9suQyGUmu#fv%4~|)=%rjag}mpS7Iwx}40-QzVUDOr*-&}zI5L|y0 zT)PCoIrX8M$zI6 z*>?urQh1yeEMvO7x9ns6$XKZNu*}SCOBPm#^LE?v-b^Tbvn_9bg55bE=kv;E74B}y zd(&39zqRmdN0xcFbTN9PRaiNx!O9H=QkJYHXV1Ld zxrJ{Yv^zhSd*r>DTe$mR;Tu(i08Ad~5~9Iv(lDy<)%L=@?e<>5T%1D5Pd+@&Qj~bR zH*c@V3Nl{HQG42NzsNqP{Ky`Vt<;QHb82uxrNw?@K3z+nqs`F-4P46Kd6-?Uq{Bck zZNM1gZQ4A%d2kz$lp@dLx%Rtr72o%yO%nK6)fY7Pugtd31x+dTxku@UMfB`KZc20Z@my@;7K^93 z+&yt+rJSJUP|hF*IZr^c=j*<;O4V+kR`~YH!nNS-L|#Qo)lBIFO?n3uOk@>>2-SV< zy%q`jSwAcx&CAq zy=z==t#R$Mxt@hw!bFkDL|KKOTPu9EBX6%I?=4H-3l`TOErl<`;fNogz!tOgfzR!q zL)!f>JL!y59P9!tR`#hH4*R0xF%L$B0ywlh)C`@#-UkW=HltWz4~`HJYnq3LenP%}3qC2z z{A9r=XfL_k!s4MD-NCXf>YaI;p2pksG}fl2B>eyZ@F9VF6{gUt9m6-=>pT`7GoQ!I z=P?sm>8QLosaCx08>L1Mh$flcT7Zx*n=iOPxwUw)c&jAd`X}+W-;1}s1E_&dDO6Nc zNLLx`!wX(}Y9?)HIFe1LQ@U4+$%}D&nYah4YDTlx?7R>lAX6@FHR6)u7A9 z+@7T5DBZ0+DFK{*hFBgIr(``ik}9tMDiR&CX-0R{;mDqQ=x98g>GN>=9xQHC7|tUa zYNl(H7s6$dNlI%*G;1sOxI#9pW|u;FeoV^K_e8kD_e3it$yP3OUa;cJGrHzrW%5Pr zsnMh}xwJ8MSvC2LuILGxSH9c?b0S#LXx*@`$dVoLjS1Cz(?3Z6AWDN2Q?czsh@wWV zHapVkKuXt(g6j>zwUHJ-FXsv(@1X43Yr!kD1E4cG)U{VAJXnfX4!uH$?i1+Uuo;bG zA8M|QQ3guQwI;GsbEPq#QK4=;u;H!s`w@&JjQRI0bRsTBfa^fS^%i=vh}>Z&J1ZvH z=l5*td1#MPGmD*6G7X3B(r>y}(hD%Q7m&FV#%jPKPDhLeoE4=eLe3~Mb4JO%Y@^8B zZ9h0Xlw2d#4}RO)NGjcajg?v>v7ol>+3~1l=t?kytR(!dv4m3mG=gguCLc?ws92~12Q&l z0Aat;IbCyu8fs^a7dyv`e-h?(p4$2{_Ym0-;|nLB+F=a z$XjJ4sl>{%N_VAtks-1O*YWPqmF?~R^`PfA|2kanFw$UE1+VQ&cx`{A)WCJ|_4S8= z6|F*QkTHkVu3qN`-Il_&m_NRS`h?)R;Ck0%7v`-^JF+XEggTc z2%Gx6wyAfs!*3Pu{FCBq@Q1aI16CpTyaTdOkgZg0qroM)JoVZr;y{|$#k7Xkt-Taq zK!xY1uZ|AVf-Ui`h7+oMwa|$23)#hOQVr%0h!;&bsi2WpYE!@9QFbEH`p-7}Bk%Ks z!cSWfhMH}r)2FJQRvrE{%)(baqAEVWmU?iqkoyBFOFv!StTc_Pt#bic;e1UzBmbv4 z)i+0p=^$bvlpCXybfDU9bd)$h^n&FAo&T26IJ%<&9lX!4X20J~SRlO?{dq(?XidZ; zOcfNjpN8a*SqndH$Gs-0@Y6R6-)mNUO(+M5)%P|r=^{c|SL;J(hWS%pGZUi~!dqbM z5LRF{UAi0tgilPr7T8x=z2)x?^*RIxQPz`!8OOEV5hz5cy3|8^82Q;9!H;p|@!!fn zpfY`^<$W$bpSo$!hRDiDX@sR5=)sO6YMND|!GGVD)2kgeDW(#ItV6w-qRzo74Zh z19J9!ns1E8Xog<#VRM9cuDrPzMz}A8t-Z3{E3GZp_Xj~BLlO@D^@Y^z!CE9WHI+Lo zCz3V7=Dv*9fCHh~=L=%b;83dm)}+PQOO#!h=F)`Ri3iUV3dSi_9%wFb{E*h19gJX` z6AoYdW6<3+_8#i}+m)(z1iWDaP!%6)d>uXuvLjisS%OAlz6fXU3B9>+3FU%GGS;@= znm~IJ==3K#4+@7tC6p?@R_;ZHO$<=szIJ9nZoqD=L2pJZXVwC@j&K=Akp&ATSL0NI zFs(LZ2#)+vd?%tpjlKRy>}h+%Lw3qHL3`c~ovzC|RUOf+@7lt*R;o1CH<$odL?|q8 z%_~p9RS{PE*fKTx4Pe3i_FH&!%zICCeImL(47)!1Ht)Rz*FP<;zlU8%zCE%VDAWmn zp>PzbdK)H}Qgui=g{zkw;j0cy<8XaP%Et9wX$-FKNhP>`Afd0Q`jFv&OgpzNc>NpN zXVs@t4z88-_;=|FT#vwGUa9(A%EPsqM5C&V_JdcwFO}lDO44wZK`(`TLD8O(rsDdX zlz{7IhV+SaJ)S>fDgT3fOsbAbCvjaP;iR^zEiBRB<5*;+ssy&JQuP3X{|6;D6Pwxl z;h$2q2NS+|YMOTB6(hf_zWgr>e`Dw`f&W?ApD2n(--HbWB6hC`#^Jn}gX8DSCPGH! zhww^gxF#QObuz%+IsoV4?h`Bt;ZmU_ai5$a(=oh2JdOiGrgq4En>qIQm9osDUBH6b z>E?xrR=gmOk!{JxFKuUsn{7yFponcembg*hsS?|KVp&?M$HYN_)@GaAX<=-iOk>$Mc%kr=CK2Ij~-Kwi^e+tQ=zo#19 z_s0XuHX>rBsqZcdfw8h%RiuEQH%ZXz3r(*Rtiq(%7%k^F|it`wX z(~E6ES^M>4->mzRm*%V3(sV9CKURYNRD%9gg3f2o8`5M_KOm0!Gs#Z$4~WtC5&r7&o>}Ve z%JjjE$EoEZ6btU2TG^Rd97!UG0&=Q>TEyqm~MJ&!zdFbNE`Dop&Q~SfKU?(_VG25Sm7J zU{KGmNSTk&{aH;Tv__23K><8E&Y%GDuhsW~Rs#zMMNq$Pb4|ERAX9_)GMEUIVW))-+b(qpfp{&_gInoq=CO!31 z{0_RKo9G8Dgc53p$A(kiT@8HLODOGxk0YRPjI*nO%*y_&8oWD#!y9)7&m&4{=qM$S zzbVEzG`7JwCliC6Rs^y!tbychdaC*9f`{t7J6h^@hNRz{n+ol8(&zcB%SNo$Mg~Wb zguF7`f1Wq}qx6s3$vE(};jqv1aoFbw9QKK$amS5n_YC)($Gtxru^*B4`cX6~k)35j zUs9q#oWuJH1Wr0@Bn~TS@-k8vI=Z~guI*Pf0prGEXNo_~9I)-xy7)dc09vt?pNgap* zxLPUPt5slEQ$>YKOUAb&q!vmFo~#&R_COAlN-M)nq|kOeA|!!@G)ZkNM05#>hmP|6 zHI~y+;d_?%QOze=f$P$&m8u@31wk>(m!oPwvW#3>!e=VJDFk9#B#ot;fJBjJG8Ods zqvJOn#S7(3WduK5XP2n`vY5-C(}biKcd86HdcVq6+XO7EJ{63 zS#;|YNUiScA2GTt`zDF5@_K0^$Dd}grx-e>wWWkHxwm16QnfxQz=>gaNpuQyi>*{iS`Fxmu-iR9{M|o zX(&o4NwGh$!$}#-C-(}X{20CV#Oqfl#f9s{l7Qr(mk?g+QJ5u-yc|_@^J_yx*6c{M zDE0@A6lo>tgK#hDJ*dCi@BT|f>|b_NJC5_MdNdR{oIPp{llQr3kHEqVqgZri?-nilT%5J+Z$+{d_C;A5U5;ws;~Lb6 zu;G5KNG?fgD5`3cGb%NY5s6OS^#{wmYRLB_YdtP41zik|5w27ZTcH;(06+~DrDnI* z7Kqu_P?47XCwj^uq~nVJT(3*Bt7GUb^mQf2KXg}~2PSGrk3!QZ6s=!;U@ICSyNbBJQ}*FIW$(EE z_6}MMxJ=EYT%ZP0M(M1vprzOs@iRfe{4BCOR}1ddma?pz3ojZocHG66jGu7Xw7mT3 zGotTv?!0Sm@!f`*5jmKWqPW zWWA+4;nAcXkJ<)dBB>QSZvSZQ@ke$#e1nGBRP$IaqwnCEoun^Pv|zh7BQj_Z33E45 zSvyhlAFnjM>+MJzI7IZgfr$Lqa7B8JPO{$lQmfqObySGbXe=e8g zaw&fHah?bpk_I=6u15_B8&EQ^vsd005I9+~YTbsnJ16P$%|={Fj84|moF{!>h)oDl zdTd^k{M1!Fze#F843n|UZEb^`xCUEUT4gG|PlixD!($LW}iVPPDA7v)w- zs`T;>BH_`a(F=&R7|}&)pe@Hk19?Us^(7wt{1(b5TuZqR_o#ktVptN!3N5un#ra{s zHhvwq3q+O{D*%xrQZb~KVXH!cmL7pn7DjQD*WcbL``i2PxZlsRKZvEcWcx#@Y6UK& zpnnt}N;aX;$2#~24u&G<*g=sZO{5sju`$#N9&&R`NT*0ooj$1IDHv+z`2<57!O4T@B5#*^QcBv8gW<5(SwoS}p+Ug^x_kqrE3 zP7{M7atg%9WO+IJ8(BqTf%66?x*x1KR>)zm-(9I~!9fvzNHp#cLu2BDW_y9RYn618 zq)kKj;!w6Yw8{R@mBp**dd9*Bq zme+QEETB?2>fYu!noRZ!#GVMSkLSa*ezN6tk ziui-x+37`O1^d5IM58!lXa`qC3q_q=j2V84Rh?v6-UFrR!AsFg{;|~;-ldVEY43mp zZ1a~rnTvzb-P=eGo(z`NUDIBFZHKouJ#-?y#ao}=T9+RF=AVwE3AE?U;2*axh>H(D z3NAkUD0qQ&csjm~Mja~n?}pXyOd%txx>A7N%kANN0yn5ps4`|*;fbk&gwIG$!-!aC z=z}Jsl_q#u7;i7Eu{2XFMLe%su}!UbQmxo5(9Z;pS1Tr{6=MM$OF$T5YDoe$WMqf& zoH`~e#!EtAUJ?QpSzU@qt~>ig*RvLK;IZF6J8$>p(*En;%ufiuiTi%s_ZPmpv~cgz z!aXfg`1*bMVsPJ)-yPX{XcOFNMCW`y)qK2+^)AP8^ai>tOgHGgOCL;IvdM-teX?QG z8ClBmJZYzQiyQ6{m}$d`!xBMJg{27(3$7-?SiZyBUBy?;UpD$M`-Z8WwO<6k4u0eM zHsbou8vN4rl^Q=UmHgMK`}smHzEgZ4_*QVgj7f@E$*?aU&j<2k4Q#Zn$Xn?zPiSzS zNv44BiBJV?KBl^^)hg)Ani+Bp=J7C{%jZlInyC~=(v>!WW}oj}o}0=(_8DDK!7LTR z7Nfz&EF>95T7oef7Qmqa(QhaQ&hzhqBkTG8eYlSBAHa2_{|{Q>p7y+bV%`BU?+;?( zEA4r^=&A(Z3S#cK=JO2kCB#a@?VrbsDo(+=eKH~!?n3DowEn1-qhkv)+(YbtCm@)}ms2$pR z=y}}H%dqh|&`htME0Yv$X(eoL@@_7wu5_Fsn9j8M<$k;f9@jAlzD8j}3Q3+fU zhdDvVoM2#PnQI`2o;4qjL?2!FJkZKUGsNXiH($j$yNEh`NeBK@@SmP&dc&ncx(fG& z3->NNwCTuJxmVu4#KLF8d3zrze72PE5CP-5XB8oZue2aP;UfO1XK?LcdR_5PlvJ|9 zF)htrYE{BJeekR zS~m$l12SFi3+yXb+gI+{gHfSs=%f&Gy!Ud#ZyOouMpa(rh?bLprqI2Dl^!c5`BQSFiqr(y*r zvH4#)iHYW4f37A1?4vi#gNulnX)@Lr_>8*dJVXkbPn%J*7`wuj&aU2s>9n=zEOO-unBrf+DFq@__^`nPm zI(q2LrtCkoHIF^sj#_xxO$x1^jVo3on>rp6|_!tz!EeBCH> zT9T|C(ONgTt)B92VEMMao+Qd>%$LI1Dyg@8Bvamx7d4WK`laSD1p=@GGupO`mGBG3 zwrgo9+q{iX74wQO=r8|;l{K7%#nyEB&UbMu+QxHctc!kiEXo;+csyr(jyad*gGPxj zJ7JwZf$c*EJ;uolL)pm;&FtD3e@eqf?U7IqzR$WATgrROZ+DYi!33hyNbRD3A+n_jyE_w1Q!QM%n2Arq1;`Fsg z^jgA3`))}1*HR#grh}qqNOev({em-2+hmwFqyu%r&tNtIry0116Aw$q+1|{I{N4%@?_uV?L*r<=N`nVC2It6&1BMl?mv-UbpJ^S z;3Fe0e3-lpdUz^kBWQn4+4;tE0(;J5@C5rKR~qod7 zFpT$DRRZk$ia5HGCZ2E>0P5LN38fb_@9_0a1zC-!-b#a3Q3m_1WCm?3TB zmbPGDa|enO^ZExRa4jugDgwglDGBPd`|ABAC3ksTXJlp)g`!6w=%>Jq>DTW0!lgYX z_2?QXqT}s~9=L(oyT4)f?v2dez3H^}uAVk*+87%aZhWv|;nD{i7Os1+Vd1i8+OSzl zlptcK6M}FvACLrYW!5v;#3le~YK^h!b{0(i690%@;L4bA@Xe_@`%p=a6VJg8`mQa1 zi(whcPubmr?C#RDE7r4%CTAGy_BBX$4pYwSE_!^7lsxProK!O=1k%{b9qD!&oip;H zH5EIoKy|X=6+_iWIjC5}ga;+66D{i;Gt1IzjWBtD%bnc~T(Vt%QFxt(gTrOxvxNK@ z+FtY-;MdSG!*je5@*BH3>6e5qN_|uS#Wl1gA#kteOa_H$DKh5ovvEh-)X?~6LIMkn z!%+eYjQ-YC_`h%xx)OMxfeo^XY}A?_V7r&`Rsis36& zgt22013M+KSo2d$3e2N(q1x7stv_rnYI$euVe30%i^sk*mY$2p2FE=nthf5d4sY>~ z!zWIuX6q}o$KW4@p^XJKi(#U^!hr40EN_zxNl=67i#*`e7a468|OT@H*9Aybg#{3ZIgM5Sc!A-IDO6S=oQDHVH2D))R z|2mQiY$b?7Vk&Q`S$PlX%>f?}BF0j)BjIChz{Q#f4acQqW}$#jtW;zR(v%MI$>b83 zc(#PjRT%X%q{6uLD1oJhoG5|i29-*nl|Diqa?Um1Rn;J4gNK7b#_ACY-__+&T|^GSHnB;cpG`kso`?VW7Oy@`UjLl(?o*T zX}#rFkO3JVYmD@7`c>)YY)FujN4CLdu(ct3bzA+|<8ac)YDYIY5u9>*o=V2%u`n4W zmS@BiG>H{-ZCpWft>VUqeibd(ZGf3xKccl^3{3RZIIgu*sjZz$4ezg!ZM_=05E#lcO`LHuaXt!jr4z5XYMvDXH-1?_zN zv;*U(4Z2q;#!ss|kDqYzgFX)7n-`C-#(FHqAtaxVY0B|6SRd+vM@$&t)11n2NF%+q z(`UIGbxl4k3GgN~J_tFMtaq|6L?e)Wjut^k29lPFE4)sRuVuz=IwghgeIg2;FcLcc zsKy$_<9efjS!xxPACKg=6Lxv*3? zFchz|z_HHF&JgbDasm{JgluSP?;@Zo<$H6VB&@KjG{WtLFl8=DBXB8I*Qu&M2Vv*dszq};rfL0LcWOx7_w3>i6b=m6D6R~ zXR*3TNl{z-#U^#OnN)U1Tw3+n5H>}VKcd`~!0*h|3B+`a3o3eY#*7E9fQb zEVT(EA?lZsJ9DVcd;|l~OB&`0j*9{t%oT5WOr7qhOmPy-XD}%~5?EzMVi{+Pnz(5M z%Nhm&=doD+y}?~^{Wsjc-^%;M%`}SJhQh$_x(~VlG-#~BZbnI-B-U@Gjt1vCmkN!u zoT!f{$upO?ku{CfP=JJfV;E97zLrjeI=+UYZK7ysDtcFFe!>O4I*!bt7&xMGHYMK* z!-BeD$#GurV&B9dPUm@2eOMTFaZBB}OTx^WsH4+%U`^l~FtqeRJtZ$PI;3kGsTdRt z(?BkWOEK+#o+8=5M&B!L{`!E3`3xwx3e}tbNjkO>28dr|S}cf zIhbc0I1+1e%iw4XPFi<3M%si)bK)qonFKd4>S@s$s#zyR9~+rg|5%*hWekA2s#hF% zj`KUP?F3eoNb{4~xRUggTw!Q?((99Ha_qmW)?s3x;LJF&3}@!h3}dB)kKeAPsYna> zXpY$orlSH#DO|>EpL6*%X3XT;u*S`ng27GM1ECjcX>!f)&QBw|iDuWnPL;pFbSJl& zVj>NvNM|4td^X0`V*ZY4enhBBmA@g&u8j2Dc3!bNxJ~sGtH~8IG@v_l=(F@G9faknq&7K@w|+;%&fIjo)_Zqo4LeDQwlj=xpQb0s7@N~H zS0w%rvm&7cb`e=@7hd2wCKhm>MT=YJz!}qlKSU4Ohcentgq|4QQadKZS8{<6<2H%3 zV$kF9cE#Y)cwjdx$S%DgyJEg9inWkQUjO**{t3_cC+_f1+L@b)g#F{a+ckhHGyrj# z#ESU`7JqQP(<=V{MWWVR>YWNwwt(Rd2lyUKZ zV0GFv(INd8cVh+mcj2lQqAtsEs&CH8baF9s1bdu(vCLH_WXT;r$XMTdsqAGpEQY{d z^@WyQ+B!{r;k?k}SScmfjkWG9U9JvrxjMjd$_e!F`gXMWcDBn2y#LrA0}uOlwgN6< zCs5$9Ia47)BB|Q z-(>~Bw_5^-S!1Bjw3b|KG>OA{li*?Arl*^?7xZoLrhl0JAx5S=R8H=#1m17dXg2$O z>P6mVqa7nbZ{yQV+jG&kz1!%0T5H-)E$1*{c+)>l{}`S0VKyQvPs(g6@#^&Oro`Gc z|MqWyfBUy9|Nq9wALAR->ZGa(`F4g;1^6l`J_f-)^+*P`O$1u4Sx2a6X-`rC!^uNS2V z*O$zlBNdy-g?G(auwdSTdvt(fltWllJa^HYhenSc?GRFg%L*Jb7P=P9Wlz`6Dl*=# zUbx^Msd&--j>Yqfi%ZPpuASwWKD}V}tZPz)ynB&y@%)L7VRMn{)z@9Yo@N&oUI9po z@SFT1$D-oJ#nRa+!Zma5a)6F=CC8n`jydz^J7&x{ck$>HVcM)&Mbq=AI1php`#)^4 zaLr|TQ-PFz3$s#hm!L^A_tbg){OCCOYmdo-?<2kz>I^ z$#FL?A%{O$ylC;fg$o=HEkY4NvkO_L2s~`TLdV#v9Mfmt90Qm?XVE>yz@7)L-s!sA z2$?f??xNB2ix)V~zSJ?s0P@I=g(Y`^K*ziV56+oC&rE!7@q_d3Dt1T<7dq~ocaIT8 zhb~^|SbRTNGZpNLPld{L4{H8?)VdJ~bY3|1fmivr(YqBC-& zWA41URD};MTy!6VN624DVg*TZTzF?mNlMK7MeKcX@q)R8G3}ZHN^^QaJ_(H6L1$&D5tSEI+i<_gi$*vxevKq zz{sEoDZ-62@*J1tUBw@+#S^ zQQmHJLAra+JSMlSmK^uayXRiVyt$VSo9}|qpvggINhoJezYh0XgxhWrW(#)+x1rI^ zS#VeJd_*-k1f(0O{oEpq7VeyXpMxjtV1hSCf}DeF9d=K#BvFOjIe+0@_oYA$ESBah zVvu>PBIYi9Xuo-aF_>}^eiZT2u$Z#BUwpwJQE{--Xe&hgA|M&8SlmO z9wY{sHRM=)FB0M5U>4-WvE=T%QiM747op8A1*CWZ#0_as@^=%a-a|nt zf&n+hjEX;R(ftq2SwtelNjC$L2@_%$)0q&Pk{%hXu_UAk3CpW<4rdu}DSZcAceUfs zAD*@7ld%KxQ~HY6imkq^b;I53((?Nb z@7vd&mY?zc`}-I5nS54S-?Zwqd_m^z(ZO%}TP}NB+hYmc*9stG3LX;DfX@J+#6bWd zE#G(TP47OQmG$QjK~KhC`fpm=|GGQRTmO942P5~tKl1s*1Bx!|e@EVlwa;fge&X53 zP8@io-;I~qm1)UqH)pL&esB$$85?(5YmV?Ihj4P ziz5oy);|jV_dUT?TM%p|u?e0Q6pJKqEC$MXFZH82k7^%X7*Qj(Qzen9k+z)oG8??_ zUU>Y%$gxQIsRtsjy}3Q-Ew>@`T|73g6 zy6?92Q@`An`tIF>FI?rhJ2MBMH*RUjsrsVVd&dWd0GdjmJ-=zl`Qn>i^Dmw>XjSCB zTmn7!r)@df!iM>moa`+}9`z9DU_{H&?)hlsCGYl@ORYLcjVr?c@MYV!$p5B4Av1>B z77M+|wiu9Vr56ti(7`-h6{1)jLMpwq2&E>hjVIhDOf^9*{JA40OHGf#<1|mWu6YiRUFSj=2&r{ zsbDOAv1v_ZM05fXsc|4(?qefnLdJwnSX6D9@ex&kY;hpg3anaeu{lVM0eP4hTH`=g z8EIK#S?B>^AOTILvIaOFpqNTi@k(O%%b?}JiV+i%ua$A2juIWz$IP*9i4MvrHDE17 zz;XOCrWzoP2zVF2$!7X$23`;0H{K-7Lv3gpekEp!r}LWQw#}BT&F@4^yUuaOh(u-)ldpZ(pC-_RccgqFtx~985L3>1%nFK8w-_4S4Jp+ zOfM{)DNE2cg|DkV;sosz}!eY}+L`*ay#^RF%}()QCJqXtSU_2!d);Q)McuTDq#kM(Py( zP?z4S#nz=yYqNFf`8sUf^pD;2qVG{QtPbcxnb&+u?1=%PN2Z`?n=>Bet{_hoWV8=8 z2BZsEOlyK#VSgS|(6FzPgJk`VHzQPtg7jo{qlm@O?Ht`GVj$fb(r*l;2OCBa!SqB- zF(w$#$|wXubfp>FFm(-S$U4J9W&UsaE4Une2K&Q}dJt$a2;)?lo@|iROb1ksn#P zR+dI0A=YdsM_?Qd2)hsx=lB3F41HF;7hHWP-&!wUoA$a+sRQEJ%cU zQa!{LVix`D^dx7hI!vCb@h3FhHfr^V>y1S8Cn_6IdZ`!jF9SCY9su=uYJRE}T#=6f|eYXU8qJDY!O3u)sQ zw|`QzGw=}JKmD=&|7-8+W9ul6`0U-;?;M=?Y})dohP<<56t@!P5hO5y_?;amF=+@U zBqC5DY+^SFq_uGZArSHoDCkv`)QAE>4QgmwDiW0s0fGuqE>wt6sZ~*-q)MWkiV74| zRO%nM6W`v>&3?_!&diPXoTFSm^8W4*Pj=49?A-kLWYD?! z@ko{D%+lqPyFW~I&f)R_etsmM0exn7(?2ICgPbhC|Dh~T{EN%KpL_O!H&ITZe=fht zaTZRoea6`T%d#T>kJl;7QSuj%efLlIuXzm*?tI~f4pelU=37g5luG%Ro?6p?CDGT~ z9vL~w&p-a4ZJ$kKtp56Ixjf2~*Sz4kMD6oleDN5HrB9#kTjL;BG`{-A<6Qpi#NNBn zo;Y{!^IR-_`s}y<viLe4`6+*%g6Sq^1JVD z@yYO7b{?CQh^P0>XhuMO)%7RxvOM;qeeIB+8T&`Ja(VKZ)vF75{q-+@_!BOFYwe3y zdPKJUuo@<5t(v06+hrf&naXQ|+ ze8?wyV%3w!`T3uId%{WMx$)(1zIzM~)+g^Ax))le6R6LX=+|c zP~*rlB_CJHOEXZ84ls&RN{Ke9N10F}p_n-mkoPH%R!+e>6bWjUdl2kI!F7+|8~V`4 zq6EUG&}0JyQ^(C@l%mi0Xa+8Xaw2j{Z|^{BsgQP{wM-EnFTz;JOf*xZh~L7BB1(mD znmL0nAz&Xfq0DkVnK*5ngQ_ZK{2j&)<2XPQ8tU&NSrjaFp_xEBw3q-Ed_^)9B<(O7mO-1jGd-Tz-B5J zHh~xf0SGW)EK`)hpyAUn*C)ET*X@`_Cfczb>OQFb`{YFP!hXttXH?n3ZLQyoIH4oJvN&)Jhg{*{vy8L{Y zFXp3Mlq=%S&*N=Q_-4=)W};vN=z!iJ5-c^Igd9f-1~TOM-JhNa=>M9$CO`i z3Wa0XmV|ca8{y3~N@;X4*KOV7Mcy87PdByF-03^5r&)lB45hQqXm->M^Pm$Lr{&oL zY0vhopfNaum$HZ@g!lsj5eT0Y@V&zFa}^=89m_qHw_Mw)^m&NeC3TIlorvk}IF%=l zJY3^+-zBfF=;^&->4Kgk-7zXfwII>WPJ=s{Z*ZHd`XGnUFEnu#&L)d67GnLVk{-EF zdkmfjCm(+(VUJOH!ni19qgDlK>2zHitiFvR5t&gFeyEdsvhgwwEfqFJ`0<;-;7a%0 z%#>8a6@GSGOc3Wj?Xto;f9|d!zWPJHrJkod?IF8oqEzTEdW^9VC?IFqKX>W-Zt743CgFx7@~TIvsNSKqUuL zZlW>#q!p*JfD)pVzSE?$PZPTek9|#qJPoK$hKyze&|~t(<7YurHfuv5Z7-V*;$V>N zGDLZ`N=${e20FYxui)8>?MoGguc+6gf|P5Y4pqhAte^mC}TG(D71_=%DQH@(XnkOhIpw!7h@b-OGlJ})Wx88 zf0XeZ4SHt=LP4GwFD|4(??a4mJAbfZQRW+7H-&L8_BqMqx`vvAjWw z(mZX~@(e%b1CJjqV`k9ZM1l-rB?!%!b~>Csa2?}mvA<-;s|o)r&%2$0RPrDYjU?rw z5!E?qii*C5OtRFa@IE(6vjX7~9NB3AXqEh`&4v#8tO8)%icHO`D6g%VQy<3rt;)i| z&Z&k%k&dmNV?=q48#lN;3EIwLIBypND`=&40 z)xZerl^$|MAo-y56}V&`pc^0>Y2I^jZQDx2-|EA7>^i$%ucnXZ+jC03&_g*@OBy2; z#r7Q2a|&3t0bB;N0X}3V61It%+4wOdDMJ;F)8Nc>&WNQR^L1_B7H)aIn2nU7_Chas z7Rv$Tl*_&2?G-tdILu-SuD8%$E6<>_Q1@r!y_LFZeH*Nq))`guJl@8AaDCmc91E8% zVB@h!oT4hzkp=m-Fb9`;5+}y>M$4w)Ea2vA64s@#0e8hV;GRI*fY>gq^q%!z_O1x9 z#>y^8&E8)ahwhLb)~I!mM`jhxT{7npvYdp%t#{MP7AQ*0w@up6_KG}99DA*`xE{M5 zIM_5ul}vJtVD+ol2sqDnv2JBKm9pkaS#t-CKO=+eX*X8vL~Bh@IMR`pT;Wk8Fp>`>r0ZVdr;t zcZh>kxB+`l*6ogjt9wRXg1*oR`zwGq!xtW|y%GU+;f04wrOK5{ zrBdyc>#0;K={v%rD5%Dj{h_tq4?J_qUf2cP;u_peZ*9eIV()a<`hzR_kk)Qc9;zo8 z^60g?7ajwbE4Y{rTC5byJb@$^*=}8Ax^->?HiS!F zd2W)R_TrcH)2e(LT&c_>y->?cl1o;-F^jqHi- z)}|_C4=ttTfCU;CrD{RrYxBl)S1qBHBU=~J%Hi9#EacPZLkszGZuyR`9^QmA^TUMW z*nNZRZWj3|lwg zNIczstv)DEOS>;yv80!)UB%y^$g|)hW5f8s!Cg4NgYYQ|20&LWS zVH`H^Fh|T2^oIGi`6?|ko}u%MqvosTd*(CdxiokS)*H)>Z&$|F;kZAu9^XEc5A)-x z`Xoi2T^~bud72a^v1GV^Ni3NaUXa9+u|vWnmYl?rlUTC$d!=`*{n;dztRs0w)$jiB z-o;*F5=#abT#kt#zFl@Tr1PD`l9O06Vkt>1nSUQ!8#iv_sPPnB5=&MmLy}l>5=$0{ zt0uAJB$f<6G>Ij1Y?-6g+8CZ^FZ#Fjo%p_!Jkawza_F| zRHUYDF97s5j za3JA8!htV<1C?{tUqE9?6J-vF_>3*l&p+UQr=1v15D5no4kR2%IFN84;XuNHgaZi& I{&yVsH?8%$LI3~& literal 0 HcmV?d00001 diff --git a/esp32_fw/sdkconfig.openepaperlink-flasher-ap b/esp32_fw/sdkconfig.openepaperlink-flasher-ap new file mode 100644 index 00000000..9d4982a9 --- /dev/null +++ b/esp32_fw/sdkconfig.openepaperlink-flasher-ap @@ -0,0 +1,1450 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) Project Configuration +# +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET="esp32s3" +CONFIG_IDF_TARGET_ESP32S3=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 + +# +# SDK tool configuration +# +CONFIG_SDK_TOOLPREFIX="xtensa-esp32s3-elf-" +# CONFIG_SDK_TOOLCHAIN_SUPPORTS_TIME_WIDE_64_BITS is not set +# end of SDK tool configuration + +# +# Build type +# +CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +CONFIG_APP_BUILD_GENERATE_BINARIES=y +CONFIG_APP_BUILD_BOOTLOADER=y +CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y +# end of Build type + +# +# 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 + +# +# Bootloader config +# +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 +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_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_SUPPORTS_RSA=y +CONFIG_SECURE_TARGET_HAS_SECURE_ROM_DL_MODE=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 + +# +# Boot ROM Behavior +# +CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y +# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set +# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set +# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set +# end of Boot ROM Behavior + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 +# CONFIG_ESPTOOLPY_NO_STUB is not set +# CONFIG_ESPTOOLPY_OCT_FLASH 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_120M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="80m" +# 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_FLASHSIZE_DETECT=y +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_CONSOLE is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set +CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y +# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set +# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set +CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 +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 + +# +# Arduino Configuration +# +CONFIG_ARDUINO_VARIANT="esp32s3" +CONFIG_ENABLE_ARDUINO_DEPENDS=y +# CONFIG_AUTOSTART_ARDUINO is not set +# CONFIG_ARDUINO_RUN_CORE0 is not set +CONFIG_ARDUINO_RUN_CORE1=y +# CONFIG_ARDUINO_RUN_NO_AFFINITY is not set +CONFIG_ARDUINO_RUNNING_CORE=1 +CONFIG_ARDUINO_LOOP_STACK_SIZE=8192 +# CONFIG_ARDUINO_EVENT_RUN_CORE0 is not set +CONFIG_ARDUINO_EVENT_RUN_CORE1=y +# CONFIG_ARDUINO_EVENT_RUN_NO_AFFINITY is not set +CONFIG_ARDUINO_EVENT_RUNNING_CORE=1 +# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE0 is not set +# CONFIG_ARDUINO_SERIAL_EVENT_RUN_CORE1 is not set +CONFIG_ARDUINO_SERIAL_EVENT_RUN_NO_AFFINITY=y +CONFIG_ARDUINO_SERIAL_EVENT_TASK_RUNNING_CORE=-1 +CONFIG_ARDUINO_SERIAL_EVENT_TASK_STACK_SIZE=2048 +CONFIG_ARDUINO_SERIAL_EVENT_TASK_PRIORITY=24 +# CONFIG_ARDUINO_UDP_RUN_CORE0 is not set +CONFIG_ARDUINO_UDP_RUN_CORE1=y +# CONFIG_ARDUINO_UDP_RUN_NO_AFFINITY is not set +CONFIG_ARDUINO_UDP_RUNNING_CORE=1 +CONFIG_ARDUINO_UDP_TASK_PRIORITY=3 +# CONFIG_ARDUINO_ISR_IRAM is not set +# CONFIG_DISABLE_HAL_LOCKS is not set + +# +# Debug Log Configuration +# +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_NONE is not set +CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_ERROR=y +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_WARN is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_INFO is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_DEBUG is not set +# CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_ARDUHAL_LOG_DEFAULT_LEVEL=1 +# CONFIG_ARDUHAL_LOG_COLORS is not set +# CONFIG_ARDUHAL_ESP_LOG is not set +# end of Debug Log Configuration + +CONFIG_ARDUHAL_PARTITION_SCHEME_DEFAULT=y +# CONFIG_ARDUHAL_PARTITION_SCHEME_MINIMAL is not set +# CONFIG_ARDUHAL_PARTITION_SCHEME_NO_OTA is not set +# CONFIG_ARDUHAL_PARTITION_SCHEME_HUGE_APP is not set +# CONFIG_ARDUHAL_PARTITION_SCHEME_MIN_SPIFFS is not set +CONFIG_ARDUHAL_PARTITION_SCHEME="default" +# CONFIG_ARDUINO_SELECTIVE_COMPILATION is not set +# end of Arduino 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_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_GCC8_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_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# ESP-ASIO +# +# CONFIG_ASIO_SSL_SUPPORT is not set +# end of ESP-ASIO + +# +# Bluetooth +# +# CONFIG_BT_ENABLED is not set +# end of Bluetooth + +# +# CoAP Configuration +# +CONFIG_COAP_MBEDTLS_PSK=y +# CONFIG_COAP_MBEDTLS_PKI is not set +# CONFIG_COAP_MBEDTLS_DEBUG is not set +CONFIG_COAP_LOG_DEFAULT_LEVEL=0 +# end of CoAP Configuration + +# +# Driver configurations +# + +# +# ADC configuration +# +# CONFIG_ADC_FORCE_XPD_FSM is not set +CONFIG_ADC_DISABLE_DAC=y +# end of ADC configuration + +# +# MCPWM configuration +# +# CONFIG_MCPWM_ISR_IN_IRAM is not set +# end of MCPWM 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 +# end of TWAI configuration + +# +# UART configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART configuration + +# +# GDMA Configuration +# +# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GDMA_ISR_IRAM_SAFE is not set +# end of GDMA Configuration +# end of Driver configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +CONFIG_EFUSE_MAX_BLK_LEN=256 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y +# 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 + +# +# ESP32S3-Specific +# +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=160 + +# +# Cache config +# +CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y +# CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x4000 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y +CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_16B is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_WRAP is not set +# CONFIG_ESP32S3_DATA_CACHE_16KB is not set +CONFIG_ESP32S3_DATA_CACHE_32KB=y +# CONFIG_ESP32S3_DATA_CACHE_64KB is not set +CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 +# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set +CONFIG_ESP32S3_DATA_CACHE_8WAYS=y +CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y +# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_DATA_CACHE_WRAP is not set +# end of Cache config + +# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set +# CONFIG_ESP32S3_TRAX is not set +CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32S3_ULP_COPROC_ENABLED is not set +CONFIG_ESP32S3_ULP_COPROC_RESERVE_MEM=0 +CONFIG_ESP32S3_DEBUG_OCDAWARE=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 +# CONFIG_ESP32S3_NO_BLOBS is not set +# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set +# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set +# end of ESP32S3-Specific + +# +# ADC-Calibration +# +# end of ADC-Calibration + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related + +# +# Ethernet +# +CONFIG_ETH_ENABLED=y +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 +# 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=y +# 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 +# end of HTTP Server + +# +# ESP HTTPS OTA +# +# CONFIG_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 +# + +# +# 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_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 +# end of MAC Config + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y +# CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND is not set +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLOCK_BBPLL_POWER_ON_WITH_USB=y +# end of RTC Clock Config +# end of Hardware Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1536 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# LCD and Touch Panel +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_RGB_ISR_IRAM_SAFE 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_TCPIP_ADAPTER_COMPATIBLE_LAYER=y +# end of ESP NETIF Adapter + +# +# 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_ENABLE_USB=y +# end of PHY + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +# end of Power Management + +# +# ESP Ringbuf +# +# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set +# CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH is not set +# end of ESP Ringbuf + +# +# ESP System Settings +# +# 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_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y +CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y + +# +# 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_USB_CDC is not set +# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set +CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y +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=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_SYSTEM_CHECK_INT_LEVEL_4=y +# end of ESP System Settings + +# +# 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_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_SYSTIMER=y +# end of High resolution timer (esp_timer) + +# +# Wi-Fi +# +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_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_ESP_WIFI_SLP_IRAM_OPT is not set +# CONFIG_ESP_WIFI_FTM_ENABLE is not set +# CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set +# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set +# 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 +# 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_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_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +# CONFIG_FATFS_USE_FASTSEEK is not set +# end of FAT Filesystem support + +# +# Modbus configuration +# +CONFIG_FMB_COMM_MODE_TCP_EN=y +CONFIG_FMB_TCP_PORT_DEFAULT=502 +CONFIG_FMB_TCP_PORT_MAX_CONN=5 +CONFIG_FMB_TCP_CONNECTION_TOUT_SEC=20 +CONFIG_FMB_COMM_MODE_RTU_EN=y +CONFIG_FMB_COMM_MODE_ASCII_EN=y +CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND=150 +CONFIG_FMB_MASTER_DELAY_MS_CONVERT=200 +CONFIG_FMB_QUEUE_LENGTH=20 +CONFIG_FMB_PORT_TASK_STACK_SIZE=4096 +CONFIG_FMB_SERIAL_BUF_SIZE=256 +CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB=8 +CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS=1000 +CONFIG_FMB_PORT_TASK_PRIO=10 +# CONFIG_FMB_PORT_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_FMB_PORT_TASK_AFFINITY_CPU0=y +# CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 is not set +CONFIG_FMB_PORT_TASK_AFFINITY=0x0 +CONFIG_FMB_CONTROLLER_SLAVE_ID_SUPPORT=y +CONFIG_FMB_CONTROLLER_SLAVE_ID=0x00112233 +CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT=20 +CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 +CONFIG_FMB_CONTROLLER_STACK_SIZE=4096 +CONFIG_FMB_EVENT_QUEUE_TIMEOUT=20 +# CONFIG_FMB_TIMER_PORT_ENABLED is not set +# CONFIG_FMB_TIMER_USE_ISR_DISPATCH_METHOD is not set +# end of Modbus configuration + +# +# FreeRTOS +# +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y +CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y +# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set +CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y +CONFIG_FREERTOS_HZ=100 +CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set +# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set +CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y +# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set +# CONFIG_FREERTOS_ASSERT_DISABLE is not set +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +# CONFIG_FREERTOS_LEGACY_HOOKS is not set +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP 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_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +CONFIG_FREERTOS_DEBUG_OCDAWARE=y +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# 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_SILIENT is not set +# CONFIG_HAL_ASSERTION_ENABLE is not set +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +# 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_ABORT_WHEN_ALLOCATION_FAILS is not set +# end of Heap memory debugging + +# +# jsmn +# +# CONFIG_JSMN_PARENT_LINKS is not set +# CONFIG_JSMN_STRICT is not set +# end of jsmn + +# +# libsodium +# +# end of libsodium + +# +# 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_CORE_LOCKING 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_TIMERS_ONDEMAND=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=y +# 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_FORWARD is not set +# CONFIG_LWIP_STATS is not set +# CONFIG_LWIP_ETHARP_TRUST_IP_MAC is not set +CONFIG_LWIP_ESP_GRATUITOUS_ARP=y +CONFIG_LWIP_GARP_TMR_INTERVAL=60 +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 + +# +# 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_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_KEEP_CONNECTION_WHEN_IP_CHANGES 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_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_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 +# 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 v2.28.x related +# +# 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 +# end of mbedTLS v2.28.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 is not set +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_AES_USE_INTERRUPT=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_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_DHE_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_SSL3 is not set +CONFIG_MBEDTLS_SSL_PROTO_TLS1=y +CONFIG_MBEDTLS_SSL_PROTO_TLS1_1=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_X509_CHECK_KEY_USAGE=y +CONFIG_MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE=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_RC4_DISABLED=y +# CONFIG_MBEDTLS_RC4_ENABLED_NO_DEFAULT is not set +# CONFIG_MBEDTLS_RC4_ENABLED 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_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_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 +# CONFIG_MBEDTLS_SECURITY_RISKS is not set +# end of mbedTLS + +# +# mDNS +# +CONFIG_MDNS_MAX_SERVICES=10 +CONFIG_MDNS_TASK_PRIORITY=1 +CONFIG_MDNS_TASK_STACK_SIZE=4096 +# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_MDNS_TASK_AFFINITY_CPU0=y +# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set +CONFIG_MDNS_TASK_AFFINITY=0x0 +CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 +# CONFIG_MDNS_STRICT_MODE is not set +CONFIG_MDNS_TIMER_PERIOD_MS=100 +# CONFIG_MDNS_NETWORKING_SOCKET is not set +CONFIG_MDNS_MULTIPLE_INSTANCE=y +# end of mDNS + +# +# ESP-MQTT Configurations +# +CONFIG_MQTT_PROTOCOL_311=y +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 +# end of Newlib + +# +# NVS +# +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# end of NVS + +# +# OpenSSL +# +# CONFIG_OPENSSL_DEBUG is not set +CONFIG_OPENSSL_ERROR_STACK=y +# CONFIG_OPENSSL_ASSERT_DO_NOTHING is not set +CONFIG_OPENSSL_ASSERT_EXIT=y +# end of OpenSSL + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set +# end of OpenThread + +# +# 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 + +# +# 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_ROM_IMPL is not set +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_USE_LEGACY_IMPL 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 + +# +# Auto-detect flash chips +# +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=y +CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y +# 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 +# end of Websocket +# end of TCP Transport + +# +# TinyUSB Stack +# +# CONFIG_TINYUSB is not set +# end of TinyUSB Stack + +# +# 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 + +# +# USB-OTG +# +CONFIG_USB_OTG_SUPPORTED=y +CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 +CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y +# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set +# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set +# end of USB-OTG + +# +# 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 + +# +# 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 +# end of Wi-Fi Provisioning Manager + +# +# Supplicant +# +CONFIG_WPA_MBEDTLS_CRYPTO=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_SUITE_B_192 is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# end of Supplicant +# end of Component config + +# +# Compatibility options +# +# CONFIG_LEGACY_INCLUDE_COMMON_HEADERS is not set +# end of Compatibility options + +# Deprecated options for backward compatibility +CONFIG_TOOLPREFIX="xtensa-esp32s3-elf-" +# 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_9600B is not set +# CONFIG_MONITOR_BAUD_57600B is not set +CONFIG_MONITOR_BAUD_115200B=y +# CONFIG_MONITOR_BAUD_230400B is not set +# CONFIG_MONITOR_BAUD_921600B is not set +# CONFIG_MONITOR_BAUD_2MB is not set +# CONFIG_MONITOR_BAUD_OTHER is not set +CONFIG_MONITOR_BAUD_OTHER_VAL=115200 +CONFIG_MONITOR_BAUD=115200 +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# 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_DISABLE_GCC8_WARNINGS 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_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +CONFIG_ESP_SYSTEM_PD_FLASH=y +CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y +CONFIG_IPC_TASK_STACK_SIZE=1536 +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_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +# CONFIG_ESP32S2_PANIC_PRINT_HALT is not set +CONFIG_ESP32S2_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32S2_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32S2_PANIC_GDBSTUB is not set +CONFIG_ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP=y +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_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_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_TIMER_TASK_STACK_SIZE=3584 +# 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_MB_MASTER_TIMEOUT_MS_RESPOND=150 +CONFIG_MB_MASTER_DELAY_MS_CONVERT=200 +CONFIG_MB_QUEUE_LENGTH=20 +CONFIG_MB_SERIAL_TASK_STACK_SIZE=4096 +CONFIG_MB_SERIAL_BUF_SIZE=256 +CONFIG_MB_SERIAL_TASK_PRIO=10 +CONFIG_MB_CONTROLLER_SLAVE_ID_SUPPORT=y +CONFIG_MB_CONTROLLER_SLAVE_ID=0x00112233 +CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT=20 +CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE=20 +CONFIG_MB_CONTROLLER_STACK_SIZE=4096 +CONFIG_MB_EVENT_QUEUE_TIMEOUT=20 +# CONFIG_MB_TIMER_PORT_ENABLED is not set +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_L2_TO_L3_COPY is not set +# CONFIG_USE_ONLY_LWIP_SELECT 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_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set +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_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_USB_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/esp32_fw/src/CMakeLists.txt b/esp32_fw/src/CMakeLists.txt new file mode 100644 index 00000000..483bc0cf --- /dev/null +++ b/esp32_fw/src/CMakeLists.txt @@ -0,0 +1,6 @@ +# This file was automatically generated for projects +# without default 'CMakeLists.txt' file. + +FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*) + +idf_component_register(SRCS ${app_sources}) diff --git a/esp32_fw/src/flasher.cpp b/esp32_fw/src/flasher.cpp index 76100955..7343ea28 100644 --- a/esp32_fw/src/flasher.cpp +++ b/esp32_fw/src/flasher.cpp @@ -27,6 +27,9 @@ typedef enum { uint8_t *infoblock = nullptr; uint8_t *flashbuffer = nullptr; +static class ZBS_interface* zbs; + + // look for the latest version of the firmware file... It's supposed to be something like zigbeebase0003.bin String lookupFirmwareFile(uint16_t &version) { String filename; @@ -58,9 +61,9 @@ uint16_t getDeviceType() { uint8_t type29[8] = {0x7d, 0x22, 0xff, 0x02, 0xa4, 0x58, 0xf0, 0x90}; uint8_t type154[8] = {0xa1, 0x23, 0x22, 0x02, 0xa4, 0xc3, 0xe4, 0xf0}; uint8_t buffer[8] = {0}; - zbs.select_flash(0); + zbs->select_flash(0); for (uint8_t c = 0; c < 8; c++) { - buffer[c] = zbs.read_flash(0x08 + c); + buffer[c] = zbs->read_flash(0x08 + c); } if (memcmp(buffer, type29, 8) == 0) { return 0x3B10; @@ -73,10 +76,10 @@ uint16_t getDeviceType() { // extract original mac from firmware and make it 2 bytes longer based on info in settings.h uint64_t getOriginalTagMac() { - zbs.select_flash(0); + zbs->select_flash(0); uint8_t mac[8] = {0}; for (uint8_t c = 0; c < 6; c++) { - mac[c + 2] = zbs.read_flash(0xFC06 + c); + mac[c + 2] = zbs->read_flash(0xFC06 + c); } mac[0] = (uint8_t)(CUSTOM_MAC_HDR >> 8); mac[1] = (uint8_t)CUSTOM_MAC_HDR; @@ -96,10 +99,10 @@ uint64_t getOriginalTagMac() { // extract custom firmware mac from Infoblock uint64_t getInfoBlockMac() { - zbs.select_flash(1); + zbs->select_flash(1); uint8_t mac[8] = {0}; for (uint8_t c = 0; c < 8; c++) { - mac[c] = zbs.read_flash(0x10 + c); + mac[c] = zbs->read_flash(0x10 + c); } return *((uint64_t *)(mac)); } @@ -110,9 +113,9 @@ void readInfoBlock() { // allocate room for infopage infoblock = (uint8_t *)calloc(1024, 1); } - zbs.select_flash(1); // select info page + zbs->select_flash(1); // select info page for (uint16_t c = 0; c < 1024; c++) { - infoblock[c] = zbs.read_flash(c); + infoblock[c] = zbs->read_flash(c); } } @@ -121,13 +124,13 @@ void writeInfoBlock() { if (infoblock == nullptr) { return; } - zbs.select_flash(1); - zbs.erase_infoblock(); - zbs.select_flash(1); // select info page + zbs->select_flash(1); + zbs->erase_infoblock(); + zbs->select_flash(1); // select info page for (uint16_t c = 0; c < 1024; c++) { for (uint8_t i = 0; i < MAX_WRITE_ATTEMPTS; i++) { - zbs.write_flash(c, infoblock[c]); - if (zbs.read_flash(c) == infoblock[c]) { + zbs->write_flash(c, infoblock[c]); + if (zbs->read_flash(c) == infoblock[c]) { break; } } @@ -139,15 +142,15 @@ void writeFlashBlock(uint16_t size) { if (flashbuffer == nullptr) { return; } - zbs.select_flash(0); - zbs.erase_flash(); - zbs.select_flash(0); + zbs->select_flash(0); + zbs->erase_flash(); + zbs->select_flash(0); Serial.printf("Starting flash, size=%d\n", size); uint8_t i = 0; for (uint16_t c = 0; c < size; c++) { for (i = 0; i < MAX_WRITE_ATTEMPTS; i++) { - zbs.write_flash(c, flashbuffer[c]); - if (zbs.read_flash(c) == flashbuffer[c]) { + zbs->write_flash(c, flashbuffer[c]); + if (zbs->read_flash(c) == flashbuffer[c]) { break; } } @@ -165,11 +168,11 @@ void writeFlashBlock(uint16_t size) { void performDeviceFlash() { uint8_t interfaceWorking = 0; Serial.printf("Power cycling to get everything up and running...\n"); - zbs.set_power(0); + zbs->set_power(0); vTaskDelay(500 / portTICK_PERIOD_MS); - zbs.set_power(1); + zbs->set_power(1); vTaskDelay(500 / portTICK_PERIOD_MS); - interfaceWorking = zbs.begin(); + //interfaceWorking = zbs.begin(); if (!interfaceWorking) { Serial.print("I wasn't able to connect to a ZBS tag, please check wiring and definitions in the settings.h file.\n"); return; @@ -182,11 +185,11 @@ void performDeviceFlash() { if (*((uint64_t *)(mac)) == 0xFFFFFFFFFFFFFFFF) { // mac not set in infopage, get it from the original firmware *((uint64_t *)(mac)) = getOriginalTagMac(); - zbs.select_flash(1); + zbs->select_flash(1); for (uint8_t c = 0; c < 8; c++) { infoblock[0x17 - c] = mac[c]; // write mac directly to infoblock without erasing; the bytes should all be 0xFF anyway - zbs.write_flash(0x17 - c, mac[c]); + zbs->write_flash(0x17 - c, mac[c]); } } @@ -219,6 +222,6 @@ void performDeviceFlash() { infoblock = nullptr; free(flashbuffer); flashbuffer = nullptr; - zbs.reset(); - zbs.set_power(1); + zbs->reset(); + zbs->set_power(1); } diff --git a/esp32_fw/src/main.cpp b/esp32_fw/src/main.cpp index 9a4efe08..cbcd11fa 100644 --- a/esp32_fw/src/main.cpp +++ b/esp32_fw/src/main.cpp @@ -5,12 +5,13 @@ #include "contentmanager.h" #include "flasher.h" +#include "hal/wdt_hal.h" #include "makeimage.h" #include "pendingdata.h" #include "serial.h" #include "settings.h" -#include "soc/rtc_wdt.h" #include "tag_db.h" +#include "usbflasher.h" #include "web.h" void timeTask(void* parameter) { @@ -35,9 +36,26 @@ void setup() { Serial.begin(115200); Serial.print(">\n"); + psramInit(); + + Serial.println("\n\n##################################"); + Serial.printf("Internal Total heap %d, internal Free Heap %d\n", ESP.getHeapSize(), ESP.getFreeHeap()); + Serial.printf("SPIRam Total heap %d, SPIRam Free Heap %d\n", ESP.getPsramSize(), ESP.getFreePsram()); + Serial.printf("ChipRevision %d, Cpu Freq %d, SDK Version %s\n", ESP.getChipRevision(), ESP.getCpuFreqMHz(), ESP.getSdkVersion()); + Serial.printf("Flash Size %d, Flash Speed %d\n", ESP.getFlashChipSize(), ESP.getFlashChipSpeed()); + Serial.println("##################################\n\n"); + + Serial.println(ESP.getFreeHeap()); + + Serial.printf("Total heap: %d", ESP.getHeapSize()); + Serial.printf("Free heap: %d", ESP.getFreeHeap()); + Serial.printf("Total PSRAM: %d", ESP.getPsramSize()); + Serial.printf("Free PSRAM: %d", ESP.getFreePsram()); pinMode(ONBOARD_LED, OUTPUT); digitalWrite(ONBOARD_LED, HIGH); + xTaskCreate(usbFlasherTask, "flasher", 10000, NULL, configMAX_PRIORITIES - 10, NULL); + configTzTime("CET-1CEST,M3.5.0,M10.5.0/3", "0.nl.pool.ntp.org", "europe.pool.ntp.org", "time.nist.gov"); // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv @@ -46,7 +64,7 @@ void setup() { xTaskCreate(zbsRxTask, "zbsRX Process", 10000, NULL, 2, NULL); xTaskCreate(garbageCollection, "pending-data cleanup", 5000, NULL, 1, NULL); - xTaskCreate(webSocketSendProcess, "ws", 5000, NULL,configMAX_PRIORITIES-10, NULL); + xTaskCreate(webSocketSendProcess, "ws", 5000, NULL, configMAX_PRIORITIES - 10, NULL); xTaskCreate(timeTask, "timed tasks", 10000, NULL, 2, NULL); } diff --git a/esp32_fw/src/serial.cpp b/esp32_fw/src/serial.cpp index 9698faf3..0bcf61e6 100644 --- a/esp32_fw/src/serial.cpp +++ b/esp32_fw/src/serial.cpp @@ -231,7 +231,7 @@ extern uint8_t* getDataForFile(File* file); void zbsRxTask(void* parameter) { Serial1.begin(230400, SERIAL_8N1, RXD1, TXD1); - simplePowerOn(); + //simplePowerOn(); bool firstrun = true; Serial1.print("VER?"); @@ -250,7 +250,7 @@ void zbsRxTask(void* parameter) { //performDeviceFlash(); Serial.println("I wasn't able to connect to a ZBS tag, trying to reboot the tag."); Serial.println("If this problem persists, please check wiring and definitions in the settings.h file, and presence of the right firmware"); - simplePowerOn(); + //simplePowerOn(); wsErr("The AP tag crashed. Restarting tag, regenerating all pending info."); refreshAllPending(); } diff --git a/esp32_fw/src/usbflasher.cpp b/esp32_fw/src/usbflasher.cpp new file mode 100644 index 00000000..347e078a --- /dev/null +++ b/esp32_fw/src/usbflasher.cpp @@ -0,0 +1,348 @@ +#include + +#include "USB.h" +#include "settings.h" +#include "zbs_interface.h" + +USBCDC USBSerial; + +QueueHandle_t flasherCmdQueue; + +#define FLASHER_WAIT_A 0 +#define FLASHER_WAIT_T 1 +#define FLASHER_WAIT_CMD 2 +#define FLASHER_WAIT_LEN 3 +#define FLASHER_WAIT_DATA 4 +#define FLASHER_WAIT_CRCH 5 +#define FLASHER_WAIT_CRCL 6 + +struct flasherCommand { + uint8_t command = 0; + uint8_t len = 0; + uint8_t* data = nullptr; +}; + +void sendFlasherAnswer(uint8_t answer_cmd, uint8_t* ans_buff, uint8_t len) { + uint8_t* answer_buffer = (uint8_t*)calloc(2 + 2 + len + 2, 1); + if (answer_buffer == nullptr) return; + uint32_t CRC_value = 0xAB34; + answer_buffer[0] = 'A'; + answer_buffer[1] = 'T'; + answer_buffer[2] = answer_cmd; + CRC_value += answer_cmd; + answer_buffer[3] = len; + CRC_value += len; + for (int i = 0; i < len; i++) { + answer_buffer[4 + i] = ans_buff[i]; + CRC_value += ans_buff[i]; + } + answer_buffer[2 + 2 + len] = CRC_value >> 8; + answer_buffer[2 + 2 + len + 1] = CRC_value; + USBSerial.write(answer_buffer, 2 + 2 + len + 2); + free(answer_buffer); +} + +void flasherUartHandler(uint8_t* data, uint8_t len) { + static struct flasherCommand* cmd; + static uint8_t flasherSerialState = FLASHER_WAIT_A; + static uint8_t flasherCmdDataIndex = 0; + static uint16_t flasherCRC = 0xAB34; + static uint32_t flasherLastCmd = 0; + + if ((flasherSerialState != FLASHER_WAIT_A) && (millis() - flasherLastCmd >= 225)) { + flasherSerialState = FLASHER_WAIT_A; + } + + while (len--) { + uint8_t usbbyte = *(data++); + switch (flasherSerialState) { + case FLASHER_WAIT_A: + if (usbbyte == 'A') { + flasherSerialState = FLASHER_WAIT_T; + flasherLastCmd = millis(); + } + break; + case FLASHER_WAIT_T: + if (usbbyte == 'T') { + flasherSerialState = FLASHER_WAIT_CMD; + cmd = new flasherCommand; + flasherCRC = 0xAB34; + flasherCmdDataIndex = 0; + } else { + flasherSerialState = FLASHER_WAIT_A; + } + break; + case FLASHER_WAIT_CMD: + cmd->command = usbbyte; + flasherCRC += usbbyte; + flasherSerialState = FLASHER_WAIT_LEN; + break; + case FLASHER_WAIT_LEN: + flasherCRC += usbbyte; + if (usbbyte) { + cmd->len = usbbyte; + cmd->data = (uint8_t*)calloc(usbbyte, 1); + flasherSerialState = FLASHER_WAIT_DATA; + } else { + flasherSerialState = FLASHER_WAIT_CRCH; + } + break; + case FLASHER_WAIT_DATA: + flasherCRC += usbbyte; + cmd->data[flasherCmdDataIndex++] = usbbyte; + if (flasherCmdDataIndex == cmd->len) { + flasherSerialState = FLASHER_WAIT_CRCH; + } + break; + case FLASHER_WAIT_CRCH: + flasherCRC -= ((uint16_t)usbbyte << 8); + flasherSerialState = FLASHER_WAIT_CRCL; + break; + case FLASHER_WAIT_CRCL: + flasherCRC -= ((uint16_t)usbbyte); + if (flasherCRC) { + Serial.printf("CRC failed for flasher command :( %04X\n", flasherCRC); + cmd = nullptr; + } else { + BaseType_t queuestatus = xQueueSend(flasherCmdQueue, &cmd, 0); + if (queuestatus == pdFALSE) { + if (cmd->data != nullptr) free(cmd->data); + delete cmd; + } + cmd = nullptr; + } + flasherSerialState = FLASHER_WAIT_A; + break; + } + } +} + +static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { + if (event_base == ARDUINO_USB_EVENTS) { + arduino_usb_event_data_t* data = (arduino_usb_event_data_t*)event_data; + switch (event_id) { + case ARDUINO_USB_STARTED_EVENT: + Serial.println("USB PLUGGED"); + break; + case ARDUINO_USB_STOPPED_EVENT: + Serial.println("USB UNPLUGGED"); + break; + case ARDUINO_USB_SUSPEND_EVENT: + Serial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en); + break; + case ARDUINO_USB_RESUME_EVENT: + Serial.println("USB RESUMED"); + break; + + default: + break; + } + } else if (event_base == ARDUINO_USB_CDC_EVENTS) { + arduino_usb_cdc_event_data_t* data = (arduino_usb_cdc_event_data_t*)event_data; + switch (event_id) { + case ARDUINO_USB_CDC_CONNECTED_EVENT: + Serial.println("CDC CONNECTED"); + break; + case ARDUINO_USB_CDC_DISCONNECTED_EVENT: + Serial.println("CDC DISCONNECTED"); + break; + case ARDUINO_USB_CDC_LINE_STATE_EVENT: + Serial.printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts); + break; + case ARDUINO_USB_CDC_LINE_CODING_EVENT: + Serial.printf("CDC LINE CODING: bit_rate: %u, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity); + break; + case ARDUINO_USB_CDC_RX_EVENT: + // Serial.printf("CDC RX [%u]:", data->rx.len); + { + uint8_t buf[data->rx.len]; + size_t len = USBSerial.read(buf, data->rx.len); + flasherUartHandler(buf, len); + } + break; + case ARDUINO_USB_CDC_RX_OVERFLOW_EVENT: + Serial.printf("CDC RX Overflow of %d bytes", data->rx_overflow.dropped_bytes); + break; + + default: + break; + } + } +} + +void flasherTaskBegin() { + flasherCmdQueue = xQueueCreate(10, sizeof(struct flasherCommand*)); +#if ARDUINO_USB_MODE +#warning Wrong USB mode is in use, check settings in platformio.ini +#endif + USB.onEvent(usbEventCallback); + USBSerial.onEvent(usbEventCallback); + USBSerial.begin(); + USB.begin(); +} + +typedef enum { + CMD_GET_VERSION = 1, + CMD_RESET_ESP = 2, + CMD_ZBS_BEGIN = 10, + CMD_RESET_ZBS = 11, + CMD_SELECT_PAGE = 12, + CMD_SET_POWER = 13, + CMD_READ_RAM = 20, + CMD_WRITE_RAM = 21, + CMD_READ_FLASH = 22, + CMD_WRITE_FLASH = 23, + CMD_READ_SFR = 24, + CMD_WRITE_SFR = 25, + CMD_ERASE_FLASH = 26, + CMD_ERASE_INFOBLOCK = 27, + CMD_SAVE_MAC_FROM_FW = 40, + CMD_PASS_THROUGH = 50, +} ZBS_UART_PROTO; +uint32_t FLASHER_VERSION = 0x0000002F; + +static class ZBS_interface* zbs = nullptr; + +void processFlasherCommand(struct flasherCommand* cmd) { + uint8_t* tempbuffer; + uint8_t temp_buff[16]; + uint32_t spi_speed = 0; + static uint32_t curspeed = 0; + + switch (cmd->command) { + case CMD_GET_VERSION: + temp_buff[0] = FLASHER_VERSION >> 24; + temp_buff[1] = FLASHER_VERSION >> 16; + temp_buff[2] = FLASHER_VERSION >> 8; + temp_buff[3] = FLASHER_VERSION; + sendFlasherAnswer(cmd->command, temp_buff, 4); + break; + case CMD_RESET_ESP: + sendFlasherAnswer(cmd->command, NULL, 0); + delay(100); + ESP.restart(); + break; + case CMD_ZBS_BEGIN: + if (zbs != nullptr){ + delete zbs; + } + zbs = new ZBS_interface; + if (cmd->data[0] & 1) { + spi_speed = 1000000; + } else { + spi_speed = 8000000; + } + curspeed = spi_speed; + if (cmd->data[0] & 2) { + temp_buff[0] = zbs->begin(FLASHER_AP_SS, FLASHER_AP_CLK, FLASHER_AP_MOSI, FLASHER_AP_MISO, FLASHER_AP_RESET, FLASHER_AP_POWER, spi_speed); + } else { + temp_buff[0] = zbs->begin(FLASHER_EXT_SS, FLASHER_EXT_CLK, FLASHER_EXT_MOSI, FLASHER_EXT_MISO, FLASHER_EXT_RESET, FLASHER_EXT_POWER, spi_speed); + } + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_RESET_ZBS: + zbs->reset(); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_SELECT_PAGE: + temp_buff[0] = zbs->select_flash(cmd->data[0] ? 1 : 0); + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_SET_POWER: + zbs->set_power(cmd->data[0] ? 1 : 0); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_READ_RAM: + temp_buff[0] = zbs->read_ram(cmd->data[0]); + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_WRITE_RAM: + zbs->write_ram(cmd->data[0], cmd->data[1]); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_READ_FLASH: + tempbuffer = (uint8_t*)calloc(cmd->data[0], 1); + // cmd_buff[0] = len + // cmd_buff[1] << 8 | cmd_buff[2] = position + Serial.printf("Loading %d bytes from %04X \n", cmd->data[0], (cmd->data[1] << 8 | cmd->data[2])); + for (int i = 0; i < cmd->data[0]; i++) { + tempbuffer[i] = zbs->read_flash((cmd->data[1] << 8 | cmd->data[2]) + i); + } + sendFlasherAnswer(cmd->command, tempbuffer, cmd->data[0]); + free(tempbuffer); + break; + case CMD_WRITE_FLASH: + // cmd_buff[0] = len + // cmd_buff[1] << 8 | cmd_buff[2] = position + // cmd_buff[3+i] = data + if (cmd->data[0] >= (0xff - 3)) { // Len too high, only 0xFF - header len possible + temp_buff[0] = 0xEE; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + } + Serial.printf("Writing %d bytes to %04X \n", cmd->data[0], (cmd->data[1] << 8 | cmd->data[2])); + for (int i = 0; i < cmd->data[0]; i++) { + if (cmd->data[3 + i] != 0xff) { + for (uint8_t attempts = 0; attempts < 10; attempts++) { + zbs->write_flash((cmd->data[1] << 8 | cmd->data[2]) + i, cmd->data[3 + i]); + if (zbs->read_flash((cmd->data[1] << 8 | cmd->data[2]) + i) == cmd->data[3 + i]) { + goto flash_pass; + } + curspeed -= 100000; + zbs->setSpeed(curspeed); + } + flash_fail: + temp_buff[0] = 0; + Serial.print("!"); + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + flash_pass: + continue; + } + } + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + Serial.print("#"); + break; + case CMD_READ_SFR: + temp_buff[0] = zbs->read_sfr(cmd->data[0]); + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_WRITE_SFR: + zbs->write_sfr(cmd->data[0], cmd->data[1]); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_ERASE_FLASH: + zbs->erase_flash(); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_ERASE_INFOBLOCK: + zbs->erase_infoblock(); + temp_buff[0] = 1; + sendFlasherAnswer(cmd->command, temp_buff, 1); + break; + case CMD_SAVE_MAC_FROM_FW: + case CMD_PASS_THROUGH: + break; + } +} + +void usbFlasherTask(void* parameter) { + flasherTaskBegin(); + struct flasherCommand* cmd; + while (true) { + BaseType_t queuereceive = xQueueReceive(flasherCmdQueue, &cmd, portMAX_DELAY); + if (queuereceive == pdTRUE) { + processFlasherCommand(cmd); + if (cmd->data != nullptr) { + free(cmd->data); + } + delete cmd; + } + } +} \ No newline at end of file diff --git a/esp32_fw/src/zbs_interface.cpp b/esp32_fw/src/zbs_interface.cpp index 4996c8c9..7f5811cb 100644 --- a/esp32_fw/src/zbs_interface.cpp +++ b/esp32_fw/src/zbs_interface.cpp @@ -1,55 +1,72 @@ /* Autor: Aaron Christophel ATCnetz.de */ - #include "zbs_interface.h" #include +#include #include #include -#include "settings.h" - -void simplePowerOn() { - pinMode(ZBS_SS, INPUT); - pinMode(ZBS_CLK, INPUT); - pinMode(ZBS_MoSi, INPUT); - pinMode(ZBS_MiSo, INPUT); - pinMode(ZBS_Reset, OUTPUT); - digitalWrite(ZBS_Reset, HIGH); - zbs.set_power(0); - delay(500); - zbs.set_power(1); -} - -uint8_t ZBS_interface::begin() { - _SS_PIN = ZBS_SS; - _CLK_PIN = ZBS_CLK; - _MOSI_PIN = ZBS_MoSi; - _MISO_PIN = ZBS_MiSo; - _RESET_PIN = ZBS_Reset; - +uint8_t ZBS_interface::begin(uint8_t SS, uint8_t CLK, uint8_t MOSI, uint8_t MISO, uint8_t RESET, uint8_t POWER, uint32_t spi_speed) { + _SS_PIN = SS; + _CLK_PIN = CLK; + _MOSI_PIN = MOSI; + _MISO_PIN = MISO; + _RESET_PIN = RESET; + _POWER_PIN = POWER; pinMode(_SS_PIN, OUTPUT); + pinMode(_RESET_PIN, OUTPUT); + digitalWrite(_SS_PIN, HIGH); + digitalWrite(_RESET_PIN, HIGH); + set_power(ZBS_ON); pinMode(_CLK_PIN, OUTPUT); pinMode(_MOSI_PIN, OUTPUT); pinMode(_MISO_PIN, INPUT); - pinMode(_RESET_PIN, OUTPUT); - digitalWrite(_SS_PIN, HIGH); digitalWrite(_CLK_PIN, LOW); digitalWrite(_MOSI_PIN, HIGH); - digitalWrite(_RESET_PIN, HIGH); - set_power(ZBS_ON); + if(!spi)spi = new SPIClass(HSPI); + + spiSettings = SPISettings(spi_speed, MSBFIRST, SPI_MODE0); + spi_ready = 0; + + if (spi_speed != 8000000) { + after_byte_delay = 10; + } else { + after_byte_delay = 10; + } enable_debug(); return check_connection(); } +void ZBS_interface::setSpeed(uint32_t speed){ + spiSettings = SPISettings(speed, MSBFIRST, SPI_MODE0); +} + +ZBS_interface::~ZBS_interface(){ + delete spi; +} void ZBS_interface::set_power(uint8_t state) { - pinMode(ZBS_POWER1, INPUT); - pinMode(ZBS_POWER2, INPUT); - digitalWrite(ZBS_POWER1, state); - digitalWrite(ZBS_POWER2, state); - pinMode(ZBS_POWER1, OUTPUT); - pinMode(ZBS_POWER2, OUTPUT); + if (_POWER_PIN != -1) { + if (state) { + ledcSetup(0, 20000, 8); + ledcWrite(0, 255); + ledcAttachPin(_POWER_PIN, 0); + pinMode(_POWER_PIN, OUTPUT); + for (uint8_t c = 254; c != 0xFF; c--) { + ledcWrite(0, c); + vTaskDelay(1 / portTICK_PERIOD_MS); + } + digitalWrite(_POWER_PIN, LOW); + + ledcDetachPin(_POWER_PIN); + digitalWrite(_POWER_PIN, LOW); + + } else { + pinMode(_POWER_PIN, OUTPUT); + digitalWrite(_POWER_PIN, HIGH); + } + } } void ZBS_interface::enable_debug() { @@ -81,6 +98,7 @@ void ZBS_interface::enable_debug() { } void ZBS_interface::reset() { + spi->end(); pinMode(_SS_PIN, INPUT); pinMode(_CLK_PIN, INPUT); pinMode(_MOSI_PIN, INPUT); @@ -96,18 +114,14 @@ void ZBS_interface::reset() { void ZBS_interface::send_byte(uint8_t data) { digitalWrite(_SS_PIN, LOW); delayMicroseconds(5); - for (int i = 0; i < 8; i++) { - if (data & 0x80) { - digitalWrite(_MOSI_PIN, HIGH); - } else { - digitalWrite(_MOSI_PIN, LOW); - } - delayMicroseconds(ZBS_spi_delay); - digitalWrite(_CLK_PIN, HIGH); - delayMicroseconds(ZBS_spi_delay); - digitalWrite(_CLK_PIN, LOW); - data <<= 1; + if (!spi_ready) { + spi_ready = 1; + spi->begin(_CLK_PIN, _MISO_PIN, _MOSI_PIN); } + spi->beginTransaction(spiSettings); + spi->transfer(data); + spi->endTransaction(); + delayMicroseconds(2); digitalWrite(_SS_PIN, HIGH); } @@ -116,16 +130,13 @@ uint8_t ZBS_interface::read_byte() { uint8_t data = 0x00; digitalWrite(_SS_PIN, LOW); delayMicroseconds(5); - for (int i = 0; i < 8; i++) { - data <<= 1; - if (digitalRead(_MISO_PIN)) { - data |= 1; - } - delayMicroseconds(ZBS_spi_delay); - digitalWrite(_CLK_PIN, HIGH); - delayMicroseconds(ZBS_spi_delay); - digitalWrite(_CLK_PIN, LOW); + if (!spi_ready) { + spi_ready = 1; + spi->begin(_CLK_PIN, _MISO_PIN, _MOSI_PIN); } + spi->beginTransaction(spiSettings); + data = spi->transfer(0xff); + spi->endTransaction(); delayMicroseconds(2); digitalWrite(_SS_PIN, HIGH); return data; @@ -135,7 +146,7 @@ void ZBS_interface::write_byte(uint8_t cmd, uint8_t addr, uint8_t data) { send_byte(cmd); send_byte(addr); send_byte(data); - delay(1); + delayMicroseconds(after_byte_delay); } uint8_t ZBS_interface::read_byte(uint8_t cmd, uint8_t addr) { @@ -143,7 +154,7 @@ uint8_t ZBS_interface::read_byte(uint8_t cmd, uint8_t addr) { send_byte(cmd); send_byte(addr); data = read_byte(); - delay(1); + delayMicroseconds(after_byte_delay); return data; } @@ -152,7 +163,7 @@ void ZBS_interface::write_flash(uint16_t addr, uint8_t data) { send_byte(addr >> 8); send_byte(addr); send_byte(data); - delay(1); + delayMicroseconds(after_byte_delay); } uint8_t ZBS_interface::read_flash(uint16_t addr) { @@ -161,7 +172,7 @@ uint8_t ZBS_interface::read_flash(uint16_t addr) { send_byte(addr >> 8); send_byte(addr); data = read_byte(); - delay(1); + delayMicroseconds(after_byte_delay); return data; } @@ -210,5 +221,3 @@ void ZBS_interface::erase_infoblock() { send_byte(0x00); delay(100); } - -ZBS_interface zbs;