Goran Mahovlic
2 years ago
460 changed files with 138635 additions and 157 deletions
@ -0,0 +1,3 @@
|
||||
eclipse.preferences.version=1 |
||||
svd_custom_file_path= |
||||
svd_file_path=platform\:/plugin/com.st.stm32cube.ide.mcu.productdb.debug/resources/cmsis/STMicroelectronics_CMSIS_SVD/STM32L496.svd |
@ -0,0 +1,74 @@
|
||||
com.st.stm32cube.ide.mcu.ide.oss.source.checker.libnano.problem.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(\\"Float formatting support\\")"} |
||||
eclipse.preferences.version=1 |
||||
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.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.localvarreturn=-Warning |
||||
org.eclipse.cdt.codan.checkers.localvarreturn.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(\\"Returning the address of a local variable\\")"} |
||||
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.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.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.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.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.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.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.BlacklistProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.BlacklistProblem.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 or method is blacklisted\\")",blacklist\=>()} |
||||
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\\")",checkMacro\=>true} |
||||
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.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.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.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.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.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.FloatCompareProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.FloatCompareProblem.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(\\"Direct float comparison\\")"} |
||||
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.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.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.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.MagicNumberProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.MagicNumberProblem.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(\\"Avoid magic numbers\\")",checkArray\=>true,checkOperatorParen\=>true,exceptions\=>(1,0,-1,2,1.0,0.0,-1.0)} |
||||
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.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.MissReferenceProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.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 reference return value in assignment operator\\")"} |
||||
org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.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 self check in assignment operator\\")"} |
||||
org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem.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(\\"Multiple variable declaration\\")"} |
||||
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.NoDiscardProblem=Warning |
||||
org.eclipse.cdt.codan.internal.checkers.NoDiscardProblem.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 value not evaluated\\")",macro\=>true} |
||||
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.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.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.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.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.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.ShallowCopyProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.ShallowCopyProblem.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(\\"Miss copy constructor or assignment operator\\")",onlynew\=>false} |
||||
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.StaticVariableInHeaderProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.StaticVariableInHeaderProblem.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(\\"Static variable in header file\\")"} |
||||
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.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.SymbolShadowingProblem=-Warning |
||||
org.eclipse.cdt.codan.internal.checkers.SymbolShadowingProblem.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 shadowing\\")",paramFuncParameters\=>true} |
||||
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.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.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.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.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\\")"} |
@ -0,0 +1,6 @@
|
||||
doxygen/doxygen_new_line_after_brief=true |
||||
doxygen/doxygen_use_brief_tag=false |
||||
doxygen/doxygen_use_javadoc_tags=true |
||||
doxygen/doxygen_use_pre_tag=false |
||||
doxygen/doxygen_use_structural_commands=false |
||||
eclipse.preferences.version=1 |
@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1 |
||||
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false |
@ -0,0 +1,48 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/core/alloc.cpp \ |
||||
../Middlewares/eez/core/debug.cpp \ |
||||
../Middlewares/eez/core/eeprom.cpp \ |
||||
../Middlewares/eez/core/hmi.cpp \ |
||||
../Middlewares/eez/core/memory.cpp \ |
||||
../Middlewares/eez/core/os.cpp \ |
||||
../Middlewares/eez/core/unit.cpp \ |
||||
../Middlewares/eez/core/util.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/core/alloc.o \ |
||||
./Middlewares/eez/core/debug.o \ |
||||
./Middlewares/eez/core/eeprom.o \ |
||||
./Middlewares/eez/core/hmi.o \ |
||||
./Middlewares/eez/core/memory.o \ |
||||
./Middlewares/eez/core/os.o \ |
||||
./Middlewares/eez/core/unit.o \ |
||||
./Middlewares/eez/core/util.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/core/alloc.d \ |
||||
./Middlewares/eez/core/debug.d \ |
||||
./Middlewares/eez/core/eeprom.d \ |
||||
./Middlewares/eez/core/hmi.d \ |
||||
./Middlewares/eez/core/memory.d \ |
||||
./Middlewares/eez/core/os.d \ |
||||
./Middlewares/eez/core/unit.d \ |
||||
./Middlewares/eez/core/util.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/core/%.o Middlewares/eez/core/%.su: ../Middlewares/eez/core/%.cpp Middlewares/eez/core/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-core |
||||
|
||||
clean-Middlewares-2f-eez-2f-core: |
||||
-$(RM) ./Middlewares/eez/core/alloc.d ./Middlewares/eez/core/alloc.o ./Middlewares/eez/core/alloc.su ./Middlewares/eez/core/debug.d ./Middlewares/eez/core/debug.o ./Middlewares/eez/core/debug.su ./Middlewares/eez/core/eeprom.d ./Middlewares/eez/core/eeprom.o ./Middlewares/eez/core/eeprom.su ./Middlewares/eez/core/hmi.d ./Middlewares/eez/core/hmi.o ./Middlewares/eez/core/hmi.su ./Middlewares/eez/core/memory.d ./Middlewares/eez/core/memory.o ./Middlewares/eez/core/memory.su ./Middlewares/eez/core/os.d ./Middlewares/eez/core/os.o ./Middlewares/eez/core/os.su ./Middlewares/eez/core/unit.d ./Middlewares/eez/core/unit.o ./Middlewares/eez/core/unit.su ./Middlewares/eez/core/util.d ./Middlewares/eez/core/util.o ./Middlewares/eez/core/util.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-core |
||||
|
@ -0,0 +1,111 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/flow/components/animate.cpp \ |
||||
../Middlewares/eez/flow/components/call_action.cpp \ |
||||
../Middlewares/eez/flow/components/catch_error.cpp \ |
||||
../Middlewares/eez/flow/components/compare.cpp \ |
||||
../Middlewares/eez/flow/components/constant.cpp \ |
||||
../Middlewares/eez/flow/components/counter.cpp \ |
||||
../Middlewares/eez/flow/components/delay.cpp \ |
||||
../Middlewares/eez/flow/components/end.cpp \ |
||||
../Middlewares/eez/flow/components/error.cpp \ |
||||
../Middlewares/eez/flow/components/expr_eval.cpp \ |
||||
../Middlewares/eez/flow/components/input.cpp \ |
||||
../Middlewares/eez/flow/components/is_true.cpp \ |
||||
../Middlewares/eez/flow/components/layout_view_widget.cpp \ |
||||
../Middlewares/eez/flow/components/log.cpp \ |
||||
../Middlewares/eez/flow/components/loop.cpp \ |
||||
../Middlewares/eez/flow/components/noop.cpp \ |
||||
../Middlewares/eez/flow/components/on_event.cpp \ |
||||
../Middlewares/eez/flow/components/output.cpp \ |
||||
../Middlewares/eez/flow/components/roller_widget.cpp \ |
||||
../Middlewares/eez/flow/components/select_language.cpp \ |
||||
../Middlewares/eez/flow/components/set_page_direction.cpp \ |
||||
../Middlewares/eez/flow/components/set_variable.cpp \ |
||||
../Middlewares/eez/flow/components/show_keyboard.cpp \ |
||||
../Middlewares/eez/flow/components/show_keypad.cpp \ |
||||
../Middlewares/eez/flow/components/show_message_box.cpp \ |
||||
../Middlewares/eez/flow/components/show_page.cpp \ |
||||
../Middlewares/eez/flow/components/start.cpp \ |
||||
../Middlewares/eez/flow/components/switch.cpp \ |
||||
../Middlewares/eez/flow/components/watch_variable.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/flow/components/animate.o \ |
||||
./Middlewares/eez/flow/components/call_action.o \ |
||||
./Middlewares/eez/flow/components/catch_error.o \ |
||||
./Middlewares/eez/flow/components/compare.o \ |
||||
./Middlewares/eez/flow/components/constant.o \ |
||||
./Middlewares/eez/flow/components/counter.o \ |
||||
./Middlewares/eez/flow/components/delay.o \ |
||||
./Middlewares/eez/flow/components/end.o \ |
||||
./Middlewares/eez/flow/components/error.o \ |
||||
./Middlewares/eez/flow/components/expr_eval.o \ |
||||
./Middlewares/eez/flow/components/input.o \ |
||||
./Middlewares/eez/flow/components/is_true.o \ |
||||
./Middlewares/eez/flow/components/layout_view_widget.o \ |
||||
./Middlewares/eez/flow/components/log.o \ |
||||
./Middlewares/eez/flow/components/loop.o \ |
||||
./Middlewares/eez/flow/components/noop.o \ |
||||
./Middlewares/eez/flow/components/on_event.o \ |
||||
./Middlewares/eez/flow/components/output.o \ |
||||
./Middlewares/eez/flow/components/roller_widget.o \ |
||||
./Middlewares/eez/flow/components/select_language.o \ |
||||
./Middlewares/eez/flow/components/set_page_direction.o \ |
||||
./Middlewares/eez/flow/components/set_variable.o \ |
||||
./Middlewares/eez/flow/components/show_keyboard.o \ |
||||
./Middlewares/eez/flow/components/show_keypad.o \ |
||||
./Middlewares/eez/flow/components/show_message_box.o \ |
||||
./Middlewares/eez/flow/components/show_page.o \ |
||||
./Middlewares/eez/flow/components/start.o \ |
||||
./Middlewares/eez/flow/components/switch.o \ |
||||
./Middlewares/eez/flow/components/watch_variable.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/flow/components/animate.d \ |
||||
./Middlewares/eez/flow/components/call_action.d \ |
||||
./Middlewares/eez/flow/components/catch_error.d \ |
||||
./Middlewares/eez/flow/components/compare.d \ |
||||
./Middlewares/eez/flow/components/constant.d \ |
||||
./Middlewares/eez/flow/components/counter.d \ |
||||
./Middlewares/eez/flow/components/delay.d \ |
||||
./Middlewares/eez/flow/components/end.d \ |
||||
./Middlewares/eez/flow/components/error.d \ |
||||
./Middlewares/eez/flow/components/expr_eval.d \ |
||||
./Middlewares/eez/flow/components/input.d \ |
||||
./Middlewares/eez/flow/components/is_true.d \ |
||||
./Middlewares/eez/flow/components/layout_view_widget.d \ |
||||
./Middlewares/eez/flow/components/log.d \ |
||||
./Middlewares/eez/flow/components/loop.d \ |
||||
./Middlewares/eez/flow/components/noop.d \ |
||||
./Middlewares/eez/flow/components/on_event.d \ |
||||
./Middlewares/eez/flow/components/output.d \ |
||||
./Middlewares/eez/flow/components/roller_widget.d \ |
||||
./Middlewares/eez/flow/components/select_language.d \ |
||||
./Middlewares/eez/flow/components/set_page_direction.d \ |
||||
./Middlewares/eez/flow/components/set_variable.d \ |
||||
./Middlewares/eez/flow/components/show_keyboard.d \ |
||||
./Middlewares/eez/flow/components/show_keypad.d \ |
||||
./Middlewares/eez/flow/components/show_message_box.d \ |
||||
./Middlewares/eez/flow/components/show_page.d \ |
||||
./Middlewares/eez/flow/components/start.d \ |
||||
./Middlewares/eez/flow/components/switch.d \ |
||||
./Middlewares/eez/flow/components/watch_variable.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/flow/components/%.o Middlewares/eez/flow/components/%.su: ../Middlewares/eez/flow/components/%.cpp Middlewares/eez/flow/components/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-flow-2f-components |
||||
|
||||
clean-Middlewares-2f-eez-2f-flow-2f-components: |
||||
-$(RM) ./Middlewares/eez/flow/components/animate.d ./Middlewares/eez/flow/components/animate.o ./Middlewares/eez/flow/components/animate.su ./Middlewares/eez/flow/components/call_action.d ./Middlewares/eez/flow/components/call_action.o ./Middlewares/eez/flow/components/call_action.su ./Middlewares/eez/flow/components/catch_error.d ./Middlewares/eez/flow/components/catch_error.o ./Middlewares/eez/flow/components/catch_error.su ./Middlewares/eez/flow/components/compare.d ./Middlewares/eez/flow/components/compare.o ./Middlewares/eez/flow/components/compare.su ./Middlewares/eez/flow/components/constant.d ./Middlewares/eez/flow/components/constant.o ./Middlewares/eez/flow/components/constant.su ./Middlewares/eez/flow/components/counter.d ./Middlewares/eez/flow/components/counter.o ./Middlewares/eez/flow/components/counter.su ./Middlewares/eez/flow/components/delay.d ./Middlewares/eez/flow/components/delay.o ./Middlewares/eez/flow/components/delay.su ./Middlewares/eez/flow/components/end.d ./Middlewares/eez/flow/components/end.o ./Middlewares/eez/flow/components/end.su ./Middlewares/eez/flow/components/error.d ./Middlewares/eez/flow/components/error.o ./Middlewares/eez/flow/components/error.su ./Middlewares/eez/flow/components/expr_eval.d ./Middlewares/eez/flow/components/expr_eval.o ./Middlewares/eez/flow/components/expr_eval.su ./Middlewares/eez/flow/components/input.d ./Middlewares/eez/flow/components/input.o ./Middlewares/eez/flow/components/input.su ./Middlewares/eez/flow/components/is_true.d ./Middlewares/eez/flow/components/is_true.o ./Middlewares/eez/flow/components/is_true.su ./Middlewares/eez/flow/components/layout_view_widget.d ./Middlewares/eez/flow/components/layout_view_widget.o ./Middlewares/eez/flow/components/layout_view_widget.su ./Middlewares/eez/flow/components/log.d ./Middlewares/eez/flow/components/log.o ./Middlewares/eez/flow/components/log.su ./Middlewares/eez/flow/components/loop.d ./Middlewares/eez/flow/components/loop.o ./Middlewares/eez/flow/components/loop.su ./Middlewares/eez/flow/components/noop.d ./Middlewares/eez/flow/components/noop.o ./Middlewares/eez/flow/components/noop.su ./Middlewares/eez/flow/components/on_event.d ./Middlewares/eez/flow/components/on_event.o ./Middlewares/eez/flow/components/on_event.su ./Middlewares/eez/flow/components/output.d ./Middlewares/eez/flow/components/output.o ./Middlewares/eez/flow/components/output.su ./Middlewares/eez/flow/components/roller_widget.d ./Middlewares/eez/flow/components/roller_widget.o ./Middlewares/eez/flow/components/roller_widget.su ./Middlewares/eez/flow/components/select_language.d ./Middlewares/eez/flow/components/select_language.o ./Middlewares/eez/flow/components/select_language.su ./Middlewares/eez/flow/components/set_page_direction.d ./Middlewares/eez/flow/components/set_page_direction.o ./Middlewares/eez/flow/components/set_page_direction.su ./Middlewares/eez/flow/components/set_variable.d ./Middlewares/eez/flow/components/set_variable.o ./Middlewares/eez/flow/components/set_variable.su ./Middlewares/eez/flow/components/show_keyboard.d ./Middlewares/eez/flow/components/show_keyboard.o ./Middlewares/eez/flow/components/show_keyboard.su ./Middlewares/eez/flow/components/show_keypad.d ./Middlewares/eez/flow/components/show_keypad.o ./Middlewares/eez/flow/components/show_keypad.su ./Middlewares/eez/flow/components/show_message_box.d ./Middlewares/eez/flow/components/show_message_box.o ./Middlewares/eez/flow/components/show_message_box.su ./Middlewares/eez/flow/components/show_page.d ./Middlewares/eez/flow/components/show_page.o ./Middlewares/eez/flow/components/show_page.su ./Middlewares/eez/flow/components/start.d ./Middlewares/eez/flow/components/start.o ./Middlewares/eez/flow/components/start.su ./Middlewares/eez/flow/components/switch.d ./Middlewares/eez/flow/components/switch.o ./Middlewares/eez/flow/components/switch.su ./Middlewares/eez/flow/components/watch_variable.d ./Middlewares/eez/flow/components/watch_variable.o ./Middlewares/eez/flow/components/watch_variable.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-flow-2f-components |
||||
|
@ -0,0 +1,51 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/flow/components.cpp \ |
||||
../Middlewares/eez/flow/dashboard_api.cpp \ |
||||
../Middlewares/eez/flow/debugger.cpp \ |
||||
../Middlewares/eez/flow/expression.cpp \ |
||||
../Middlewares/eez/flow/flow.cpp \ |
||||
../Middlewares/eez/flow/hooks.cpp \ |
||||
../Middlewares/eez/flow/operations.cpp \ |
||||
../Middlewares/eez/flow/private.cpp \ |
||||
../Middlewares/eez/flow/queue.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/flow/components.o \ |
||||
./Middlewares/eez/flow/dashboard_api.o \ |
||||
./Middlewares/eez/flow/debugger.o \ |
||||
./Middlewares/eez/flow/expression.o \ |
||||
./Middlewares/eez/flow/flow.o \ |
||||
./Middlewares/eez/flow/hooks.o \ |
||||
./Middlewares/eez/flow/operations.o \ |
||||
./Middlewares/eez/flow/private.o \ |
||||
./Middlewares/eez/flow/queue.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/flow/components.d \ |
||||
./Middlewares/eez/flow/dashboard_api.d \ |
||||
./Middlewares/eez/flow/debugger.d \ |
||||
./Middlewares/eez/flow/expression.d \ |
||||
./Middlewares/eez/flow/flow.d \ |
||||
./Middlewares/eez/flow/hooks.d \ |
||||
./Middlewares/eez/flow/operations.d \ |
||||
./Middlewares/eez/flow/private.d \ |
||||
./Middlewares/eez/flow/queue.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/flow/%.o Middlewares/eez/flow/%.su: ../Middlewares/eez/flow/%.cpp Middlewares/eez/flow/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-flow |
||||
|
||||
clean-Middlewares-2f-eez-2f-flow: |
||||
-$(RM) ./Middlewares/eez/flow/components.d ./Middlewares/eez/flow/components.o ./Middlewares/eez/flow/components.su ./Middlewares/eez/flow/dashboard_api.d ./Middlewares/eez/flow/dashboard_api.o ./Middlewares/eez/flow/dashboard_api.su ./Middlewares/eez/flow/debugger.d ./Middlewares/eez/flow/debugger.o ./Middlewares/eez/flow/debugger.su ./Middlewares/eez/flow/expression.d ./Middlewares/eez/flow/expression.o ./Middlewares/eez/flow/expression.su ./Middlewares/eez/flow/flow.d ./Middlewares/eez/flow/flow.o ./Middlewares/eez/flow/flow.su ./Middlewares/eez/flow/hooks.d ./Middlewares/eez/flow/hooks.o ./Middlewares/eez/flow/hooks.su ./Middlewares/eez/flow/operations.d ./Middlewares/eez/flow/operations.o ./Middlewares/eez/flow/operations.su ./Middlewares/eez/flow/private.d ./Middlewares/eez/flow/private.o ./Middlewares/eez/flow/private.su ./Middlewares/eez/flow/queue.d ./Middlewares/eez/flow/queue.o ./Middlewares/eez/flow/queue.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-flow |
||||
|
@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/fs/simulator/fs.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/fs/simulator/fs.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/fs/simulator/fs.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/fs/simulator/%.o Middlewares/eez/fs/simulator/%.su: ../Middlewares/eez/fs/simulator/%.cpp Middlewares/eez/fs/simulator/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-fs-2f-simulator |
||||
|
||||
clean-Middlewares-2f-eez-2f-fs-2f-simulator: |
||||
-$(RM) ./Middlewares/eez/fs/simulator/fs.d ./Middlewares/eez/fs/simulator/fs.o ./Middlewares/eez/fs/simulator/fs.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-fs-2f-simulator |
||||
|
@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/fs/stm32/fs.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/fs/stm32/fs.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/fs/stm32/fs.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/fs/stm32/%.o Middlewares/eez/fs/stm32/%.su: ../Middlewares/eez/fs/stm32/%.cpp Middlewares/eez/fs/stm32/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-fs-2f-stm32 |
||||
|
||||
clean-Middlewares-2f-eez-2f-fs-2f-stm32: |
||||
-$(RM) ./Middlewares/eez/fs/stm32/fs.d ./Middlewares/eez/fs/stm32/fs.o ./Middlewares/eez/fs/stm32/fs.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-fs-2f-stm32 |
||||
|
@ -0,0 +1,90 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/gui/action_impl.cpp \ |
||||
../Middlewares/eez/gui/animation.cpp \ |
||||
../Middlewares/eez/gui/app_context.cpp \ |
||||
../Middlewares/eez/gui/assets.cpp \ |
||||
../Middlewares/eez/gui/assets_fix_offsets.cpp \ |
||||
../Middlewares/eez/gui/data.cpp \ |
||||
../Middlewares/eez/gui/display.cpp \ |
||||
../Middlewares/eez/gui/draw.cpp \ |
||||
../Middlewares/eez/gui/event.cpp \ |
||||
../Middlewares/eez/gui/font.cpp \ |
||||
../Middlewares/eez/gui/geometry.cpp \ |
||||
../Middlewares/eez/gui/gui.cpp \ |
||||
../Middlewares/eez/gui/hooks.cpp \ |
||||
../Middlewares/eez/gui/keypad.cpp \ |
||||
../Middlewares/eez/gui/overlay.cpp \ |
||||
../Middlewares/eez/gui/page.cpp \ |
||||
../Middlewares/eez/gui/thread.cpp \ |
||||
../Middlewares/eez/gui/touch.cpp \ |
||||
../Middlewares/eez/gui/touch_calibration.cpp \ |
||||
../Middlewares/eez/gui/touch_filter.cpp \ |
||||
../Middlewares/eez/gui/update.cpp \ |
||||
../Middlewares/eez/gui/widget.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/gui/action_impl.o \ |
||||
./Middlewares/eez/gui/animation.o \ |
||||
./Middlewares/eez/gui/app_context.o \ |
||||
./Middlewares/eez/gui/assets.o \ |
||||
./Middlewares/eez/gui/assets_fix_offsets.o \ |
||||
./Middlewares/eez/gui/data.o \ |
||||
./Middlewares/eez/gui/display.o \ |
||||
./Middlewares/eez/gui/draw.o \ |
||||
./Middlewares/eez/gui/event.o \ |
||||
./Middlewares/eez/gui/font.o \ |
||||
./Middlewares/eez/gui/geometry.o \ |
||||
./Middlewares/eez/gui/gui.o \ |
||||
./Middlewares/eez/gui/hooks.o \ |
||||
./Middlewares/eez/gui/keypad.o \ |
||||
./Middlewares/eez/gui/overlay.o \ |
||||
./Middlewares/eez/gui/page.o \ |
||||
./Middlewares/eez/gui/thread.o \ |
||||
./Middlewares/eez/gui/touch.o \ |
||||
./Middlewares/eez/gui/touch_calibration.o \ |
||||
./Middlewares/eez/gui/touch_filter.o \ |
||||
./Middlewares/eez/gui/update.o \ |
||||
./Middlewares/eez/gui/widget.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/gui/action_impl.d \ |
||||
./Middlewares/eez/gui/animation.d \ |
||||
./Middlewares/eez/gui/app_context.d \ |
||||
./Middlewares/eez/gui/assets.d \ |
||||
./Middlewares/eez/gui/assets_fix_offsets.d \ |
||||
./Middlewares/eez/gui/data.d \ |
||||
./Middlewares/eez/gui/display.d \ |
||||
./Middlewares/eez/gui/draw.d \ |
||||
./Middlewares/eez/gui/event.d \ |
||||
./Middlewares/eez/gui/font.d \ |
||||
./Middlewares/eez/gui/geometry.d \ |
||||
./Middlewares/eez/gui/gui.d \ |
||||
./Middlewares/eez/gui/hooks.d \ |
||||
./Middlewares/eez/gui/keypad.d \ |
||||
./Middlewares/eez/gui/overlay.d \ |
||||
./Middlewares/eez/gui/page.d \ |
||||
./Middlewares/eez/gui/thread.d \ |
||||
./Middlewares/eez/gui/touch.d \ |
||||
./Middlewares/eez/gui/touch_calibration.d \ |
||||
./Middlewares/eez/gui/touch_filter.d \ |
||||
./Middlewares/eez/gui/update.d \ |
||||
./Middlewares/eez/gui/widget.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/gui/%.o Middlewares/eez/gui/%.su: ../Middlewares/eez/gui/%.cpp Middlewares/eez/gui/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-gui |
||||
|
||||
clean-Middlewares-2f-eez-2f-gui: |
||||
-$(RM) ./Middlewares/eez/gui/action_impl.d ./Middlewares/eez/gui/action_impl.o ./Middlewares/eez/gui/action_impl.su ./Middlewares/eez/gui/animation.d ./Middlewares/eez/gui/animation.o ./Middlewares/eez/gui/animation.su ./Middlewares/eez/gui/app_context.d ./Middlewares/eez/gui/app_context.o ./Middlewares/eez/gui/app_context.su ./Middlewares/eez/gui/assets.d ./Middlewares/eez/gui/assets.o ./Middlewares/eez/gui/assets.su ./Middlewares/eez/gui/assets_fix_offsets.d ./Middlewares/eez/gui/assets_fix_offsets.o ./Middlewares/eez/gui/assets_fix_offsets.su ./Middlewares/eez/gui/data.d ./Middlewares/eez/gui/data.o ./Middlewares/eez/gui/data.su ./Middlewares/eez/gui/display.d ./Middlewares/eez/gui/display.o ./Middlewares/eez/gui/display.su ./Middlewares/eez/gui/draw.d ./Middlewares/eez/gui/draw.o ./Middlewares/eez/gui/draw.su ./Middlewares/eez/gui/event.d ./Middlewares/eez/gui/event.o ./Middlewares/eez/gui/event.su ./Middlewares/eez/gui/font.d ./Middlewares/eez/gui/font.o ./Middlewares/eez/gui/font.su ./Middlewares/eez/gui/geometry.d ./Middlewares/eez/gui/geometry.o ./Middlewares/eez/gui/geometry.su ./Middlewares/eez/gui/gui.d ./Middlewares/eez/gui/gui.o ./Middlewares/eez/gui/gui.su ./Middlewares/eez/gui/hooks.d ./Middlewares/eez/gui/hooks.o ./Middlewares/eez/gui/hooks.su ./Middlewares/eez/gui/keypad.d ./Middlewares/eez/gui/keypad.o ./Middlewares/eez/gui/keypad.su ./Middlewares/eez/gui/overlay.d ./Middlewares/eez/gui/overlay.o ./Middlewares/eez/gui/overlay.su ./Middlewares/eez/gui/page.d ./Middlewares/eez/gui/page.o ./Middlewares/eez/gui/page.su ./Middlewares/eez/gui/thread.d ./Middlewares/eez/gui/thread.o ./Middlewares/eez/gui/thread.su ./Middlewares/eez/gui/touch.d ./Middlewares/eez/gui/touch.o ./Middlewares/eez/gui/touch.su ./Middlewares/eez/gui/touch_calibration.d ./Middlewares/eez/gui/touch_calibration.o ./Middlewares/eez/gui/touch_calibration.su ./Middlewares/eez/gui/touch_filter.d ./Middlewares/eez/gui/touch_filter.o ./Middlewares/eez/gui/touch_filter.su ./Middlewares/eez/gui/update.d ./Middlewares/eez/gui/update.o ./Middlewares/eez/gui/update.su ./Middlewares/eez/gui/widget.d ./Middlewares/eez/gui/widget.o ./Middlewares/eez/gui/widget.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-gui |
||||
|
@ -0,0 +1,42 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/gui/widgets/containers/app_view.cpp \ |
||||
../Middlewares/eez/gui/widgets/containers/container.cpp \ |
||||
../Middlewares/eez/gui/widgets/containers/grid.cpp \ |
||||
../Middlewares/eez/gui/widgets/containers/layout_view.cpp \ |
||||
../Middlewares/eez/gui/widgets/containers/list.cpp \ |
||||
../Middlewares/eez/gui/widgets/containers/select.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/gui/widgets/containers/app_view.o \ |
||||
./Middlewares/eez/gui/widgets/containers/container.o \ |
||||
./Middlewares/eez/gui/widgets/containers/grid.o \ |
||||
./Middlewares/eez/gui/widgets/containers/layout_view.o \ |
||||
./Middlewares/eez/gui/widgets/containers/list.o \ |
||||
./Middlewares/eez/gui/widgets/containers/select.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/gui/widgets/containers/app_view.d \ |
||||
./Middlewares/eez/gui/widgets/containers/container.d \ |
||||
./Middlewares/eez/gui/widgets/containers/grid.d \ |
||||
./Middlewares/eez/gui/widgets/containers/layout_view.d \ |
||||
./Middlewares/eez/gui/widgets/containers/list.d \ |
||||
./Middlewares/eez/gui/widgets/containers/select.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/gui/widgets/containers/%.o Middlewares/eez/gui/widgets/containers/%.su: ../Middlewares/eez/gui/widgets/containers/%.cpp Middlewares/eez/gui/widgets/containers/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-gui-2f-widgets-2f-containers |
||||
|
||||
clean-Middlewares-2f-eez-2f-gui-2f-widgets-2f-containers: |
||||
-$(RM) ./Middlewares/eez/gui/widgets/containers/app_view.d ./Middlewares/eez/gui/widgets/containers/app_view.o ./Middlewares/eez/gui/widgets/containers/app_view.su ./Middlewares/eez/gui/widgets/containers/container.d ./Middlewares/eez/gui/widgets/containers/container.o ./Middlewares/eez/gui/widgets/containers/container.su ./Middlewares/eez/gui/widgets/containers/grid.d ./Middlewares/eez/gui/widgets/containers/grid.o ./Middlewares/eez/gui/widgets/containers/grid.su ./Middlewares/eez/gui/widgets/containers/layout_view.d ./Middlewares/eez/gui/widgets/containers/layout_view.o ./Middlewares/eez/gui/widgets/containers/layout_view.su ./Middlewares/eez/gui/widgets/containers/list.d ./Middlewares/eez/gui/widgets/containers/list.o ./Middlewares/eez/gui/widgets/containers/list.su ./Middlewares/eez/gui/widgets/containers/select.d ./Middlewares/eez/gui/widgets/containers/select.o ./Middlewares/eez/gui/widgets/containers/select.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-gui-2f-widgets-2f-containers |
||||
|
@ -0,0 +1,87 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/gui/widgets/bar_graph.cpp \ |
||||
../Middlewares/eez/gui/widgets/bitmap.cpp \ |
||||
../Middlewares/eez/gui/widgets/button.cpp \ |
||||
../Middlewares/eez/gui/widgets/button_group.cpp \ |
||||
../Middlewares/eez/gui/widgets/canvas.cpp \ |
||||
../Middlewares/eez/gui/widgets/display_data.cpp \ |
||||
../Middlewares/eez/gui/widgets/drop_down_list.cpp \ |
||||
../Middlewares/eez/gui/widgets/gauge.cpp \ |
||||
../Middlewares/eez/gui/widgets/input.cpp \ |
||||
../Middlewares/eez/gui/widgets/list_graph.cpp \ |
||||
../Middlewares/eez/gui/widgets/multiline_text.cpp \ |
||||
../Middlewares/eez/gui/widgets/progress.cpp \ |
||||
../Middlewares/eez/gui/widgets/rectangle.cpp \ |
||||
../Middlewares/eez/gui/widgets/roller.cpp \ |
||||
../Middlewares/eez/gui/widgets/scroll_bar.cpp \ |
||||
../Middlewares/eez/gui/widgets/slider.cpp \ |
||||
../Middlewares/eez/gui/widgets/switch.cpp \ |
||||
../Middlewares/eez/gui/widgets/text.cpp \ |
||||
../Middlewares/eez/gui/widgets/toggle_button.cpp \ |
||||
../Middlewares/eez/gui/widgets/up_down.cpp \ |
||||
../Middlewares/eez/gui/widgets/yt_graph.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/gui/widgets/bar_graph.o \ |
||||
./Middlewares/eez/gui/widgets/bitmap.o \ |
||||
./Middlewares/eez/gui/widgets/button.o \ |
||||
./Middlewares/eez/gui/widgets/button_group.o \ |
||||
./Middlewares/eez/gui/widgets/canvas.o \ |
||||
./Middlewares/eez/gui/widgets/display_data.o \ |
||||
./Middlewares/eez/gui/widgets/drop_down_list.o \ |
||||
./Middlewares/eez/gui/widgets/gauge.o \ |
||||
./Middlewares/eez/gui/widgets/input.o \ |
||||
./Middlewares/eez/gui/widgets/list_graph.o \ |
||||
./Middlewares/eez/gui/widgets/multiline_text.o \ |
||||
./Middlewares/eez/gui/widgets/progress.o \ |
||||
./Middlewares/eez/gui/widgets/rectangle.o \ |
||||
./Middlewares/eez/gui/widgets/roller.o \ |
||||
./Middlewares/eez/gui/widgets/scroll_bar.o \ |
||||
./Middlewares/eez/gui/widgets/slider.o \ |
||||
./Middlewares/eez/gui/widgets/switch.o \ |
||||
./Middlewares/eez/gui/widgets/text.o \ |
||||
./Middlewares/eez/gui/widgets/toggle_button.o \ |
||||
./Middlewares/eez/gui/widgets/up_down.o \ |
||||
./Middlewares/eez/gui/widgets/yt_graph.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/gui/widgets/bar_graph.d \ |
||||
./Middlewares/eez/gui/widgets/bitmap.d \ |
||||
./Middlewares/eez/gui/widgets/button.d \ |
||||
./Middlewares/eez/gui/widgets/button_group.d \ |
||||
./Middlewares/eez/gui/widgets/canvas.d \ |
||||
./Middlewares/eez/gui/widgets/display_data.d \ |
||||
./Middlewares/eez/gui/widgets/drop_down_list.d \ |
||||
./Middlewares/eez/gui/widgets/gauge.d \ |
||||
./Middlewares/eez/gui/widgets/input.d \ |
||||
./Middlewares/eez/gui/widgets/list_graph.d \ |
||||
./Middlewares/eez/gui/widgets/multiline_text.d \ |
||||
./Middlewares/eez/gui/widgets/progress.d \ |
||||
./Middlewares/eez/gui/widgets/rectangle.d \ |
||||
./Middlewares/eez/gui/widgets/roller.d \ |
||||
./Middlewares/eez/gui/widgets/scroll_bar.d \ |
||||
./Middlewares/eez/gui/widgets/slider.d \ |
||||
./Middlewares/eez/gui/widgets/switch.d \ |
||||
./Middlewares/eez/gui/widgets/text.d \ |
||||
./Middlewares/eez/gui/widgets/toggle_button.d \ |
||||
./Middlewares/eez/gui/widgets/up_down.d \ |
||||
./Middlewares/eez/gui/widgets/yt_graph.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/gui/widgets/%.o Middlewares/eez/gui/widgets/%.su: ../Middlewares/eez/gui/widgets/%.cpp Middlewares/eez/gui/widgets/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-gui-2f-widgets |
||||
|
||||
clean-Middlewares-2f-eez-2f-gui-2f-widgets: |
||||
-$(RM) ./Middlewares/eez/gui/widgets/bar_graph.d ./Middlewares/eez/gui/widgets/bar_graph.o ./Middlewares/eez/gui/widgets/bar_graph.su ./Middlewares/eez/gui/widgets/bitmap.d ./Middlewares/eez/gui/widgets/bitmap.o ./Middlewares/eez/gui/widgets/bitmap.su ./Middlewares/eez/gui/widgets/button.d ./Middlewares/eez/gui/widgets/button.o ./Middlewares/eez/gui/widgets/button.su ./Middlewares/eez/gui/widgets/button_group.d ./Middlewares/eez/gui/widgets/button_group.o ./Middlewares/eez/gui/widgets/button_group.su ./Middlewares/eez/gui/widgets/canvas.d ./Middlewares/eez/gui/widgets/canvas.o ./Middlewares/eez/gui/widgets/canvas.su ./Middlewares/eez/gui/widgets/display_data.d ./Middlewares/eez/gui/widgets/display_data.o ./Middlewares/eez/gui/widgets/display_data.su ./Middlewares/eez/gui/widgets/drop_down_list.d ./Middlewares/eez/gui/widgets/drop_down_list.o ./Middlewares/eez/gui/widgets/drop_down_list.su ./Middlewares/eez/gui/widgets/gauge.d ./Middlewares/eez/gui/widgets/gauge.o ./Middlewares/eez/gui/widgets/gauge.su ./Middlewares/eez/gui/widgets/input.d ./Middlewares/eez/gui/widgets/input.o ./Middlewares/eez/gui/widgets/input.su ./Middlewares/eez/gui/widgets/list_graph.d ./Middlewares/eez/gui/widgets/list_graph.o ./Middlewares/eez/gui/widgets/list_graph.su ./Middlewares/eez/gui/widgets/multiline_text.d ./Middlewares/eez/gui/widgets/multiline_text.o ./Middlewares/eez/gui/widgets/multiline_text.su ./Middlewares/eez/gui/widgets/progress.d ./Middlewares/eez/gui/widgets/progress.o ./Middlewares/eez/gui/widgets/progress.su ./Middlewares/eez/gui/widgets/rectangle.d ./Middlewares/eez/gui/widgets/rectangle.o ./Middlewares/eez/gui/widgets/rectangle.su ./Middlewares/eez/gui/widgets/roller.d ./Middlewares/eez/gui/widgets/roller.o ./Middlewares/eez/gui/widgets/roller.su ./Middlewares/eez/gui/widgets/scroll_bar.d ./Middlewares/eez/gui/widgets/scroll_bar.o ./Middlewares/eez/gui/widgets/scroll_bar.su ./Middlewares/eez/gui/widgets/slider.d ./Middlewares/eez/gui/widgets/slider.o ./Middlewares/eez/gui/widgets/slider.su ./Middlewares/eez/gui/widgets/switch.d ./Middlewares/eez/gui/widgets/switch.o ./Middlewares/eez/gui/widgets/switch.su ./Middlewares/eez/gui/widgets/text.d ./Middlewares/eez/gui/widgets/text.o ./Middlewares/eez/gui/widgets/text.su ./Middlewares/eez/gui/widgets/toggle_button.d ./Middlewares/eez/gui/widgets/toggle_button.o ./Middlewares/eez/gui/widgets/toggle_button.su ./Middlewares/eez/gui/widgets/up_down.d ./Middlewares/eez/gui/widgets/up_down.o ./Middlewares/eez/gui/widgets/up_down.su ./Middlewares/eez/gui/widgets/yt_graph.d ./Middlewares/eez/gui/widgets/yt_graph.o ./Middlewares/eez/gui/widgets/yt_graph.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-gui-2f-widgets |
||||
|
@ -0,0 +1,105 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/libs/agg/agg2d.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_arc.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_arrowhead.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_bezier_arc.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_bspline.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_color_rgba.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_curves.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_embedded_raster_fonts.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_gsv_text.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_image_filters.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_line_aa_basics.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_line_profile_aa.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_rounded_rect.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_sqrt_tables.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_trans_affine.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_trans_double_path.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_trans_single_path.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_trans_warp_magnifier.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_bspline.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_contour.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_dash.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_markers_term.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vcgen_stroke.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.cpp \ |
||||
../Middlewares/eez/libs/agg/agg_vpgen_segmentator.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/libs/agg/agg2d.o \ |
||||
./Middlewares/eez/libs/agg/agg_arc.o \ |
||||
./Middlewares/eez/libs/agg/agg_arrowhead.o \ |
||||
./Middlewares/eez/libs/agg/agg_bezier_arc.o \ |
||||
./Middlewares/eez/libs/agg/agg_bspline.o \ |
||||
./Middlewares/eez/libs/agg/agg_color_rgba.o \ |
||||
./Middlewares/eez/libs/agg/agg_curves.o \ |
||||
./Middlewares/eez/libs/agg/agg_embedded_raster_fonts.o \ |
||||
./Middlewares/eez/libs/agg/agg_gsv_text.o \ |
||||
./Middlewares/eez/libs/agg/agg_image_filters.o \ |
||||
./Middlewares/eez/libs/agg/agg_line_aa_basics.o \ |
||||
./Middlewares/eez/libs/agg/agg_line_profile_aa.o \ |
||||
./Middlewares/eez/libs/agg/agg_rounded_rect.o \ |
||||
./Middlewares/eez/libs/agg/agg_sqrt_tables.o \ |
||||
./Middlewares/eez/libs/agg/agg_trans_affine.o \ |
||||
./Middlewares/eez/libs/agg/agg_trans_double_path.o \ |
||||
./Middlewares/eez/libs/agg/agg_trans_single_path.o \ |
||||
./Middlewares/eez/libs/agg/agg_trans_warp_magnifier.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_bspline.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_contour.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_dash.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_markers_term.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.o \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_stroke.o \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.o \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.o \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_segmentator.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/libs/agg/agg2d.d \ |
||||
./Middlewares/eez/libs/agg/agg_arc.d \ |
||||
./Middlewares/eez/libs/agg/agg_arrowhead.d \ |
||||
./Middlewares/eez/libs/agg/agg_bezier_arc.d \ |
||||
./Middlewares/eez/libs/agg/agg_bspline.d \ |
||||
./Middlewares/eez/libs/agg/agg_color_rgba.d \ |
||||
./Middlewares/eez/libs/agg/agg_curves.d \ |
||||
./Middlewares/eez/libs/agg/agg_embedded_raster_fonts.d \ |
||||
./Middlewares/eez/libs/agg/agg_gsv_text.d \ |
||||
./Middlewares/eez/libs/agg/agg_image_filters.d \ |
||||
./Middlewares/eez/libs/agg/agg_line_aa_basics.d \ |
||||
./Middlewares/eez/libs/agg/agg_line_profile_aa.d \ |
||||
./Middlewares/eez/libs/agg/agg_rounded_rect.d \ |
||||
./Middlewares/eez/libs/agg/agg_sqrt_tables.d \ |
||||
./Middlewares/eez/libs/agg/agg_trans_affine.d \ |
||||
./Middlewares/eez/libs/agg/agg_trans_double_path.d \ |
||||
./Middlewares/eez/libs/agg/agg_trans_single_path.d \ |
||||
./Middlewares/eez/libs/agg/agg_trans_warp_magnifier.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_bspline.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_contour.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_dash.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_markers_term.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.d \ |
||||
./Middlewares/eez/libs/agg/agg_vcgen_stroke.d \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.d \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.d \ |
||||
./Middlewares/eez/libs/agg/agg_vpgen_segmentator.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/libs/agg/%.o Middlewares/eez/libs/agg/%.su: ../Middlewares/eez/libs/agg/%.cpp Middlewares/eez/libs/agg/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-libs-2f-agg |
||||
|
||||
clean-Middlewares-2f-eez-2f-libs-2f-agg: |
||||
-$(RM) ./Middlewares/eez/libs/agg/agg2d.d ./Middlewares/eez/libs/agg/agg2d.o ./Middlewares/eez/libs/agg/agg2d.su ./Middlewares/eez/libs/agg/agg_arc.d ./Middlewares/eez/libs/agg/agg_arc.o ./Middlewares/eez/libs/agg/agg_arc.su ./Middlewares/eez/libs/agg/agg_arrowhead.d ./Middlewares/eez/libs/agg/agg_arrowhead.o ./Middlewares/eez/libs/agg/agg_arrowhead.su ./Middlewares/eez/libs/agg/agg_bezier_arc.d ./Middlewares/eez/libs/agg/agg_bezier_arc.o ./Middlewares/eez/libs/agg/agg_bezier_arc.su ./Middlewares/eez/libs/agg/agg_bspline.d ./Middlewares/eez/libs/agg/agg_bspline.o ./Middlewares/eez/libs/agg/agg_bspline.su ./Middlewares/eez/libs/agg/agg_color_rgba.d ./Middlewares/eez/libs/agg/agg_color_rgba.o ./Middlewares/eez/libs/agg/agg_color_rgba.su ./Middlewares/eez/libs/agg/agg_curves.d ./Middlewares/eez/libs/agg/agg_curves.o ./Middlewares/eez/libs/agg/agg_curves.su ./Middlewares/eez/libs/agg/agg_embedded_raster_fonts.d ./Middlewares/eez/libs/agg/agg_embedded_raster_fonts.o ./Middlewares/eez/libs/agg/agg_embedded_raster_fonts.su ./Middlewares/eez/libs/agg/agg_gsv_text.d ./Middlewares/eez/libs/agg/agg_gsv_text.o ./Middlewares/eez/libs/agg/agg_gsv_text.su ./Middlewares/eez/libs/agg/agg_image_filters.d ./Middlewares/eez/libs/agg/agg_image_filters.o ./Middlewares/eez/libs/agg/agg_image_filters.su ./Middlewares/eez/libs/agg/agg_line_aa_basics.d ./Middlewares/eez/libs/agg/agg_line_aa_basics.o ./Middlewares/eez/libs/agg/agg_line_aa_basics.su ./Middlewares/eez/libs/agg/agg_line_profile_aa.d ./Middlewares/eez/libs/agg/agg_line_profile_aa.o ./Middlewares/eez/libs/agg/agg_line_profile_aa.su ./Middlewares/eez/libs/agg/agg_rounded_rect.d ./Middlewares/eez/libs/agg/agg_rounded_rect.o ./Middlewares/eez/libs/agg/agg_rounded_rect.su ./Middlewares/eez/libs/agg/agg_sqrt_tables.d ./Middlewares/eez/libs/agg/agg_sqrt_tables.o ./Middlewares/eez/libs/agg/agg_sqrt_tables.su ./Middlewares/eez/libs/agg/agg_trans_affine.d ./Middlewares/eez/libs/agg/agg_trans_affine.o ./Middlewares/eez/libs/agg/agg_trans_affine.su ./Middlewares/eez/libs/agg/agg_trans_double_path.d ./Middlewares/eez/libs/agg/agg_trans_double_path.o ./Middlewares/eez/libs/agg/agg_trans_double_path.su ./Middlewares/eez/libs/agg/agg_trans_single_path.d ./Middlewares/eez/libs/agg/agg_trans_single_path.o ./Middlewares/eez/libs/agg/agg_trans_single_path.su ./Middlewares/eez/libs/agg/agg_trans_warp_magnifier.d ./Middlewares/eez/libs/agg/agg_trans_warp_magnifier.o ./Middlewares/eez/libs/agg/agg_trans_warp_magnifier.su ./Middlewares/eez/libs/agg/agg_vcgen_bspline.d ./Middlewares/eez/libs/agg/agg_vcgen_bspline.o ./Middlewares/eez/libs/agg/agg_vcgen_bspline.su ./Middlewares/eez/libs/agg/agg_vcgen_contour.d ./Middlewares/eez/libs/agg/agg_vcgen_contour.o ./Middlewares/eez/libs/agg/agg_vcgen_contour.su ./Middlewares/eez/libs/agg/agg_vcgen_dash.d ./Middlewares/eez/libs/agg/agg_vcgen_dash.o ./Middlewares/eez/libs/agg/agg_vcgen_dash.su ./Middlewares/eez/libs/agg/agg_vcgen_markers_term.d ./Middlewares/eez/libs/agg/agg_vcgen_markers_term.o ./Middlewares/eez/libs/agg/agg_vcgen_markers_term.su ./Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.d ./Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.o ./Middlewares/eez/libs/agg/agg_vcgen_smooth_poly1.su ./Middlewares/eez/libs/agg/agg_vcgen_stroke.d ./Middlewares/eez/libs/agg/agg_vcgen_stroke.o ./Middlewares/eez/libs/agg/agg_vcgen_stroke.su ./Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.d ./Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.o ./Middlewares/eez/libs/agg/agg_vpgen_clip_polygon.su ./Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.d ./Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.o ./Middlewares/eez/libs/agg/agg_vpgen_clip_polyline.su ./Middlewares/eez/libs/agg/agg_vpgen_segmentator.d ./Middlewares/eez/libs/agg/agg_vpgen_segmentator.o ./Middlewares/eez/libs/agg/agg_vpgen_segmentator.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-libs-2f-agg |
||||
|
@ -0,0 +1,51 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
C_SRCS += \
|
||||
../Middlewares/eez/libs/libscpi/src/error.c \ |
||||
../Middlewares/eez/libs/libscpi/src/expression.c \ |
||||
../Middlewares/eez/libs/libscpi/src/fifo.c \ |
||||
../Middlewares/eez/libs/libscpi/src/ieee488.c \ |
||||
../Middlewares/eez/libs/libscpi/src/lexer.c \ |
||||
../Middlewares/eez/libs/libscpi/src/minimal.c \ |
||||
../Middlewares/eez/libs/libscpi/src/parser.c \ |
||||
../Middlewares/eez/libs/libscpi/src/units.c \ |
||||
../Middlewares/eez/libs/libscpi/src/utils.c
|
||||
|
||||
C_DEPS += \
|
||||
./Middlewares/eez/libs/libscpi/src/error.d \ |
||||
./Middlewares/eez/libs/libscpi/src/expression.d \ |
||||
./Middlewares/eez/libs/libscpi/src/fifo.d \ |
||||
./Middlewares/eez/libs/libscpi/src/ieee488.d \ |
||||
./Middlewares/eez/libs/libscpi/src/lexer.d \ |
||||
./Middlewares/eez/libs/libscpi/src/minimal.d \ |
||||
./Middlewares/eez/libs/libscpi/src/parser.d \ |
||||
./Middlewares/eez/libs/libscpi/src/units.d \ |
||||
./Middlewares/eez/libs/libscpi/src/utils.d
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/libs/libscpi/src/error.o \ |
||||
./Middlewares/eez/libs/libscpi/src/expression.o \ |
||||
./Middlewares/eez/libs/libscpi/src/fifo.o \ |
||||
./Middlewares/eez/libs/libscpi/src/ieee488.o \ |
||||
./Middlewares/eez/libs/libscpi/src/lexer.o \ |
||||
./Middlewares/eez/libs/libscpi/src/minimal.o \ |
||||
./Middlewares/eez/libs/libscpi/src/parser.o \ |
||||
./Middlewares/eez/libs/libscpi/src/units.o \ |
||||
./Middlewares/eez/libs/libscpi/src/utils.o
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/libs/libscpi/src/%.o Middlewares/eez/libs/libscpi/src/%.su: ../Middlewares/eez/libs/libscpi/src/%.c Middlewares/eez/libs/libscpi/src/subdir.mk |
||||
arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-libs-2f-libscpi-2f-src |
||||
|
||||
clean-Middlewares-2f-eez-2f-libs-2f-libscpi-2f-src: |
||||
-$(RM) ./Middlewares/eez/libs/libscpi/src/error.d ./Middlewares/eez/libs/libscpi/src/error.o ./Middlewares/eez/libs/libscpi/src/error.su ./Middlewares/eez/libs/libscpi/src/expression.d ./Middlewares/eez/libs/libscpi/src/expression.o ./Middlewares/eez/libs/libscpi/src/expression.su ./Middlewares/eez/libs/libscpi/src/fifo.d ./Middlewares/eez/libs/libscpi/src/fifo.o ./Middlewares/eez/libs/libscpi/src/fifo.su ./Middlewares/eez/libs/libscpi/src/ieee488.d ./Middlewares/eez/libs/libscpi/src/ieee488.o ./Middlewares/eez/libs/libscpi/src/ieee488.su ./Middlewares/eez/libs/libscpi/src/lexer.d ./Middlewares/eez/libs/libscpi/src/lexer.o ./Middlewares/eez/libs/libscpi/src/lexer.su ./Middlewares/eez/libs/libscpi/src/minimal.d ./Middlewares/eez/libs/libscpi/src/minimal.o ./Middlewares/eez/libs/libscpi/src/minimal.su ./Middlewares/eez/libs/libscpi/src/parser.d ./Middlewares/eez/libs/libscpi/src/parser.o ./Middlewares/eez/libs/libscpi/src/parser.su ./Middlewares/eez/libs/libscpi/src/units.d ./Middlewares/eez/libs/libscpi/src/units.o ./Middlewares/eez/libs/libscpi/src/units.su ./Middlewares/eez/libs/libscpi/src/utils.d ./Middlewares/eez/libs/libscpi/src/utils.o ./Middlewares/eez/libs/libscpi/src/utils.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-libs-2f-libscpi-2f-src |
||||
|
@ -0,0 +1,27 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
C_SRCS += \
|
||||
../Middlewares/eez/libs/lz4/lz4.c
|
||||
|
||||
C_DEPS += \
|
||||
./Middlewares/eez/libs/lz4/lz4.d
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/libs/lz4/lz4.o
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/libs/lz4/%.o Middlewares/eez/libs/lz4/%.su: ../Middlewares/eez/libs/lz4/%.c Middlewares/eez/libs/lz4/subdir.mk |
||||
arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-libs-2f-lz4 |
||||
|
||||
clean-Middlewares-2f-eez-2f-libs-2f-lz4: |
||||
-$(RM) ./Middlewares/eez/libs/lz4/lz4.d ./Middlewares/eez/libs/lz4/lz4.o ./Middlewares/eez/libs/lz4/lz4.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-libs-2f-lz4 |
||||
|
@ -0,0 +1,36 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/platform/simulator/cmsis_os2.cpp \ |
||||
../Middlewares/eez/platform/simulator/display.cpp \ |
||||
../Middlewares/eez/platform/simulator/events.cpp \ |
||||
../Middlewares/eez/platform/simulator/touch.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/platform/simulator/cmsis_os2.o \ |
||||
./Middlewares/eez/platform/simulator/display.o \ |
||||
./Middlewares/eez/platform/simulator/events.o \ |
||||
./Middlewares/eez/platform/simulator/touch.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/platform/simulator/cmsis_os2.d \ |
||||
./Middlewares/eez/platform/simulator/display.d \ |
||||
./Middlewares/eez/platform/simulator/events.d \ |
||||
./Middlewares/eez/platform/simulator/touch.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/platform/simulator/%.o Middlewares/eez/platform/simulator/%.su: ../Middlewares/eez/platform/simulator/%.cpp Middlewares/eez/platform/simulator/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-platform-2f-simulator |
||||
|
||||
clean-Middlewares-2f-eez-2f-platform-2f-simulator: |
||||
-$(RM) ./Middlewares/eez/platform/simulator/cmsis_os2.d ./Middlewares/eez/platform/simulator/cmsis_os2.o ./Middlewares/eez/platform/simulator/cmsis_os2.su ./Middlewares/eez/platform/simulator/display.d ./Middlewares/eez/platform/simulator/display.o ./Middlewares/eez/platform/simulator/display.su ./Middlewares/eez/platform/simulator/events.d ./Middlewares/eez/platform/simulator/events.o ./Middlewares/eez/platform/simulator/events.su ./Middlewares/eez/platform/simulator/touch.d ./Middlewares/eez/platform/simulator/touch.o ./Middlewares/eez/platform/simulator/touch.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-platform-2f-simulator |
||||
|
@ -0,0 +1,30 @@
|
||||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
# Toolchain: GNU Tools for STM32 (10.3-2021.10)
|
||||
################################################################################
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
CPP_SRCS += \
|
||||
../Middlewares/eez/platform/stm32/display.cpp \ |
||||
../Middlewares/eez/platform/stm32/touch.cpp
|
||||
|
||||
OBJS += \
|
||||
./Middlewares/eez/platform/stm32/display.o \ |
||||
./Middlewares/eez/platform/stm32/touch.o
|
||||
|
||||
CPP_DEPS += \
|
||||
./Middlewares/eez/platform/stm32/display.d \ |
||||
./Middlewares/eez/platform/stm32/touch.d
|
||||
|
||||
|
||||
# Each subdirectory must supply rules for building sources it contributes
|
||||
Middlewares/eez/platform/stm32/%.o Middlewares/eez/platform/stm32/%.su: ../Middlewares/eez/platform/stm32/%.cpp Middlewares/eez/platform/stm32/subdir.mk |
||||
arm-none-eabi-g++ "$<" -mcpu=cortex-m4 -std=gnu++14 -g3 -DDEBUG -DUSE_HAL_DRIVER -DUSE_STM32469I_DISCO_REVB -DEEZ_PLATFORM_STM32 -DEEZ_PLATFORM_STM32F469I_DISCO -DLZ4_FORCE_MEMORY_ACCESS=0 -DSTM32L496xx -c -I../Core/Inc -I../FATFS/Target -I../FATFS/App -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F -I../Middlewares/Third_Party/FatFs/src -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I../Drivers/BSP/STM32469I-Discovery -I../Drivers/BSP/Components/Common -I../Utilities/CPU -I../Utilities/Log -I../Src/conf -I../Middlewares -I../Middlewares/eez/libs/agg -O0 -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
|
||||
|
||||
clean: clean-Middlewares-2f-eez-2f-platform-2f-stm32 |
||||
|
||||
clean-Middlewares-2f-eez-2f-platform-2f-stm32: |
||||
-$(RM) ./Middlewares/eez/platform/stm32/display.d ./Middlewares/eez/platform/stm32/display.o ./Middlewares/eez/platform/stm32/display.su ./Middlewares/eez/platform/stm32/touch.d ./Middlewares/eez/platform/stm32/touch.o ./Middlewares/eez/platform/stm32/touch.su
|
||||
|
||||
.PHONY: clean-Middlewares-2f-eez-2f-platform-2f-stm32 |
||||
|
@ -0,0 +1,201 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <math.h> |
||||
#include <assert.h> |
||||
#include <memory.h> |
||||
|
||||
#include <eez/core/alloc.h> |
||||
#include <eez/core/os.h> |
||||
|
||||
namespace eez { |
||||
|
||||
static const size_t ALIGNMENT = 8; |
||||
static const size_t MIN_BLOCK_SIZE = 8; |
||||
|
||||
struct AllocBlock { |
||||
AllocBlock *next; |
||||
int free; |
||||
size_t size; |
||||
uint32_t id; |
||||
}; |
||||
|
||||
static uint8_t *g_heap; |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#pragma GCC diagnostic push |
||||
#pragma GCC diagnostic ignored "-Wparentheses" |
||||
#endif |
||||
|
||||
EEZ_MUTEX_DECLARE(alloc); |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#pragma GCC diagnostic pop |
||||
#endif |
||||
|
||||
void initAllocHeap(uint8_t *heap, size_t heapSize) { |
||||
g_heap = heap; |
||||
|
||||
AllocBlock *first = (AllocBlock *)g_heap; |
||||
first->next = 0; |
||||
first->free = 1; |
||||
first->size = heapSize - sizeof(AllocBlock); |
||||
|
||||
EEZ_MUTEX_CREATE(alloc); |
||||
} |
||||
|
||||
void *alloc(size_t size, uint32_t id) { |
||||
if (size == 0) { |
||||
return nullptr; |
||||
} |
||||
|
||||
if (EEZ_MUTEX_WAIT(alloc, 0)) { |
||||
AllocBlock *firstBlock = (AllocBlock *)g_heap; |
||||
|
||||
AllocBlock *block = firstBlock; |
||||
size = ((size + ALIGNMENT - 1) / ALIGNMENT) * ALIGNMENT; |
||||
|
||||
// find free block with enough size
|
||||
// TODO merge multiple free consecutive blocks into one that has enough size
|
||||
while (block) { |
||||
if (block->free && block->size >= size) { |
||||
break; |
||||
} |
||||
block = block->next; |
||||
} |
||||
|
||||
if (!block) { |
||||
EEZ_MUTEX_RELEASE(alloc); |
||||
return nullptr; |
||||
} |
||||
|
||||
int remainingSize = block->size - size - sizeof(AllocBlock); |
||||
if (remainingSize >= (int)MIN_BLOCK_SIZE) { |
||||
// remainingSize is enough to create a new block
|
||||
auto newBlock = (AllocBlock *)((uint8_t *)block + sizeof(AllocBlock) + size); |
||||
newBlock->next = block->next; |
||||
newBlock->free = 1; |
||||
newBlock->size = remainingSize; |
||||
|
||||
block->next = newBlock; |
||||
block->size = size; |
||||
} |
||||
|
||||
block->free = 0; |
||||
block->id = id; |
||||
|
||||
EEZ_MUTEX_RELEASE(alloc); |
||||
|
||||
return block + 1; |
||||
} |
||||
|
||||
return nullptr; |
||||
} |
||||
|
||||
void free(void *ptr) { |
||||
if (ptr == 0) { |
||||
return; |
||||
} |
||||
|
||||
if (EEZ_MUTEX_WAIT(alloc, 0)) { |
||||
AllocBlock *firstBlock = (AllocBlock *)g_heap; |
||||
|
||||
AllocBlock *prevBlock = nullptr; |
||||
AllocBlock *block = firstBlock; |
||||
|
||||
while (block && block + 1 < ptr) { |
||||
prevBlock = block; |
||||
block = block->next; |
||||
} |
||||
|
||||
if (!block || block + 1 != ptr || block->free) { |
||||
assert(false); |
||||
EEZ_MUTEX_RELEASE(alloc); |
||||
return; |
||||
} |
||||
|
||||
// reset memory to catch errors when memory is used after free is called
|
||||
memset(ptr, 0xCC, block->size); |
||||
|
||||
auto nextBlock = block->next; |
||||
if (nextBlock && nextBlock->free) { |
||||
if (prevBlock && prevBlock->free) { |
||||
// both next and prev blocks are free, merge 3 blocks into one
|
||||
prevBlock->next = nextBlock->next; |
||||
prevBlock->size += sizeof(AllocBlock) + block->size + sizeof(AllocBlock) + nextBlock->size; |
||||
} else { |
||||
// next block is free, merge 2 blocks into one
|
||||
block->next = nextBlock->next; |
||||
block->size += sizeof(AllocBlock) + nextBlock->size; |
||||
block->free = 1; |
||||
} |
||||
} else if (prevBlock && prevBlock->free) { |
||||
// prev block is free, merge 2 blocks into one
|
||||
prevBlock->next = nextBlock; |
||||
prevBlock->size += sizeof(AllocBlock) + block->size; |
||||
} else { |
||||
// just free
|
||||
block->free = 1; |
||||
} |
||||
|
||||
EEZ_MUTEX_RELEASE(alloc); |
||||
} |
||||
} |
||||
|
||||
template<typename T> void freeObject(T *ptr) { |
||||
ptr->~T(); |
||||
free(ptr); |
||||
} |
||||
|
||||
#if OPTION_SCPI |
||||
void dumpAlloc(scpi_t *context) { |
||||
AllocBlock *first = (AllocBlock *)g_heap; |
||||
AllocBlock *block = first; |
||||
while (block) { |
||||
char buffer[100]; |
||||
if (block->free) { |
||||
snprintf(buffer, sizeof(buffer), "FREE: %d", (int)block->size); |
||||
} else { |
||||
snprintf(buffer, sizeof(buffer), "ALOC (0x%08x): %d", (unsigned int)block->id, (int)block->size); |
||||
} |
||||
SCPI_ResultText(context, buffer); |
||||
block = block->next; |
||||
} |
||||
} |
||||
#endif |
||||
|
||||
void getAllocInfo(uint32_t &free, uint32_t &alloc) { |
||||
free = 0; |
||||
alloc = 0; |
||||
if (EEZ_MUTEX_WAIT(alloc, 0)) { |
||||
AllocBlock *first = (AllocBlock *)g_heap; |
||||
AllocBlock *block = first; |
||||
while (block) { |
||||
if (block->free) { |
||||
free += block->size; |
||||
} else { |
||||
alloc += block->size; |
||||
} |
||||
block = block->next; |
||||
} |
||||
EEZ_MUTEX_RELEASE(alloc); |
||||
} |
||||
} |
||||
|
||||
} // eez
|
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
#include <math.h> |
||||
#include <new> |
||||
|
||||
#if OPTION_SCPI |
||||
#include <scpi/scpi.h> |
||||
#endif |
||||
|
||||
namespace eez { |
||||
|
||||
void initAllocHeap(uint8_t *heap, size_t heapSize); |
||||
|
||||
void *alloc(size_t size, uint32_t id); |
||||
void free(void *ptr); |
||||
|
||||
template<class T> struct ObjectAllocator { |
||||
static T *allocate(uint32_t id) { |
||||
auto ptr = alloc(sizeof(T), id); |
||||
return new (ptr) T; |
||||
} |
||||
static void deallocate(T* ptr) { |
||||
ptr->~T(); |
||||
free(ptr); |
||||
} |
||||
}; |
||||
|
||||
#if OPTION_SCPI |
||||
void dumpAlloc(scpi_t *context); |
||||
#endif |
||||
|
||||
void getAllocInfo(uint32_t &free, uint32_t &alloc); |
||||
|
||||
} // eez
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#ifdef DEBUG |
||||
|
||||
#include <cstdio> |
||||
#include <stdarg.h> |
||||
#include <string.h> |
||||
|
||||
#include <eez/core/debug.h> |
||||
|
||||
namespace eez { |
||||
namespace debug { |
||||
|
||||
void Trace(TraceType traceType, const char *format, ...) { |
||||
va_list args; |
||||
va_start(args, format); |
||||
|
||||
static const size_t BUFFER_SIZE = 256; |
||||
char buffer[BUFFER_SIZE + 1]; |
||||
|
||||
vsnprintf(buffer, BUFFER_SIZE, format, args); |
||||
buffer[BUFFER_SIZE] = 0; |
||||
|
||||
va_end(args); |
||||
|
||||
if (traceType == TRACE_TYPE_DEBUG) { |
||||
pushDebugTraceHook(buffer, strlen(buffer)); |
||||
} else if (traceType == TRACE_TYPE_INFO) { |
||||
pushInfoTraceHook(buffer, strlen(buffer)); |
||||
} else { |
||||
pushErrorTraceHook(buffer, strlen(buffer)); |
||||
} |
||||
} |
||||
|
||||
} // namespace debug
|
||||
} // namespace eez
|
||||
|
||||
extern "C" void debug_trace(const char *str, size_t len) { |
||||
eez::debug::pushDebugTraceHook(str, len); |
||||
} |
||||
|
||||
#endif // DEBUG
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#ifdef DEBUG |
||||
|
||||
#include <stdlib.h> |
||||
#include <stdint.h> |
||||
|
||||
namespace eez { |
||||
namespace debug { |
||||
|
||||
void pushDebugTraceHook(const char *message, size_t messageLength); |
||||
void pushInfoTraceHook(const char *message, size_t messageLength); |
||||
void pushErrorTraceHook(const char *message, size_t messageLength); |
||||
|
||||
enum TraceType { |
||||
TRACE_TYPE_DEBUG, |
||||
TRACE_TYPE_INFO, |
||||
TRACE_TYPE_ERROR |
||||
}; |
||||
|
||||
void Trace(TraceType traceType, const char *format, ...); |
||||
|
||||
} // namespace debug
|
||||
} // namespace eez
|
||||
|
||||
#define InfoTrace(...) ::eez::debug::Trace(::eez::debug::TRACE_TYPE_INFO, __VA_ARGS__) |
||||
#define ErrorTrace(...) ::eez::debug::Trace(::eez::debug::TRACE_TYPE_ERROR, __VA_ARGS__) |
||||
#define DebugTrace(...) ::eez::debug::Trace(::eez::debug::TRACE_TYPE_DEBUG, __VA_ARGS__) |
||||
|
||||
#else // NO DEBUG
|
||||
|
||||
#define InfoTrace(...) 0 |
||||
#define ErrorTrace(...) 0 |
||||
#define DebugTrace(...) 0 |
||||
|
||||
#endif |
@ -0,0 +1,211 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <memory.h> |
||||
|
||||
#include <eez/core/eeprom.h> |
||||
#include <eez/core/os.h> |
||||
#include <eez/core/util.h> |
||||
|
||||
//#include <bb3/system.h>
|
||||
//#include <bb3/psu/psu.h>
|
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) && !CONF_SURVIVE_MODE |
||||
#define USE_EEPROM 1 |
||||
#else |
||||
#define USE_EEPROM 0 |
||||
#endif |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#ifdef EEZ_PLATFORM_STM32F469I_DISCO |
||||
#else |
||||
#include <i2c.h> |
||||
#endif |
||||
#endif |
||||
|
||||
#if !USE_EEPROM |
||||
#include <eez/fs/fs.h> |
||||
#endif |
||||
|
||||
#if OPTION_SCPI |
||||
#include <scpi/scpi.h> |
||||
#endif |
||||
|
||||
namespace eez { |
||||
namespace eeprom { |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
// opcodes
|
||||
static const uint8_t WREN = 6; |
||||
static const uint8_t WRDI = 4; |
||||
static const uint8_t RDSR = 5; |
||||
static const uint8_t WRSR = 1; |
||||
static const uint8_t READ = 3; |
||||
static const uint8_t WRITE = 2; |
||||
|
||||
// EEPROM AT24C256C
|
||||
// I2C-Compatible (2-Wire) Serial EEPROM
|
||||
// 256-Kbit (32,768 x 8)
|
||||
// http://ww1.microchip.com/downloads/en/devicedoc/atmel-8568-seeprom-at24c256c-datasheet.pdf
|
||||
static const uint16_t EEPROM_ADDRESS = 0b10100000; |
||||
#endif |
||||
|
||||
TestResult g_testResult = TEST_FAILED; |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
|
||||
const int MAX_READ_CHUNK_SIZE = 16; |
||||
const int MAX_WRITE_CHUNK_SIZE = 16; |
||||
|
||||
bool readFromEEPROM(uint8_t *buffer, uint16_t bufferSize, uint16_t address) { |
||||
#ifdef EEZ_PLATFORM_STM32F469I_DISCO |
||||
return false; |
||||
#else |
||||
for (uint16_t i = 0; i < bufferSize; i += MAX_READ_CHUNK_SIZE) { |
||||
uint16_t chunkAddress = address + i; |
||||
|
||||
uint16_t chunkSize = MIN(MAX_READ_CHUNK_SIZE, bufferSize - i); |
||||
|
||||
uint8_t data[2] = { |
||||
I2C_MEM_ADD_MSB(chunkAddress), |
||||
I2C_MEM_ADD_LSB(chunkAddress) |
||||
}; |
||||
|
||||
HAL_StatusTypeDef returnValue; |
||||
|
||||
taskENTER_CRITICAL(); |
||||
returnValue = HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDRESS, data, 2, HAL_MAX_DELAY); |
||||
if (returnValue != HAL_OK) { |
||||
taskEXIT_CRITICAL(); |
||||
return false; |
||||
} |
||||
returnValue = HAL_I2C_Master_Receive(&hi2c1, EEPROM_ADDRESS, buffer + i, chunkSize, HAL_MAX_DELAY); |
||||
taskEXIT_CRITICAL(); |
||||
if (returnValue != HAL_OK) { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
#endif |
||||
} |
||||
|
||||
bool writeToEEPROM(const uint8_t *buffer, uint16_t bufferSize, uint16_t address) { |
||||
#ifdef EEZ_PLATFORM_STM32F469I_DISCO |
||||
return false; |
||||
#else |
||||
for (uint16_t i = 0; i < bufferSize; i += MAX_WRITE_CHUNK_SIZE) { |
||||
uint16_t chunkAddress = address + i; |
||||
|
||||
uint16_t chunkSize = MIN(MAX_WRITE_CHUNK_SIZE, bufferSize - i); |
||||
|
||||
HAL_StatusTypeDef returnValue; |
||||
|
||||
taskENTER_CRITICAL(); |
||||
returnValue = HAL_I2C_Mem_Write(&hi2c1, EEPROM_ADDRESS, chunkAddress, I2C_MEMADD_SIZE_16BIT, (uint8_t *)buffer + i, chunkSize, HAL_MAX_DELAY); |
||||
taskEXIT_CRITICAL(); |
||||
|
||||
if (returnValue != HAL_OK) { |
||||
return false; |
||||
} |
||||
|
||||
osDelay(5); |
||||
|
||||
// verify
|
||||
uint8_t verify[MAX_WRITE_CHUNK_SIZE]; |
||||
|
||||
uint8_t data[2] = { |
||||
I2C_MEM_ADD_MSB(chunkAddress), |
||||
I2C_MEM_ADD_LSB(chunkAddress) |
||||
}; |
||||
|
||||
taskENTER_CRITICAL(); |
||||
returnValue = HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDRESS, data, 2, HAL_MAX_DELAY); |
||||
if (returnValue != HAL_OK) { |
||||
taskEXIT_CRITICAL(); |
||||
return false; |
||||
} |
||||
returnValue = HAL_I2C_Master_Receive(&hi2c1, EEPROM_ADDRESS, verify, chunkSize, HAL_MAX_DELAY); |
||||
taskEXIT_CRITICAL(); |
||||
if (returnValue != HAL_OK) { |
||||
return false; |
||||
} |
||||
|
||||
for (int j = 0; j < chunkSize; ++j) { |
||||
if (buffer[i+j] != verify[j]) { |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
#endif |
||||
} |
||||
|
||||
#endif |
||||
|
||||
#if !USE_EEPROM |
||||
const char *EEPROM_FILE_PATH = "/EEPROM.state"; |
||||
#endif |
||||
|
||||
bool read(uint8_t *buffer, uint16_t bufferSize, uint16_t address) { |
||||
#if USE_EEPROM |
||||
return readFromEEPROM(buffer, bufferSize, address); |
||||
#else |
||||
File file; |
||||
if (!file.open(EEPROM_FILE_PATH, FILE_READ)) { |
||||
return false; |
||||
} |
||||
file.seek(address); |
||||
size_t readBytes = file.read(buffer, bufferSize); |
||||
if (readBytes < bufferSize) { |
||||
memset(buffer + readBytes, 0xFF, bufferSize - readBytes); |
||||
} |
||||
file.close(); |
||||
return true; |
||||
#endif |
||||
} |
||||
|
||||
bool write(const uint8_t *buffer, uint16_t bufferSize, uint16_t address) { |
||||
#if USE_EEPROM |
||||
return writeToEEPROM(buffer, bufferSize, address); |
||||
#else |
||||
File file; |
||||
if (!file.open(EEPROM_FILE_PATH, FILE_OPEN_ALWAYS | FILE_WRITE)) { |
||||
return false; |
||||
} |
||||
file.seek(address); |
||||
file.write(buffer, bufferSize); |
||||
file.close(); |
||||
return true; |
||||
#endif |
||||
} |
||||
|
||||
void init() { |
||||
g_testResult = TEST_OK; |
||||
} |
||||
|
||||
bool test() { |
||||
// TODO add test
|
||||
return g_testResult == TEST_OK; |
||||
} |
||||
|
||||
} // namespace eeprom
|
||||
} // namespace eez
|
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include <eez/core/os.h> |
||||
|
||||
namespace eez { |
||||
namespace eeprom { |
||||
|
||||
static const uint16_t EEPROM_SIZE = 32768; |
||||
|
||||
void init(); |
||||
bool test(); |
||||
|
||||
extern TestResult g_testResult; |
||||
|
||||
bool read(uint8_t *buffer, uint16_t buffer_size, uint16_t address); |
||||
bool write(const uint8_t *buffer, uint16_t buffer_size, uint16_t address); |
||||
|
||||
} // namespace eeprom
|
||||
} // namespace eez
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
namespace eez { |
||||
namespace mcu { |
||||
namespace encoder { |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
void write(int counter, bool clicked); |
||||
void setButtonState(bool pressed); |
||||
#endif |
||||
|
||||
} // namespace encoder
|
||||
} // namespace mcu
|
||||
} // namespace eez
|
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* EEZ PSU Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/hmi.h> |
||||
#include <eez/core/os.h> |
||||
|
||||
namespace eez { |
||||
namespace hmi { |
||||
|
||||
#define MAX_GUI_OR_ENCODER_INACTIVITY_TIME_MS 60 * 1000 |
||||
|
||||
static uint32_t g_timeOfLastActivity; |
||||
static bool g_inactivityTimeMaxed = true; |
||||
|
||||
void tick() { |
||||
if (!g_inactivityTimeMaxed) { |
||||
uint32_t inactivityPeriod = getInactivityPeriodMs(); |
||||
if (inactivityPeriod >= MAX_GUI_OR_ENCODER_INACTIVITY_TIME_MS) { |
||||
g_inactivityTimeMaxed = true; |
||||
} |
||||
} |
||||
} |
||||
|
||||
void noteActivity() { |
||||
g_timeOfLastActivity = millis(); |
||||
g_inactivityTimeMaxed = false; |
||||
} |
||||
|
||||
uint32_t getInactivityPeriodMs() { |
||||
if (g_inactivityTimeMaxed) { |
||||
return MAX_GUI_OR_ENCODER_INACTIVITY_TIME_MS; |
||||
} else { |
||||
return millis() - g_timeOfLastActivity; |
||||
} |
||||
} |
||||
|
||||
uint32_t getTimeOfLastActivity() { |
||||
if (g_inactivityTimeMaxed) { |
||||
return millis() - MAX_GUI_OR_ENCODER_INACTIVITY_TIME_MS; |
||||
} else { |
||||
return g_timeOfLastActivity; |
||||
} |
||||
} |
||||
|
||||
} // namespace hmi
|
||||
} // namespace eez
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* EEZ PSU Firmware |
||||
* Copyright (C) 2017-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
|
||||
namespace eez { |
||||
namespace hmi { |
||||
|
||||
void tick(); |
||||
|
||||
void noteActivity(); |
||||
uint32_t getInactivityPeriodMs(); |
||||
uint32_t getTimeOfLastActivity(); |
||||
|
||||
} |
||||
} // namespace eez::hmi
|
@ -0,0 +1,285 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2020-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include <eez/conf.h> |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#if OPTION_KEYBOARD |
||||
#include <usbh_hid.h> |
||||
#endif |
||||
#endif |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__) |
||||
#include <SDL.h> |
||||
#endif |
||||
|
||||
namespace eez { |
||||
namespace keyboard { |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#if OPTION_KEYBOARD |
||||
void onKeyboardEvent(USBH_HandleTypeDef *phost); |
||||
#endif |
||||
#endif |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) && !defined(__EMSCRIPTEN__) |
||||
void onKeyboardEvent(SDL_KeyboardEvent *key); |
||||
#endif |
||||
|
||||
bool isDisplayDirty(); |
||||
void updateDisplay(); |
||||
|
||||
void onPageChanged(); |
||||
|
||||
static const uint8_t KEY_MOD_LCTRL = 1 << 0; |
||||
static const uint8_t KEY_MOD_LSHIFT = 1 << 1; |
||||
static const uint8_t KEY_MOD_LALT = 1 << 2; |
||||
static const uint8_t KEY_MOD_LGUI = 1 << 3; |
||||
static const uint8_t KEY_MOD_RCTRL = 1 << 4; |
||||
static const uint8_t KEY_MOD_RSHIFT = 1 << 5; |
||||
static const uint8_t KEY_MOD_RALT = 1 << 6; |
||||
static const uint8_t KEY_MOD_RGUI = 1 << 7; |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
#define KEY_NONE 0x00 |
||||
#define KEY_ERRORROLLOVER 0x01 |
||||
#define KEY_POSTFAIL 0x02 |
||||
#define KEY_ERRORUNDEFINED 0x03 |
||||
#define KEY_A 0x04 |
||||
#define KEY_B 0x05 |
||||
#define KEY_C 0x06 |
||||
#define KEY_D 0x07 |
||||
#define KEY_E 0x08 |
||||
#define KEY_F 0x09 |
||||
#define KEY_G 0x0A |
||||
#define KEY_H 0x0B |
||||
#define KEY_I 0x0C |
||||
#define KEY_J 0x0D |
||||
#define KEY_K 0x0E |
||||
#define KEY_L 0x0F |
||||
#define KEY_M 0x10 |
||||
#define KEY_N 0x11 |
||||
#define KEY_O 0x12 |
||||
#define KEY_P 0x13 |
||||
#define KEY_Q 0x14 |
||||
#define KEY_R 0x15 |
||||
#define KEY_S 0x16 |
||||
#define KEY_T 0x17 |
||||
#define KEY_U 0x18 |
||||
#define KEY_V 0x19 |
||||
#define KEY_W 0x1A |
||||
#define KEY_X 0x1B |
||||
#define KEY_Y 0x1C |
||||
#define KEY_Z 0x1D |
||||
#define KEY_1_EXCLAMATION_MARK 0x1E |
||||
#define KEY_2_AT 0x1F |
||||
#define KEY_3_NUMBER_SIGN 0x20 |
||||
#define KEY_4_DOLLAR 0x21 |
||||
#define KEY_5_PERCENT 0x22 |
||||
#define KEY_6_CARET 0x23 |
||||
#define KEY_7_AMPERSAND 0x24 |
||||
#define KEY_8_ASTERISK 0x25 |
||||
#define KEY_9_OPARENTHESIS 0x26 |
||||
#define KEY_0_CPARENTHESIS 0x27 |
||||
#define KEY_ENTER 0x28 |
||||
#define KEY_ESCAPE 0x29 |
||||
#define KEY_BACKSPACE 0x2A |
||||
#define KEY_TAB 0x2B |
||||
#define KEY_SPACEBAR 0x2C |
||||
#define KEY_MINUS_UNDERSCORE 0x2D |
||||
#define KEY_EQUAL_PLUS 0x2E |
||||
#define KEY_OBRACKET_AND_OBRACE 0x2F |
||||
#define KEY_CBRACKET_AND_CBRACE 0x30 |
||||
#define KEY_BACKSLASH_VERTICAL_BAR 0x31 |
||||
#define KEY_NONUS_NUMBER_SIGN_TILDE 0x32 |
||||
#define KEY_SEMICOLON_COLON 0x33 |
||||
#define KEY_SINGLE_AND_DOUBLE_QUOTE 0x34 |
||||
#define KEY_GRAVE ACCENT AND TILDE 0x35 |
||||
#define KEY_COMMA_AND_LESS 0x36 |
||||
#define KEY_DOT_GREATER 0x37 |
||||
#define KEY_SLASH_QUESTION 0x38 |
||||
#define KEY_CAPS LOCK 0x39 |
||||
#define KEY_F1 0x3A |
||||
#define KEY_F2 0x3B |
||||
#define KEY_F3 0x3C |
||||
#define KEY_F4 0x3D |
||||
#define KEY_F5 0x3E |
||||
#define KEY_F6 0x3F |
||||
#define KEY_F7 0x40 |
||||
#define KEY_F8 0x41 |
||||
#define KEY_F9 0x42 |
||||
#define KEY_F10 0x43 |
||||
#define KEY_F11 0x44 |
||||
#define KEY_F12 0x45 |
||||
#define KEY_PRINTSCREEN 0x46 |
||||
#define KEY_SCROLL LOCK 0x47 |
||||
#define KEY_PAUSE 0x48 |
||||
#define KEY_INSERT 0x49 |
||||
#define KEY_HOME 0x4A |
||||
#define KEY_PAGEUP 0x4B |
||||
#define KEY_DELETE 0x4C |
||||
#define KEY_END1 0x4D |
||||
#define KEY_PAGEDOWN 0x4E |
||||
#define KEY_RIGHTARROW 0x4F |
||||
#define KEY_LEFTARROW 0x50 |
||||
#define KEY_DOWNARROW 0x51 |
||||
#define KEY_UPARROW 0x52 |
||||
#define KEY_KEYPAD_NUM_LOCK_AND_CLEAR 0x53 |
||||
#define KEY_KEYPAD_SLASH 0x54 |
||||
#define KEY_KEYPAD_ASTERIKS 0x55 |
||||
#define KEY_KEYPAD_MINUS 0x56 |
||||
#define KEY_KEYPAD_PLUS 0x57 |
||||
#define KEY_KEYPAD_ENTER 0x58 |
||||
#define KEY_KEYPAD_1_END 0x59 |
||||
#define KEY_KEYPAD_2_DOWN_ARROW 0x5A |
||||
#define KEY_KEYPAD_3_PAGEDN 0x5B |
||||
#define KEY_KEYPAD_4_LEFT_ARROW 0x5C |
||||
#define KEY_KEYPAD_5 0x5D |
||||
#define KEY_KEYPAD_6_RIGHT_ARROW 0x5E |
||||
#define KEY_KEYPAD_7_HOME 0x5F |
||||
#define KEY_KEYPAD_8_UP_ARROW 0x60 |
||||
#define KEY_KEYPAD_9_PAGEUP 0x61 |
||||
#define KEY_KEYPAD_0_INSERT 0x62 |
||||
#define KEY_KEYPAD_DECIMAL_SEPARATOR_DELETE 0x63 |
||||
#define KEY_NONUS_BACK_SLASH_VERTICAL_BAR 0x64 |
||||
#define KEY_APPLICATION 0x65 |
||||
#define KEY_POWER 0x66 |
||||
#define KEY_KEYPAD_EQUAL 0x67 |
||||
#define KEY_F13 0x68 |
||||
#define KEY_F14 0x69 |
||||
#define KEY_F15 0x6A |
||||
#define KEY_F16 0x6B |
||||
#define KEY_F17 0x6C |
||||
#define KEY_F18 0x6D |
||||
#define KEY_F19 0x6E |
||||
#define KEY_F20 0x6F |
||||
#define KEY_F21 0x70 |
||||
#define KEY_F22 0x71 |
||||
#define KEY_F23 0x72 |
||||
#define KEY_F24 0x73 |
||||
// #define KEY_EXECUTE 0x74
|
||||
#define KEY_HELP 0x75 |
||||
#define KEY_MENU 0x76 |
||||
#define KEY_SELECT 0x77 |
||||
#define KEY_STOP 0x78 |
||||
#define KEY_AGAIN 0x79 |
||||
#define KEY_UNDO 0x7A |
||||
#define KEY_CUT 0x7B |
||||
#define KEY_COPY 0x7C |
||||
#define KEY_PASTE 0x7D |
||||
#define KEY_FIND 0x7E |
||||
#define KEY_MUTE 0x7F |
||||
#define KEY_VOLUME_UP 0x80 |
||||
#define KEY_VOLUME_DOWN 0x81 |
||||
#define KEY_LOCKING_CAPS_LOCK 0x82 |
||||
#define KEY_LOCKING_NUM_LOCK 0x83 |
||||
#define KEY_LOCKING_SCROLL_LOCK 0x84 |
||||
#define KEY_KEYPAD_COMMA 0x85 |
||||
#define KEY_KEYPAD_EQUAL_SIGN 0x86 |
||||
#define KEY_INTERNATIONAL1 0x87 |
||||
#define KEY_INTERNATIONAL2 0x88 |
||||
#define KEY_INTERNATIONAL3 0x89 |
||||
#define KEY_INTERNATIONAL4 0x8A |
||||
#define KEY_INTERNATIONAL5 0x8B |
||||
#define KEY_INTERNATIONAL6 0x8C |
||||
#define KEY_INTERNATIONAL7 0x8D |
||||
#define KEY_INTERNATIONAL8 0x8E |
||||
#define KEY_INTERNATIONAL9 0x8F |
||||
#define KEY_LANG1 0x90 |
||||
#define KEY_LANG2 0x91 |
||||
#define KEY_LANG3 0x92 |
||||
#define KEY_LANG4 0x93 |
||||
#define KEY_LANG5 0x94 |
||||
#define KEY_LANG6 0x95 |
||||
#define KEY_LANG7 0x96 |
||||
#define KEY_LANG8 0x97 |
||||
#define KEY_LANG9 0x98 |
||||
#define KEY_ALTERNATE_ERASE 0x99 |
||||
#define KEY_SYSREQ 0x9A |
||||
#define KEY_CANCEL 0x9B |
||||
#define KEY_CLEAR 0x9C |
||||
#define KEY_PRIOR 0x9D |
||||
#define KEY_RETURN 0x9E |
||||
#define KEY_SEPARATOR 0x9F |
||||
#define KEY_OUT 0xA0 |
||||
#define KEY_OPER 0xA1 |
||||
#define KEY_CLEAR_AGAIN 0xA2 |
||||
#define KEY_CRSEL 0xA3 |
||||
#define KEY_EXSEL 0xA4 |
||||
#define KEY_KEYPAD_00 0xB0 |
||||
#define KEY_KEYPAD_000 0xB1 |
||||
#define KEY_THOUSANDS_SEPARATOR 0xB2 |
||||
#define KEY_DECIMAL_SEPARATOR 0xB3 |
||||
#define KEY_CURRENCY_UNIT 0xB4 |
||||
#define KEY_CURRENCY_SUB_UNIT 0xB5 |
||||
#define KEY_KEYPAD_OPARENTHESIS 0xB6 |
||||
#define KEY_KEYPAD_CPARENTHESIS 0xB7 |
||||
#define KEY_KEYPAD_OBRACE 0xB8 |
||||
#define KEY_KEYPAD_CBRACE 0xB9 |
||||
#define KEY_KEYPAD_TAB 0xBA |
||||
#define KEY_KEYPAD_BACKSPACE 0xBB |
||||
#define KEY_KEYPAD_A 0xBC |
||||
#define KEY_KEYPAD_B 0xBD |
||||
#define KEY_KEYPAD_C 0xBE |
||||
#define KEY_KEYPAD_D 0xBF |
||||
#define KEY_KEYPAD_E 0xC0 |
||||
#define KEY_KEYPAD_F 0xC1 |
||||
#define KEY_KEYPAD_XOR 0xC2 |
||||
#define KEY_KEYPAD_CARET 0xC3 |
||||
#define KEY_KEYPAD_PERCENT 0xC4 |
||||
#define KEY_KEYPAD_LESS 0xC5 |
||||
#define KEY_KEYPAD_GREATER 0xC6 |
||||
#define KEY_KEYPAD_AMPERSAND 0xC7 |
||||
#define KEY_KEYPAD_LOGICAL_AND 0xC8 |
||||
#define KEY_KEYPAD_VERTICAL_BAR 0xC9 |
||||
#define KEY_KEYPAD_LOGIACL_OR 0xCA |
||||
#define KEY_KEYPAD_COLON 0xCB |
||||
#define KEY_KEYPAD_NUMBER_SIGN 0xCC |
||||
#define KEY_KEYPAD_SPACE 0xCD |
||||
#define KEY_KEYPAD_AT 0xCE |
||||
#define KEY_KEYPAD_EXCLAMATION_MARK 0xCF |
||||
#define KEY_KEYPAD_MEMORY_STORE 0xD0 |
||||
#define KEY_KEYPAD_MEMORY_RECALL 0xD1 |
||||
#define KEY_KEYPAD_MEMORY_CLEAR 0xD2 |
||||
#define KEY_KEYPAD_MEMORY_ADD 0xD3 |
||||
#define KEY_KEYPAD_MEMORY_SUBTRACT 0xD4 |
||||
#define KEY_KEYPAD_MEMORY_MULTIPLY 0xD5 |
||||
#define KEY_KEYPAD_MEMORY_DIVIDE 0xD6 |
||||
#define KEY_KEYPAD_PLUSMINUS 0xD7 |
||||
#define KEY_KEYPAD_CLEAR 0xD8 |
||||
#define KEY_KEYPAD_CLEAR_ENTRY 0xD9 |
||||
#define KEY_KEYPAD_BINARY 0xDA |
||||
#define KEY_KEYPAD_OCTAL 0xDB |
||||
#define KEY_KEYPAD_DECIMAL 0xDC |
||||
#define KEY_KEYPAD_HEXADECIMAL 0xDD |
||||
#define KEY_LEFTCONTROL 0xE0 |
||||
#define KEY_LEFTSHIFT 0xE1 |
||||
#define KEY_LEFTALT 0xE2 |
||||
#define KEY_LEFT_GUI 0xE3 |
||||
#define KEY_RIGHTCONTROL 0xE4 |
||||
#define KEY_RIGHTSHIFT 0xE5 |
||||
#define KEY_RIGHTALT 0xE6 |
||||
#define KEY_RIGHT_GUI 0xE7 |
||||
#endif // EEZ_PLATFORM_STM32
|
||||
|
||||
} // keyboard
|
||||
} // eez
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <assert.h> |
||||
|
||||
#include <eez/core/memory.h> |
||||
|
||||
namespace eez { |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
uint8_t g_memory[MEMORY_SIZE] = { 0 }; |
||||
#endif |
||||
|
||||
uint8_t *DECOMPRESSED_ASSETS_START_ADDRESS; |
||||
uint8_t *FLOW_TO_DEBUGGER_MESSAGE_BUFFER; |
||||
|
||||
uint8_t *VRAM_BUFFER1_START_ADDRESS; |
||||
uint8_t *VRAM_BUFFER2_START_ADDRESS; |
||||
|
||||
uint8_t *VRAM_ANIMATION_BUFFER1_START_ADDRESS; |
||||
uint8_t *VRAM_ANIMATION_BUFFER2_START_ADDRESS; |
||||
|
||||
uint8_t *VRAM_AUX_BUFFER1_START_ADDRESS; |
||||
uint8_t *VRAM_AUX_BUFFER2_START_ADDRESS; |
||||
uint8_t *VRAM_AUX_BUFFER3_START_ADDRESS; |
||||
uint8_t *VRAM_AUX_BUFFER4_START_ADDRESS; |
||||
uint8_t *VRAM_AUX_BUFFER5_START_ADDRESS; |
||||
uint8_t *VRAM_AUX_BUFFER6_START_ADDRESS; |
||||
|
||||
uint8_t *SCREENSHOOT_BUFFER_START_ADDRESS; |
||||
|
||||
uint8_t *GUI_STATE_BUFFER; |
||||
|
||||
uint8_t *ALLOC_BUFFER; |
||||
uint32_t ALLOC_BUFFER_SIZE; |
||||
|
||||
void initMemory() { |
||||
initAssetsMemory(); |
||||
initOtherMemory(); |
||||
} |
||||
|
||||
void initAssetsMemory() { |
||||
ALLOC_BUFFER = MEMORY_BEGIN; |
||||
ALLOC_BUFFER_SIZE = MEMORY_SIZE; |
||||
|
||||
DECOMPRESSED_ASSETS_START_ADDRESS = allocBuffer(MAX_DECOMPRESSED_ASSETS_SIZE); |
||||
} |
||||
|
||||
void initOtherMemory() { |
||||
FLOW_TO_DEBUGGER_MESSAGE_BUFFER = allocBuffer(FLOW_TO_DEBUGGER_MESSAGE_BUFFER_SIZE); |
||||
|
||||
uint32_t VRAM_BUFFER_SIZE = DISPLAY_WIDTH * DISPLAY_HEIGHT * DISPLAY_BPP / 8; |
||||
|
||||
VRAM_BUFFER1_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_BUFFER2_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
|
||||
VRAM_ANIMATION_BUFFER1_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_ANIMATION_BUFFER2_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
|
||||
VRAM_AUX_BUFFER1_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_AUX_BUFFER2_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_AUX_BUFFER3_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_AUX_BUFFER4_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_AUX_BUFFER5_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
VRAM_AUX_BUFFER6_START_ADDRESS = allocBuffer(VRAM_BUFFER_SIZE); |
||||
|
||||
GUI_STATE_BUFFER = allocBuffer(GUI_STATE_BUFFER_SIZE); |
||||
|
||||
SCREENSHOOT_BUFFER_START_ADDRESS = VRAM_ANIMATION_BUFFER1_START_ADDRESS; |
||||
} |
||||
|
||||
uint8_t *allocBuffer(uint32_t size) { |
||||
size = ((size + 1023) / 1024) * 1024; |
||||
|
||||
auto buffer = ALLOC_BUFFER; |
||||
|
||||
assert(ALLOC_BUFFER_SIZE > size); |
||||
ALLOC_BUFFER += size; |
||||
ALLOC_BUFFER_SIZE -= size; |
||||
|
||||
return buffer; |
||||
} |
||||
|
||||
} // eez
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
#include <eez/conf.h> |
||||
|
||||
namespace eez { |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
static uint8_t * const MEMORY_BEGIN = (uint8_t *)0xc0000000u; |
||||
#if CONF_OPTION_FPGA |
||||
static const uint32_t MEMORY_SIZE = 32 * 1024 * 1024; |
||||
#elif defined(EEZ_PLATFORM_STM32F469I_DISCO) |
||||
static const uint32_t MEMORY_SIZE = 16 * 1024 * 1024; |
||||
#else |
||||
static const uint32_t MEMORY_SIZE = 8 * 1024 * 1024; |
||||
#endif |
||||
#endif |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
extern uint8_t g_memory[]; |
||||
static uint8_t * const MEMORY_BEGIN = g_memory; |
||||
static const uint32_t MEMORY_SIZE = 64 * 1024 * 1024; |
||||
#endif |
||||
|
||||
extern uint8_t *ALLOC_BUFFER; |
||||
extern uint32_t ALLOC_BUFFER_SIZE; |
||||
|
||||
extern uint8_t *DECOMPRESSED_ASSETS_START_ADDRESS; |
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
static const uint32_t MAX_DECOMPRESSED_ASSETS_SIZE = 2 * 1024 * 1024; |
||||
#endif |
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
static const uint32_t MAX_DECOMPRESSED_ASSETS_SIZE = 8 * 1024 * 1024; |
||||
#endif |
||||
|
||||
extern uint8_t *FLOW_TO_DEBUGGER_MESSAGE_BUFFER; |
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
static const uint32_t FLOW_TO_DEBUGGER_MESSAGE_BUFFER_SIZE = 32 * 1024; |
||||
#endif |
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
static const uint32_t FLOW_TO_DEBUGGER_MESSAGE_BUFFER_SIZE = 1024 * 1024; |
||||
#endif |
||||
|
||||
extern uint8_t *VRAM_BUFFER1_START_ADDRESS; |
||||
extern uint8_t *VRAM_BUFFER2_START_ADDRESS; |
||||
|
||||
extern uint8_t *VRAM_ANIMATION_BUFFER1_START_ADDRESS; |
||||
extern uint8_t *VRAM_ANIMATION_BUFFER2_START_ADDRESS; |
||||
|
||||
extern uint8_t *VRAM_AUX_BUFFER1_START_ADDRESS; |
||||
extern uint8_t *VRAM_AUX_BUFFER2_START_ADDRESS; |
||||
extern uint8_t *VRAM_AUX_BUFFER3_START_ADDRESS; |
||||
extern uint8_t *VRAM_AUX_BUFFER4_START_ADDRESS; |
||||
extern uint8_t *VRAM_AUX_BUFFER5_START_ADDRESS; |
||||
extern uint8_t *VRAM_AUX_BUFFER6_START_ADDRESS; |
||||
|
||||
extern uint8_t* SCREENSHOOT_BUFFER_START_ADDRESS; |
||||
|
||||
extern uint8_t* GUI_STATE_BUFFER; |
||||
|
||||
void initMemory(); |
||||
void initAssetsMemory(); |
||||
void initOtherMemory(); |
||||
uint8_t *allocBuffer(uint32_t size); |
||||
|
||||
} // eez
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2020-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/gui/event.h> |
||||
|
||||
namespace eez { |
||||
namespace mouse { |
||||
|
||||
bool isMouseEnabled(); |
||||
|
||||
bool isDisplayDirty(); |
||||
void updateDisplay(); |
||||
|
||||
void onPageChanged(); |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
void onMouseEvent(bool mouseButton1IsPressed, int mouseX, int mouseY); |
||||
#endif |
||||
|
||||
} // mouse
|
||||
} // eez
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#include <main.h> |
||||
#endif |
||||
|
||||
#include <eez/core/os.h> |
||||
|
||||
namespace eez { |
||||
|
||||
uint32_t millis() { |
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
return HAL_GetTick(); |
||||
#endif |
||||
|
||||
#if defined(EEZ_PLATFORM_SIMULATOR) |
||||
return osKernelGetTickCount(); |
||||
#endif |
||||
} |
||||
|
||||
} // namespace eez
|
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
|
||||
#include "cmsis_os2.h" |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#include "FreeRTOS.h" |
||||
#include "task.h" |
||||
#endif |
||||
|
||||
#define EEZ_THREAD_DECLARE(NAME, PRIORITY, STACK_SIZE) \ |
||||
osThreadId_t g_##NAME##TaskHandle; \
|
||||
const osThreadAttr_t g_##NAME##TaskAttributes = { \
|
||||
#NAME, \ |
||||
0, \
|
||||
0, \
|
||||
0, \
|
||||
0, \
|
||||
STACK_SIZE, \
|
||||
osPriority##PRIORITY, \
|
||||
0, \
|
||||
0, \
|
||||
} |
||||
#define EEZ_THREAD_CREATE(NAME, THREAD_FUNC) g_##NAME##TaskHandle = osThreadNew(THREAD_FUNC, nullptr, &g_##NAME##TaskAttributes); |
||||
#define EEZ_THREAD_TERMINATE(NAME) osThreadTerminate(g_##NAME##TaskHandle) |
||||
|
||||
#define EEZ_MESSAGE_QUEUE_DECLARE(NAME, OBJECT_DEF) \ |
||||
struct NAME##MessageQueueObject OBJECT_DEF; \
|
||||
osMessageQueueId_t g_##NAME##MessageQueueId |
||||
#define EEZ_MESSAGE_QUEUE_CREATE(NAME, QUEUE_SIZE) g_##NAME##MessageQueueId = osMessageQueueNew(QUEUE_SIZE, sizeof(NAME##MessageQueueObject), nullptr) |
||||
#define EEZ_MESSAGE_QUEUE_GET(NAME, OBJ, TIMEOUT) (osMessageQueueGet(g_##NAME##MessageQueueId, &OBJ, nullptr, TIMEOUT) == osOK) |
||||
#define EEZ_MESSAGE_QUEUE_PUT(NAME, OBJ, TIMEOUT) osMessageQueuePut(g_##NAME##MessageQueueId, &OBJ, 0, TIMEOUT) |
||||
|
||||
#define EEZ_MUTEX_DECLARE(NAME) \ |
||||
osMutexId_t g_##NAME##mutexId;\
|
||||
const osMutexAttr_t g_##NAME##mutexAttr = { \
|
||||
#NAME, \ |
||||
osMutexRecursive | osMutexPrioInherit, \
|
||||
NULL, \
|
||||
0U \
|
||||
} |
||||
#define EEZ_MUTEX_CREATE(NAME) g_##NAME##mutexId = osMutexNew(&g_##NAME##mutexAttr) |
||||
#define EEZ_MUTEX_WAIT(NAME, TIMEOUT) osMutexAcquire(g_##NAME##mutexId, TIMEOUT) == osOK |
||||
#define EEZ_MUTEX_RELEASE(NAME) osMutexRelease(g_##NAME##mutexId) |
||||
|
||||
#if defined(__EMSCRIPTEN__) |
||||
#ifndef EM_PORT_API |
||||
# if defined(__EMSCRIPTEN__) |
||||
# include <emscripten.h> |
||||
# if defined(__cplusplus) |
||||
# define EM_PORT_API(rettype) extern "C" rettype EMSCRIPTEN_KEEPALIVE |
||||
# else |
||||
# define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE |
||||
# endif |
||||
# else |
||||
# if defined(__cplusplus) |
||||
# define EM_PORT_API(rettype) extern "C" rettype |
||||
# else |
||||
# define EM_PORT_API(rettype) rettype |
||||
# endif |
||||
# endif |
||||
#endif |
||||
#else |
||||
# define EM_PORT_API(rettype) rettype |
||||
#endif |
||||
|
||||
namespace eez { |
||||
|
||||
enum TestResult { |
||||
TEST_NONE, |
||||
TEST_FAILED, |
||||
TEST_OK, |
||||
TEST_CONNECTING, |
||||
TEST_SKIPPED, |
||||
TEST_WARNING |
||||
}; |
||||
|
||||
uint32_t millis(); |
||||
|
||||
extern bool g_shutdown; |
||||
void shutdown(); |
||||
|
||||
} // namespace eez
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2015-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
|
||||
namespace eez { |
||||
namespace sound { |
||||
|
||||
void init(); |
||||
void tick(); |
||||
|
||||
/// Play power up tune.
|
||||
enum PlayPowerUpCondition { |
||||
PLAY_POWER_UP_CONDITION_NONE, |
||||
PLAY_POWER_UP_CONDITION_TEST_SUCCESSFUL, |
||||
PLAY_POWER_UP_CONDITION_WELCOME_PAGE_IS_ACTIVE |
||||
}; |
||||
|
||||
void playPowerUp(PlayPowerUpCondition condition); |
||||
|
||||
/// Play power down tune.
|
||||
void playPowerDown(); |
||||
|
||||
/// Play beep sound.
|
||||
void playBeep(bool force = false); |
||||
|
||||
/// Play click sound
|
||||
void playClick(); |
||||
|
||||
/// Play shutter sound
|
||||
void playShutter(); |
||||
|
||||
} // namespace sound
|
||||
} // namespace eez
|
@ -0,0 +1,30 @@
|
||||
#pragma once |
||||
|
||||
#include <eez/core/unit.h> |
||||
|
||||
namespace eez { |
||||
|
||||
enum EncoderMode { |
||||
ENCODER_MODE_MIN, |
||||
ENCODER_MODE_AUTO = ENCODER_MODE_MIN, |
||||
ENCODER_MODE_STEP1, |
||||
ENCODER_MODE_STEP2, |
||||
ENCODER_MODE_STEP3, |
||||
ENCODER_MODE_STEP4, |
||||
ENCODER_MODE_STEP5, |
||||
ENCODER_MODE_MAX = ENCODER_MODE_STEP5 |
||||
}; |
||||
|
||||
struct StepValues { |
||||
int count; |
||||
const float *values; |
||||
Unit unit; |
||||
struct { |
||||
bool accelerationEnabled; |
||||
float range; |
||||
float step; |
||||
EncoderMode mode; |
||||
} encoderSettings; |
||||
}; |
||||
|
||||
} // namespace eez
|
@ -0,0 +1,309 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <eez/core/unit.h> |
||||
|
||||
#if OPTION_SCPI |
||||
#include <scpi/types.h> |
||||
#endif |
||||
|
||||
namespace eez { |
||||
|
||||
const char *g_unitNames[] = { |
||||
"", // UNIT_NONE
|
||||
"V", // UNIT_VOLT
|
||||
"mV", // UNIT_MILLI_VOLT
|
||||
"A", // UNIT_AMPER
|
||||
"mA", // UNIT_MILLI_AMPER
|
||||
"uA", // UNIT_MICRO_AMPER
|
||||
"W", // UNIT_WATT
|
||||
"mW", // UNIT_MILLI_WATT
|
||||
"s", // UNIT_SECOND
|
||||
"ms", // UNIT_MILLI_SECOND
|
||||
DEGREE_SYMBOL"C", // UNIT_CELSIUS
|
||||
"rpm", // UNIT_RPM
|
||||
"\xb4", // UNIT_OHM
|
||||
"K\xb4", // UNIT_KOHM
|
||||
"M\xb4", // UNIT_MOHM
|
||||
"%", // UNIT_PERCENT
|
||||
"Hz", // UNIT_HERTZ
|
||||
"mHz", // UNIT_MILLI_HERTZ
|
||||
"KHz", // UNIT_KHERTZ
|
||||
"MHz", // UNIT_MHERTZ
|
||||
"J", // UNIT_JOULE
|
||||
"F", // UNIT_FARAD
|
||||
"mF", // UNIT_MILLI_FARAD
|
||||
"uF", // UNIT_MICRO_FARAD
|
||||
"nF", // UNIT_NANO_FARAD
|
||||
"pF", // UNIT_PICO_FARAD
|
||||
"minutes", // UNIT_MINUTE
|
||||
"VA", // UNIT_VOLT_AMPERE
|
||||
"VAR", // UNIT_VOLT_AMPERE_REACTIVE
|
||||
DEGREE_SYMBOL, // UNIT_DEGREE
|
||||
"Vpp", // UNIT_VOLT_PP
|
||||
"mVpp", // UNIT_MILLI_VOLT_PP
|
||||
"App", // UNIT_AMPER_PP
|
||||
"mApp", // UNIT_MILLI_AMPER_PP
|
||||
"uApp", // UNIT_MICRO_AMPER_PP
|
||||
}; |
||||
|
||||
const Unit g_baseUnit[] = { |
||||
UNIT_NONE, // UNIT_NONE
|
||||
UNIT_VOLT, // UNIT_VOLT
|
||||
UNIT_VOLT, // UNIT_MILLI_VOLT
|
||||
UNIT_AMPER, // UNIT_AMPER
|
||||
UNIT_AMPER, // UNIT_MILLI_AMPER
|
||||
UNIT_AMPER, // UNIT_MICRO_AMPER
|
||||
UNIT_WATT, // UNIT_WATT
|
||||
UNIT_WATT, // UNIT_MILLI_WATT
|
||||
UNIT_SECOND, // UNIT_SECOND
|
||||
UNIT_SECOND, // UNIT_MILLI_SECOND
|
||||
UNIT_CELSIUS, // UNIT_CELSIUS
|
||||
UNIT_RPM, // UNIT_RPM
|
||||
UNIT_OHM, // UNIT_OHM
|
||||
UNIT_OHM, // UNIT_KOHM
|
||||
UNIT_OHM, // UNIT_MOHM
|
||||
UNIT_PERCENT, // UNIT_PERCENT
|
||||
UNIT_HERTZ, // UNIT_HERTZ
|
||||
UNIT_HERTZ, // UNIT_MILLI_HERTZ
|
||||
UNIT_HERTZ, // UNIT_KHERTZ
|
||||
UNIT_HERTZ, // UNIT_MHERTZ
|
||||
UNIT_JOULE, // UNIT_JOULE
|
||||
UNIT_FARAD, // UNIT_FARAD
|
||||
UNIT_FARAD, // UNIT_MILLI_FARAD
|
||||
UNIT_FARAD, // UNIT_MICRO_FARAD
|
||||
UNIT_FARAD, // UNIT_NANO_FARAD
|
||||
UNIT_FARAD, // UNIT_PICO_FARAD
|
||||
UNIT_SECOND, // UNIT_MINUTE
|
||||
UNIT_VOLT_AMPERE, // UNIT_VOLT_AMPERE
|
||||
UNIT_VOLT_AMPERE, //UNIT_VOLT_AMPERE_REACTIVE
|
||||
UNIT_DEGREE, // UNIT_DEGREE
|
||||
UNIT_VOLT_PP, // UNIT_VOLT_PP
|
||||
UNIT_VOLT_PP, // UNIT_MILLI_VOLT_PP
|
||||
UNIT_AMPER_PP, // UNIT_AMPER_PP
|
||||
UNIT_AMPER_PP, // UNIT_MILLI_AMPER_PP
|
||||
UNIT_AMPER_PP, // UNIT_MICRO_AMPER_PP
|
||||
}; |
||||
|
||||
const float g_unitFactor[] = { |
||||
1.0f, // UNIT_NONE
|
||||
1.0f, // UNIT_VOLT
|
||||
1E-3f, // UNIT_MILLI_VOLT
|
||||
1.0f, // UNIT_AMPER
|
||||
1E-3f, // UNIT_MILLI_AMPER
|
||||
1E-6f, // UNIT_MICRO_AMPER
|
||||
1.0f, // UNIT_WATT
|
||||
1E-3f, // UNIT_MILLI_WATT
|
||||
1.0f, // UNIT_SECOND
|
||||
1E-3f, // UNIT_MILLI_SECOND
|
||||
1.0f, // UNIT_CELSIUS
|
||||
1.0f, // UNIT_RPM
|
||||
1.0f, // UNIT_OHM
|
||||
1E3f, // UNIT_KOHM
|
||||
1E6f, // UNIT_MOHM
|
||||
1.0f, // UNIT_PERCENT
|
||||
1.0f, // UNIT_HERTZ
|
||||
1E-3f, // UNIT_MILLI_HERTZ
|
||||
1E3f, // UNIT_KHERTZ
|
||||
1E6f, // UNIT_MHERTZ
|
||||
1.0f, // UNIT_JOULE
|
||||
1.0f, // UNIT_FARAD
|
||||
1E-3f, // UNIT_MILLI_FARAD
|
||||
1E-6f, // UNIT_MICRO_FARAD
|
||||
1E-9f, // UNIT_NANO_FARAD
|
||||
1E-12f, // UNIT_PICO_FARAD
|
||||
60.0f, // UNIT_MINUTE
|
||||
1.0f, // UNIT_VOLT_AMPERE
|
||||
1.0f, //UNIT_VOLT_AMPERE_REACTIVE
|
||||
1.0f, // UNIT_DEGREE
|
||||
1.0f, // UNIT_VOLT_PP
|
||||
1E-3f, // UNIT_MILLI_VOLT_PP
|
||||
1.0f, // UNIT_AMPER_PP
|
||||
1E-3f, // UNIT_MILLI_AMPER_PP
|
||||
1E-6f, // UNIT_MICRO_AMPER_PP
|
||||
}; |
||||
|
||||
#if OPTION_SCPI |
||||
static const int g_scpiUnits[] = { |
||||
SCPI_UNIT_NONE, // UNIT_NONE
|
||||
SCPI_UNIT_VOLT, // UNIT_VOLT
|
||||
SCPI_UNIT_VOLT, // UNIT_MILLI_VOLT
|
||||
SCPI_UNIT_AMPER, // UNIT_AMPER
|
||||
SCPI_UNIT_AMPER, // UNIT_MILLI_AMPER
|
||||
SCPI_UNIT_AMPER, // UNIT_MICRO_AMPER
|
||||
SCPI_UNIT_WATT, // UNIT_WATT
|
||||
SCPI_UNIT_WATT, // UNIT_MILLI_WATT
|
||||
SCPI_UNIT_SECOND, // UNIT_SECOND
|
||||
SCPI_UNIT_SECOND, // UNIT_MILLI_SECOND
|
||||
SCPI_UNIT_CELSIUS, // UNIT_CELSIUS
|
||||
SCPI_UNIT_NONE, // UNIT_RPM
|
||||
SCPI_UNIT_OHM, // UNIT_OHM
|
||||
SCPI_UNIT_OHM, // UNIT_KOHM
|
||||
SCPI_UNIT_OHM, // UNIT_MOHM
|
||||
SCPI_UNIT_NONE, // UNIT_PERCENT
|
||||
SCPI_UNIT_HERTZ, // UNIT_HERTZ
|
||||
SCPI_UNIT_HERTZ, // UNIT_MILLI_HERTZ
|
||||
SCPI_UNIT_HERTZ, // UNIT_KHERTZ
|
||||
SCPI_UNIT_HERTZ, // UNIT_MHERTZ
|
||||
SCPI_UNIT_JOULE, // UNIT_JOULE
|
||||
SCPI_UNIT_FARAD, // UNIT_FARAD
|
||||
SCPI_UNIT_FARAD, // UNIT_MILLI_FARAD
|
||||
SCPI_UNIT_FARAD, // UNIT_MICRO_FARAD
|
||||
SCPI_UNIT_FARAD, // UNIT_NANO_FARAD
|
||||
SCPI_UNIT_FARAD, // UNIT_PICO_FARAD
|
||||
SCPI_UNIT_SECOND, // UNIT_MINUTE
|
||||
SCPI_UNIT_WATT, // UNIT_VOLT_AMPERE
|
||||
SCPI_UNIT_WATT, // UNIT_VOLT_AMPERE_REACTIVE
|
||||
SCPI_UNIT_DEGREE, // UNIT_DEGREE
|
||||
SCPI_UNIT_VOLT, // UNIT_VOLT_PP
|
||||
SCPI_UNIT_VOLT, // UNIT_MILLI_VOLT_PP
|
||||
SCPI_UNIT_AMPER, // UNIT_AMPER_PP
|
||||
SCPI_UNIT_AMPER, // UNIT_MILLI_AMPER_PP
|
||||
SCPI_UNIT_AMPER, // UNIT_MICRO_AMPER_PP
|
||||
}; |
||||
#endif |
||||
|
||||
Unit getUnitFromName(const char *unitName) { |
||||
if (unitName) { |
||||
for (unsigned i = 0; i < sizeof(g_unitNames) / sizeof(const char *); i++) { |
||||
if (strcmp(g_unitNames[i], unitName) == 0) { |
||||
return (Unit)i; |
||||
} |
||||
} |
||||
} |
||||
return UNIT_NONE; |
||||
} |
||||
|
||||
#if OPTION_SCPI |
||||
int getScpiUnit(Unit unit) { |
||||
if (unit == UNIT_UNKNOWN) { |
||||
return SCPI_UNIT_NONE; |
||||
} |
||||
return g_scpiUnits[unit]; |
||||
} |
||||
#endif |
||||
|
||||
Unit getBaseUnit(Unit unit) { |
||||
if (unit == UNIT_UNKNOWN) { |
||||
return UNIT_UNKNOWN; |
||||
} |
||||
return g_baseUnit[unit]; |
||||
} |
||||
|
||||
float getUnitFactor(Unit unit) { |
||||
if (unit == UNIT_UNKNOWN) { |
||||
return 1.0f; |
||||
} |
||||
return g_unitFactor[unit]; |
||||
} |
||||
|
||||
static Unit getDerivedUnit(Unit unit, float factor) { |
||||
if (unit == UNIT_UNKNOWN) { |
||||
return UNIT_UNKNOWN; |
||||
} |
||||
|
||||
for (size_t i = 0; i < sizeof(g_baseUnit); i++) { |
||||
if (g_baseUnit[i] == g_baseUnit[unit] && g_unitFactor[i] == factor) { |
||||
return (Unit)i; |
||||
} |
||||
} |
||||
|
||||
return UNIT_UNKNOWN; |
||||
} |
||||
|
||||
static const float FACTORS[] = { 1E-12F, 1E-9F, 1E-6F, 1E-3F, 1E0F, 1E3F, 1E6F, 1E9F, 1E12F }; |
||||
|
||||
Unit findDerivedUnit(float value, Unit unit) { |
||||
Unit result; |
||||
|
||||
for (int factorIndex = 1; ; factorIndex++) { |
||||
float factor = FACTORS[factorIndex]; |
||||
if (factor > 1.0F) { |
||||
break; |
||||
} |
||||
if (value < factor) { |
||||
result = getDerivedUnit(unit, FACTORS[factorIndex - 1]); |
||||
if (result != UNIT_UNKNOWN) { |
||||
return result; |
||||
} |
||||
} |
||||
} |
||||
|
||||
for (int factorIndex = sizeof(FACTORS) / sizeof(float) - 1; factorIndex >= 0; factorIndex--) { |
||||
float factor = FACTORS[factorIndex]; |
||||
if (factor == 1.0F) { |
||||
break; |
||||
} |
||||
if (value >= factor) { |
||||
result = getDerivedUnit(unit, factor); |
||||
if (result != UNIT_UNKNOWN) { |
||||
return result; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return unit; |
||||
} |
||||
|
||||
float getSmallerFactor(float factor) { |
||||
for (int factorIndex = sizeof(FACTORS) / sizeof(float) - 1; factorIndex > 0; factorIndex--) { |
||||
float itFactor = FACTORS[factorIndex]; |
||||
if (itFactor < factor) { |
||||
return itFactor; |
||||
} |
||||
} |
||||
return FACTORS[0]; |
||||
} |
||||
|
||||
Unit getSmallerUnit(Unit unit, float min, float precision) { |
||||
float factor = getUnitFactor(unit); |
||||
if (precision <= factor || min <= factor) { |
||||
return getDerivedUnit(unit, getSmallerFactor(factor)); |
||||
} |
||||
return UNIT_UNKNOWN; |
||||
} |
||||
|
||||
Unit getBiggestUnit(Unit unit, float max) { |
||||
for (int factorIndex = sizeof(FACTORS) / sizeof(float) - 1; factorIndex >= 0; factorIndex--) { |
||||
float factor = FACTORS[factorIndex]; |
||||
if (max >= factor) { |
||||
auto result = getDerivedUnit(unit, factor); |
||||
if (result != UNIT_UNKNOWN) { |
||||
return result; |
||||
} |
||||
} |
||||
} |
||||
return UNIT_UNKNOWN; |
||||
} |
||||
|
||||
Unit getSmallestUnit(Unit unit, float min, float precision) { |
||||
for (int factorIndex = 0; factorIndex < int(sizeof(FACTORS) / sizeof(float)); factorIndex++) { |
||||
float factor = FACTORS[factorIndex]; |
||||
if (precision <= factor || min <= factor) { |
||||
auto result = getDerivedUnit(unit, factor); |
||||
if (result != UNIT_UNKNOWN) { |
||||
return result; |
||||
} |
||||
} |
||||
} |
||||
return UNIT_UNKNOWN; |
||||
} |
||||
|
||||
} // namespace eez
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#define INFINITY_SYMBOL "\x91" |
||||
#define DEGREE_SYMBOL "\x8a" |
||||
|
||||
namespace eez { |
||||
|
||||
// order of units should not be changed since it is used in DLOG files
|
||||
enum Unit { |
||||
UNIT_UNKNOWN = 255, |
||||
UNIT_NONE = 0, |
||||
UNIT_VOLT, |
||||
UNIT_MILLI_VOLT, |
||||
UNIT_AMPER, |
||||
UNIT_MILLI_AMPER, |
||||
UNIT_MICRO_AMPER, |
||||
UNIT_WATT, |
||||
UNIT_MILLI_WATT, |
||||
UNIT_SECOND, |
||||
UNIT_MILLI_SECOND, |
||||
UNIT_CELSIUS, |
||||
UNIT_RPM, |
||||
UNIT_OHM, |
||||
UNIT_KOHM, |
||||
UNIT_MOHM, |
||||
UNIT_PERCENT, |
||||
UNIT_HERTZ, |
||||
UNIT_MILLI_HERTZ, |
||||
UNIT_KHERTZ, |
||||
UNIT_MHERTZ, |
||||
UNIT_JOULE, |
||||
UNIT_FARAD, |
||||
UNIT_MILLI_FARAD, |
||||
UNIT_MICRO_FARAD, |
||||
UNIT_NANO_FARAD, |
||||
UNIT_PICO_FARAD, |
||||
UNIT_MINUTE, |
||||
UNIT_VOLT_AMPERE, |
||||
UNIT_VOLT_AMPERE_REACTIVE, |
||||
UNIT_DEGREE, |
||||
UNIT_VOLT_PP, |
||||
UNIT_MILLI_VOLT_PP, |
||||
UNIT_AMPER_PP, |
||||
UNIT_MILLI_AMPER_PP, |
||||
UNIT_MICRO_AMPER_PP, |
||||
}; |
||||
|
||||
extern const char *g_unitNames[]; |
||||
|
||||
inline const char *getUnitName(Unit unit) { |
||||
if (unit == UNIT_UNKNOWN) { |
||||
return ""; |
||||
} |
||||
return g_unitNames[unit]; |
||||
} |
||||
|
||||
Unit getUnitFromName(const char *unitName); |
||||
|
||||
#if OPTION_SCPI |
||||
int getScpiUnit(Unit unit); |
||||
#endif |
||||
|
||||
// for UNIT_MILLI_VOLT returns UNIT_VOLT, etc...
|
||||
Unit getBaseUnit(Unit unit); |
||||
|
||||
// returns 1.0 form UNIT_VOLT, returns 1E-3 for UNIT_MILLI_VOLT, 1E-6 for UNIT_MICRO_AMPER, 1E3 for UNIT_KOHM, etc
|
||||
float getUnitFactor(Unit unit); |
||||
|
||||
// if value is 0.01 and unit is UNIT_VOLT returns UNIT_MILLI_VOLT, etc
|
||||
Unit findDerivedUnit(float value, Unit unit); |
||||
|
||||
Unit getSmallerUnit(Unit unit, float min, float precision); |
||||
Unit getBiggestUnit(Unit unit, float max); |
||||
Unit getSmallestUnit(Unit unit, float min, float precision); |
||||
|
||||
} // namespace eez
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/conf.h> |
||||
|
||||
#ifndef UTF8_SUPPORT |
||||
#define UTF8_SUPPORT 1 |
||||
#endif |
||||
|
||||
#if UTF8_SUPPORT |
||||
|
||||
#include <eez/libs/utf8.h> |
||||
|
||||
#else |
||||
|
||||
typedef char utf8_int8_t; |
||||
typedef int32_t utf8_int32_t; |
||||
|
||||
inline const utf8_int8_t* utf8codepoint(const utf8_int8_t *str, utf8_int32_t *out_codepoint) { |
||||
*out_codepoint = *((uint8_t *)str); |
||||
return str + 1;
|
||||
} |
||||
|
||||
#define utf8len strlen |
||||
|
||||
#endif |
@ -0,0 +1,921 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/util.h> |
||||
|
||||
#define _USE_MATH_DEFINES |
||||
#include <math.h> |
||||
#include <stdio.h> |
||||
#include <ctype.h> |
||||
#include <string.h> |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
#include <crc.h> |
||||
#endif |
||||
|
||||
namespace eez { |
||||
|
||||
float remap(float x, float x1, float y1, float x2, float y2) { |
||||
return y1 + (x - x1) * (y2 - y1) / (x2 - x1); |
||||
} |
||||
|
||||
float remapQuad(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t * t; |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapOutQuad(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t * (2 - t); |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapInOutQuad(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t < .5 ? 2 * t*t : -1 + (4 - 2 * t)*t; |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapCubic(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t * t * t; |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapOutCubic(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t - 1; |
||||
t = 1 + t * t * t; |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapExp(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t == 0 ? 0 : float(pow(2, 10 * (t - 1))); |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float remapOutExp(float x, float x1, float y1, float x2, float y2) { |
||||
float t = remap(x, x1, 0, x2, 1); |
||||
t = t == 1 ? 1 : float(1 - pow(2, -10 * t)); |
||||
x = remap(t, 0, x1, 1, x2); |
||||
return remap(x, x1, y1, x2, y2); |
||||
} |
||||
|
||||
float clamp(float x, float min, float max) { |
||||
if (x < min) { |
||||
return min; |
||||
} |
||||
if (x > max) { |
||||
return max; |
||||
} |
||||
return x; |
||||
} |
||||
|
||||
void stringCopy(char *dst, size_t maxStrLength, const char *src) { |
||||
strncpy(dst, src, maxStrLength); |
||||
dst[maxStrLength - 1] = 0; |
||||
} |
||||
|
||||
void stringCopyLength(char *dst, size_t maxStrLength, const char *src, size_t length) { |
||||
size_t n = MIN(length, maxStrLength); |
||||
strncpy(dst, src, n); |
||||
dst[n] = 0; |
||||
} |
||||
|
||||
void stringAppendString(char *str, size_t maxStrLength, const char *value) { |
||||
int n = maxStrLength - strlen(str) - 1; |
||||
if (n >= 0) { |
||||
strncat(str, value, n); |
||||
} |
||||
} |
||||
|
||||
void stringAppendStringLength(char *str, size_t maxStrLength, const char *value, size_t length) { |
||||
int n = MIN(maxStrLength - strlen(str) - 1, length); |
||||
if (n >= 0) { |
||||
strncat(str, value, n); |
||||
} |
||||
} |
||||
|
||||
void stringAppendInt(char *str, size_t maxStrLength, int value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%d", value); |
||||
} |
||||
|
||||
void stringAppendUInt32(char *str, size_t maxStrLength, uint32_t value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%lu", (unsigned long)value); |
||||
} |
||||
|
||||
void stringAppendInt64(char *str, size_t maxStrLength, int64_t value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%jd", value); |
||||
} |
||||
|
||||
void stringAppendUInt64(char *str, size_t maxStrLength, uint64_t value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%ju", value); |
||||
} |
||||
|
||||
void stringAppendFloat(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%g", value); |
||||
} |
||||
|
||||
void stringAppendFloat(char *str, size_t maxStrLength, float value, int numDecimalPlaces) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%.*f", numDecimalPlaces, value); |
||||
} |
||||
|
||||
void stringAppendDouble(char *str, size_t maxStrLength, double value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%g", value); |
||||
} |
||||
|
||||
void stringAppendDouble(char *str, size_t maxStrLength, double value, int numDecimalPlaces) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%.*f", numDecimalPlaces, value); |
||||
} |
||||
|
||||
void stringAppendVoltage(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%g V", value); |
||||
} |
||||
|
||||
void stringAppendCurrent(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%g A", value); |
||||
} |
||||
|
||||
void stringAppendPower(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
snprintf(str + n, maxStrLength - n, "%g W", value); |
||||
} |
||||
|
||||
void stringAppendDuration(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
if (value > 0.1) { |
||||
snprintf(str + n, maxStrLength - n, "%g s", value); |
||||
} else { |
||||
snprintf(str + n, maxStrLength - n, "%g ms", value * 1000); |
||||
} |
||||
} |
||||
|
||||
void stringAppendLoad(char *str, size_t maxStrLength, float value) { |
||||
auto n = strlen(str); |
||||
if (value < 1000) { |
||||
snprintf(str + n, maxStrLength - n, "%g ohm", value); |
||||
} else if (value < 1000000) { |
||||
snprintf(str + n, maxStrLength - n, "%g Kohm", value / 1000); |
||||
} else { |
||||
snprintf(str + n, maxStrLength - n, "%g Mohm", value / 1000000); |
||||
} |
||||
} |
||||
|
||||
#if defined(EEZ_PLATFORM_STM32) |
||||
uint32_t crc32(const uint8_t *mem_block, size_t block_size) { |
||||
return HAL_CRC_Calculate(&hcrc, (uint32_t *)mem_block, block_size); |
||||
} |
||||
#else |
||||
/*
|
||||
From http://www.hackersdelight.org/hdcodetxt/crc.c.txt:
|
||||
|
||||
This is the basic CRC-32 calculation with some optimization but no |
||||
table lookup. The the byte reversal is avoided by shifting the crc reg |
||||
right instead of left and by using a reversed 32-bit word to represent |
||||
the polynomial. |
||||
When compiled to Cyclops with GCC, this function executes in 8 + 72n |
||||
instructions, where n is the number of bytes in the input message. It |
||||
should be doable in 4 + 61n instructions. |
||||
If the inner loop is strung out (approx. 5*8 = 40 instructions), |
||||
it would take about 6 + 46n instructions. |
||||
*/ |
||||
|
||||
uint32_t crc32(const uint8_t *mem_block, size_t block_size) { |
||||
uint32_t crc = 0xFFFFFFFF; |
||||
for (size_t i = 0; i < block_size; ++i) { |
||||
uint32_t byte = mem_block[i]; // Get next byte.
|
||||
crc = crc ^ byte; |
||||
for (int j = 0; j < 8; ++j) { // Do eight times.
|
||||
uint32_t mask = -((int32_t)crc & 1); |
||||
crc = (crc >> 1) ^ (0xEDB88320 & mask); |
||||
} |
||||
} |
||||
return ~crc; |
||||
} |
||||
#endif |
||||
|
||||
uint8_t toBCD(uint8_t bin) { |
||||
return ((bin / 10) << 4) | (bin % 10); |
||||
} |
||||
|
||||
uint8_t fromBCD(uint8_t bcd) { |
||||
return ((bcd >> 4) & 0xF) * 10 + (bcd & 0xF); |
||||
} |
||||
|
||||
float roundPrec(float a, float prec) { |
||||
float r = 1 / prec; |
||||
return roundf(a * r) / r; |
||||
} |
||||
|
||||
float floorPrec(float a, float prec) { |
||||
float r = 1 / prec; |
||||
return floorf(a * r) / r; |
||||
} |
||||
|
||||
float ceilPrec(float a, float prec) { |
||||
float r = 1 / prec; |
||||
return ceilf(a * r) / r; |
||||
} |
||||
|
||||
bool isNaN(float x) { |
||||
return x != x; |
||||
} |
||||
|
||||
bool isNaN(double x) { |
||||
return x != x; |
||||
} |
||||
|
||||
bool isDigit(char ch) { |
||||
return ch >= '0' && ch <= '9'; |
||||
} |
||||
|
||||
bool isHexDigit(char ch) { |
||||
return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F'); |
||||
} |
||||
|
||||
bool isUperCaseLetter(char ch) { |
||||
return ch >= 'A' && ch <= 'Z'; |
||||
} |
||||
|
||||
char toHexDigit(int num) { |
||||
if (num >= 0 && num <= 9) { |
||||
return '0' + num; |
||||
} else { |
||||
return 'A' + (num - 10); |
||||
} |
||||
} |
||||
|
||||
int fromHexDigit(char ch) { |
||||
if (ch >= '0' && ch <= '9') { |
||||
return ch - '0'; |
||||
} |
||||
|
||||
if (ch >= 'a' && ch <= 'f') { |
||||
return 10 + (ch - 'a'); |
||||
} |
||||
|
||||
return 10 + (ch - 'A'); |
||||
} |
||||
|
||||
bool pointInsideRect(int xPoint, int yPoint, int xRect, int yRect, int wRect, int hRect) { |
||||
return xPoint >= xRect && xPoint < xRect + wRect && yPoint >= yRect && yPoint < yRect + hRect; |
||||
} |
||||
|
||||
void getParentDir(const char *path, char *parentDirPath) { |
||||
int lastPathSeparatorIndex; |
||||
|
||||
for (lastPathSeparatorIndex = strlen(path) - 1; |
||||
lastPathSeparatorIndex >= 0 && path[lastPathSeparatorIndex] != PATH_SEPARATOR[0]; |
||||
--lastPathSeparatorIndex) |
||||
; |
||||
|
||||
int i; |
||||
for (i = 0; i < lastPathSeparatorIndex; ++i) { |
||||
parentDirPath[i] = path[i]; |
||||
} |
||||
parentDirPath[i] = 0; |
||||
} |
||||
|
||||
bool parseMacAddress(const char *macAddressStr, size_t macAddressStrLength, uint8_t *macAddress) { |
||||
int state = 0; |
||||
int a = 0; |
||||
int i = 0; |
||||
uint8_t resultMacAddress[6]; |
||||
|
||||
const char *end = macAddressStr + macAddressStrLength; |
||||
for (const char *p = macAddressStr; p < end; ++p) { |
||||
if (state == 0) { |
||||
if (*p == '-' || *p == ' ') { |
||||
continue; |
||||
} else if (isHexDigit(*p)) { |
||||
a = fromHexDigit(*p); |
||||
state = 1; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 1) { |
||||
if (isHexDigit(*p)) { |
||||
if (i < 6) { |
||||
resultMacAddress[i++] = (a << 4) | fromHexDigit(*p); |
||||
state = 0; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
if (state != 0 || i != 6) { |
||||
return false; |
||||
} |
||||
|
||||
memcpy(macAddress, resultMacAddress, 6); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
bool parseIpAddress(const char *ipAddressStr, size_t ipAddressStrLength, uint32_t &ipAddress) { |
||||
const char *p = ipAddressStr; |
||||
const char *q = ipAddressStr + ipAddressStrLength; |
||||
|
||||
uint8_t ipAddressArray[4]; |
||||
|
||||
for (int i = 0; i < 4; ++i) { |
||||
if (p == q) { |
||||
return false; |
||||
} |
||||
|
||||
uint32_t part = 0; |
||||
for (int j = 0; j < 3; ++j) { |
||||
if (p == q) { |
||||
if (j > 0 && i == 3) { |
||||
break; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (isDigit(*p)) { |
||||
part = part * 10 + (*p++ - '0'); |
||||
} else if (j > 0 && *p == '.') { |
||||
break; |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
if (part > 255) { |
||||
return false; |
||||
} |
||||
|
||||
if ((i < 3 && *p++ != '.') || (i == 3 && p != q)) { |
||||
return false; |
||||
} |
||||
|
||||
ipAddressArray[i] = part; |
||||
} |
||||
|
||||
ipAddress = arrayToIpAddress(ipAddressArray); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
int getIpAddressPartA(uint32_t ipAddress) { |
||||
return ((uint8_t *)&ipAddress)[0]; |
||||
} |
||||
|
||||
void setIpAddressPartA(uint32_t *ipAddress, uint8_t value) { |
||||
((uint8_t *)ipAddress)[0] = value; |
||||
} |
||||
|
||||
int getIpAddressPartB(uint32_t ipAddress) { |
||||
return ((uint8_t *)&ipAddress)[1]; |
||||
} |
||||
|
||||
void setIpAddressPartB(uint32_t *ipAddress, uint8_t value) { |
||||
((uint8_t *)ipAddress)[1] = value; |
||||
} |
||||
|
||||
int getIpAddressPartC(uint32_t ipAddress) { |
||||
return ((uint8_t *)&ipAddress)[2]; |
||||
} |
||||
|
||||
void setIpAddressPartC(uint32_t *ipAddress, uint8_t value) { |
||||
((uint8_t *)ipAddress)[2] = value; |
||||
} |
||||
|
||||
int getIpAddressPartD(uint32_t ipAddress) { |
||||
return ((uint8_t *)&ipAddress)[3]; |
||||
} |
||||
|
||||
void setIpAddressPartD(uint32_t *ipAddress, uint8_t value) { |
||||
((uint8_t *)ipAddress)[3] = value; |
||||
} |
||||
|
||||
void ipAddressToArray(uint32_t ipAddress, uint8_t *ipAddressArray) { |
||||
ipAddressArray[0] = getIpAddressPartA(ipAddress); |
||||
ipAddressArray[1] = getIpAddressPartB(ipAddress); |
||||
ipAddressArray[2] = getIpAddressPartC(ipAddress); |
||||
ipAddressArray[3] = getIpAddressPartD(ipAddress); |
||||
} |
||||
|
||||
uint32_t arrayToIpAddress(uint8_t *ipAddressArray) { |
||||
return getIpAddress(ipAddressArray[0], ipAddressArray[1], ipAddressArray[2], ipAddressArray[3]); |
||||
} |
||||
|
||||
uint32_t getIpAddress(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { |
||||
uint32_t ipAddress; |
||||
|
||||
setIpAddressPartA(&ipAddress, a); |
||||
setIpAddressPartB(&ipAddress, b); |
||||
setIpAddressPartC(&ipAddress, c); |
||||
setIpAddressPartD(&ipAddress, d); |
||||
|
||||
return ipAddress; |
||||
} |
||||
|
||||
void ipAddressToString(uint32_t ipAddress, char *ipAddressStr, size_t maxIpAddressStrLength) { |
||||
snprintf(ipAddressStr, maxIpAddressStrLength, "%d.%d.%d.%d", |
||||
getIpAddressPartA(ipAddress), getIpAddressPartB(ipAddress), |
||||
getIpAddressPartC(ipAddress), getIpAddressPartD(ipAddress)); |
||||
} |
||||
|
||||
void macAddressToString(const uint8_t *macAddress, char *macAddressStr) { |
||||
for (int i = 0; i < 6; ++i) { |
||||
macAddressStr[3 * i] = toHexDigit((macAddress[i] & 0xF0) >> 4); |
||||
macAddressStr[3 * i + 1] = toHexDigit(macAddress[i] & 0xF); |
||||
macAddressStr[3 * i + 2] = i < 5 ? '-' : 0; |
||||
} |
||||
} |
||||
|
||||
void formatTimeZone(int16_t timeZone, char *text, int count) { |
||||
if (timeZone == 0) { |
||||
stringCopy(text, count, "GMT"); |
||||
} else { |
||||
char sign; |
||||
int16_t value; |
||||
if (timeZone > 0) { |
||||
sign = '+'; |
||||
value = timeZone; |
||||
} else { |
||||
sign = '-'; |
||||
value = -timeZone; |
||||
} |
||||
snprintf(text, count, "%c%02d:%02d GMT", sign, value / 100, value % 100); |
||||
} |
||||
} |
||||
|
||||
bool parseTimeZone(const char *timeZoneStr, size_t timeZoneLength, int16_t &timeZone) { |
||||
int state = 0; |
||||
|
||||
int sign = 1; |
||||
int integerPart = 0; |
||||
int fractionPart = 0; |
||||
|
||||
const char *end = timeZoneStr + timeZoneLength; |
||||
for (const char *p = timeZoneStr; p < end; ++p) { |
||||
if (*p == ' ') { |
||||
continue; |
||||
} |
||||
|
||||
if (state == 0) { |
||||
if (*p == '+') { |
||||
state = 1; |
||||
} else if (*p == '-') { |
||||
sign = -1; |
||||
state = 1; |
||||
} else if (isDigit(*p)) { |
||||
integerPart = *p - '0'; |
||||
state = 2; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 1) { |
||||
if (isDigit(*p)) { |
||||
integerPart = (*p - '0'); |
||||
state = 2; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 2) { |
||||
if (*p == ':') { |
||||
state = 4; |
||||
} else if (isDigit(*p)) { |
||||
integerPart = integerPart * 10 + (*p - '0'); |
||||
state = 3; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 3) { |
||||
if (*p == ':') { |
||||
state = 4; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 4) { |
||||
if (isDigit(*p)) { |
||||
fractionPart = (*p - '0'); |
||||
state = 5; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else if (state == 5) { |
||||
if (isDigit(*p)) { |
||||
fractionPart = fractionPart * 10 + (*p - '0'); |
||||
state = 6; |
||||
} else { |
||||
return false; |
||||
} |
||||
} else { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
if (state != 2 && state != 3 && state != 6) { |
||||
return false; |
||||
} |
||||
|
||||
int value = sign * (integerPart * 100 + fractionPart); |
||||
|
||||
if (value < -1200 || value > 1400) { |
||||
return false; |
||||
} |
||||
|
||||
timeZone = (int16_t)value; |
||||
|
||||
return true; |
||||
} |
||||
|
||||
void replaceCharacter(char *str, char ch, char repl) { |
||||
while (*str) { |
||||
if (*str == ch) { |
||||
*str = repl; |
||||
} |
||||
++str; |
||||
} |
||||
} |
||||
|
||||
int strcicmp(char const *a, char const *b) { |
||||
for (;; a++, b++) { |
||||
int d = tolower((unsigned char)*a) - tolower((unsigned char)*b); |
||||
if (d != 0 || !*a) |
||||
return d; |
||||
} |
||||
} |
||||
|
||||
int strncicmp(char const *a, char const *b, int n) { |
||||
for (; n--; a++, b++) { |
||||
int d = tolower((unsigned char)*a) - tolower((unsigned char)*b); |
||||
if (d != 0 || !*a) |
||||
return d; |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
bool isStringEmpty(char const *s) { |
||||
for (; *s; s++) { |
||||
if (!isspace(*s)) { |
||||
return false; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
bool startsWith(const char *str, const char *prefix) { |
||||
if (!str || !prefix) |
||||
return false; |
||||
size_t strLen = strlen(str); |
||||
size_t prefixLen = strlen(prefix); |
||||
if (prefixLen > strLen) |
||||
return false; |
||||
return strncmp(str, prefix, prefixLen) == 0; |
||||
} |
||||
|
||||
bool startsWithNoCase(const char *str, const char *prefix) { |
||||
if (!str || !prefix) |
||||
return false; |
||||
size_t strLen = strlen(str); |
||||
size_t prefixLen = strlen(prefix); |
||||
if (prefixLen > strLen) |
||||
return false; |
||||
return strncicmp(str, prefix, prefixLen) == 0; |
||||
} |
||||
|
||||
bool endsWith(const char *str, const char *suffix) { |
||||
if (!str || !suffix) |
||||
return false; |
||||
size_t strLen = strlen(str); |
||||
size_t suffixLen = strlen(suffix); |
||||
if (suffixLen > strLen) |
||||
return false; |
||||
return strncmp(str + strLen - suffixLen, suffix, suffixLen) == 0; |
||||
} |
||||
|
||||
bool endsWithNoCase(const char *str, const char *suffix) { |
||||
if (!str || !suffix) |
||||
return false; |
||||
size_t strLen = strlen(str); |
||||
size_t suffixLen = strlen(suffix); |
||||
if (suffixLen > strLen) |
||||
return false; |
||||
return strncicmp(str + strLen - suffixLen, suffix, suffixLen) == 0; |
||||
} |
||||
|
||||
void formatBytes(uint64_t bytes, char *text, int count) { |
||||
if (bytes == 0) { |
||||
stringCopy(text, count, "0 Bytes"); |
||||
} else { |
||||
double c = 1024.0; |
||||
const char *e[] = { "Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" }; |
||||
uint64_t f = (uint64_t)floor(log((double)bytes) / log(c)); |
||||
double g = round((bytes / pow(c, (double)f)) * 100) / 100; |
||||
snprintf(text, count, "%g %s", g, e[f]); |
||||
} |
||||
} |
||||
|
||||
void getFileName(const char *path, char *fileName, unsigned fileNameSize) { |
||||
const char *a = strrchr(path, '/'); |
||||
if (a) { |
||||
a++; |
||||
} else { |
||||
a = path; |
||||
} |
||||
|
||||
const char *b = path + strlen(path); |
||||
|
||||
unsigned n = b - a; |
||||
n = MIN(fileNameSize - 1, n); |
||||
if (n > 0) { |
||||
memcpy(fileName, a, n); |
||||
} |
||||
fileName[n] = 0; |
||||
} |
||||
|
||||
void getBaseFileName(const char *path, char *baseName, unsigned baseNameSize) { |
||||
const char *a = strrchr(path, '/'); |
||||
if (a) { |
||||
a++; |
||||
} else { |
||||
a = path; |
||||
} |
||||
|
||||
const char *b = strrchr(path, '.'); |
||||
if (!b || !(b >= a)) { |
||||
b = path + strlen(path); |
||||
} |
||||
|
||||
unsigned n = b - a; |
||||
n = MIN(baseNameSize - 1, n); |
||||
if (n > 0) { |
||||
memcpy(baseName, a, n); |
||||
} |
||||
baseName[n] = 0; |
||||
} |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static const float PI = (float)M_PI; |
||||
static const float c1 = 1.70158f; |
||||
static const float c2 = c1 * 1.525f; |
||||
static const float c3 = c1 + 1.0f; |
||||
static const float c4 = (2 * PI) / 3; |
||||
static const float c5 = (2 * PI) / 4.5f; |
||||
|
||||
float linear(float x) { |
||||
return x; |
||||
} |
||||
|
||||
float easeInQuad(float x) { |
||||
return x * x; |
||||
} |
||||
|
||||
float easeOutQuad(float x) { |
||||
return 1 - (1 - x) * (1 - x); |
||||
} |
||||
|
||||
float easeInOutQuad(float x) { |
||||
return x < 0.5f ? 2 * x * x : 1 - powf(-2 * x + 2, 2) / 2; |
||||
} |
||||
|
||||
float easeInCubic(float x) { |
||||
return x * x * x; |
||||
} |
||||
|
||||
float easeOutCubic(float x) { |
||||
return 1 - pow(1 - x, 3); |
||||
} |
||||
|
||||
float easeInOutCubic(float x) { |
||||
return x < 0.5f ? 4 * x * x * x : 1 - powf(-2 * x + 2, 3) / 2; |
||||
} |
||||
|
||||
float easeInQuart(float x) { |
||||
return x * x * x * x; |
||||
} |
||||
|
||||
float easeOutQuart(float x) { |
||||
return 1 - powf(1 - x, 4); |
||||
} |
||||
|
||||
float easeInOutQuart(float x) { |
||||
return x < 0.5 ? 8 * x * x * x * x : 1 - powf(-2 * x + 2, 4) / 2; |
||||
} |
||||
|
||||
float easeInQuint(float x) { |
||||
return x * x * x * x * x; |
||||
} |
||||
|
||||
float easeOutQuint(float x) { |
||||
return 1 - powf(1 - x, 5); |
||||
} |
||||
|
||||
float easeInOutQuint(float x) { |
||||
return x < 0.5f ? 16 * x * x * x * x * x : 1 - powf(-2 * x + 2, 5) / 2; |
||||
} |
||||
|
||||
float easeInSine(float x) { |
||||
return 1 - cosf((x * PI) / 2); |
||||
} |
||||
|
||||
float easeOutSine(float x) { |
||||
return sinf((x * PI) / 2); |
||||
} |
||||
|
||||
float easeInOutSine(float x) { |
||||
return -(cosf(PI * x) - 1) / 2; |
||||
} |
||||
|
||||
float easeInExpo(float x) { |
||||
return x == 0 ? 0 : powf(2, 10 * x - 10); |
||||
} |
||||
|
||||
float easeOutExpo(float x) { |
||||
return x == 1 ? 1 : 1 - powf(2, -10 * x); |
||||
} |
||||
|
||||
float easeInOutExpo(float x) { |
||||
return x == 0 |
||||
? 0 |
||||
: x == 1 |
||||
? 1 |
||||
: x < 0.5 |
||||
? powf(2, 20 * x - 10) / 2 |
||||
: (2 - powf(2, -20 * x + 10)) / 2; |
||||
} |
||||
|
||||
float easeInCirc(float x) { |
||||
return 1 - sqrtf(1 - powf(x, 2)); |
||||
} |
||||
|
||||
float easeOutCirc(float x) { |
||||
return sqrtf(1 - powf(x - 1, 2)); |
||||
} |
||||
|
||||
float easeInOutCirc(float x) { |
||||
return x < 0.5 |
||||
? (1 - sqrtf(1 - pow(2 * x, 2))) / 2 |
||||
: (sqrtf(1 - powf(-2 * x + 2, 2)) + 1) / 2; |
||||
} |
||||
|
||||
float easeInBack(float x) { |
||||
return c3 * x * x * x - c1 * x * x; |
||||
} |
||||
|
||||
float easeOutBack(float x) { |
||||
return 1 + c3 * powf(x - 1, 3) + c1 * powf(x - 1, 2); |
||||
} |
||||
|
||||
float easeInOutBack(float x) { |
||||
return x < 0.5 |
||||
? (powf(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2 |
||||
: (powf(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2; |
||||
} |
||||
|
||||
float easeInElastic(float x) { |
||||
return x == 0 |
||||
? 0 |
||||
: x == 1 |
||||
? 1 |
||||
: -powf(2, 10 * x - 10) * sinf((x * 10 - 10.75f) * c4); |
||||
} |
||||
|
||||
float easeOutElastic(float x) { |
||||
return x == 0 |
||||
? 0 |
||||
: x == 1 |
||||
? 1 |
||||
: powf(2, -10 * x) * sinf((x * 10 - 0.75f) * c4) + 1; |
||||
} |
||||
|
||||
float easeInOutElastic(float x) { |
||||
return x == 0 |
||||
? 0 |
||||
: x == 1 |
||||
? 1 |
||||
: x < 0.5 |
||||
? -(powf(2, 20 * x - 10) * sinf((20 * x - 11.125f) * c5)) / 2 |
||||
: (powf(2, -20 * x + 10) * sinf((20 * x - 11.125f) * c5)) / 2 + 1; |
||||
} |
||||
|
||||
float easeOutBounce(float x); |
||||
|
||||
float easeInBounce(float x) { |
||||
return 1 -easeOutBounce(1 - x); |
||||
} |
||||
|
||||
float easeOutBounce(float x) { |
||||
static const float n1 = 7.5625f; |
||||
static const float d1 = 2.75f; |
||||
|
||||
if (x < 1 / d1) { |
||||
return n1 * x * x; |
||||
} else if (x < 2 / d1) { |
||||
x -= 1.5f / d1; |
||||
return n1 * x * x + 0.75f; |
||||
} else if (x < 2.5f / d1) { |
||||
x -= 2.25f / d1; |
||||
return n1 * x * x + 0.9375f; |
||||
} else { |
||||
x -= 2.625f / d1; |
||||
return n1 * x * x + 0.984375f; |
||||
} |
||||
}; |
||||
|
||||
float easeInOutBounce(float x) { |
||||
return x < 0.5 |
||||
? (1 - easeOutBounce(1 - 2 * x)) / 2 |
||||
: (1 + easeOutBounce(2 * x - 1)) / 2; |
||||
} |
||||
|
||||
EasingFuncType g_easingFuncs[] = { |
||||
linear, |
||||
easeInQuad, |
||||
easeOutQuad, |
||||
easeInOutQuad, |
||||
easeInCubic, |
||||
easeOutCubic, |
||||
easeInOutCubic, |
||||
easeInQuart, |
||||
easeOutQuart, |
||||
easeInOutQuart, |
||||
easeInQuint, |
||||
easeOutQuint, |
||||
easeInOutQuint, |
||||
easeInSine, |
||||
easeOutSine, |
||||
easeInOutSine, |
||||
easeInExpo, |
||||
easeOutExpo, |
||||
easeInOutExpo, |
||||
easeInCirc, |
||||
easeOutCirc, |
||||
easeInOutCirc, |
||||
easeInBack, |
||||
easeOutBack, |
||||
easeInOutBack, |
||||
easeInElastic, |
||||
easeOutElastic, |
||||
easeInOutElastic, |
||||
easeInBounce, |
||||
easeOutBounce, |
||||
easeInOutBounce, |
||||
}; |
||||
|
||||
} // namespace eez
|
||||
|
||||
#ifdef EEZ_PLATFORM_SIMULATOR_WIN32 |
||||
char *strnstr(const char *s1, const char *s2, size_t n) { |
||||
char c = *s2; |
||||
|
||||
if (c == '\0') |
||||
return (char *)s1; |
||||
|
||||
for (size_t len = strlen(s2); len <= n; n--, s1++) { |
||||
if (*s1 == c) { |
||||
for (size_t i = 1;; i++) { |
||||
if (i == len) { |
||||
return (char *)s1; |
||||
} |
||||
if (s1[i] != s2[i]) { |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
return NULL; |
||||
} |
||||
#endif |
@ -0,0 +1,209 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2018-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <stdint.h> |
||||
#include <stdlib.h> |
||||
|
||||
#include <eez/core/os.h> |
||||
#include <eez/core/unit.h> |
||||
|
||||
#define clear_bit(reg, bitmask) *reg &= ~bitmask |
||||
#define set_bit(reg, bitmask) *reg |= bitmask |
||||
#define util_swap(type, i, j) \ |
||||
{ \
|
||||
type t = i; \
|
||||
i = j; \
|
||||
j = t; \
|
||||
} |
||||
|
||||
#ifndef MIN |
||||
#define MIN(a, b) ((a) < (b) ? (a) : (b)) |
||||
#endif |
||||
|
||||
#ifndef MAX |
||||
#define MAX(a, b) ((a) > (b) ? (a) : (b)) |
||||
#endif |
||||
|
||||
#define PATH_SEPARATOR "/" |
||||
|
||||
namespace eez { |
||||
|
||||
float remap(float x, float x1, float y1, float x2, float y2); |
||||
float remapQuad(float x, float x1, float y1, float x2, float y2); |
||||
float remapOutQuad(float x, float x1, float y1, float x2, float y2); |
||||
float remapInOutQuad(float x, float x1, float y1, float x2, float y2); |
||||
float remapCubic(float x, float x1, float y1, float x2, float y2); |
||||
float remapOutCubic(float x, float x1, float y1, float x2, float y2); |
||||
float remapExp(float x, float x1, float y1, float x2, float y2); |
||||
float remapOutExp(float x, float x1, float y1, float x2, float y2); |
||||
float clamp(float x, float min, float max); |
||||
|
||||
void stringCopy(char *dst, size_t maxStrLength, const char *src); |
||||
void stringCopyLength(char *dst, size_t maxStrLength, const char *src, size_t length); |
||||
|
||||
void stringAppendString(char *str, size_t maxStrLength, const char *value); |
||||
void stringAppendStringLength(char *str, size_t maxStrLength, const char *value, size_t length); |
||||
|
||||
void stringAppendInt(char *str, size_t maxStrLength, int value); |
||||
void stringAppendUInt32(char *str, size_t maxStrLength, uint32_t value); |
||||
void stringAppendInt64(char *str, size_t maxStrLength, int64_t value); |
||||
void stringAppendUInt64(char *str, size_t maxStrLength, uint64_t value); |
||||
void stringAppendFloat(char *str, size_t maxStrLength, float value); |
||||
void stringAppendFloat(char *str, size_t maxStrLength, float value, int numDecimalPlaces); |
||||
void stringAppendDouble(char *str, size_t maxStrLength, double value); |
||||
void stringAppendDouble(char *str, size_t maxStrLength, double value, int numDecimalPlaces); |
||||
|
||||
void stringAppendVoltage(char *str, size_t maxStrLength, float value); |
||||
void stringAppendCurrent(char *str, size_t maxStrLength, float value); |
||||
void stringAppendPower(char *str, size_t maxStrLength, float value); |
||||
void stringAppendDuration(char *str, size_t maxStrLength, float value); |
||||
void stringAppendLoad(char *str, size_t maxStrLength, float value); |
||||
|
||||
uint32_t crc32(const uint8_t *message, size_t size); |
||||
|
||||
uint8_t toBCD(uint8_t bin); |
||||
uint8_t fromBCD(uint8_t bcd); |
||||
|
||||
float roundPrec(float a, float prec); |
||||
float floorPrec(float a, float prec); |
||||
float ceilPrec(float a, float prec); |
||||
|
||||
bool isNaN(float x); |
||||
bool isNaN(double x); |
||||
|
||||
bool isDigit(char ch); |
||||
bool isHexDigit(char ch); |
||||
bool isUperCaseLetter(char ch); |
||||
|
||||
char toHexDigit(int num); |
||||
int fromHexDigit(char ch); |
||||
|
||||
bool pointInsideRect(int xPoint, int yPoint, int xRect, int yRect, int wRect, int hRect); |
||||
|
||||
void getParentDir(const char *path, char *parentDirPath); |
||||
|
||||
bool parseMacAddress(const char *macAddressStr, size_t macAddressStrLength, uint8_t *macAddress); |
||||
|
||||
int getIpAddressPartA(uint32_t ipAddress); |
||||
void setIpAddressPartA(uint32_t *ipAddress, uint8_t value); |
||||
|
||||
int getIpAddressPartB(uint32_t ipAddress); |
||||
void setIpAddressPartB(uint32_t *ipAddress, uint8_t value); |
||||
|
||||
int getIpAddressPartC(uint32_t ipAddress); |
||||
void setIpAddressPartC(uint32_t *ipAddress, uint8_t value); |
||||
|
||||
int getIpAddressPartD(uint32_t ipAddress); |
||||
void setIpAddressPartD(uint32_t *ipAddress, uint8_t value); |
||||
|
||||
void ipAddressToArray(uint32_t ipAddress, uint8_t *ipAddressArray); |
||||
uint32_t arrayToIpAddress(uint8_t *ipAddressArray); |
||||
|
||||
uint32_t getIpAddress(uint8_t a, uint8_t b, uint8_t c, uint8_t d); |
||||
|
||||
bool parseIpAddress(const char *ipAddressStr, size_t ipAddressStrLength, uint32_t &ipAddress); |
||||
void ipAddressToString(uint32_t ipAddress, char *ipAddressStr, size_t maxIpAddressStrLength); |
||||
|
||||
void macAddressToString(const uint8_t *macAddress, char *macAddressStr); |
||||
|
||||
void formatTimeZone(int16_t timeZone, char *text, int count); |
||||
bool parseTimeZone(const char *timeZoneStr, size_t timeZoneLength, int16_t &timeZone); |
||||
|
||||
void replaceCharacter(char *str, char ch, char repl); |
||||
|
||||
int strcicmp(char const *a, char const *b); |
||||
int strncicmp(char const *a, char const *b, int n); |
||||
bool isStringEmpty(char const *a); |
||||
bool startsWith(const char *str, const char *prefix); |
||||
bool startsWithNoCase(const char *str, const char *prefix); |
||||
bool endsWith(const char *str, const char *suffix); |
||||
bool endsWithNoCase(const char *str, const char *suffix); |
||||
|
||||
void formatBytes(uint64_t bytes, char *text, int count); |
||||
|
||||
void getFileName(const char *path, char *fileName, unsigned fileNameSize); |
||||
void getBaseFileName(const char *path, char *baseName, unsigned baseNameSize); |
||||
|
||||
typedef float (*EasingFuncType)(float x); |
||||
extern EasingFuncType g_easingFuncs[]; |
||||
|
||||
class Interval { |
||||
public: |
||||
// Returns true when called for the first time,
|
||||
// and later returns true after interval, interval * 2, interval * 3, ...
|
||||
// Interval is in milliseconds.
|
||||
bool test(uint32_t interval) { |
||||
auto time = millis(); |
||||
|
||||
if (lastTime == 0) { |
||||
lastTime = time == 0 ? 1 : time; |
||||
return true; |
||||
} |
||||
|
||||
if (time >= lastTime + interval) { |
||||
lastTime += ((uint32_t)(time - lastTime) / interval) * interval; |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
|
||||
private: |
||||
uint32_t lastTime = 0; |
||||
}; |
||||
|
||||
template <typename T, typename Total, uint64_t N> |
||||
class MovingAverage { |
||||
public: |
||||
void operator()(T sample) { |
||||
if (m_numSamples < N) { |
||||
m_samples[m_numSamples++] = sample; |
||||
m_total += sample; |
||||
} else { |
||||
T& oldest = m_samples[m_numSamples++ % N]; |
||||
m_total += sample - oldest; |
||||
oldest = sample; |
||||
} |
||||
} |
||||
|
||||
operator T() const { |
||||
if (m_numSamples < N) { |
||||
return m_total / m_numSamples; |
||||
} else { |
||||
return m_total / N; |
||||
} |
||||
} |
||||
|
||||
void reset() { |
||||
m_numSamples = 0; |
||||
m_total = 0; |
||||
} |
||||
|
||||
private: |
||||
T m_samples[N]; |
||||
uint64_t m_numSamples{0}; |
||||
Total m_total{0}; |
||||
}; |
||||
|
||||
} // namespace eez
|
||||
|
||||
#ifdef EEZ_PLATFORM_SIMULATOR_WIN32 |
||||
char *strnstr(const char *s1, const char *s2, size_t n); |
||||
#endif |
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2020-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/conf.h> |
||||
#include <eez/core/unit.h> |
||||
|
||||
#define VALUE_TYPES \ |
||||
VALUE_TYPE(UNDEFINED) /* 0 */ \
|
||||
VALUE_TYPE(NULL) /* 1 */ \
|
||||
VALUE_TYPE(BOOLEAN) /* 2 */ \
|
||||
VALUE_TYPE(INT8) /* 3 */ \
|
||||
VALUE_TYPE(UINT8) /* 4 */ \
|
||||
VALUE_TYPE(INT16) /* 5 */ \
|
||||
VALUE_TYPE(UINT16) /* 6 */ \
|
||||
VALUE_TYPE(INT32) /* 7 */ \
|
||||
VALUE_TYPE(UINT32) /* 8 */ \
|
||||
VALUE_TYPE(INT64) /* 9 */ \
|
||||
VALUE_TYPE(UINT64) /* 10 */ \
|
||||
VALUE_TYPE(FLOAT) /* 11 */ \
|
||||
VALUE_TYPE(DOUBLE) /* 12 */ \
|
||||
VALUE_TYPE(STRING) /* 13 */ \
|
||||
VALUE_TYPE(ARRAY) /* 14 */ \
|
||||
VALUE_TYPE(STRING_REF) /* 15 */ \
|
||||
VALUE_TYPE(ARRAY_REF) /* 16 */ \
|
||||
VALUE_TYPE(BLOB_REF) /* 17 */ \
|
||||
VALUE_TYPE(STREAM) /* 18 */ \
|
||||
VALUE_TYPE(DATE) /* 19 */ \
|
||||
VALUE_TYPE(VERSIONED_STRING) /* 20 */ \
|
||||
VALUE_TYPE(VALUE_PTR) /* 21 */ \
|
||||
VALUE_TYPE(ARRAY_ELEMENT_VALUE) /* 22 */ \
|
||||
VALUE_TYPE(FLOW_OUTPUT) /* 23 */ \
|
||||
VALUE_TYPE(NATIVE_VARIABLE) /* 24 */ \
|
||||
VALUE_TYPE(RANGE) /* 25 */ \
|
||||
VALUE_TYPE(POINTER) /* 26 */ \
|
||||
VALUE_TYPE(ENUM) /* 27 */ \
|
||||
VALUE_TYPE(IP_ADDRESS) /* 28 */ \
|
||||
VALUE_TYPE(TIME_ZONE) /* 29 */ \
|
||||
VALUE_TYPE(YT_DATA_GET_VALUE_FUNCTION_POINTER) /* 30 */ \
|
||||
CUSTOM_VALUE_TYPES |
||||
|
||||
namespace eez { |
||||
|
||||
#define VALUE_TYPE(NAME) VALUE_TYPE_##NAME, |
||||
enum ValueType { |
||||
VALUE_TYPES |
||||
}; |
||||
#undef VALUE_TYPE |
||||
|
||||
} |
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
#include <math.h> |
||||
|
||||
#include <eez/core/os.h> |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/queue.h> |
||||
#include <eez/flow/hooks.h> |
||||
|
||||
#if defined(__EMSCRIPTEN__) |
||||
#include <eez/flow/dashboard_api.h> |
||||
#endif |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeStartComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeEndComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeInputComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeOutputComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeWatchVariableComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeEvalExprComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeSetVariableComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeSwitchComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeCompareComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeIsTrueComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeConstantComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeLogComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeCallActionComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeDelayComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeErrorComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeCatchErrorComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeCounterComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeLoopComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeShowPageComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeShowMessageBoxComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeShowKeyboardComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeShowKeypadComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeSelectLanguageComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeSetPageDirectionComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeAnimateComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeNoopComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeOnEventComponent(FlowState *flowState, unsigned componentIndex); |
||||
|
||||
void executeLayoutViewWidgetComponent(FlowState *flowState, unsigned componentIndex); |
||||
void executeRollerWidgetComponent(FlowState *flowState, unsigned componentIndex); |
||||
|
||||
typedef void (*ExecuteComponentFunctionType)(FlowState *flowState, unsigned componentIndex); |
||||
|
||||
static ExecuteComponentFunctionType g_executeComponentFunctions[] = { |
||||
executeStartComponent, |
||||
executeEndComponent, |
||||
executeInputComponent, |
||||
executeOutputComponent, |
||||
executeWatchVariableComponent, |
||||
executeEvalExprComponent, |
||||
executeSetVariableComponent, |
||||
executeSwitchComponent, |
||||
executeCompareComponent, |
||||
executeIsTrueComponent, |
||||
executeConstantComponent, |
||||
executeLogComponent, |
||||
executeCallActionComponent, |
||||
executeDelayComponent, |
||||
executeErrorComponent, |
||||
executeCatchErrorComponent, |
||||
executeCounterComponent, // COMPONENT_TYPE_COUNTER_ACTION
|
||||
executeLoopComponent, |
||||
executeShowPageComponent, |
||||
nullptr, // COMPONENT_TYPE_SCPIACTION
|
||||
executeShowMessageBoxComponent, |
||||
executeShowKeyboardComponent, |
||||
executeShowKeypadComponent, |
||||
executeNoopComponent, // COMPONENT_TYPE_NOOP_ACTION
|
||||
nullptr, // COMPONENT_TYPE_COMMENT_ACTION
|
||||
executeSelectLanguageComponent, // COMPONENT_TYPE_SELECT_LANGUAGE_ACTION
|
||||
executeSetPageDirectionComponent, // COMPONENT_TYPE_SET_PAGE_DIRECTION_ACTION
|
||||
executeAnimateComponent, // COMPONENT_TYPE_ANIMATE_ACTION
|
||||
executeOnEventComponent, // COMPONENT_TYPE_ON_EVENT_ACTION
|
||||
}; |
||||
|
||||
void registerComponent(ComponentTypes componentType, ExecuteComponentFunctionType executeComponentFunction) { |
||||
if (componentType >= defs_v3::COMPONENT_TYPE_START_ACTION) { |
||||
g_executeComponentFunctions[componentType - defs_v3::COMPONENT_TYPE_START_ACTION] = executeComponentFunction; |
||||
} |
||||
} |
||||
|
||||
void executeComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
|
||||
#if defined(__EMSCRIPTEN__) |
||||
if (component->type >= defs_v3::FIRST_DASHBOARD_COMPONENT_TYPE) { |
||||
if (executeDashboardComponentHook) { |
||||
executeDashboardComponentHook(component->type, getFlowStateIndex(flowState), componentIndex); |
||||
return; |
||||
} |
||||
} else |
||||
#endif // __EMSCRIPTEN__
|
||||
if (component->type >= defs_v3::COMPONENT_TYPE_START_ACTION) { |
||||
auto executeComponentFunction = g_executeComponentFunctions[component->type - defs_v3::COMPONENT_TYPE_START_ACTION]; |
||||
if (executeComponentFunction != nullptr) { |
||||
executeComponentFunction(flowState, componentIndex); |
||||
return; |
||||
} |
||||
} else if (component->type < 1000) { |
||||
if (component->type == defs_v3::COMPONENT_TYPE_LAYOUT_VIEW_WIDGET) { |
||||
executeLayoutViewWidgetComponent(flowState, componentIndex); |
||||
} else if (component->type == defs_v3::COMPONENT_TYPE_ROLLER_WIDGET) { |
||||
executeRollerWidgetComponent(flowState, componentIndex); |
||||
} |
||||
return; |
||||
} |
||||
|
||||
char errorMessage[100]; |
||||
snprintf(errorMessage, sizeof(errorMessage), "Unknown component at index = %d, type = %d\n", componentIndex, component->type); |
||||
throwError(flowState, componentIndex, errorMessage); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
using defs_v3::ComponentTypes; |
||||
|
||||
typedef void (*ExecuteComponentFunctionType)(FlowState *flowState, unsigned componentIndex); |
||||
void registerComponent(ComponentTypes componentType, ExecuteComponentFunctionType executeComponentFunction); |
||||
|
||||
void executeComponent(FlowState *flowState, unsigned componentIndex); |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/private.h> |
||||
#include <eez/flow/queue.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct AnimateComponenentExecutionState : public ComponenentExecutionState { |
||||
float startPosition; |
||||
float endPosition; |
||||
float speed; |
||||
uint32_t startTimestamp; |
||||
}; |
||||
|
||||
void executeAnimateComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto state = (AnimateComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (!state) { |
||||
Value fromValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::ANIMATE_ACTION_COMPONENT_PROPERTY_FROM, fromValue, "Failed to evaluate From in Animate")) { |
||||
return; |
||||
} |
||||
|
||||
Value toValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::ANIMATE_ACTION_COMPONENT_PROPERTY_TO, toValue, "Failed to evaluate To in Animate")) { |
||||
return; |
||||
} |
||||
|
||||
Value speedValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::ANIMATE_ACTION_COMPONENT_PROPERTY_SPEED, speedValue, "Failed to evaluate Speed in Animate")) { |
||||
return; |
||||
} |
||||
|
||||
float from = fromValue.toFloat(); |
||||
float to = toValue.toFloat(); |
||||
float speed = speedValue.toFloat(); |
||||
|
||||
if (speed == 0) { |
||||
flowState->timelinePosition = to; |
||||
onFlowStateTimelineChanged(flowState); |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} else { |
||||
state = allocateComponentExecutionState<AnimateComponenentExecutionState>(flowState, componentIndex); |
||||
|
||||
state->startPosition = from; |
||||
state->endPosition = to; |
||||
state->speed = speed; |
||||
state->startTimestamp = millis(); |
||||
|
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} |
||||
} else { |
||||
float currentTime; |
||||
|
||||
if (state->startPosition < state->endPosition) { |
||||
currentTime = state->startPosition + state->speed * (millis() - state->startTimestamp) / 1000.0f; |
||||
if (currentTime >= state->endPosition) { |
||||
currentTime = state->endPosition; |
||||
} |
||||
} else { |
||||
currentTime = state->startPosition - state->speed * (millis() - state->startTimestamp) / 1000.0f; |
||||
if (currentTime <= state->endPosition) { |
||||
currentTime = state->endPosition; |
||||
} |
||||
} |
||||
|
||||
flowState->timelinePosition = currentTime; |
||||
onFlowStateTimelineChanged(flowState); |
||||
|
||||
if (currentTime == state->endPosition) { |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} else { |
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/components/call_action.h> |
||||
#include <eez/flow/debugger.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
CallActionComponenentExecutionState::~CallActionComponenentExecutionState() { |
||||
freeFlowState(flowState); |
||||
} |
||||
|
||||
void executeCallAction(FlowState *flowState, unsigned componentIndex, int flowIndex) { |
||||
if (flowIndex >= (int)flowState->flowDefinition->flows.count) { |
||||
executeActionFunction(flowIndex - flowState->flowDefinition->flows.count); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
return; |
||||
} |
||||
|
||||
auto callActionComponenentExecutionState = (CallActionComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (callActionComponenentExecutionState) { |
||||
if (canFreeFlowState(callActionComponenentExecutionState->flowState)) { |
||||
freeFlowState(callActionComponenentExecutionState->flowState); |
||||
} else { |
||||
throwError(flowState, componentIndex, "CallAction is already running\n"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
FlowState *actionFlowState = initActionFlowState(flowIndex, flowState, componentIndex); |
||||
|
||||
if (canFreeFlowState(actionFlowState)) { |
||||
freeFlowState(actionFlowState); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} else { |
||||
callActionComponenentExecutionState = allocateComponentExecutionState<CallActionComponenentExecutionState>(flowState, componentIndex); |
||||
callActionComponenentExecutionState->flowState = actionFlowState; |
||||
} |
||||
} |
||||
|
||||
void executeCallActionComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (CallActionActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
auto flowIndex = component->flowIndex; |
||||
if (flowIndex < 0) { |
||||
throwError(flowState, componentIndex, "Invalid action flow index in CallAction\n"); |
||||
return; |
||||
} |
||||
|
||||
executeCallAction(flowState, componentIndex, flowIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct CallActionActionComponent : public Component { |
||||
int16_t flowIndex; |
||||
uint8_t inputsStartIndex; |
||||
uint8_t outputsStartIndex; |
||||
}; |
||||
|
||||
typedef CallActionActionComponent LayoutViewWidgetComponent; |
||||
|
||||
struct CallActionComponenentExecutionState : public ComponenentExecutionState { |
||||
FlowState *flowState; |
||||
|
||||
~CallActionComponenentExecutionState(); |
||||
}; |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeCatchErrorComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto catchErrorComponentExecutionState = (CatchErrorComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
propagateValue(flowState, componentIndex, 1, catchErrorComponentExecutionState->message); |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct CompareActionComponent : public Component { |
||||
uint8_t conditionInstructions[1]; |
||||
}; |
||||
|
||||
void executeCompareComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (CompareActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
Value conditionValue; |
||||
if (!evalExpression(flowState, componentIndex, component->conditionInstructions, conditionValue, "Failed to evaluate Condition in Compare")) { |
||||
return; |
||||
} |
||||
|
||||
int err; |
||||
bool result = conditionValue.toBool(&err); |
||||
if (err == 0) { |
||||
if (result) { |
||||
propagateValue(flowState, componentIndex, 1, Value(true, VALUE_TYPE_BOOLEAN)); |
||||
} else { |
||||
propagateValue(flowState, componentIndex, 2, Value(false, VALUE_TYPE_BOOLEAN)); |
||||
} |
||||
} else { |
||||
throwError(flowState, componentIndex, "Failed to convert Value to boolean in IsTrue\n"); |
||||
return; |
||||
} |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct ConstantActionComponent : public Component { |
||||
uint16_t valueIndex; |
||||
}; |
||||
|
||||
void executeConstantComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (ConstantActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
auto &sourceValue = *flowState->flowDefinition->constants[component->valueIndex]; |
||||
|
||||
propagateValue(flowState, componentIndex, 1, sourceValue); |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/operations.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct CounterComponenentExecutionState : public ComponenentExecutionState { |
||||
int counter; |
||||
}; |
||||
|
||||
void executeCounterComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto counterComponenentExecutionState = (CounterComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
|
||||
if (!counterComponenentExecutionState) { |
||||
Value counterValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::COUNTER_ACTION_COMPONENT_PROPERTY_COUNT_VALUE, counterValue, "Failed to evaluate countValue in Counter")) { |
||||
return; |
||||
} |
||||
|
||||
counterComponenentExecutionState = allocateComponentExecutionState<CounterComponenentExecutionState>(flowState, componentIndex); |
||||
counterComponenentExecutionState->counter = counterValue.getInt(); |
||||
} |
||||
|
||||
if (counterComponenentExecutionState->counter > 0) { |
||||
counterComponenentExecutionState->counter--; |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} else { |
||||
// done
|
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
propagateValue(flowState, componentIndex, 1); |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/alloc.h> |
||||
#include <eez/core/os.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/queue.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct DelayComponenentExecutionState : public ComponenentExecutionState { |
||||
uint32_t waitUntil; |
||||
}; |
||||
|
||||
void executeDelayComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto delayComponentExecutionState = (DelayComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
|
||||
if (!delayComponentExecutionState) { |
||||
Value value; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::DELAY_ACTION_COMPONENT_PROPERTY_MILLISECONDS, value, "Failed to evaluate Milliseconds in Delay")) { |
||||
return; |
||||
} |
||||
|
||||
double milliseconds = value.toDouble(); |
||||
if (!isNaN(milliseconds)) { |
||||
delayComponentExecutionState = allocateComponentExecutionState<DelayComponenentExecutionState>(flowState, componentIndex); |
||||
delayComponentExecutionState->waitUntil = millis() + (uint32_t)floor(milliseconds); |
||||
} else { |
||||
throwError(flowState, componentIndex, "Invalid Milliseconds value in Delay\n"); |
||||
return; |
||||
} |
||||
|
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} else { |
||||
if (millis() >= delayComponentExecutionState->waitUntil) { |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} else { |
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/hooks.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeEndComponent(FlowState *flowState, unsigned componentIndex) { |
||||
if (flowState->parentFlowState && flowState->isAction) { |
||||
propagateValueThroughSeqout(flowState->parentFlowState, flowState->parentComponentIndex); |
||||
} else { |
||||
stopScriptHook(); |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeErrorComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value expressionValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::EVAL_EXPR_ACTION_COMPONENT_PROPERTY_EXPRESSION, expressionValue, "Failed to evaluate Message in Error")) { |
||||
return; |
||||
} |
||||
|
||||
throwError(flowState, componentIndex, expressionValue.getString()); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeEvalExprComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value expressionValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::EVAL_EXPR_ACTION_COMPONENT_PROPERTY_EXPRESSION, expressionValue, "Failed to evaluate Expression in EvalExpr")) { |
||||
return; |
||||
} |
||||
|
||||
propagateValue(flowState, componentIndex, 1, expressionValue); |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
|
||||
#include <eez/flow/components/input.h> |
||||
#include <eez/flow/components/call_action.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
bool getCallActionValue(FlowState *flowState, unsigned componentIndex, Value &value) { |
||||
auto component = (InputActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
if (!flowState->parentFlowState) { |
||||
throwError(flowState, componentIndex, "No parentFlowState in Input\n"); |
||||
return false; |
||||
} |
||||
|
||||
if (!flowState->parentComponent) { |
||||
throwError(flowState, componentIndex, "No parentComponent in Input\n"); |
||||
return false; |
||||
} |
||||
|
||||
auto callActionComponent = (CallActionActionComponent *)flowState->parentComponent; |
||||
|
||||
uint8_t parentComponentInputIndex = callActionComponent->inputsStartIndex + component->inputIndex; |
||||
if (component->type == defs_v3::COMPONENT_TYPE_INPUT_ACTION) { |
||||
parentComponentInputIndex = callActionComponent->inputsStartIndex + component->inputIndex; |
||||
} else { |
||||
parentComponentInputIndex = 0; |
||||
} |
||||
|
||||
if (parentComponentInputIndex >= flowState->parentComponent->inputs.count) { |
||||
throwError(flowState, componentIndex, "Invalid input index in Input\n"); |
||||
return false; |
||||
} |
||||
|
||||
auto parentComponentInputs = flowState->parentComponent->inputs; |
||||
auto flowInputIndex = parentComponentInputs[parentComponentInputIndex]; |
||||
|
||||
auto parentFlow = flowState->flowDefinition->flows[flowState->parentFlowState->flowIndex]; |
||||
if (flowInputIndex >= parentFlow->componentInputs.count) { |
||||
throwError(flowState, componentIndex, "Invalid input index of parent component in Input\n"); |
||||
return false; |
||||
} |
||||
|
||||
value = flowState->parentFlowState->values[flowInputIndex]; |
||||
return true; |
||||
} |
||||
|
||||
void executeInputComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value value; |
||||
if (getCallActionValue(flowState, componentIndex, value)) { |
||||
auto inputActionComponentExecutionState = (InputActionComponentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (!inputActionComponentExecutionState) { |
||||
inputActionComponentExecutionState = allocateComponentExecutionState<InputActionComponentExecutionState>(flowState, componentIndex); |
||||
} |
||||
|
||||
propagateValue(flowState, componentIndex, 0, value); |
||||
inputActionComponentExecutionState->value = value; |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct InputActionComponent : public Component { |
||||
uint8_t inputIndex; |
||||
}; |
||||
|
||||
struct InputActionComponentExecutionState : public ComponenentExecutionState { |
||||
Value value; |
||||
}; |
||||
|
||||
|
||||
bool getCallActionValue(FlowState *flowState, unsigned componentIndex, Value &value); |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeIsTrueComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value srcValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::IS_TRUE_ACTION_COMPONENT_PROPERTY_VALUE, srcValue, "Failed to evaluate Value in IsTrue")) { |
||||
return; |
||||
} |
||||
|
||||
int err; |
||||
bool result = srcValue.toBool(&err); |
||||
if (err == 0) { |
||||
if (result) { |
||||
propagateValue(flowState, componentIndex, 1, Value(true, VALUE_TYPE_BOOLEAN)); |
||||
} else { |
||||
propagateValue(flowState, componentIndex, 2, Value(false, VALUE_TYPE_BOOLEAN)); |
||||
} |
||||
} else { |
||||
throwError(flowState, componentIndex, "Failed to convert Value to boolean in IsTrue\n"); |
||||
return; |
||||
} |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/alloc.h> |
||||
#include <eez/core/os.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/queue.h> |
||||
#include <eez/flow/components/call_action.h> |
||||
#include <eez/flow/components/input.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct LayoutViewWidgetExecutionState : public ComponenentExecutionState { |
||||
FlowState *flowState; |
||||
|
||||
~LayoutViewWidgetExecutionState() { |
||||
freeFlowState(flowState); |
||||
} |
||||
}; |
||||
|
||||
static LayoutViewWidgetExecutionState *createLayoutViewFlowState(FlowState *flowState, uint16_t layoutViewWidgetComponentIndex, int16_t pageId) { |
||||
auto layoutViewFlowState = initPageFlowState(flowState->assets, pageId, flowState, layoutViewWidgetComponentIndex); |
||||
auto layoutViewWidgetExecutionState = allocateComponentExecutionState<LayoutViewWidgetExecutionState>(flowState, layoutViewWidgetComponentIndex); |
||||
layoutViewWidgetExecutionState->flowState = layoutViewFlowState; |
||||
return layoutViewWidgetExecutionState; |
||||
} |
||||
|
||||
FlowState *getLayoutViewFlowState(FlowState *flowState, uint16_t layoutViewWidgetComponentIndex, int16_t pageId) { |
||||
auto layoutViewWidgetExecutionState = (LayoutViewWidgetExecutionState *)flowState->componenentExecutionStates[layoutViewWidgetComponentIndex]; |
||||
if (!layoutViewWidgetExecutionState) { |
||||
layoutViewWidgetExecutionState = createLayoutViewFlowState(flowState, layoutViewWidgetComponentIndex, pageId); |
||||
} |
||||
|
||||
return layoutViewWidgetExecutionState->flowState; |
||||
} |
||||
|
||||
void executeLayoutViewWidgetComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (CallActionActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
auto layoutViewWidgetExecutionState = (LayoutViewWidgetExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (!layoutViewWidgetExecutionState) { |
||||
createLayoutViewFlowState(flowState, componentIndex, component->flowIndex); |
||||
} else { |
||||
auto layoutViewFlowState = layoutViewWidgetExecutionState->flowState; |
||||
for ( |
||||
unsigned layoutViewComponentIndex = 0; |
||||
layoutViewComponentIndex < layoutViewFlowState->flow->components.count; |
||||
layoutViewComponentIndex++ |
||||
) { |
||||
auto layoutViewComponent = layoutViewFlowState->flow->components[layoutViewComponentIndex]; |
||||
if (layoutViewComponent->type == defs_v3::COMPONENT_TYPE_INPUT_ACTION) { |
||||
auto inputActionComponentExecutionState = (InputActionComponentExecutionState *)layoutViewFlowState->componenentExecutionStates[layoutViewComponentIndex]; |
||||
if (inputActionComponentExecutionState) { |
||||
Value value; |
||||
if (getCallActionValue(layoutViewFlowState, layoutViewComponentIndex, value)) { |
||||
if (inputActionComponentExecutionState->value != value) { |
||||
addToQueue(layoutViewWidgetExecutionState->flowState, layoutViewComponentIndex); |
||||
inputActionComponentExecutionState->value = value; |
||||
} |
||||
} else { |
||||
return; |
||||
} |
||||
} |
||||
} else if (layoutViewComponent->type == defs_v3::COMPONENT_TYPE_START_ACTION) { |
||||
Value value; |
||||
if (getCallActionValue(layoutViewFlowState, layoutViewComponentIndex, value)) { |
||||
if (value.getType() != VALUE_TYPE_UNDEFINED) { |
||||
addToQueue(layoutViewWidgetExecutionState->flowState, layoutViewComponentIndex); |
||||
} |
||||
} else { |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/debug.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/debugger.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeLogComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value value; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::LOG_ACTION_COMPONENT_PROPERTY_VALUE, value, "Failed to evaluate Message in Log")) { |
||||
return; |
||||
} |
||||
|
||||
Value strValue = value.toString(0x0f9812ee); |
||||
const char *valueStr = strValue.getString(); |
||||
if (valueStr && *valueStr) { |
||||
logInfo(flowState, componentIndex, valueStr); |
||||
} |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/operations.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct LoopComponenentExecutionState : public ComponenentExecutionState { |
||||
Value dstValue; |
||||
Value toValue; |
||||
Value currentValue; |
||||
}; |
||||
|
||||
void executeLoopComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
|
||||
auto loopComponentExecutionState = (LoopComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
|
||||
// restart loop if entered through "start" input
|
||||
static const unsigned START_INPUT_INDEX = 0; |
||||
auto startInputIndex = component->inputs[START_INPUT_INDEX]; |
||||
if (flowState->values[startInputIndex].type != VALUE_TYPE_UNDEFINED) { |
||||
if (loopComponentExecutionState) { |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
loopComponentExecutionState = nullptr; |
||||
} |
||||
} else { |
||||
if (!loopComponentExecutionState) { |
||||
return; |
||||
} |
||||
} |
||||
|
||||
Value stepValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::LOOP_ACTION_COMPONENT_PROPERTY_STEP, stepValue, "Failed to evaluate Step in Loop")) { |
||||
return; |
||||
} |
||||
|
||||
if (!loopComponentExecutionState) { |
||||
Value dstValue; |
||||
if (!evalAssignableProperty(flowState, componentIndex, defs_v3::LOOP_ACTION_COMPONENT_PROPERTY_VARIABLE, dstValue, "Failed to evaluate Variable in Loop")) { |
||||
return; |
||||
} |
||||
|
||||
Value fromValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::LOOP_ACTION_COMPONENT_PROPERTY_FROM, fromValue, "Failed to evaluate From in Loop")) { |
||||
return; |
||||
} |
||||
|
||||
Value toValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::LOOP_ACTION_COMPONENT_PROPERTY_TO, toValue, "Failed to evaluate To in Loop")) { |
||||
return; |
||||
} |
||||
|
||||
loopComponentExecutionState = allocateComponentExecutionState<LoopComponenentExecutionState>(flowState, componentIndex); |
||||
loopComponentExecutionState->dstValue = dstValue; |
||||
loopComponentExecutionState->toValue = toValue; |
||||
|
||||
loopComponentExecutionState->currentValue = fromValue; |
||||
} else { |
||||
loopComponentExecutionState->currentValue = op_add(loopComponentExecutionState->currentValue, stepValue); |
||||
} |
||||
|
||||
bool condition; |
||||
if (stepValue.getInt() > 0) { |
||||
condition = op_great(loopComponentExecutionState->currentValue, loopComponentExecutionState->toValue).toBool(); |
||||
} else { |
||||
condition = op_less(loopComponentExecutionState->currentValue, loopComponentExecutionState->toValue).toBool(); |
||||
} |
||||
|
||||
if (condition) { |
||||
// done
|
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
propagateValue(flowState, componentIndex, component->outputs.count - 1); |
||||
} else { |
||||
assignValue(flowState, componentIndex, loopComponentExecutionState->dstValue, loopComponentExecutionState->currentValue); |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/core/debug.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/debugger.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeNoopComponent(FlowState *flowState, unsigned componentIndex) { |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeOnEventComponent(FlowState *flowState, unsigned componentIndex) { |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/components/call_action.h> |
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct OutputActionComponent : public Component { |
||||
uint8_t outputIndex; |
||||
}; |
||||
|
||||
void executeOutputComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (OutputActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
if (!flowState->parentFlowState) { |
||||
throwError(flowState, componentIndex, "No parentFlowState in Output\n"); |
||||
return; |
||||
} |
||||
|
||||
if (!flowState->parentComponent) { |
||||
throwError(flowState, componentIndex, "No parentComponent in Output\n"); |
||||
return; |
||||
} |
||||
|
||||
auto inputIndex = component->inputs[0]; |
||||
if (inputIndex >= flowState->flow->componentInputs.count) { |
||||
throwError(flowState, componentIndex, "Invalid input index in Output\n"); |
||||
return; |
||||
} |
||||
|
||||
auto value = flowState->values[inputIndex]; |
||||
|
||||
auto callActionComponent = (CallActionActionComponent *)flowState->parentComponent; |
||||
|
||||
uint8_t parentComponentOutputIndex = callActionComponent->outputsStartIndex + component->outputIndex; |
||||
|
||||
if (parentComponentOutputIndex >= flowState->parentComponent->outputs.count) { |
||||
throwError(flowState, componentIndex, "Output action component, invalid output index\n"); |
||||
return; |
||||
} |
||||
|
||||
propagateValue(flowState->parentFlowState, flowState->parentComponentIndex, parentComponentOutputIndex, value); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/components/roller_widget.h> |
||||
#include <eez/gui/widgets/roller.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeRollerWidgetComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
|
||||
static const unsigned START_INPUT_INDEX = 0; |
||||
auto startInputIndex = component->inputs[START_INPUT_INDEX]; |
||||
if (flowState->values[startInputIndex].type != VALUE_TYPE_UNDEFINED) { |
||||
auto executionState = (RollerWidgetComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (!executionState) { |
||||
executionState = allocateComponentExecutionState<RollerWidgetComponenentExecutionState>(flowState, componentIndex); |
||||
} |
||||
executionState->clear = true; |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct RollerWidgetComponenentExecutionState : public ComponenentExecutionState { |
||||
bool clear; |
||||
}; |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/private.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeSelectLanguageComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value languageValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SELECT_LANGUAGE_ACTION_COMPONENT_PROPERTY_LANGUAGE, languageValue, "Failed to evaluate Language in SelectLanguage")) { |
||||
return; |
||||
} |
||||
|
||||
const char *language = languageValue.getString(); |
||||
|
||||
auto languages = flowState->assets->languages; |
||||
|
||||
for (uint32_t languageIndex = 0; languageIndex < languages.count; languageIndex++) { |
||||
if (strcmp(languages[languageIndex]->languageID, language) == 0) { |
||||
g_selectedLanguage = languageIndex; |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
char message[256]; |
||||
snprintf(message, sizeof(message), "Unknown language %s", language); |
||||
throwError(flowState, componentIndex, message); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/private.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
#define PAGE_DIRECTION_LTR 0 |
||||
#define PAGE_DIRECTION_RTL 1 |
||||
|
||||
struct SetPageDirectionComponent : public Component { |
||||
uint8_t direction; |
||||
}; |
||||
|
||||
void executeSetPageDirectionComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (SetPageDirectionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
gui::g_isRTL = component->direction == PAGE_DIRECTION_RTL; |
||||
|
||||
gui::refreshScreen(); |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/components/set_variable.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeSetVariableComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (SetVariableActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
for (uint32_t entryIndex = 0; entryIndex < component->entries.count; entryIndex++) { |
||||
auto entry = component->entries[entryIndex]; |
||||
|
||||
char strErrorMessage[256]; |
||||
snprintf(strErrorMessage, sizeof(strErrorMessage), "Failed to evaluate Variable no. %d in SetVariable", (int)(entryIndex + 1)); |
||||
|
||||
Value dstValue; |
||||
if (!evalAssignableExpression(flowState, componentIndex, entry->variable, dstValue, strErrorMessage)) { |
||||
return; |
||||
} |
||||
|
||||
snprintf(strErrorMessage, sizeof(strErrorMessage), "Failed to evaluate Value no. %d in SetVariable", (int)(entryIndex + 1)); |
||||
|
||||
Value srcValue; |
||||
if (!evalExpression(flowState, componentIndex, entry->value, srcValue, strErrorMessage)) { |
||||
return; |
||||
} |
||||
|
||||
assignValue(flowState, componentIndex, dstValue, srcValue); |
||||
} |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2022-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct SetVariableEntry { |
||||
eez::gui::AssetsPtr<uint8_t> variable; |
||||
eez::gui::AssetsPtr<uint8_t> value; |
||||
}; |
||||
|
||||
struct SetVariableActionComponent : public Component { |
||||
eez::gui::ListOfAssetsPtr<SetVariableEntry> entries; |
||||
}; |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/operations.h> |
||||
#include <eez/flow/private.h> |
||||
#include <eez/flow/hooks.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct ShowKeyboardActionComponent : public Component { |
||||
uint8_t password; |
||||
}; |
||||
|
||||
void executeShowKeyboardComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (ShowKeyboardActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
Value labelValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYBOARD_ACTION_COMPONENT_PROPERTY_LABEL, labelValue, "Failed to evaluate Label in ShowKeyboard")) { |
||||
return; |
||||
} |
||||
|
||||
Value initialTextValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYBOARD_ACTION_COMPONENT_PROPERTY_INITAL_TEXT, initialTextValue, "Failed to evaluate InitialText in ShowKeyboard")) { |
||||
return; |
||||
} |
||||
|
||||
Value minCharsValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYBOARD_ACTION_COMPONENT_PROPERTY_MIN_CHARS, minCharsValue, "Failed to evaluate MinChars in ShowKeyboard")) { |
||||
return; |
||||
} |
||||
|
||||
Value maxCharsValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYBOARD_ACTION_COMPONENT_PROPERTY_MAX_CHARS, maxCharsValue, "Failed to evaluate MaxChars in ShowKeyboard")) { |
||||
return; |
||||
} |
||||
|
||||
static FlowState *g_showKeyboardFlowState; |
||||
static unsigned g_showKeyboardComponentIndex; |
||||
|
||||
g_showKeyboardFlowState = flowState; |
||||
g_showKeyboardComponentIndex = componentIndex; |
||||
|
||||
startAsyncExecution(flowState, componentIndex); |
||||
|
||||
auto onOk = [](char *value) { |
||||
propagateValue(g_showKeyboardFlowState, g_showKeyboardComponentIndex, 0, Value::makeStringRef(value, -1, 0x87d32fe2)); |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->popPage(); |
||||
endAsyncExecution(g_showKeyboardFlowState, g_showKeyboardComponentIndex); |
||||
}; |
||||
|
||||
auto onCancel = []() { |
||||
propagateValue(g_showKeyboardFlowState, g_showKeyboardComponentIndex, 1, Value()); |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->popPage(); |
||||
endAsyncExecution(g_showKeyboardFlowState, g_showKeyboardComponentIndex); |
||||
}; |
||||
|
||||
const char *label = labelValue.getString(); |
||||
if (label && *label) { |
||||
labelValue = op_add(labelValue, Value(": ")); |
||||
} |
||||
|
||||
showKeyboardHook(labelValue, initialTextValue, minCharsValue, maxCharsValue, component->password, onOk, onCancel); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/operations.h> |
||||
#include <eez/flow/private.h> |
||||
#include <eez/flow/hooks.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct ShowKeyboardActionComponent : public Component { |
||||
uint8_t password; |
||||
}; |
||||
|
||||
void executeShowKeypadComponent(FlowState *flowState, unsigned componentIndex) { |
||||
Value labelValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYBOARD_ACTION_COMPONENT_PROPERTY_LABEL, labelValue, "Failed to evaluate Label in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
Value initialValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_INITAL_VALUE, initialValue, "Failed to evaluate InitialValue in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
Value minValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_MIN, minValue, "Failed to evaluate Min in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
Value maxValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_MAX, maxValue, "Failed to evaluate Max in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
Value unitValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_UNIT, unitValue, "Failed to evaluate Unit in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
static FlowState *g_showKeyboardFlowState; |
||||
static unsigned g_showKeyboardComponentIndex; |
||||
|
||||
g_showKeyboardFlowState = flowState; |
||||
g_showKeyboardComponentIndex = componentIndex; |
||||
|
||||
startAsyncExecution(flowState, componentIndex); |
||||
|
||||
auto onOk = [](float value) { |
||||
Value precisionValue; |
||||
if (!evalProperty(g_showKeyboardFlowState, g_showKeyboardComponentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_PRECISION, precisionValue, "Failed to evaluate Precision in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
float precision = precisionValue.toFloat(); |
||||
|
||||
Value unitValue; |
||||
if (!evalProperty(g_showKeyboardFlowState, g_showKeyboardComponentIndex, defs_v3::SHOW_KEYPAD_ACTION_COMPONENT_PROPERTY_UNIT, unitValue, "Failed to evaluate Unit in ShowKeypad")) { |
||||
return; |
||||
} |
||||
|
||||
Unit unit = getUnitFromName(unitValue.getString()); |
||||
|
||||
value = roundPrec(value, precision) / getUnitFactor(unit); |
||||
|
||||
propagateValue(g_showKeyboardFlowState, g_showKeyboardComponentIndex, 0, Value(value, VALUE_TYPE_FLOAT)); |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->popPage(); |
||||
endAsyncExecution(g_showKeyboardFlowState, g_showKeyboardComponentIndex); |
||||
}; |
||||
|
||||
auto onCancel = []() { |
||||
propagateValue(g_showKeyboardFlowState, g_showKeyboardComponentIndex, 1, Value()); |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->popPage(); |
||||
endAsyncExecution(g_showKeyboardFlowState, g_showKeyboardComponentIndex); |
||||
}; |
||||
|
||||
const char *label = labelValue.getString(); |
||||
if (label && *label) { |
||||
labelValue = op_add(labelValue, Value(": ")); |
||||
} |
||||
|
||||
Unit unit = getUnitFromName(unitValue.getString()); |
||||
|
||||
showKeypadHook(labelValue, initialValue, minValue, maxValue, unit, onOk, onCancel); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
#include <eez/gui/gui.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
const uint8_t MESSAGE_BOX_TYPE_INFO = 1; |
||||
const uint8_t MESSAGE_BOX_TYPE_ERROR = 2; |
||||
|
||||
struct ShowMessagePageActionComponent : public Component { |
||||
uint8_t type; |
||||
}; |
||||
|
||||
void executeShowMessageBoxComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (ShowMessagePageActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
Value messageValue; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::SHOW_MESSAGE_BOX_ACTION_COMPONENT_PROPERTY_MESSAGE, messageValue, "Failed to evaluate Message in ShowMessageBox")) { |
||||
return; |
||||
} |
||||
|
||||
if (component->type == MESSAGE_BOX_TYPE_INFO) { |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->infoMessage(messageValue); |
||||
} else if (component->type == MESSAGE_BOX_TYPE_ERROR) { |
||||
getAppContextFromId(APP_CONTEXT_ID_DEVICE)->errorMessage(messageValue); |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/debugger.h> |
||||
#include <eez/flow/hooks.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct ShowPageActionComponent : public Component { |
||||
int16_t page; |
||||
}; |
||||
|
||||
void executeShowPageComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (ShowPageActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
replacePageHook(component->page); |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeStartComponent(FlowState *flowState, unsigned componentIndex) { |
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
|
||||
#include <eez/flow/components/switch.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
void executeSwitchComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto component = (SwitchActionComponent *)flowState->flow->components[componentIndex]; |
||||
|
||||
for (uint32_t testIndex = 0; testIndex < component->tests.count; testIndex++) { |
||||
auto test = component->tests[testIndex]; |
||||
|
||||
char strMessage[256]; |
||||
snprintf(strMessage, sizeof(strMessage), "Failed to evaluate test condition no. %d in Switch", (int)(testIndex + 1)); |
||||
|
||||
Value conditionValue; |
||||
if (!evalExpression(flowState, componentIndex, test->conditionInstructions, conditionValue, strMessage)) { |
||||
return; |
||||
} |
||||
|
||||
int err; |
||||
bool result = conditionValue.toBool(&err); |
||||
if (err == 0) { |
||||
if (result) { |
||||
propagateValue(flowState, componentIndex, test->outputIndex); |
||||
break; |
||||
} |
||||
} else { |
||||
char strMessage[256]; |
||||
snprintf(strMessage, sizeof(strMessage), "Failed to convert Value no. %d to boolean in Switch\n", (int)(testIndex + 1)); |
||||
throwError(flowState, componentIndex, strMessage); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* EEZ Generic Firmware |
||||
* Copyright (C) 2022-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct SwitchTest { |
||||
uint8_t outputIndex; |
||||
uint8_t conditionInstructions[1]; |
||||
}; |
||||
|
||||
struct SwitchActionComponent : public Component { |
||||
eez::gui::ListOfAssetsPtr<SwitchTest> tests; |
||||
}; |
||||
|
||||
} // flow
|
||||
} // eez
|
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <stdio.h> |
||||
|
||||
#include <eez/core/alloc.h> |
||||
#include <eez/core/os.h> |
||||
|
||||
#include <eez/flow/components.h> |
||||
#include <eez/flow/flow_defs_v3.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/queue.h> |
||||
|
||||
using namespace eez::gui; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
struct WatchVariableComponenentExecutionState : public ComponenentExecutionState { |
||||
Value value; |
||||
}; |
||||
|
||||
void executeWatchVariableComponent(FlowState *flowState, unsigned componentIndex) { |
||||
auto watchVariableComponentExecutionState = (WatchVariableComponenentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
|
||||
Value value; |
||||
if (!evalProperty(flowState, componentIndex, defs_v3::WATCH_VARIABLE_ACTION_COMPONENT_PROPERTY_VARIABLE, value, "Failed to evaluate Variable in WatchVariable")) { |
||||
return; |
||||
} |
||||
|
||||
if (!watchVariableComponentExecutionState) { |
||||
watchVariableComponentExecutionState = allocateComponentExecutionState<WatchVariableComponenentExecutionState>(flowState, componentIndex); |
||||
watchVariableComponentExecutionState->value = value; |
||||
|
||||
propagateValue(flowState, componentIndex, 1, value); |
||||
|
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} else { |
||||
if (value != watchVariableComponentExecutionState->value) { |
||||
watchVariableComponentExecutionState->value = value; |
||||
propagateValue(flowState, componentIndex, 1, value); |
||||
} |
||||
|
||||
if (canFreeFlowState(flowState, false)) { |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
} else { |
||||
if (!addToQueue(flowState, componentIndex, -1, -1, -1, true)) { |
||||
throwError(flowState, componentIndex, "Execution queue is full\n"); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
} // namespace flow
|
||||
} // namespace eez
|
@ -0,0 +1,378 @@
|
||||
|
||||
/*
|
||||
* EEZ Modular Firmware |
||||
* Copyright (C) 2021-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#if defined(__EMSCRIPTEN__) |
||||
|
||||
#include <emscripten.h> |
||||
|
||||
#include <stdlib.h> |
||||
#include <stdio.h> |
||||
|
||||
#include <eez/flow/flow.h> |
||||
#include <eez/flow/expression.h> |
||||
#include <eez/flow/dashboard_api.h> |
||||
|
||||
using namespace eez; |
||||
using namespace eez::gui; |
||||
using namespace eez::flow; |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
int getFlowStateIndex(FlowState *flowState) { |
||||
return (int)((uint8_t *)flowState - ALLOC_BUFFER); |
||||
} |
||||
|
||||
struct DashboardComponentExecutionState : public ComponenentExecutionState { |
||||
~DashboardComponentExecutionState() { |
||||
EM_ASM({ |
||||
freeComponentExecutionState($0, $1); |
||||
}, g_wasmModuleId, state); |
||||
} |
||||
int32_t state; |
||||
}; |
||||
|
||||
} // flow
|
||||
} // eez
|
||||
|
||||
static inline FlowState *getFlowState(int flowStateIndex) { |
||||
return (FlowState *)(ALLOC_BUFFER + flowStateIndex); |
||||
} |
||||
|
||||
static void updateArrayValue(ArrayValue *arrayValue1, ArrayValue *arrayValue2) { |
||||
for (uint32_t i = 0; i < arrayValue1->arraySize; i++) { |
||||
if (arrayValue1->values[i].getType() == VALUE_TYPE_ARRAY || arrayValue1->values[i].getType() == VALUE_TYPE_ARRAY_REF) { |
||||
updateArrayValue(arrayValue1->values[i].getArray(), arrayValue2->values[i].getArray()); |
||||
} else { |
||||
arrayValue1->values[i] = arrayValue2->values[i]; |
||||
} |
||||
} |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createUndefinedValue() { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x2e821285); |
||||
*pValue = Value(0, VALUE_TYPE_UNDEFINED); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createNullValue() { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x69debded); |
||||
*pValue = Value(0, VALUE_TYPE_NULL); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createIntValue(int value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x20ea356c); |
||||
*pValue = Value(value, VALUE_TYPE_INT32); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createDoubleValue(double value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0xecfb69a9); |
||||
*pValue = Value(value, VALUE_TYPE_DOUBLE); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createBooleanValue(int value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x76071378); |
||||
*pValue = Value(value, VALUE_TYPE_BOOLEAN); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createStringValue(const char *value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x0a8a7ed1); |
||||
Value stringValue = Value::makeStringRef(value, strlen(value), 0x5b1e51d7); |
||||
*pValue = stringValue; |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createArrayValue(int arraySize, int arrayType) { |
||||
Value value = Value::makeArrayRef(arraySize, arrayType, 0xeabb7edc); |
||||
auto pValue = ObjectAllocator<Value>::allocate(0xbab14c6a); |
||||
if (pValue) { |
||||
*pValue = value; |
||||
} |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createStreamValue(double value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x53a2e660); |
||||
*pValue = Value(value, VALUE_TYPE_STREAM); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(Value *) createDateValue(double value) { |
||||
auto pValue = ObjectAllocator<Value>::allocate(0x90b7ce70); |
||||
*pValue = Value(value, VALUE_TYPE_DATE); |
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(void) arrayValueSetElementValue(Value *arrayValuePtr, int elementIndex, Value *valuePtr) { |
||||
auto array = arrayValuePtr->getArray(); |
||||
array->values[elementIndex] = *valuePtr; |
||||
} |
||||
|
||||
EM_PORT_API(void) valueFree(Value *valuePtr) { |
||||
ObjectAllocator<Value>::deallocate(valuePtr); |
||||
} |
||||
|
||||
EM_PORT_API(void) setGlobalVariable(int globalVariableIndex, Value *valuePtr) { |
||||
auto flowDefinition = static_cast<FlowDefinition *>(g_mainAssets->flowDefinition); |
||||
Value *globalVariableValuePtr = flowDefinition->globalVariables[globalVariableIndex]; |
||||
*globalVariableValuePtr = *valuePtr; |
||||
} |
||||
|
||||
EM_PORT_API(void) updateGlobalVariable(int globalVariableIndex, Value *valuePtr) { |
||||
auto flowDefinition = static_cast<FlowDefinition *>(g_mainAssets->flowDefinition); |
||||
Value *globalVariableValuePtr = flowDefinition->globalVariables[globalVariableIndex]; |
||||
updateArrayValue(globalVariableValuePtr->getArray(), valuePtr->getArray()); |
||||
} |
||||
|
||||
EM_PORT_API(int) getFlowIndex(int flowStateIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
return flowState->flowIndex; |
||||
} |
||||
|
||||
EM_PORT_API(int) getComponentExecutionState(int flowStateIndex, int componentIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
auto executionState = (DashboardComponentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (executionState) { |
||||
return executionState->state; |
||||
} |
||||
return -1; |
||||
} |
||||
|
||||
EM_PORT_API(void) setComponentExecutionState(int flowStateIndex, int componentIndex, int state) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
auto executionState = (DashboardComponentExecutionState *)flowState->componenentExecutionStates[componentIndex]; |
||||
if (executionState) { |
||||
if (state != -1) { |
||||
executionState->state = state; |
||||
} else { |
||||
deallocateComponentExecutionState(flowState, componentIndex); |
||||
} |
||||
} else { |
||||
if (state != -1) { |
||||
executionState = allocateComponentExecutionState<DashboardComponentExecutionState>(flowState, componentIndex); |
||||
executionState->state = state; |
||||
} |
||||
} |
||||
} |
||||
|
||||
EM_PORT_API(const char *) getStringParam(int flowStateIndex, int componentIndex, int offset) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
auto ptr = (const uint32_t *)((const uint8_t *)component + sizeof(Component) + offset); |
||||
return (const char *)(MEMORY_BEGIN + 4 + *ptr); |
||||
} |
||||
|
||||
struct ExpressionList { |
||||
uint32_t count; |
||||
Value values[1]; |
||||
}; |
||||
|
||||
EM_PORT_API(void *) getExpressionListParam(int flowStateIndex, int componentIndex, int offset) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto component = flowState->flow->components[componentIndex]; |
||||
|
||||
struct List { |
||||
uint32_t count; |
||||
uint32_t items; |
||||
}; |
||||
auto list = (const List *)((const uint8_t *)component + sizeof(Component) + offset); |
||||
|
||||
auto expressionList = (ExpressionList *)::malloc((list->count + 1) * sizeof(Value)); |
||||
|
||||
expressionList->count = list->count; |
||||
|
||||
auto items = (const uint32_t *)(MEMORY_BEGIN + 4 + list->items); |
||||
|
||||
for (uint32_t i = 0; i < list->count; i++) { |
||||
// call Value constructor
|
||||
new (expressionList->values + i) Value(); |
||||
|
||||
auto valueExpression = (const uint8_t *)(MEMORY_BEGIN + 4 + items[i]); |
||||
if (!evalExpression(flowState, componentIndex, valueExpression, expressionList->values[i], "Failed to evaluate expression")) { |
||||
return nullptr; |
||||
} |
||||
} |
||||
|
||||
return expressionList; |
||||
} |
||||
|
||||
EM_PORT_API(void) freeExpressionListParam(void *ptr) { |
||||
auto expressionList = (ExpressionList*)ptr; |
||||
|
||||
for (uint32_t i = 0; i < expressionList->count; i++) { |
||||
// call Value desctructor
|
||||
(expressionList->values + i)->~Value(); |
||||
} |
||||
|
||||
::free(ptr); |
||||
} |
||||
|
||||
EM_PORT_API(Value*) getInputValue(int flowStateIndex, int inputIndex) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
return flowState->values + inputIndex; |
||||
} |
||||
|
||||
EM_PORT_API(void) clearInputValue(int flowStateIndex, int inputIndex) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
flowState->values[inputIndex] = Value(); |
||||
onValueChanged(flowState->values + inputIndex); |
||||
} |
||||
|
||||
EM_PORT_API(Value *) evalProperty(int flowStateIndex, int componentIndex, int propertyIndex, int32_t *iterators) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
|
||||
Value result; |
||||
if (!eez::flow::evalProperty(flowState, componentIndex, propertyIndex, result, "Failed to evaluate property", nullptr, iterators)) { |
||||
return nullptr; |
||||
} |
||||
|
||||
auto pValue = ObjectAllocator<Value>::allocate(0xb7e697b8); |
||||
if (!pValue) { |
||||
throwError(flowState, componentIndex, "Out of memory\n"); |
||||
return nullptr; |
||||
} |
||||
|
||||
*pValue = result; |
||||
|
||||
return pValue; |
||||
} |
||||
|
||||
EM_PORT_API(void) assignProperty(int flowStateIndex, int componentIndex, int propertyIndex, int32_t *iterators, Value *srcValuePtr) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
|
||||
Value dstValue; |
||||
if (evalAssignableProperty(flowState, componentIndex, propertyIndex, dstValue, nullptr, nullptr, iterators)) { |
||||
assignValue(flowState, componentIndex, dstValue, *srcValuePtr); |
||||
} |
||||
} |
||||
|
||||
EM_PORT_API(void) setPropertyField(int flowStateIndex, int componentIndex, int propertyIndex, int fieldIndex, Value *valuePtr) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
|
||||
Value result; |
||||
if (!eez::flow::evalProperty(flowState, componentIndex, propertyIndex, result, "Failed to evaluate property")) { |
||||
return; |
||||
} |
||||
|
||||
if (result.getType() == VALUE_TYPE_VALUE_PTR) { |
||||
result = *result.pValueValue; |
||||
} |
||||
|
||||
if (result.getType() != VALUE_TYPE_ARRAY && result.getType() != VALUE_TYPE_ARRAY_REF) { |
||||
throwError(flowState, componentIndex, "Property is not an array"); |
||||
return; |
||||
} |
||||
|
||||
auto array = result.getArray(); |
||||
|
||||
if (fieldIndex < 0 || fieldIndex >= array->arraySize) { |
||||
throwError(flowState, componentIndex, "Invalid field index"); |
||||
return; |
||||
} |
||||
|
||||
array->values[fieldIndex] = *valuePtr; |
||||
onValueChanged(array->values + fieldIndex); |
||||
} |
||||
|
||||
EM_PORT_API(void) propagateValue(int flowStateIndex, int componentIndex, int outputIndex, Value *valuePtr) { |
||||
auto flowState = getFlowState(g_mainAssets, flowStateIndex); |
||||
eez::flow::propagateValue(flowState, componentIndex, outputIndex, *valuePtr); |
||||
} |
||||
|
||||
EM_PORT_API(void) propagateValueThroughSeqout(int flowStateIndex, int componentIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::propagateValueThroughSeqout(flowState, componentIndex); |
||||
} |
||||
|
||||
EM_PORT_API(void) startAsyncExecution(int flowStateIndex, int componentIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::startAsyncExecution(flowState, componentIndex); |
||||
} |
||||
|
||||
EM_PORT_API(void) endAsyncExecution(int flowStateIndex, int componentIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::endAsyncExecution(flowState, componentIndex); |
||||
} |
||||
|
||||
EM_PORT_API(void) executeCallAction(int flowStateIndex, int componentIndex, int flowIndex) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::executeCallAction(flowState, componentIndex, flowIndex); |
||||
} |
||||
|
||||
EM_PORT_API(void) logInfo(int flowStateIndex, int componentIndex, const char *infoMessage) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::logInfo(flowState, componentIndex, infoMessage); |
||||
} |
||||
|
||||
EM_PORT_API(void) throwError(int flowStateIndex, int componentIndex, const char *errorMessage) { |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
eez::flow::throwError(flowState, componentIndex, errorMessage); |
||||
} |
||||
|
||||
EM_PORT_API(int) getFirstRootFlowState() { |
||||
if (!g_firstFlowState) { |
||||
return -1; |
||||
} |
||||
return getFlowStateIndex(g_firstFlowState); |
||||
} |
||||
|
||||
EM_PORT_API(int) getFirstChildFlowState(int flowStateIndex) { |
||||
if (flowStateIndex == -1) { |
||||
return -1; |
||||
} |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto firstChildFlowState = flowState->firstChild; |
||||
if (!firstChildFlowState) { |
||||
return -1; |
||||
} |
||||
return getFlowStateIndex(firstChildFlowState); |
||||
} |
||||
|
||||
EM_PORT_API(int) getNextSiblingFlowState(int flowStateIndex) { |
||||
if (flowStateIndex == -1) { |
||||
return -1; |
||||
} |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
auto nextSiblingFlowState = flowState->nextSibling; |
||||
if (!nextSiblingFlowState) { |
||||
return -1; |
||||
} |
||||
return getFlowStateIndex(nextSiblingFlowState); |
||||
} |
||||
|
||||
EM_PORT_API(int) getFlowStateFlowIndex(int flowStateIndex) { |
||||
if (flowStateIndex == -1) { |
||||
return -1; |
||||
} |
||||
auto flowState = getFlowState(flowStateIndex); |
||||
return flowState->flowIndex; |
||||
} |
||||
|
||||
EM_PORT_API(bool) isRTL() { |
||||
return g_isRTL; |
||||
} |
||||
|
||||
|
||||
#endif // __EMSCRIPTEN__
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* EEZ Framework |
||||
* Copyright (C) 2022-present, Envox d.o.o. |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
|
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
|
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <eez/flow/private.h> |
||||
|
||||
namespace eez { |
||||
namespace flow { |
||||
|
||||
int getFlowStateIndex(FlowState *flowState); |
||||
|
||||
} // flow
|
||||
} // eez
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue