Browse Source

httpd implementation - wip

Sebastien 5 years ago
parent
commit
d4576bbdd4

+ 102 - 90
.cproject

@@ -203,7 +203,7 @@
                 				
                 <extensions>
                     					
-                    <extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser"/>
+                    <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
                     					
                     <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
                     					
@@ -225,57 +225,33 @@
                     					
                     <folderInfo id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291." name="/" resourcePath="">
                         						
-                        <toolChain id="cdt.managedbuild.toolchain.gnu.cygwin.base.1435070946" name="Cygwin GCC" superClass="cdt.managedbuild.toolchain.gnu.cygwin.base">
+                        <toolChain id="cdt.managedbuild.toolchain.gnu.cross.base.1464144824" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.base">
                             							
-                            <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.Cygwin_PE" id="cdt.managedbuild.target.gnu.platform.cygwin.base.1190062192" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.cygwin.base"/>
+                            <option id="cdt.managedbuild.option.gnu.cross.prefix.979125389" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
                             							
-                            <builder arguments="c:/msys32/opt/esp-idf/tools/windows/eclipse_make.py" buildPath="${workspace_loc:/squeezelite-esp32}" command="python" id="cdt.managedbuild.target.gnu.builder.cygwin.base.369581443" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" stopOnErr="true" superClass="cdt.managedbuild.target.gnu.builder.cygwin.base">
-                                								
-                                <outputEntries>
-                                    									
-                                    <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
-                                    								
-                                </outputEntries>
-                                							
-                            </builder>
+                            <option id="cdt.managedbuild.option.gnu.cross.path.982723535" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.assembler.cygwin.base.1072396116" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.cygwin.base">
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.402752019" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
-                                    									
-                                    <listOptionValue builtIn="false" value="&quot;${workspace_loc:/squeezelite-esp32/build/include}&quot;"/>
-                                    								
-                                </option>
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.270614468" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                							
-                            </tool>
+                            <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.640456368" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.archiver.cygwin.base.530059524" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.cygwin.base"/>
+                            <builder arguments="eclipse_make_wrapper.py" buildPath="${workspace_loc:/squeezelite-esp32}" command="python" id="cdt.managedbuild.builder.gnu.cross.715117345" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.374672233" name="Cygwin C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base">
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.cpp.compiler.option.preprocessor.def.1772207570" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.45996168" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
                                 								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.cpp.compiler.option.include.paths.1095611931" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"/>
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.598708441" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin"/>
+                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.234459126" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
                                 							
                             </tool>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.336308120" name="Cygwin C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.cygwin.base">
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.c.compiler.option.include.paths.1101820056" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.872516700" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
                                 								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.2132792279" superClass="cdt.managedbuild.tool.gnu.c.compiler.input.cygwin"/>
+                                <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1853060964" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
                                 							
                             </tool>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.c.linker.cygwin.base.2029616393" name="Cygwin C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin.base"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.452999895" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.base.1857989053" name="Cygwin C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.base">
+                            <tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.247298679" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
                                 								
-                                <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.666849419" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1690819664" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
                                     									
                                     <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
                                     									
@@ -284,6 +260,20 @@
                                 </inputType>
                                 							
                             </tool>
+                            							
+                            <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1994611338" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
+                            							
+                            <tool id="cdt.managedbuild.tool.gnu.cross.assembler.830657531" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
+                                								
+                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.2023142524" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+                                    									
+                                    <listOptionValue builtIn="false" value="&quot;${workspace_loc:/squeezelite-esp32/build/include}&quot;"/>
+                                    								
+                                </option>
+                                								
+                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.529295" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                							
+                            </tool>
                             						
                         </toolChain>
                         					
@@ -297,21 +287,15 @@
             		
         </cconfiguration>
         		
-        <cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736">
+        <cconfiguration id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873">
             			
-            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736" moduleId="org.eclipse.cdt.core.settings" name="squeezelite_windows">
-                				
-                <macros>
-                    					
-                    <stringMacro name="RECOVERY_APPLICATION" type="VALUE_TEXT" value="0"/>
-                    				
-                </macros>
+            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873" moduleId="org.eclipse.cdt.core.settings" name="squeezelite_windows">
                 				
                 <externalSettings/>
                 				
                 <extensions>
                     					
-                    <extension id="org.eclipse.cdt.core.Cygwin_PE" point="org.eclipse.cdt.core.BinaryParser"/>
+                    <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
                     					
                     <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
                     					
@@ -329,47 +313,37 @@
             			
             <storageModule moduleId="cdtBuildSystem" version="4.0.0">
                 				
-                <configuration artifactName="${ProjName}" buildProperties="" description="building squeezelite app in windows" id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736" name="squeezelite_windows" optionalBuildProperties="" parent="org.eclipse.cdt.build.core.emptycfg">
+                <configuration artifactName="${ProjName}" buildProperties="" description="Squeezelite build under windows" id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873" name="squeezelite_windows" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="org.eclipse.cdt.build.core.emptycfg">
                     					
-                    <folderInfo id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736." name="/" resourcePath="">
+                    <folderInfo id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873." name="/" resourcePath="">
                         						
-                        <toolChain id="cdt.managedbuild.toolchain.gnu.cygwin.base.1749450260" name="Cygwin GCC" superClass="cdt.managedbuild.toolchain.gnu.cygwin.base">
+                        <toolChain id="cdt.managedbuild.toolchain.gnu.cross.base.1143323191" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.base">
                             							
-                            <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.Cygwin_PE" id="cdt.managedbuild.target.gnu.platform.cygwin.base.1830783239" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.cygwin.base"/>
+                            <option id="cdt.managedbuild.option.gnu.cross.prefix.806261097" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix"/>
                             							
-                            <builder arguments="${IDF_PATH}/tools/windows/eclipse_make.py" command="python" enabledIncrementalBuild="false" id="cdt.managedbuild.target.gnu.builder.cygwin.base.16407419" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.cygwin.base"/>
+                            <option id="cdt.managedbuild.option.gnu.cross.path.352828918" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.assembler.cygwin.base.343234684" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.cygwin.base">
-                                								
-                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1149757934" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                							
-                            </tool>
+                            <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.93400768" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.archiver.cygwin.base.1424416364" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.cygwin.base"/>
+                            <builder arguments="eclipse_make_wrapper.py" buildPath="${workspace_loc:/squeezelite-esp32}" command="python" id="cdt.managedbuild.builder.gnu.cross.633507750" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.1318127751" name="Cygwin C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base">
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.cpp.compiler.option.preprocessor.def.412733367" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.c.compiler.1138084010" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler">
                                 								
-                                <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1066196867" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin"/>
+                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.58737469" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
                                 							
                             </tool>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.1943976795" name="Cygwin C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.cygwin.base">
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.c.compiler.option.include.paths.1485056168" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"/>
-                                								
-                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="gnu.c.compiler.option.preprocessor.def.symbols.853026888" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.537223876" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler">
                                 								
-                                <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.995286763" superClass="cdt.managedbuild.tool.gnu.c.compiler.input.cygwin"/>
+                                <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1211104770" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
                                 							
                             </tool>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.c.linker.cygwin.base.1006773344" name="Cygwin C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin.base"/>
+                            <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.2129740452" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/>
                             							
-                            <tool id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.base.173885572" name="Cygwin C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.base">
+                            <tool id="cdt.managedbuild.tool.gnu.cross.cpp.linker.904101475" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
                                 								
-                                <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.260247800" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1222839230" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
                                     									
                                     <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
                                     									
@@ -378,6 +352,20 @@
                                 </inputType>
                                 							
                             </tool>
+                            							
+                            <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1805191647" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/>
+                            							
+                            <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1802643727" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler">
+                                								
+                                <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.2096826806" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+                                    									
+                                    <listOptionValue builtIn="false" value="&quot;${workspace_loc:/squeezelite-esp32/build/include}&quot;"/>
+                                    								
+                                </option>
+                                								
+                                <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1293405027" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                							
+                            </tool>
                             						
                         </toolChain>
                         					
@@ -493,121 +481,145 @@
         		
         <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.1067614858;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.1865841553;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.1383814557">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.1943976795;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.995286763">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.839256934;cdt.managedbuild.toolchain.gnu.cross.base.293933348.839256934.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.40066190;cdt.managedbuild.tool.gnu.cpp.compiler.input.773825889">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.374672233;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.598708441">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348;cdt.managedbuild.toolchain.gnu.cross.base.293933348.949515869;cdt.managedbuild.tool.gnu.cross.c.compiler.924305212;cdt.managedbuild.tool.gnu.c.compiler.input.851339966">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.1067614858;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.410547198;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1499974240">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.1943976795;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.995286763">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.c.compiler.45996168;cdt.managedbuild.tool.gnu.c.compiler.input.234459126">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1273482118;cdt.managedbuild.tool.gnu.cpp.compiler.input.553723389">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.211315976;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.857914729">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1907231332;cdt.managedbuild.tool.gnu.cpp.compiler.input.604467026">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873.;cdt.managedbuild.tool.gnu.cross.c.compiler.1138084010;cdt.managedbuild.tool.gnu.c.compiler.input.58737469">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1722031516;cdt.managedbuild.tool.gnu.cpp.compiler.input.2073997022">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1476804786;cdt.managedbuild.toolchain.gnu.cross.base.1476804786.1800826258;cdt.managedbuild.tool.gnu.cross.cpp.compiler.254690821;cdt.managedbuild.tool.gnu.cpp.compiler.input.1365876654">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.374672233;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.598708441">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.537223876;cdt.managedbuild.tool.gnu.cpp.compiler.input.1211104770">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.c.compiler.1302011176;cdt.managedbuild.tool.gnu.c.compiler.input.539301587">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.872516700;cdt.managedbuild.tool.gnu.cpp.compiler.input.1853060964">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.1067614858;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.410547198;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1499974240">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.336308120;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.2132792279">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cross.c.compiler.824219909;cdt.managedbuild.tool.gnu.c.compiler.input.644208200">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.1067614858;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.1865841553;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.1383814557">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.211315976;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.857914729">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.839256934;cdt.managedbuild.toolchain.gnu.cross.base.293933348.839256934.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.40066190;cdt.managedbuild.tool.gnu.cpp.compiler.input.773825889">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1943329896;cdt.managedbuild.toolchain.gnu.cross.base.1943329896.30011915;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1749746745;cdt.managedbuild.tool.gnu.cpp.compiler.input.1914005798">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348;cdt.managedbuild.toolchain.gnu.cross.base.293933348.949515869;cdt.managedbuild.tool.gnu.cross.c.compiler.924305212;cdt.managedbuild.tool.gnu.c.compiler.input.851339966">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1476804786;cdt.managedbuild.toolchain.gnu.cross.base.1476804786.1800826258;cdt.managedbuild.tool.gnu.cross.cpp.compiler.254690821;cdt.managedbuild.tool.gnu.cpp.compiler.input.1365876654">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1273482118;cdt.managedbuild.tool.gnu.cpp.compiler.input.553723389">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348;cdt.managedbuild.toolchain.gnu.cross.base.293933348.949515869;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1689301712;cdt.managedbuild.tool.gnu.cpp.compiler.input.1117032298">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1907231332;cdt.managedbuild.tool.gnu.cpp.compiler.input.604467026">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1943329896;cdt.managedbuild.toolchain.gnu.cross.base.1943329896.30011915;cdt.managedbuild.tool.gnu.cross.c.compiler.2083405506;cdt.managedbuild.tool.gnu.c.compiler.input.404320567">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1722031516;cdt.managedbuild.tool.gnu.cpp.compiler.input.2073997022">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.145410566;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1181636367">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.cross.c.compiler.1302011176;cdt.managedbuild.tool.gnu.c.compiler.input.539301587">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.1318127751;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1066196867">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cross.c.compiler.824219909;cdt.managedbuild.tool.gnu.c.compiler.input.644208200">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1476804786;cdt.managedbuild.toolchain.gnu.cross.base.1476804786.1800826258;cdt.managedbuild.tool.gnu.cross.c.compiler.1502936757;cdt.managedbuild.tool.gnu.c.compiler.input.1614739014">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1943329896;cdt.managedbuild.toolchain.gnu.cross.base.1943329896.30011915;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1749746745;cdt.managedbuild.tool.gnu.cpp.compiler.input.1914005798">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		
         </scannerConfigBuildInfo>
         		
-        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.;cdt.managedbuild.tool.gnu.c.compiler.cygwin.base.336308120;cdt.managedbuild.tool.gnu.c.compiler.input.cygwin.2132792279">
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348;cdt.managedbuild.toolchain.gnu.cross.base.293933348.949515869;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1689301712;cdt.managedbuild.tool.gnu.cpp.compiler.input.1117032298">
+            			
+            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+            		
+        </scannerConfigBuildInfo>
+        		
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1943329896;cdt.managedbuild.toolchain.gnu.cross.base.1943329896.30011915;cdt.managedbuild.tool.gnu.cross.c.compiler.2083405506;cdt.managedbuild.tool.gnu.c.compiler.input.404320567">
+            			
+            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+            		
+        </scannerConfigBuildInfo>
+        		
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707;cdt.managedbuild.toolchain.gnu.cygwin.base.58932738.859326707.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.145410566;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1181636367">
+            			
+            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+            		
+        </scannerConfigBuildInfo>
+        		
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736;cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736.;cdt.managedbuild.tool.gnu.cpp.compiler.cygwin.base.1318127751;cdt.managedbuild.tool.gnu.cpp.compiler.input.cygwin.1066196867">
+            			
+            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+            		
+        </scannerConfigBuildInfo>
+        		
+        <scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.cross.base.1476804786;cdt.managedbuild.toolchain.gnu.cross.base.1476804786.1800826258;cdt.managedbuild.tool.gnu.cross.c.compiler.1502936757;cdt.managedbuild.tool.gnu.c.compiler.input.1614739014">
             			
             <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
             		

+ 3 - 0
.gitmodules

@@ -5,3 +5,6 @@
 [submodule "esp-dsp"]
 	path = esp-dsp
 	url = https://github.com/philippe44/esp-dsp
+[submodule "components/esp-dsp"]
+	path = components/esp-dsp
+	url = https://github.com/philippe44/esp-dsp.git

+ 6 - 0
.project

@@ -6,6 +6,11 @@
 		<project>esp-idf</project>
 	</projects>
 	<buildSpec>
