From 2ab14d62beab49c65705e429382d1e2ad4f6a2ad Mon Sep 17 00:00:00 2001 From: Sebastien Date: Tue, 10 Mar 2020 17:27:06 -0400 Subject: [PATCH] Merged with httpd - work in progress --- .cproject | 2 +- .project | 2 +- .../com.googlecode.cppcheclipse.core.prefs | 2 - .settings/org.eclipse.cdt.codan.core.prefs | 89 ------------ components/platform_config/CMakeLists.txt | 4 +- components/platform_console/CMakeLists.txt | 5 +- .../app_squeezelite/CMakeLists.txt | 4 +- .../platform_console/platform_console.c | 2 +- components/squeezelite-ota/CMakeLists.txt | 2 +- components/squeezelite-ota/squeezelite-ota.c | 11 +- components/squeezelite-ota/squeezelite-ota.h | 2 +- components/squeezelite/CMakeLists.txt | 6 +- components/wifi-manager/CMakeLists.txt | 5 +- .../wifi-manager/http_server_handlers.c | 137 +++++++++--------- .../wifi-manager/http_server_handlers.h | 12 +- components/wifi-manager/wifi_manager.c | 2 +- components/wifi-manager/wifi_manager.h | 11 -- .../wifi-manager/wifi_manager_http_server.c | 12 +- main/esp_app_main.c | 14 +- squeezelite.cmake | 2 + 20 files changed, 110 insertions(+), 216 deletions(-) delete mode 100644 .settings/com.googlecode.cppcheclipse.core.prefs delete mode 100644 .settings/org.eclipse.cdt.codan.core.prefs diff --git a/.cproject b/.cproject index 317be43f..1acdb895 100644 --- a/.cproject +++ b/.cproject @@ -29,4 +29,4 @@ - + \ No newline at end of file diff --git a/.project b/.project index fb53512a..20702302 100644 --- a/.project +++ b/.project @@ -17,4 +17,4 @@ org.eclipse.cdt.core.ccnature com.espressif.idf.core.idfNature - + \ No newline at end of file diff --git a/.settings/com.googlecode.cppcheclipse.core.prefs b/.settings/com.googlecode.cppcheclipse.core.prefs deleted file mode 100644 index b21d0f0a..00000000 --- a/.settings/com.googlecode.cppcheclipse.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -suppressions=rO0ABXNyAAxqYXZhLmlvLkZpbGUELaRFDg3k/wMAAUwABHBhdGh0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAJWNvbXBvbmVudHNcd2lmaS1tYW5hZ2VyXGh0dHBfc2VydmVyLmN3AgBceA\=\=;comparePointers;395\!rO0ABXNyAAxqYXZhLmlvLkZpbGUELaRFDg3k/wMAAUwABHBhdGh0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAE21haW5cZXNwX2FwcF9tYWluLmN3AgBceA\=\=;comparePointers;176\!rO0ABXNyAAxqYXZhLmlvLkZpbGUELaRFDg3k/wMAAUwABHBhdGh0ABJMamF2YS9sYW5nL1N0cmluZzt4cHQAJ2NvbXBvbmVudHNcdGVsbmV0XGxpYnRlbG5ldFxsaWJ0ZWxuZXQuY3cCAFx4;va_list_usedBeforeStarted;2147483647\! diff --git a/.settings/org.eclipse.cdt.codan.core.prefs b/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index 9a577d2b..00000000 --- a/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,89 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} -org.eclipse.cdt.codan.checkers.nocommentinside=-Error -org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} -org.eclipse.cdt.codan.checkers.nolinecomment=-Error -org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error -org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error -org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} -org.eclipse.cdt.qt.core.qtproblem=Warning -org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/components/platform_config/CMakeLists.txt b/components/platform_config/CMakeLists.txt index 876257f4..117dbbff 100644 --- a/components/platform_config/CMakeLists.txt +++ b/components/platform_config/CMakeLists.txt @@ -1,7 +1,7 @@ idf_component_register( SRC_DIRS . INCLUDE_DIRS . - PRIV_REQUIRES json tools newlib console esp_common freertos - REQUIRES nvs_flash + PRIV_REQUIRES tools newlib console esp_common freertos + REQUIRES nvs_flash json ) diff --git a/components/platform_console/CMakeLists.txt b/components/platform_console/CMakeLists.txt index 3272fb5c..8dc3e512 100644 --- a/components/platform_console/CMakeLists.txt +++ b/components/platform_console/CMakeLists.txt @@ -7,5 +7,6 @@ idf_component_register( SRCS platform_console.c INCLUDE_DIRS . REQUIRES nvs_flash - PRIV_REQUIRES console tools services spi_flash app_update platform_config vfs pthread wifi-manager platform_config codecs newlib ) -target_link_libraries(__idf_platform_console ${build_dir}/esp-idf/$/lib$.a ) + PRIV_REQUIRES console tools services spi_flash app_update platform_config vfs pthread wifi-manager platform_config newlib telnet display) +target_link_libraries(${COMPONENT_LIB} ${build_dir}/esp-idf/$/lib$.a ) + diff --git a/components/platform_console/app_squeezelite/CMakeLists.txt b/components/platform_console/app_squeezelite/CMakeLists.txt index 3af2ae78..738fd047 100644 --- a/components/platform_console/app_squeezelite/CMakeLists.txt +++ b/components/platform_console/app_squeezelite/CMakeLists.txt @@ -1,4 +1,6 @@ idf_component_register( SRC_DIRS . INCLUDE_DIRS . - PRIV_REQUIRES console squeezelite pthread tools platform_config) + PRIV_REQUIRES console codecs squeezelite newlib pthread tools platform_config) +target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=feof") +target_link_libraries(${COMPONENT_LIB} INTERFACE "-Wl,--undefined=fdopen") diff --git a/components/platform_console/platform_console.c b/components/platform_console/platform_console.c index b65f2474..73f9309e 100644 --- a/components/platform_console/platform_console.c +++ b/components/platform_console/platform_console.c @@ -35,7 +35,7 @@ #include "gds_text.h" #include "gds_font.h" #include "display.h" -#include "cmd_squeezelite.h" + #include "config.h" pthread_t thread_console; static void * console_thread(); diff --git a/components/squeezelite-ota/CMakeLists.txt b/components/squeezelite-ota/CMakeLists.txt index a0276051..2a847e22 100644 --- a/components/squeezelite-ota/CMakeLists.txt +++ b/components/squeezelite-ota/CMakeLists.txt @@ -1,7 +1,7 @@ idf_component_register(SRC_DIRS . INCLUDE_DIRS . REQUIRES app_update esp_https_ota - PRIV_REQUIRES console tools platform_config spi_flash vfs console freertos platform_console + PRIV_REQUIRES console tools display services platform_config spi_flash vfs console freertos platform_console ) diff --git a/components/squeezelite-ota/squeezelite-ota.c b/components/squeezelite-ota/squeezelite-ota.c index ea7bd719..16e541ab 100644 --- a/components/squeezelite-ota/squeezelite-ota.c +++ b/components/squeezelite-ota/squeezelite-ota.c @@ -20,7 +20,7 @@ #include "esp_err.h" #include "tcpip_adapter.h" #include "squeezelite-ota.h" -#include "config.h" +#include "platform_config.h" #include #include #include @@ -35,6 +35,7 @@ #include "gds.h" #include "gds_text.h" #include "gds_draw.h" +#include "platform_esp32.h" extern const char * get_certificate(); @@ -782,9 +783,9 @@ esp_err_t process_recovery_ota(const char * bin_url, char * bin_buffer, uint32_t esp_err_t start_ota(const char * bin_url, char * bin_buffer, uint32_t length) { -#if RECOVERY_APPLICATION - return process_recovery_ota(bin_url,bin_buffer,length); -#else + if(is_recovery_running){ + return process_recovery_ota(bin_url,bin_buffer,length); + } if(!bin_url){ ESP_LOGE(TAG,"missing URL parameter. Unable to start OTA"); return ESP_ERR_INVALID_ARG; @@ -802,5 +803,5 @@ esp_err_t start_ota(const char * bin_url, char * bin_buffer, uint32_t length) ESP_LOGW(TAG, "Rebooting to recovery to complete the installation"); return guided_factory(); return ESP_OK; -#endif + } diff --git a/components/squeezelite-ota/squeezelite-ota.h b/components/squeezelite-ota/squeezelite-ota.h index c523d3cc..7a13959e 100644 --- a/components/squeezelite-ota/squeezelite-ota.h +++ b/components/squeezelite-ota/squeezelite-ota.h @@ -26,7 +26,7 @@ // tasks #define OTA_TASK_PRIOTITY 6 -esp_err_t start_ota(const char * bin_url); + const char * ota_get_status(); uint8_t ota_get_pct_complete(); diff --git a/components/squeezelite/CMakeLists.txt b/components/squeezelite/CMakeLists.txt index 07e8249e..0e58cef4 100644 --- a/components/squeezelite/CMakeLists.txt +++ b/components/squeezelite/CMakeLists.txt @@ -2,12 +2,14 @@ idf_component_register( SRC_DIRS . external a1s tas57xx INCLUDE_DIRS . a1s - PRIV_REQUIRES newlib + PRIV_REQUIRES + codecs + newlib esp_common esp-dsp platform_config bluetooth - codecs + services raop display diff --git a/components/wifi-manager/CMakeLists.txt b/components/wifi-manager/CMakeLists.txt index a1645f27..1ffcd350 100644 --- a/components/wifi-manager/CMakeLists.txt +++ b/components/wifi-manager/CMakeLists.txt @@ -1,7 +1,8 @@ idf_component_register( SRC_DIRS . - INCLUDE_DIRS . + INCLUDE_DIRS . ${IDF_PATH}/components/esp_http_server/src ${IDF_PATH}/components/esp_http_server/src/port/esp32 ${IDF_PATH}/components/esp_http_server/src/util ${IDF_PATH}/components/esp_http_server/src/ REQUIRES squeezelite-ota json mdns - PRIV_REQUIRES tools services platform_config esp_common json newlib freertos spi_flash nvs_flash mdns pthread wpa_supplicant platform_console + PRIV_REQUIRES tools services platform_config esp_common json newlib freertos spi_flash nvs_flash mdns pthread wpa_supplicant platform_console esp_http_server EMBED_FILES style.css code.js index.html bootstrap.min.css.gz jquery.min.js.gz popper.min.js.gz bootstrap.min.js.gz + ) diff --git a/components/wifi-manager/http_server_handlers.c b/components/wifi-manager/http_server_handlers.c index 5e6f7b25..6607d912 100644 --- a/components/wifi-manager/http_server_handlers.c +++ b/components/wifi-manager/http_server_handlers.c @@ -45,7 +45,7 @@ function to process requests, decode URLs, serve files, etc. etc. #include "esp_system.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "config.h" +#include "platform_config.h" #include "sys/param.h" #include "esp_vfs.h" #include "lwip/ip_addr.h" @@ -663,11 +663,13 @@ esp_err_t config_post_handler(httpd_req_t *req){ cJSON_Delete(root); if(bOTA) { -#if RECOVERY_APPLICATION - ESP_LOGW_LOC(TAG, "Starting process OTA for url %s",otaURL); -#else - ESP_LOGW_LOC(TAG, "Restarting system to process OTA for url %s",otaURL); -#endif + if(is_recovery_running){ + ESP_LOGW_LOC(TAG, "Starting process OTA for url %s",otaURL); + } + else { + ESP_LOGW_LOC(TAG, "Restarting system to process OTA for url %s",otaURL); + } + wifi_manager_reboot_ota(otaURL); free(otaURL); } @@ -805,82 +807,83 @@ esp_err_t recovery_post_handler(httpd_req_t *req){ return ESP_OK; } -#if RECOVERY_APPLICATION + esp_err_t flash_post_handler(httpd_req_t *req){ - ESP_LOGD_LOC(TAG, "serving [%s]", req->uri); - char success[]="File uploaded. Flashing started."; - if(!is_user_authenticated(req)){ - // todo: redirect to login page - // return ESP_OK; - } - esp_err_t err = httpd_resp_set_type(req, HTTPD_TYPE_TEXT); - if(err != ESP_OK){ - return err; - } - char * binary_buffer = malloc(req->content_len); - if(binary_buffer == NULL){ - ESP_LOGE(TAG, "File too large : %d bytes", req->content_len); - /* Respond with 400 Bad Request */ - httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, - "Binary file too large. Unable to allocate memory!"); - return ESP_FAIL; - } - ESP_LOGI(TAG, "Receiving ota binary file"); - /* Retrieve the pointer to scratch buffer for temporary storage */ - char *buf = ((rest_server_context_t *)(req->user_ctx))->scratch; + esp_err_t err =ESP_OK; + if(is_recovery_running){ + ESP_LOGD_LOC(TAG, "serving [%s]", req->uri); + char success[]="File uploaded. Flashing started."; + if(!is_user_authenticated(req)){ + // todo: redirect to login page + // return ESP_OK; + } + err = httpd_resp_set_type(req, HTTPD_TYPE_TEXT); + if(err != ESP_OK){ + return err; + } + char * binary_buffer = malloc(req->content_len); + if(binary_buffer == NULL){ + ESP_LOGE(TAG, "File too large : %d bytes", req->content_len); + /* Respond with 400 Bad Request */ + httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, + "Binary file too large. Unable to allocate memory!"); + return ESP_FAIL; + } + ESP_LOGI(TAG, "Receiving ota binary file"); + /* Retrieve the pointer to scratch buffer for temporary storage */ + char *buf = ((rest_server_context_t *)(req->user_ctx))->scratch; - char *head=binary_buffer; - int received; + char *head=binary_buffer; + int received; - /* Content length of the request gives - * the size of the file being uploaded */ - int remaining = req->content_len; + /* Content length of the request gives + * the size of the file being uploaded */ + int remaining = req->content_len; - while (remaining > 0) { + while (remaining > 0) { - ESP_LOGI(TAG, "Remaining size : %d", remaining); - /* Receive the file part by part into a buffer */ - if ((received = httpd_req_recv(req, buf, MIN(remaining, SCRATCH_BUFSIZE))) <= 0) { - if (received == HTTPD_SOCK_ERR_TIMEOUT) { - /* Retry if timeout occurred */ - continue; + ESP_LOGI(TAG, "Remaining size : %d", remaining); + /* Receive the file part by part into a buffer */ + if ((received = httpd_req_recv(req, buf, MIN(remaining, SCRATCH_BUFSIZE))) <= 0) { + if (received == HTTPD_SOCK_ERR_TIMEOUT) { + /* Retry if timeout occurred */ + continue; + } + FREE_RESET(binary_buffer); + ESP_LOGE(TAG, "File reception failed!"); + /* Respond with 500 Internal Server Error */ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to receive file"); + err = ESP_FAIL; + goto bail_out; } - FREE_RESET(binary_buffer); - ESP_LOGE(TAG, "File reception failed!"); - /* Respond with 500 Internal Server Error */ - httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "Failed to receive file"); - err = ESP_FAIL; + + /* Write buffer content to file on storage */ + if (received ) { + memcpy(head,buf,received ); + head+=received; + } + + /* Keep track of remaining size of + * the file left to be uploaded */ + remaining -= received; + } + + /* Close file upon upload completion */ + ESP_LOGI(TAG, "File reception complete. Invoking OTA process."); + err = start_ota(NULL, binary_buffer, req->content_len); + if(err!=ESP_OK){ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "OTA processing failed"); goto bail_out; } - /* Write buffer content to file on storage */ - if (received ) { - memcpy(head,buf,received ); - head+=received; - } - - /* Keep track of remaining size of - * the file left to be uploaded */ - remaining -= received; + //todo: handle this in ajax. For now, just send the root page + httpd_resp_send(req, (const char *)success, strlen(success)); } - - /* Close file upon upload completion */ - ESP_LOGI(TAG, "File reception complete. Invoking OTA process."); - err = start_ota(NULL, binary_buffer, req->content_len); - if(err!=ESP_OK){ - httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "OTA processing failed"); - goto bail_out; - } - - //todo: handle this in ajax. For now, just send the root page - httpd_resp_send(req, (const char *)success, strlen(success)); - bail_out: return err; } -#endif char * get_ap_ip_address(){ static char ap_ip_address[IP4ADDR_STRLEN_MAX]={}; diff --git a/components/wifi-manager/http_server_handlers.h b/components/wifi-manager/http_server_handlers.h index 390394a1..fbaaabf5 100644 --- a/components/wifi-manager/http_server_handlers.h +++ b/components/wifi-manager/http_server_handlers.h @@ -88,9 +88,7 @@ esp_err_t connect_delete_handler(httpd_req_t *req); esp_err_t reboot_ota_post_handler(httpd_req_t *req); esp_err_t reboot_post_handler(httpd_req_t *req); esp_err_t recovery_post_handler(httpd_req_t *req); -#if RECOVERY_APPLICATION esp_err_t flash_post_handler(httpd_req_t *req); -#endif esp_err_t status_get_handler(httpd_req_t *req); esp_err_t messages_get_handler(httpd_req_t *req); @@ -111,13 +109,13 @@ typedef struct rest_server_context { * @brief RTOS task for the HTTP server. Do not start manually. * @see void http_server_start() */ -void CODE_RAM_LOCATION http_server(void *pvParameters); +void http_server(void *pvParameters); /* @brief helper function that processes one HTTP request at a time */ -void CODE_RAM_LOCATION http_server_netconn_serve(struct netconn *conn); +void http_server_netconn_serve(struct netconn *conn); /* @brief create the task for the http server */ -esp_err_t CODE_RAM_LOCATION http_server_start(); +esp_err_t http_server_start(); /** * @brief gets a char* pointer to the first occurence of header_name withing the complete http request request. @@ -130,9 +128,9 @@ esp_err_t CODE_RAM_LOCATION http_server_start(); * @param len the size of the header value if found. * @return pointer to the beginning of the header value. */ -char* CODE_RAM_LOCATION http_server_get_header(char *request, char *header_name, int *len); +char* http_server_get_header(char *request, char *header_name, int *len); -void CODE_RAM_LOCATION strreplace(char *src, char *str, char *rep); +void strreplace(char *src, char *str, char *rep); /* @brief lock the json config object */ bool http_server_lock_json_object(TickType_t xTicksToWait); /* @brief unlock the json config object */ diff --git a/components/wifi-manager/wifi_manager.c b/components/wifi-manager/wifi_manager.c index bee31721..090b4a7b 100644 --- a/components/wifi-manager/wifi_manager.c +++ b/components/wifi-manager/wifi_manager.c @@ -1440,7 +1440,7 @@ void wifi_manager( void * pvParameters ){ break; case ORDER_RESTART_OTA_URL: ESP_LOGD(TAG, "Calling start_ota."); - start_ota(msg.param); + start_ota(msg.param, NULL, 0); free(msg.param); break; diff --git a/components/wifi-manager/wifi_manager.h b/components/wifi-manager/wifi_manager.h index 9aa12da6..4d61fead 100644 --- a/components/wifi-manager/wifi_manager.h +++ b/components/wifi-manager/wifi_manager.h @@ -42,17 +42,6 @@ extern "C" { #include "squeezelite-ota.h" #include "cJSON.h" -#ifndef RECOVERY_APPLICATION -#error "RECOVERY_APPLICATION not defined. Defaulting to squeezelite" -#endif - -#if RECOVERY_APPLICATION==1 -#elif RECOVERY_APPLICATION==0 -#else -#error "unknown configuration" -#endif - - /** * @brief Defines the maximum size of a SSID name. 32 is IEEE standard. diff --git a/components/wifi-manager/wifi_manager_http_server.c b/components/wifi-manager/wifi_manager_http_server.c index deb91352..207283a8 100644 --- a/components/wifi-manager/wifi_manager_http_server.c +++ b/components/wifi-manager/wifi_manager_http_server.c @@ -31,6 +31,7 @@ #include "freertos/task.h" #include "config.h" #include "messaging.h" +#include "platform_esp32.h" static const char TAG[] = "http_server"; static httpd_handle_t _server = NULL; @@ -74,13 +75,10 @@ void register_regular_handlers(httpd_handle_t server){ httpd_uri_t connect_delete = { .uri = "/connect.json", .method = HTTP_DELETE, .handler = connect_delete_handler, .user_ctx = rest_context }; httpd_register_uri_handler(server, &connect_delete); -#if RECOVERY_APPLICATION - - httpd_uri_t flash_post = { .uri = "/flash.json", .method = HTTP_POST, .handler = flash_post_handler, .user_ctx = rest_context }; - httpd_register_uri_handler(server, &flash_post); -#endif - - + if(is_recovery_running){ + httpd_uri_t flash_post = { .uri = "/flash.json", .method = HTTP_POST, .handler = flash_post_handler, .user_ctx = rest_context }; + httpd_register_uri_handler(server, &flash_post); + } // from https://github.com/tripflex/wifi-captive-portal/blob/master/src/mgos_wifi_captive_portal.c // https://unix.stackexchange.com/questions/432190/why-isnt-androids-captive-portal-detection-triggering-a-browser-window // Known HTTP GET requests to check for Captive Portal diff --git a/main/esp_app_main.c b/main/esp_app_main.c index 54acbfac..fa6a8a04 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -76,18 +76,6 @@ const char * str_or_unknown(const char * str) { return (str?str:unknown_string_p /* 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){ - static ip4_addr_t ip; - tcpip_adapter_ip_info_t ipInfo; - - tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ipInfo); - if (ip.addr && ipInfo.ip.addr != ip.addr) { - ESP_LOGW(TAG, "IP change, need to reboot"); - if(!wait_for_commit()){ - ESP_LOGW(TAG,"Unable to commit configuration. "); - } - esp_restart(); - } - ip.addr = ipInfo.ip.addr; ESP_LOGI(TAG, "I have a connection!"); messaging_post_message(MESSAGING_INFO,MESSAGING_CLASS_SYSTEM,"Wifi connected"); xEventGroupSetBits(wifi_event_group, CONNECTED_BIT); @@ -442,7 +430,7 @@ void app_main() taskYIELD(); } ESP_LOGI(TAG,"Updating firmware from link: %s",fwurl); - start_ota(fwurl); + start_ota(fwurl, NULL, 0); } else { ESP_LOGE(TAG,"Restarted to application partition. We're not going to perform OTA!"); diff --git a/squeezelite.cmake b/squeezelite.cmake index 2190d648..d93760e2 100644 --- a/squeezelite.cmake +++ b/squeezelite.cmake @@ -1,5 +1,7 @@ +#include($ENV{IDF_PATH}/components/esptool_py/project_include.cmake) + if(NOT SDKCONFIG OR NOT IDF_PATH OR NOT IDF_TARGET ) message(FATAL_ERROR "squeezelite should not be made outside of the main project !") endif()