+		<buildCommand>
+			<name>org.python.pydev.PyDevBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
 			<triggers>clean,full,incremental,</triggers>
@@ -24,5 +29,6 @@
 		<nature>org.eclipse.cdt.core.ccnature</nature>
 		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
 		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>org.python.pydev.pythonNature</nature>
 	</natures>
 </projectDescription>

+ 5 - 0
.pydevproject

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?eclipse-pydev version="1.0"?><pydev_project>
+    <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+    <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
+</pydev_project>

+ 4 - 4
.settings/language.settings.xml

@@ -57,7 +57,7 @@
             			
             <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
             			
-            <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="xtensa-esp32-elf-(gcc|g\+\+|c\+\+|cc|cpp|clang)" prefer-non-shared="true" resource-scope="per-folder"/>
+            <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="xtensa-esp32-elf-(gcc|g\+\+|c\+\+|cc|cpp|clang)" prefer-non-shared="true" resource-scope="per-project"/>
             			
             <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="true" env-hash="1307847274017589925" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="xtensa-esp32-elf-gcc ${FLAGS} -std=c++11 -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
                 				
@@ -73,7 +73,7 @@
         	
     </configuration>
     	
-    <configuration id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736" name="squeezelite_windows">
+    <configuration id="cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873" name="squeezelite_windows">
         		
         <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
             			
@@ -81,9 +81,9 @@
             			
             <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
             			
-            <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="xtensa-esp32-elf-(gcc|g\+\+|c\+\+|cc|cpp|clang)" prefer-non-shared="true" resource-scope="per-project"/>
+            <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser" keep-relative-paths="false" name="CDT GCC Build Output Parser" parameter="xtensa-esp32-elf-(gcc|g\+\+|c\+\+|cc|cpp|clang)" prefer-non-shared="true" resource-scope="per-file"/>
             			
-            <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1766868238676867652" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="xtensa-esp32-elf-gcc ${FLAGS} -std=c++11 -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+            <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="true" env-hash="1307847274017589925" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="xtensa-esp32-elf-gcc ${FLAGS} -std=c++11 -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
                 				
                 <language-scope id="org.eclipse.cdt.core.gcc"/>
                 				

+ 21 - 1
.settings/org.eclipse.cdt.core.prefs

@@ -24,6 +24,26 @@ environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1476804786/PATH/op
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1476804786/PATH/value=C\:/msys2/opt/xtensa-esp32-elf/bin;C\:/jdk-12.0.2/bin/server;C\:/jdk-12.0.2/bin;C\:\\Windows\\system32;C\:\\Windows;C\:\\Windows\\System32\\Wbem;C\:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C\:\\Program Files\\NVIDIA Corporation\\NVIDIA NvDLISR;C\:\\jdk-12.0.2\\bin;C\:\\Program Files\\PuTTY\\;C\:\\Program Files (x86)\\HP\\IdrsOCR_15.2.10.1114\\;C\:\\eclipse
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1476804786/append=true
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1476804786/appendContributed=true
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/BATCH_BUILD/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/BATCH_BUILD/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/BATCH_BUILD/value=1
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/EXTRA_CPPFLAGS/delimiter=;
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/EXTRA_CPPFLAGS/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/EXTRA_CPPFLAGS/value=-DRECOVERY_APPLICATION\=0
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/IDF_PATH/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/IDF_PATH/operation=replace
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/IDF_PATH/value=c\:/msys32/opt/esp-idf
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PATH/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PATH/operation=replace
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PATH/value=c\:\\msys32\\opt\\openocd-esp32\\bin;c\:\\msys32\\opt\\xtensa-esp32-elf\\bin\\;c\:\\msys32\\mingw32\\bin;C\:\\msys32\\usr\\bin;c\:\\Python27;C\:\\msys32\\usr\\bin\\vendor_perl;C\:\\msys32\\usr\\bin\\core_perl
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_NAME/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_NAME/operation=replace
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_NAME/value=squeezelite
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_VER/delimiter=\:
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_VER/operation=append
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/PROJECT_VER/value=custom
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/append=true
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.1876142873/appendContributed=true
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736/BATCH_BUILD/delimiter=\:
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736/BATCH_BUILD/operation=append
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291.395881736/BATCH_BUILD/value=1
@@ -48,7 +68,7 @@ environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.16039962
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/BATCH_BUILD/operation=append
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/BATCH_BUILD/value=1
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/EXTRA_CPPFLAGS/delimiter=;
-environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/EXTRA_CPPFLAGS/operation=replace
+environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/EXTRA_CPPFLAGS/operation=append
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/EXTRA_CPPFLAGS/value=-DRECOVERY_APPLICATION\=1
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/IDF_PATH/delimiter=\:
 environment/project/cdt.managedbuild.toolchain.gnu.cross.base.293933348.1603996291/IDF_PATH/operation=replace

+ 4 - 4
Makefile

@@ -10,12 +10,12 @@
 
 
 #recovery: PROJECT_NAME:=recovery.$(PROJECT_CONFIG_TARGET)
-#recovery: CPPFLAGS+=-DRECOVERY_APPLICATION=1
+#recovery: EXTRA_CPPFLAGS+=-DRECOVERY_APPLICATION=1
 
 PROJECT_NAME?=squeezelite
-CPPFLAGS+= -Wno-error=maybe-uninitialized \
-	-I$(PROJECT_PATH)/main
-EXTRA_COMPONENT_DIRS := esp-dsp
+EXTRA_CPPFLAGS+= -Wno-error=maybe-uninitialized \
+			-I$(PROJECT_PATH)/main
+
 include $(IDF_PATH)/make/project.mk 
 
 # for future gcc version, this could be needed: CPPFLAGS+= -Wno-error=format-overflow -Wno-error=stringop-truncation

+ 1 - 1
components/codecs/component.mk

@@ -21,6 +21,6 @@ COMPONENT_ADD_LDFLAGS=-l$(COMPONENT_NAME) 	\
 	#$(COMPONENT_PATH)/lib/libesp-tremor.a
 	#$(COMPONENT_PATH)/lib/libesp-ogg-container.a
 	
-
+COMPONENT_ADD_INCLUDEDIRS := /inc
 	
 	

+ 2 - 2
components/config/config.c

@@ -71,7 +71,7 @@ void config_set_entry_changed_flag(cJSON * entry, cJSON_bool flag);
 #if RECOVERY_APPLICATION==0
 static void * malloc_fn(size_t sz){
 
-	void * ptr = heap_caps_malloc(sz, MALLOC_CAP_SPIRAM);
+	void * ptr = heap_caps_malloc(sz, MALLOC_CAP_SPIRAM |MALLOC_CAP_8BIT);
 	if(ptr==NULL){
 		ESP_LOGE(TAG,"malloc_fn:  unable to allocate memory!");
 	}
@@ -681,7 +681,7 @@ char * config_alloc_get_json(bool bFormatted){
 	config_unlock();
 	return json_buffer;
 }
-esp_err_t config_set_value(nvs_type_t nvs_type, const char *key, void * value){
+esp_err_t config_set_value(nvs_type_t nvs_type, const char *key, const void * value){
 	esp_err_t result = ESP_OK;
 	if(!config_lock(LOCK_MAX_WAIT/portTICK_PERIOD_MS)){
 			ESP_LOGE(TAG, "Unable to lock config after %d ms",LOCK_MAX_WAIT);

+ 1 - 1
components/config/config.h

@@ -39,6 +39,6 @@ void config_set_default(nvs_type_t type, const char *key, void * default_value,
 void * config_alloc_get(nvs_type_t nvs_type, const char *key) ;
 bool wait_for_commit();
 char * config_alloc_get_json(bool bFormatted);
-esp_err_t config_set_value(nvs_type_t nvs_type, const char *key, void * value);
+esp_err_t config_set_value(nvs_type_t nvs_type, const char *key, const void * value);
 nvs_type_t  config_get_item_type(cJSON * entry);
 void * config_safe_alloc_get_entry_value(nvs_type_t nvs_type, cJSON * entry);

+ 0 - 0
esp-dsp → components/esp-dsp


+ 2 - 0
components/raop/component.mk

@@ -11,3 +11,5 @@ CFLAGS += -fstack-usage\
 	-I$(PROJECT_PATH)/components/tools	\
 	-I$(PROJECT_PATH)/components/codecs/inc/alac \
 	-I$(PROJECT_PATH)/main/	
+COMPONENT_ADD_INCLUDEDIRS := .
+COMPONENT_SRCDIRS := . 

+ 119 - 30
components/services/messaging.c

@@ -19,56 +19,107 @@
  */
 
 const static char tag[] = "messaging";
-
+typedef struct {
+	struct messaging_list_t * next;
+	char * subscriber_name;
+	size_t max_count;
+	RingbufHandle_t buf_handle;
+} messaging_list_t;
 static messaging_list_t top;
+
+
+messaging_list_t * get_struct_ptr(messaging_handle_t handle){
+	return (messaging_list_t *)handle;
+}
+messaging_handle_t  get_handle_ptr(messaging_list_t * handle){
+	return (messaging_handle_t )handle;
+}
 RingbufHandle_t messaging_create_ring_buffer(uint8_t max_count){
 	RingbufHandle_t buf_handle = NULL;
-	StaticRingbuffer_t *buffer_struct = (StaticRingbuffer_t *)heap_caps_malloc(sizeof(StaticRingbuffer_t), MALLOC_CAP_SPIRAM);
+	StaticRingbuffer_t *buffer_struct = malloc(sizeof(StaticRingbuffer_t));
 	if (buffer_struct != NULL) {
 		size_t buf_size = (size_t )(sizeof(single_message_t)+8)*(size_t )(max_count>0?max_count:5); // no-split buffer requires an additional 8 bytes
-		uint8_t *buffer_storage = (uint8_t *)heap_caps_malloc(buf_size, MALLOC_CAP_SPIRAM);
+		uint8_t *buffer_storage = (uint8_t *)heap_caps_malloc(buf_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 		if (buffer_storage== NULL) {
-			ESP_LOGE(tag,"Failed to allocate memory for messaging ring buffer !");
+			ESP_LOGE(tag,"buff alloc failed");
 		}
 		else {
 			buf_handle = xRingbufferCreateStatic(buf_size, RINGBUF_TYPE_NOSPLIT, buffer_storage, buffer_struct);
-			if (buf_handle == NULL) {
-				ESP_LOGE(tag,"Failed to create messaging ring buffer !");
-			}
 		}
 	}
 	else {
-		ESP_LOGE(tag,"Failed to create ring buffer for messaging!");
+		ESP_LOGE(tag,"ringbuf alloc failed");
 	}
 	return buf_handle;
 }
+void messaging_fill_messages(messaging_list_t * target_subscriber){
+	single_message_t * message=NULL;
+    UBaseType_t uxItemsWaiting;
 
-RingbufHandle_t messaging_register_subscriber(uint8_t max_count, char * name){
+    vRingbufferGetInfo(top.buf_handle, NULL, NULL, NULL, NULL, &uxItemsWaiting);
+    for(size_t i=0;i<uxItemsWaiting;i++){
+    	message= messaging_retrieve_message(top.buf_handle);
+    	if(message){
+			//re-post to original queue so it is available to future subscribers
+			messaging_post_to_queue(get_handle_ptr(&top), message, sizeof(single_message_t));
+			// post to new subscriber
+			messaging_post_to_queue(get_handle_ptr(target_subscriber) , message, sizeof(single_message_t));
+			FREE_AND_NULL(message);
+    	}
+    }
+}
+messaging_handle_t messaging_register_subscriber(uint8_t max_count, char * name){
 	messaging_list_t * cur=&top;
 	while(cur->next){
-		cur = cur->next;
+		cur = get_struct_ptr(cur->next);
 	}
-	cur->next=heap_caps_malloc(sizeof(messaging_list_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
+	cur->next=heap_caps_malloc(sizeof(messaging_list_t), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 	if(!cur->next){
-		ESP_LOGE(tag,"Failed to allocate messaging subscriber entry!");
+		ESP_LOGE(tag,"subscriber alloc failed");
 		return NULL;
 	}
 	memset(cur->next,0x00,sizeof(messaging_list_t));
-	cur = cur->next;
+	cur = get_struct_ptr(cur->next);
+	cur->max_count=max_count;
+	cur->subscriber_name=strdup(name);
 	cur->buf_handle = messaging_create_ring_buffer(max_count);
-	strncpy(cur->subscriber_name,name,sizeof(cur->subscriber_name));
-
+	if(cur->buf_handle){
+		messaging_fill_messages(cur);
+	}
 	return cur->buf_handle;
 }
-esp_err_t messaging_service_init(){
+void messaging_service_init(){
+	size_t max_count=15;
 	top.buf_handle = messaging_create_ring_buffer(max_count);
 	if(!top.buf_handle){
 		ESP_LOGE(tag, "messaging service init failed.");
 	}
-	strncpy(top.subscriber_name,"messaging");
-	return (top.buf_handle!=NULL);
+	else {
+		top.max_count = max_count;
+		top.subscriber_name = strdup("messaging");
+	}
+	return;
 }
 
+const char * messaging_get_type_desc(messaging_types msg_type){
+	switch (msg_type) {
+	CASE_TO_STR(MESSAGING_INFO);
+	CASE_TO_STR(MESSAGING_WARNING);
+	CASE_TO_STR(MESSAGING_ERROR);
+		default:
+			return "Unknown";
+			break;
+	}
+}
+const char * messaging_get_class_desc(messaging_classes msg_class){
+	switch (msg_class) {
+	CASE_TO_STR(MESSAGING_CLASS_OTA);
+	CASE_TO_STR(MESSAGING_CLASS_SYSTEM);
+		default:
+			return "Unknown";
+			break;
+	}
+}
 
 cJSON *  messaging_retrieve_messages(RingbufHandle_t buf_handle){
 	single_message_t * message=NULL;
@@ -81,12 +132,13 @@ cJSON *  messaging_retrieve_messages(RingbufHandle_t buf_handle){
 		message = (single_message_t *)xRingbufferReceive(buf_handle, &item_size, pdMS_TO_TICKS(50));
 		//Check received data
 		if (message== NULL) {
-			ESP_LOGE(tag,"Failed to receive message from buffer!");
+			ESP_LOGE(tag,"received null ptr");
 		}
 		else {
 			json_message = cJSON_CreateObject();
 			cJSON_AddStringToObject(json_message, "message", message->message);
-			cJSON_AddStringToObject(json_message, "type", message->message);
+			cJSON_AddStringToObject(json_message, "type", messaging_get_type_desc(message->type));
+			cJSON_AddStringToObject(json_message, "class", messaging_get_class_desc(message->msg_class));
 			cJSON_AddNumberToObject(json_message,"sent_time",message->sent_time);
 			cJSON_AddNumberToObject(json_message,"current_time",esp_timer_get_time() / 1000);
 			cJSON_AddItemToArray(json_messages,json_message);
@@ -95,19 +147,55 @@ cJSON *  messaging_retrieve_messages(RingbufHandle_t buf_handle){
 	}
 	return json_messages;
 }
-
-void messaging_release_message(RingbufHandle_t buf_handle, single_message_t * message){
-
+single_message_t *  messaging_retrieve_message(RingbufHandle_t buf_handle){
+	single_message_t * message=NULL;
+	single_message_t * message_copy=NULL;
+	size_t item_size;
+    UBaseType_t uxItemsWaiting;
+    vRingbufferGetInfo(buf_handle, NULL, NULL, NULL, NULL, &uxItemsWaiting);
+	if(uxItemsWaiting>0){
+		message = (single_message_t *)xRingbufferReceive(buf_handle, &item_size, pdMS_TO_TICKS(50));
+		if(item_size!=sizeof(single_message_t)){
+			ESP_LOGE(tag,"Invalid message length!");
+		}
+		else {
+			message_copy  = heap_caps_malloc(item_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
+			if(message_copy){
+				memcpy(message_copy,message,item_size);
+			}
+		}
+		vRingbufferReturnItem(buf_handle, (void *)message);
+	}
+	return message_copy;
 }
-esp_err_t messageing_post_to_queue(messaging_list_t * subscriber, single_message_t * message){
-	UBaseType_t res =  xRingbufferSend(subscriber->buf_handle, message, sizeof(message), pdMS_TO_TICKS(1000));
+
+esp_err_t messaging_post_to_queue(messaging_handle_t subscriber_handle, single_message_t * message, size_t message_size){
+	UBaseType_t uxItemsWaiting=0;
+	size_t item_size=0;
+	messaging_list_t * subscriber=get_struct_ptr(subscriber_handle);
+	if(!subscriber->buf_handle){
+		ESP_LOGE(tag,"post failed: null buffer for %s", str_or_unknown(subscriber->subscriber_name));
+		return ESP_FAIL;
+	}
+	vRingbufferGetInfo(subscriber->buf_handle,NULL,NULL,NULL,NULL,&uxItemsWaiting);
+	if(uxItemsWaiting>=subscriber->max_count){
+		ESP_LOGW(tag,"messaged dropped for %s",str_or_unknown(subscriber->subscriber_name));
+		single_message_t * dummy = (single_message_t *)xRingbufferReceive(subscriber->buf_handle, &item_size, pdMS_TO_TICKS(50));
+		if (dummy== NULL) {
+			ESP_LOGE(tag,"receive from buffer failed");
+		}
+		else {
+			vRingbufferReturnItem(subscriber->buf_handle, (void *)dummy);
+		}
+	}
+	UBaseType_t res =  xRingbufferSend(subscriber->buf_handle, message, message_size, pdMS_TO_TICKS(1000));
 	if (res != pdTRUE) {
-		ESP_LOGE(tag,"Failed to post message to subscriber %s",subscriber->subscriber_name);
+		ESP_LOGE(tag,"post to %s failed",str_or_unknown(subscriber->subscriber_name));
 		return ESP_FAIL;
 	}
 	return ESP_OK;
 }
-void messaging_post_message(messaging_types type, char *fmt, ...){
+void messaging_post_message(messaging_types type,messaging_classes msg_class, char *fmt, ...){
 	single_message_t message={};
 	messaging_list_t * cur=&top;
 	va_list va;
@@ -115,10 +203,11 @@ void messaging_post_message(messaging_types type, char *fmt, ...){
 	vsnprintf(message.message, sizeof(message.message), fmt, va);
 	va_end(va);
 	message.type = type;
+	message.msg_class = msg_class;
 	message.sent_time = esp_timer_get_time() / 1000;
-	while(cur->next){
-		messageing_post_to_queue(cur,  &message);
-		cur = cur->next;
+	while(cur){
+		messaging_post_to_queue(get_handle_ptr(cur),  &message, sizeof(single_message_t));
+		cur = get_struct_ptr(cur->next);
 	}
 	return;
 

+ 14 - 9
components/services/messaging.h

@@ -7,19 +7,24 @@ typedef enum {
 	MESSAGING_WARNING,
 	MESSAGING_ERROR
 } messaging_types;
-typedef struct {
-	void  * next;
-	char subscriber_name[21];
-	RingbufHandle_t buf_handle;
-} messaging_list_t;
+typedef enum {
+	MESSAGING_CLASS_OTA,
+	MESSAGING_CLASS_SYSTEM
+} messaging_classes;
+
+typedef struct messaging_list_t *messaging_handle_t;
 
 typedef struct {
 	time_t sent_time;
 	messaging_types type;
-	char message[101];
+	messaging_classes msg_class;
+	char message[151];
 } single_message_t;
 
 cJSON *  messaging_retrieve_messages(RingbufHandle_t buf_handle);
-RingbufHandle_t messaging_register_subscriber(uint8_t max_count, char * name);
-
-void messaging_post_message(messaging_types type, char * fmt, ...);
+messaging_handle_t messaging_register_subscriber(uint8_t max_count, char * name);
+esp_err_t messaging_post_to_queue(messaging_handle_t subscriber_handle, single_message_t * message, size_t message_size);
+void messaging_post_message(messaging_types type,messaging_classes msg_class, char * fmt, ...);
+cJSON *  messaging_retrieve_messages(RingbufHandle_t buf_handle);
+single_message_t *  messaging_retrieve_message(RingbufHandle_t buf_handle);
+void messaging_service_init();

+ 2 - 0
components/services/services.c

@@ -16,6 +16,7 @@
 #include "monitor.h"
 #include "globdefs.h"
 #include "accessors.h"
+#include "messaging.h"
 
 extern void battery_svc_init(void);
 extern void monitor_svc_init(void);
@@ -52,6 +53,7 @@ void set_power_gpio(int gpio, char *value) {
  */
 void services_init(void) {
 	messaging_service_init();
+	messaging_post_message(MESSAGING_INFO,MESSAGING_CLASS_SYSTEM, "Initializing services");
 	gpio_install_isr_service(0);
 	
 #ifdef CONFIG_I2C_LOCKED

+ 26 - 16
components/squeezelite-ota/squeezelite-ota.c

@@ -83,25 +83,35 @@ void _printMemStats(){
 			heap_caps_get_free_size(MALLOC_CAP_SPIRAM),
 			heap_caps_get_minimum_free_size(MALLOC_CAP_SPIRAM));
 }
-void sendMessaging(messaging_types type,char * fmt, ...){
+uint8_t  ota_get_pct_complete(){
+	return ota_status.total_image_len==0?0:
+			(uint8_t)((float)ota_status.actual_image_len/(float)ota_status.total_image_len*100.0f);
+}
+
+void sendMessaging(messaging_types type,const char * fmt, ...){
     va_list args;
+    cJSON * msg = cJSON_CreateObject();
+    size_t str_len=0;
+    char * msg_str=NULL;
+
     va_start(args, fmt);
-    messaging_post_message(type, fmt, args);
+    str_len = vsnprintf(NULL,0,fmt,args);
+    if(str_len>0){
+    	msg_str = malloc(str_len);
+    	vsnprintf(msg_str,str_len,fmt,args);
+    }
     va_end(args);
+
+    cJSON_AddStringToObject(msg,"ota_dsc",msg_str);
+    free(msg_str);
+    cJSON_AddNumberToObject(msg,"ota_pct",	ota_get_pct_complete()	);
+    char * json_msg = cJSON_PrintUnformatted(msg);
+	messaging_post_message(type, MESSAGING_CLASS_OTA, json_msg);
+	free(json_msg);
+	cJSON_free(msg);
     _printMemStats();
 }
-const char *  ota_get_status(){
-	if(!ota_status.bInitialized)
-		{
-			memset(ota_status.status_text, 0x00,sizeof(ota_status.status_text));
-			ota_status.bInitialized = true;
-		}
-	return ota_status.status_text;
-}
-uint8_t  ota_get_pct_complete(){
-	return ota_status.total_image_len==0?0:
-			(uint8_t)((float)ota_status.actual_image_len/(float)ota_status.total_image_len*100.0f);
-}
+
 
 static void __attribute__((noreturn)) task_fatal_error(void)
 {
@@ -206,7 +216,7 @@ esp_err_t init_config(ota_thread_parms_t * p_ota_thread_parms){
 		ota_config.skip_cert_common_name_check = false;
 		ota_config.url = strdup(ota_status.current_url);
 		ota_config.max_redirection_count = 3;
-		ota_write_data = heap_caps_malloc(ota_config.buffer_size+1 , MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
+		ota_write_data = heap_caps_malloc(ota_config.buffer_size+1 , MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 		//ota_write_data = malloc(ota_config.buffer_size+1);
 		if(ota_write_data== NULL){
 			ESP_LOGE(TAG,"Error allocating the ota buffer");
@@ -324,7 +334,7 @@ static esp_err_t _http_handle_response_code(esp_http_client_handle_t http_client
     }
     ESP_LOGD(TAG, "Redirection done, checking if we need to read the data. ");
     if (process_again(status_code)) {
-    	char * local_buff = heap_caps_malloc(ota_config.buffer_size+1, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
+    	char * local_buff = heap_caps_malloc(ota_config.buffer_size+1, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
     	//char * local_buff = malloc(ota_config.buffer_size+1);
     	if(local_buff==NULL){
     		ESP_LOGE(TAG,"Failed to allocate internal memory buffer for http processing");

+ 0 - 2
components/squeezelite-ota/squeezelite-ota.h

@@ -37,7 +37,5 @@
 #define OTA_TASK_PRIOTITY 6
 
 esp_err_t start_ota(const char * bin_url, char * bin_buffer, uint32_t length);
-const char * ota_get_status();
-uint8_t ota_get_pct_complete();
 
 

+ 16 - 9
components/telnet/telnet.c

@@ -69,7 +69,7 @@ static ssize_t stdout_write(int fd, const void * data, size_t size);
 static char *eventToString(telnet_event_type_t type);
 static void handle_telnet_conn();
 static void process_logs( UBaseType_t bytes);
-
+static bool bMirrorToUART=false;
 struct telnetUserData {
 	int sockfd;
 	telnet_t *tnHandle;
@@ -79,11 +79,14 @@ struct telnetUserData {
 
 void init_telnet(){
 	char *val= get_nvs_value_alloc(NVS_TYPE_STR, "telnet_enable");
-	if (!val || strlen(val) == 0 || !strcasestr("YX",val) ) {
+	if (!val || strlen(val) == 0 || !strcasestr("YXD",val) ) {
 		ESP_LOGI(tag,"Telnet support disabled");
 		if(val) free(val);
 		return;
 	}
+	bMirrorToUART = strcasestr("D",val)!=NULL;
+
+	FREE_AND_NULL(val);
 	val=get_nvs_value_alloc(NVS_TYPE_STR, "telnet_block");
 	if(val){
 		send_chunk=atol(val);
@@ -100,8 +103,8 @@ void init_telnet(){
 	vSemaphoreCreateBinary( xSemaphore );
 
 	// Redirect the output to our telnet handler as soon as possible
-	StaticRingbuffer_t *buffer_struct = (StaticRingbuffer_t *)heap_caps_malloc(sizeof(StaticRingbuffer_t), MALLOC_CAP_SPIRAM);
-	uint8_t *buffer_storage = (uint8_t *)heap_caps_malloc(sizeof(uint8_t)*log_buf_size, MALLOC_CAP_SPIRAM);
+	StaticRingbuffer_t *buffer_struct = (StaticRingbuffer_t *)heap_caps_malloc(sizeof(StaticRingbuffer_t), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
+	uint8_t *buffer_storage = (uint8_t *)heap_caps_malloc(sizeof(uint8_t)*log_buf_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 	buf_handle = xRingbufferCreateStatic(log_buf_size, RINGBUF_TYPE_BYTEBUF, buffer_storage, buffer_struct);
 	if (buf_handle == NULL) {
 		ESP_LOGE(tag,"Failed to create ring buffer for telnet!");
@@ -117,7 +120,9 @@ void init_telnet(){
 			.close = &stdout_close,
 			.read = &stdout_read,
 		};
-	uart_fd=open("/dev/uart/0", O_RDWR);
+	if(bMirrorToUART){
+		uart_fd=open("/dev/uart/0", O_RDWR);
+	}
 	ESP_ERROR_CHECK(esp_vfs_register("/dev/pkspstdout", &vfs, NULL));
 	freopen("/dev/pkspstdout", "w", stdout);
 	freopen("/dev/pkspstdout", "w", stderr);
@@ -125,7 +130,7 @@ void init_telnet(){
 }
 void start_telnet(void * pvParameter){
 	static bool isStarted=false;
-	StaticTask_t *xTaskBuffer = (StaticTask_t*) heap_caps_malloc(sizeof(StaticTask_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
+	StaticTask_t *xTaskBuffer = (StaticTask_t*) heap_caps_malloc(sizeof(StaticTask_t), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
 	StackType_t *xStack = malloc(TELNET_STACK_SIZE);
 	
 	if(!isStarted && bIsEnabled) {
@@ -228,7 +233,9 @@ void process_received_data(const char * buffer, size_t size){
 	command[size]='\0';
 	if(command[0]!='\r' && command[0]!='\n'){
 		// echo the command buffer out to uart and run
-		write(uart_fd, command, size);
+		if(bMirrorToUART){
+			write(uart_fd, command, size);
+		}
 		run_command((char *)command);
 	}
 	free(command);
@@ -317,7 +324,7 @@ static void handle_telnet_conn() {
   struct telnetUserData *pTelnetUserData = (struct telnetUserData *)malloc(sizeof(struct telnetUserData));
   tnHandle = telnet_init(my_telopts, handle_telnet_events, 0, pTelnetUserData);
 
-  pTelnetUserData->rxbuf = (char *) heap_caps_malloc(TELNET_RX_BUF, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
+  pTelnetUserData->rxbuf = (char *) heap_caps_malloc(TELNET_RX_BUF, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
   pTelnetUserData->tnHandle = tnHandle;
   pTelnetUserData->sockfd = partnerSocket;
 
@@ -374,7 +381,7 @@ static ssize_t stdout_write(int fd, const void * data, size_t size) {
 		// We could not obtain the semaphore and can therefore not access
 		// the shared resource safely.
 	}
-	return write(uart_fd, data, size);
+	return bMirrorToUART?write(uart_fd, data, size):true;
 }
 
 static ssize_t stdout_read(int fd, void* data, size_t size) {

+ 1 - 0
components/wifi-manager/code.js

@@ -648,6 +648,7 @@ function refreshAPHTML(data){
 function getMessages() {
     $.getJSON("/messages.json", function(data) {
         data.forEach(function(msg) {
+        	message: "{"ota_dsc":"Erasing flash complete","ota_pct":0}"
         });
         
     })

+ 1 - 1
components/wifi-manager/http_server_handlers.c

@@ -50,9 +50,9 @@ function to process requests, decode URLs, serve files, etc. etc.
 #include "esp_vfs.h"
 #include "lwip/ip_addr.h"
 #include "messaging.h"
+#include "platform_esp32.h"
 
 #define HTTP_STACK_SIZE	(5*1024)
-#define FREE_AND_NULL(p) if(p!=NULL){ free(p); p=NULL;}
 const char str_na[]="N/A";
 #define STR_OR_NA(s) s?s:str_na
 /* @brief tag used for ESP serial console messages */

+ 3 - 20
components/wifi-manager/wifi_manager.c

@@ -75,7 +75,7 @@ Contains the freeRTOS task and all necessary support
 #endif
 
 #define STR_OR_BLANK(p) p==NULL?"":p
-#define FREE_AND_NULL(p) if(p!=NULL){ free(p); p=NULL;}
+
 /* objects used to manipulate the main queue of events */
 QueueHandle_t wifi_manager_queue;
 SemaphoreHandle_t wifi_manager_json_mutex = NULL;
@@ -89,7 +89,7 @@ char *ip_info_json = NULL;
 char * release_url=NULL;
 cJSON * ip_info_cjson=NULL;
 wifi_config_t* wifi_manager_config_sta = NULL;
-static update_reason_code_t last_update_reason_code=0;
+
 
 static int32_t total_connected_time=0;
 static int64_t last_connected=0;
@@ -208,9 +208,6 @@ bool isGroupBitSet(uint8_t bit){
 	EventBits_t uxBits= xEventGroupGetBits(wifi_manager_event_group);
 	return (uxBits & bit);
 }
-void wifi_manager_refresh_ota_json(){
-	wifi_manager_send_message(EVENT_REFRESH_OTA, NULL);
-}
 
 void wifi_manager_scan_async(){
 	wifi_manager_send_message(ORDER_START_WIFI_SCAN, NULL);
@@ -455,8 +452,6 @@ cJSON * wifi_manager_get_basic_info(cJSON **old){
 	cJSON_AddItemToObject(root, "version", cJSON_CreateString(desc->version));
 	if(release_url !=NULL) cJSON_AddItemToObject(root, "release_url", cJSON_CreateString(release_url));
 	cJSON_AddNumberToObject(root,"recovery",	RECOVERY_APPLICATION	);
-	cJSON_AddItemToObject(root, "ota_dsc", cJSON_CreateString(ota_get_status()));
-	cJSON_AddNumberToObject(root,"ota_pct",	ota_get_pct_complete()	);
 	cJSON_AddItemToObject(root, "Jack", cJSON_CreateString(jack_inserted_svc() ? "1" : "0"));
 	cJSON_AddNumberToObject(root,"Voltage",	battery_value_svc());
 	cJSON_AddNumberToObject(root,"disconnect_count", num_disconnect	);
@@ -485,12 +480,6 @@ void wifi_manager_generate_ip_info_json(update_reason_code_t update_reason_code)
 	wifi_config_t *config = wifi_manager_get_wifi_sta_config();
 	ip_info_cjson = wifi_manager_get_basic_info(&ip_info_cjson);
 
-	if(update_reason_code == UPDATE_OTA) {
-		update_reason_code = last_update_reason_code;
-	}
-	else {
-		last_update_reason_code = update_reason_code;
-	}
 	cJSON_AddNumberToObject(ip_info_cjson, "urc", update_reason_code);
 	if(config){
 		cJSON_AddItemToObject(ip_info_cjson, "ssid", cJSON_CreateString((char *)config->sta.ssid));
@@ -1144,12 +1133,6 @@ void wifi_manager( void * pvParameters ){
 					ESP_LOGD(TAG,  "Done Invoking SCAN DONE callback");
 				}
 				break;
-			case EVENT_REFRESH_OTA:
-				if(wifi_manager_lock_json_buffer( portMAX_DELAY )){
-					wifi_manager_generate_ip_info_json( UPDATE_OTA );
-					wifi_manager_unlock_json_buffer();
-				}
-				break;
 
 			case ORDER_START_WIFI_SCAN:
 				ESP_LOGD(TAG,   "MESSAGE: ORDER_START_WIFI_SCAN");
@@ -1445,7 +1428,7 @@ void wifi_manager( void * pvParameters ){
 				if(cb_ptr_arr[msg.code]) (*cb_ptr_arr[msg.code])(NULL);
 				break;
 			case UPDATE_CONNECTION_OK:
-				/* refresh JSON with the new ota data */
+				/* refresh JSON */
 				if(wifi_manager_lock_json_buffer( portMAX_DELAY )){
 					/* generate the connection info with success */
 					wifi_manager_generate_ip_info_json( UPDATE_CONNECTION_OK );

+ 6 - 8
components/wifi-manager/wifi_manager.h

@@ -198,12 +198,11 @@ typedef enum message_code_t {
 	EVENT_STA_DISCONNECTED = 12,
 	EVENT_SCAN_DONE = 13,
 	EVENT_STA_GOT_IP = 14,
-	EVENT_REFRESH_OTA = 15,
-	ORDER_RESTART_OTA = 16,
-	ORDER_RESTART_RECOVERY = 17,
-	ORDER_RESTART_OTA_URL = 18,
-	ORDER_RESTART = 19,
-	MESSAGE_CODE_COUNT = 20 /* important for the callback array */
+	ORDER_RESTART_OTA = 15,
+	ORDER_RESTART_RECOVERY = 16,
+	ORDER_RESTART_OTA_URL = 17,
+	ORDER_RESTART = 18,
+	MESSAGE_CODE_COUNT = 19 /* important for the callback array */
 
 }message_code_t;
 
@@ -226,8 +225,7 @@ typedef enum update_reason_code_t {
 	UPDATE_CONNECTION_OK = 0,
 	UPDATE_FAILED_ATTEMPT = 1,
 	UPDATE_USER_DISCONNECT = 2,
-	UPDATE_LOST_CONNECTION = 3,
-	UPDATE_OTA=4
+	UPDATE_LOST_CONNECTION = 3
 }update_reason_code_t;
 
 typedef enum connection_request_made_by_code_t{

+ 112 - 0
eclipse_make_wrapper.py

@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+#
+# Wrapper to run make and preprocess any paths in the output from MSYS Unix-style paths
+# to Windows paths, for Eclipse
+from __future__ import print_function, division
+import sys
+import subprocess
+import os.path
+import os
+import re
+import glob
+from test import test_cmd_line
+
+#UNIX_PATH_RE = re.compile(r'(([a-zA-Z]{1}[:]{1}){0,1}[/\\][^\s\'\"\t\[\(]+)+')
+UNIX_PATH_RE = re.compile(r'(([a-zA-Z]{1}[:]{1}){0,1}[/\\][^\s\'\"\t\[\(]+(?![^\\/]*$)[/\\]?)')
+INCLUDE_PATH_RE = re.compile(r'-I[\s"]{0,}(.+?)["]{0,}(?=\s-\S)')
+INCLUDE_PATH_ADJ_RE = re.compile(r'^([/]opt[/]esp-idf[/]){1}(.*)')
+INCLUDE_PATH_ADJ2_RE = re.compile(r'^([/]c[/]){1}(.*)')
+
+paths = {}
+names = []
+idf_path= os.environ.get('IDF_PATH').replace("/", "\\")
+cwd_path= os.environ.get('CWD')
+pwd_path= os.environ.get('PWD')         
+         
+def check_path(path):
+    try:
+        return paths[path]
+    except KeyError:
+        pass
+    paths[path] = path
+    winpath =path
+    if not os.path.exists(winpath):
+          # cache as failed, replace with success if it works
+        if re.match(INCLUDE_PATH_ADJ2_RE, path) is not None:
+                winpath = INCLUDE_PATH_ADJ2_RE.sub(r'c:/\2',path) #replace /c/ 
+        try:
+            winpath = subprocess.check_output(["cygpath", "-w", winpath]).strip()
+        except subprocess.CalledProcessError:
+            return path  # something went wrong running cygpath, assume this is not a path!
+    if not os.path.exists(winpath):
+        if not os.path.exists(winpath):
+            winpath=idf_path  + '\\' + re.sub(r'^[/\\]opt[/\\](esp-idf[/\\]){0,}', '', path, 1)
+            try:
+                winpath = subprocess.check_output(["cygpath", "-w", winpath]).strip()
+            except subprocess.CalledProcessError:
+                return path  # something went wrong running cygpath, assume this is not a path!
+            if not os.path.exists(winpath):
+                return path  # not actually a valid path
+    
+    winpath = winpath.replace("/", "\\")  # make consistent with forward-slashes used elsewhere
+    paths[path] = winpath
+    
+    
+    #print("In path: {0}, out path: {1}".format(path,winpath) )
+    return winpath
+def fix_paths(filename):
+    if re.match(r'.*[\\](.*$)',filename) is not None:
+        filename = re.findall(r'.*[\\](.*$)',filename)[0].replace("\\", "/")
+    
+    return filename.rstrip()
+
+def print_paths(path_list, file_name, source_file):
+    
+    new_path_list = list(set(path_list))
+    new_path_list.sort()
+    last_n = ''
+    cmd_line='xtensa-esp32-elf-gcc '
+    for n in new_path_list:
+        if re.match(INCLUDE_PATH_ADJ_RE, n) is not None:
+            n = INCLUDE_PATH_ADJ_RE.sub(idf_path+r"\2",n )
+        if re.match(INCLUDE_PATH_ADJ2_RE, n) is not None:
+            n = INCLUDE_PATH_ADJ2_RE.sub(r'c:/\2',n)
+        if last_n != n:
+            cmd_line = cmd_line + ' -I ' + n.rstrip()
+        last_n = n
+    if source_file:
+        cmd_line = cmd_line + ' -c ' + fix_paths(source_file)
+    cmd_line = cmd_line + ' -o ' + fix_paths(file_name)
+    print(cmd_line)
+def extract_includes():
+    
+    for filename in [y for x in os.walk('build') for y in glob.glob(os.path.join(x[0], '*.d'))]:
+        lines = []
+        source=''
+        with open(filename) as file_in:
+            for line in file_in:
+                if re.match(r'\S*(?=/[^/]*\.[h][p]?)',line) is not None:
+                    lines.extend(re.findall(r'\S*(?=/[^/]*\.[h][p]?)/',line))
+                if re.match(r'\S*(?=\.[cC][pP]{0,})[^\\\s]*',line) is not None:
+                    source = re.findall(r'\S*(?=\.[cC][pP]{0,})[^\\\s]*',line)[0]
+        
+        print_paths(lines,filename,source )
+            
+def main():
+    cwd_path=check_path(os.getcwd())
+    os.environ['CWD']= cwd_path
+    os.environ['PWD']= cwd_path
+    idf_path= os.environ.get('IDF_PATH').replace("/", "\\")
+    cwd_path= os.environ.get('CWD')
+    pwd_path= os.environ.get('PWD')
+    print('Running custom script make in {}, IDF_PATH={}, CWD={}, PWD={}'.format(cwd_path,idf_path,cwd_path,pwd_path))
+    
+    make = subprocess.Popen(["make"] + sys.argv[1:] + ["BATCH_BUILD=1"], stdout=subprocess.PIPE)
+    for line in iter(make.stdout.readline, ''):
+        line = re.sub(UNIX_PATH_RE, lambda m: check_path(m.group(0)), line)
+        names.extend(INCLUDE_PATH_RE.findall(line))
+        print(line.rstrip())
+    sys.exit(make.wait())
+
+if __name__ == "__main__":
+    main()

+ 2 - 2
main/esp_app_main.c

@@ -51,7 +51,7 @@
 static const char certs_namespace[] = "certificates";
 static const char certs_key[] = "blob";
 static const char certs_version[] = "version";
-
+const char unknown_string_placeholder[] = "unknown";
 EventGroupHandle_t wifi_event_group;
 
 bool bypass_wifi_manager=false;
@@ -69,7 +69,7 @@ extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end");
 // as an exception _init function don't need include
 extern void services_init(void);
 extern void	display_init(char *welcome);
-
+const char * str_or_unknown(const char * str) { return (str?str:unknown_string_placeholder); }
 /* brief this is an exemple of a callback that you can setup in your own app to get notified of wifi manager event */
 void cb_connection_got_ip(void *pvParameter){
 	ESP_LOGI(TAG, "I have a connection!");

+ 19 - 0
main/platform_esp32.h

@@ -37,3 +37,22 @@ typedef enum {
 	ERROR
 } message_severity_t;
 extern void set_status_message(message_severity_t severity, const char * message);
+#ifndef STR_OR_ALT
+#define STR_OR_ALT(str,alt) (str?str:alt)
+#endif
+
+extern const char unknown_string_placeholder[];
+extern const char * str_or_unknown(const char * str);
+
+#ifndef FREE_AND_NULL
+#define FREE_AND_NULL(x) if(x) { free(x); x=NULL; }
+#endif
+#ifndef QUOTE
+#define QUOTE(name) #name
+#endif
+#ifndef STR
+#define STR(macro)  QUOTE(macro)
+#endif
+#ifndef CASE_TO_STR
+#define CASE_TO_STR(x) case x: return STR(x); break;
+#endif