add AT system
Showing
7 changed files
with
590 additions
and
6 deletions
... | @@ -28,9 +28,7 @@ | ... | @@ -28,9 +28,7 @@ |
28 | <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1032586580" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> | 28 | <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1032586580" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> |
29 | <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.558548144" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/> | 29 | <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.558548144" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/> |
30 | <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.2084640704" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> | 30 | <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.2084640704" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> |
31 | <listOptionValue builtIn="false" value=""F:\IoT\STM32\workspace\STM32Test\Core\Src\LED""/> | ||
32 | <listOptionValue builtIn="false" value="../Core/Inc/Hardware"/> | 31 | <listOptionValue builtIn="false" value="../Core/Inc/Hardware"/> |
33 | <listOptionValue builtIn="false" value="../Core/Inc/LED"/> | ||
34 | </option> | 32 | </option> |
35 | <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.119923394" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> | 33 | <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.119923394" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> |
36 | </tool> | 34 | </tool> |
... | @@ -117,7 +115,6 @@ | ... | @@ -117,7 +115,6 @@ |
117 | <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.59085921" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> | 115 | <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.59085921" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> |
118 | <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1981320207" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/> | 116 | <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1981320207" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/> |
119 | <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.1229672740" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> | 117 | <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.1229672740" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> |
120 | <listOptionValue builtIn="false" value=""F:\IoT\STM32\workspace\STM32Test\Core\Src\LED""/> | ||
121 | <listOptionValue builtIn="false" value="../Core/Inc/Hardware"/> | 118 | <listOptionValue builtIn="false" value="../Core/Inc/Hardware"/> |
122 | <listOptionValue builtIn="false" value="../Core/Inc/LED"/> | 119 | <listOptionValue builtIn="false" value="../Core/Inc/LED"/> |
123 | </option> | 120 | </option> |
... | @@ -193,5 +190,12 @@ | ... | @@ -193,5 +190,12 @@ |
193 | </scannerConfigBuildInfo> | 190 | </scannerConfigBuildInfo> |
194 | </storageModule> | 191 | </storageModule> |
195 | <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> | 192 | <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> |
196 | <storageModule moduleId="refreshScope"/> | 193 | <storageModule moduleId="refreshScope" versionNumber="2"> |
194 | <configuration configurationName="Debug"> | ||
195 | <resource resourceType="PROJECT" workspacePath="/STM32Test"/> | ||
196 | </configuration> | ||
197 | <configuration configurationName="Release"> | ||
198 | <resource resourceType="PROJECT" workspacePath="/STM32Test"/> | ||
199 | </configuration> | ||
200 | </storageModule> | ||
197 | </cproject> | 201 | </cproject> | ... | ... |
.settings/org.eclipse.cdt.codan.core.prefs
0 → 100644
1 | 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\\")"} | ||
2 | eclipse.preferences.version=1 | ||
3 | 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} | ||
4 | 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\\")"} | ||
5 | 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\\")"} | ||
6 | 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\\")"} | ||
7 | 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} | ||
8 | 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\\")"} | ||
9 | 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\\")"} | ||
10 | 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\\")"} | ||
11 | 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\\")"} | ||
12 | org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning | ||
13 | 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\\")"} | ||
14 | 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} | ||
15 | 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\=>()} | ||
16 | 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\\")"} | ||
17 | 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} | ||
18 | org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning | ||
19 | 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.*"} | ||
20 | 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\\")"} | ||
21 | 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\\")"} | ||
22 | 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\\")"} | ||
23 | org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning | ||
24 | 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\\")"} | ||
25 | 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\\")"} | ||
26 | 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\\")"} | ||
27 | 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\\")"} | ||
28 | 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\\")"} | ||
29 | 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\\")"} | ||
30 | org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning | ||
31 | 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\\")"} | ||
32 | org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning | ||
33 | 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} | ||
34 | org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning | ||
35 | 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\\")"} | ||
36 | org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning | ||
37 | 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\\")"} | ||
38 | 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\=>()} | ||
39 | 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\\")"} | ||
40 | 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\\")"} | ||
41 | 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\\")"} | ||
42 | 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\\")"} | ||
43 | 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\\")"} | ||
44 | 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\\")"} | ||
45 | 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\=>()} | ||
46 | 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} | ||
47 | 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} | ||
48 | 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\\")"} | ||
49 | 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} | ||
50 | 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} | ||
51 | 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")} | ||
52 | org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning | ||
53 | 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\\")"} | ||
54 | 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\\")"} | ||
55 | org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error | ||
56 | 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\\")"} |
Core/Inc/ATSystem.h
0 → 100644
1 | /* | ||
2 | * ATSystem.h | ||
3 | * | ||
4 | * Created on: Nov 1, 2019 | ||
5 | * Author: Hope | ||
6 | */ | ||
7 | |||
8 | #ifndef INC_ATSYSTEM_H_ | ||
9 | #define INC_ATSYSTEM_H_ | ||
10 | |||
11 | /* Includes ------------------------------------------------------------------*/ | ||
12 | #include "usart.h" | ||
13 | |||
14 | /***************************** | ||
15 | * Private Define | ||
16 | */ | ||
17 | #define TRUE 1 | ||
18 | #define FALSE 0 | ||
19 | |||
20 | /***************************************** | ||
21 | config | ||
22 | ****************************************/ | ||
23 | /********************* | ||
24 | * compile options | ||
25 | */ | ||
26 | #define AT_FCS_VERIFY FALSE | ||
27 | #define AT_DEBUG_INF_SHOW FALSE | ||
28 | #define AT_CMD_PATTERN_CHECK TRUE | ||
29 | #define AT_UART_BACKSPACE FALSE | ||
30 | #define AT_SHOW_STATE_CHANGE FALSE | ||
31 | |||
32 | /******************************************************** | ||
33 | * define UART message sent | ||
34 | *******************************************************/ | ||
35 | #define AT_RESP(str, len) HAL_UART_Transmit(&huart2, (uint8_t*)str, len, 1000) | ||
36 | #define AT_OK() AT_RESP("\r\nOK\r\n", sizeof("\r\nOK\r\n")-1) | ||
37 | #define AT_NEXT_LINE() AT_RESP("\r\n", 2) | ||
38 | #define AT_NEW_LINE() AT_RESP("\r\n", 2) | ||
39 | #define AT_ERROR(x) AT_UARTWriteErrMsg(x) | ||
40 | |||
41 | #if AT_DEBUG_INF_SHOW | ||
42 | #define AT_DEBUG(str, len) AT_RESP(str, len) | ||
43 | #else | ||
44 | #define AT_DEBUG(str, len) | ||
45 | #endif | ||
46 | |||
47 | #if AT_CMD_PATTERN_CHECK | ||
48 | #define AT_PARSE_CMD_PATTERN_ERROR(x,y) \ | ||
49 | {uint8_t err; \ | ||
50 | err = AT_Pattern_Check(x,y); \ | ||
51 | if (err != 0) { AT_ERROR(err); return;} } | ||
52 | #else | ||
53 | #define AT_PARSE_CMD_PATTERN_ERROR(x,y) | ||
54 | #endif | ||
55 | |||
56 | #if AT_CMD_PATTERN_CHECK | ||
57 | #define AT_PARSE_SINGLE_CMD_PATTERN_ERROR(x,y) \ | ||
58 | { if (x[0] != y->symbol) {AT_ERROR(AT_INVALID_PARA); return;}} | ||
59 | #else | ||
60 | #define AT_PARSE_CMD_PATTERN_ERROR(x,y) | ||
61 | #endif | ||
62 | |||
63 | /********************************************************************* | ||
64 | * DATA STRUCTURE | ||
65 | */ | ||
66 | typedef struct { | ||
67 | uint8_t symbol; | ||
68 | uint8_t unitLen; | ||
69 | uint8_t* unit; | ||
70 | } AT_CmdUnit; | ||
71 | |||
72 | typedef void (*AT_CmdFn_t)(uint8_t cmd_ptr, uint8_t* msg_ptr); | ||
73 | typedef struct { | ||
74 | char* AT_Cmd_str; | ||
75 | AT_CmdFn_t AT_CmdFn; | ||
76 | char* ATCmdDescription; | ||
77 | } AT_Cmd_t; | ||
78 | |||
79 | /********************* | ||
80 | * error message | ||
81 | */ | ||
82 | #define AT_NO_ERROR 0x00 // Everything OK - Success | ||
83 | #define AT_FATAL_ERROR 0x01 // Fatal Error | ||
84 | #define AT_UNKNOWN_CMD 0x02 // Unknown command | ||
85 | #define AT_LACK_CMD 0x03 // lack command | ||
86 | #define AT_INVALID_PARA 0x04 // Invalid parameter | ||
87 | #define AT_LACK_OPERATOR 0x05 | ||
88 | #define AT_LACK_PARA 0x06 | ||
89 | |||
90 | /********************* | ||
91 | * command constants | ||
92 | */ | ||
93 | #define AT_CMD_HELP_DESC_OFFSET 17 | ||
94 | |||
95 | /********************************************************************* | ||
96 | * GLOBAL VARIABLES | ||
97 | */ | ||
98 | extern void AT_Process(uint8_t ch); | ||
99 | extern void AT_UARTWriteErrMsg(uint8_t errCode); | ||
100 | |||
101 | #endif /* INC_ATSYSTEM_H_ */ |
... | @@ -39,7 +39,6 @@ extern UART_HandleTypeDef huart2; | ... | @@ -39,7 +39,6 @@ extern UART_HandleTypeDef huart2; |
39 | 39 | ||
40 | extern uint8_t USART1_RingBuff[USART1_BUF_LEN]; // 接收缓冲 | 40 | extern uint8_t USART1_RingBuff[USART1_BUF_LEN]; // 接收缓冲 |
41 | 41 | ||
42 | #define AT_RESP(str, len) HAL_UART_Transmit(&huart2, (uint8_t*)str, len, 1000) | ||
43 | #define DEBUG_PRINT(str, len) HAL_UART_Transmit(&huart1, (uint8_t*)str, len, 1000) | 42 | #define DEBUG_PRINT(str, len) HAL_UART_Transmit(&huart1, (uint8_t*)str, len, 1000) |
44 | /* USER CODE END Private defines */ | 43 | /* USER CODE END Private defines */ |
45 | 44 | ... | ... |
Core/Src/ATSystem.c
0 → 100644
1 | /* | ||
2 | * ATSystem.c | ||
3 | * | ||
4 | * Created on: Nov 1, 2019 | ||
5 | * Author: Yasin | ||
6 | */ | ||
7 | |||
8 | /********************************************************************* | ||
9 | * INCLUDES | ||
10 | */ | ||
11 | #include "ATSystem.h" | ||
12 | #include <string.h> | ||
13 | |||
14 | /********************************************************************* | ||
15 | * CONSTANTS | ||
16 | */ | ||
17 | #define AT_HEAD_STATE1 0x00 | ||
18 | #define AT_HEAD_STATE2 0x01 | ||
19 | #define AT_DATA_STATE 0x02 | ||
20 | #define AT_FCS_STATE 0x03 | ||
21 | |||
22 | #define AT_CMD_BUFF_MAX 150 | ||
23 | |||
24 | /********************************************************************* | ||
25 | * LOCAL FUNCTIONS | ||
26 | */ | ||
27 | static void AT_HandleCMD( uint8_t *msg_ptr ); | ||
28 | static uint8_t AT_get_next_cmdUnit( AT_CmdUnit* cmdUnit, uint8_t start_point, uint8_t* msg ); | ||
29 | static int AT_CmdCmp( AT_CmdUnit* cmdUnit, uint8_t* str2 ); | ||
30 | static void AT_UpperCaseCmd( AT_CmdUnit *cmdUnit ); | ||
31 | #if AT_FCS_VERIFY | ||
32 | static byte AT_UartCalcFCS( uint8_t *msg_ptr, uint8_t len ); | ||
33 | #endif | ||
34 | |||
35 | void AT_Cmd_Help( uint8_t cmd_ptr, uint8_t* msg_ptr ); | ||
36 | |||
37 | /********************************************************************* | ||
38 | * LOCAL VARIABLES | ||
39 | */ | ||
40 | uint8_t AT_RxBuffer[AT_CMD_BUFF_MAX]; // UART Rx buffer | ||
41 | uint8_t at_state = AT_HEAD_STATE1; // AT_command_Rx_state | ||
42 | uint8_t AT_templen = 0; // the length of AT_command | ||
43 | |||
44 | const AT_Cmd_t AT_Cmd_Arr[] = { | ||
45 | {"BLOAD", NULL, "Enter The Boot Loader Menu"}, | ||
46 | {"HELP", AT_Cmd_Help, "show all the AT commands"}, | ||
47 | }; | ||
48 | |||
49 | const uint16_t AT_CMD_SZ = sizeof(AT_Cmd_Arr) / sizeof(AT_Cmd_Arr[0]); | ||
50 | |||
51 | /*************************************************************************************************** | ||
52 | * @fn AT_Process | ||
53 | * | ||
54 | * @brief | Head | Data | End | FCS | | ||
55 | * | 2 | 0-Len | 1 | 1 | | ||
56 | * | AT | ? | '\r' | verify | | ||
57 | * | ||
58 | * @field processed by AT_HandleCMD() : Data + End('\r') | ||
59 | * @field verified by AT_UartCalcFCS(): Data + End('\r') | ||
60 | * | ||
61 | * Parses the data and send the data to correct place (AT or APP) | ||
62 | * | ||
63 | * @param port - UART port | ||
64 | * @param event - Event that causes the callback | ||
65 | * | ||
66 | * | ||
67 | * @return None | ||
68 | ***************************************************************************************************/ | ||
69 | void AT_Process(uint8_t ch) | ||
70 | { | ||
71 | /* | ||
72 | * due to the AT_Process may be re-entried during AT_HandleCMD aused by HallUARTPollISR, | ||
73 | * which is denergerous, As a result of some command ERROR, so we prevent the function from being re-entryed | ||
74 | */ | ||
75 | static uint8_t isProcessing = FALSE; | ||
76 | |||
77 | if (isProcessing) return; | ||
78 | isProcessing = TRUE; | ||
79 | |||
80 | switch (at_state) { | ||
81 | case AT_HEAD_STATE1: | ||
82 | if (ch == 'A' || ch == 'a') | ||
83 | at_state = AT_HEAD_STATE2; | ||
84 | break; | ||
85 | |||
86 | case AT_HEAD_STATE2: | ||
87 | if (ch == 'T' || ch == 't') | ||
88 | at_state = AT_DATA_STATE; | ||
89 | else if (ch == 'A' || ch == 'a') | ||
90 | at_state = AT_HEAD_STATE2; | ||
91 | else | ||
92 | at_state = AT_HEAD_STATE1; | ||
93 | break; | ||
94 | |||
95 | case AT_DATA_STATE: | ||
96 | #if AT_UART_BACKSPACE | ||
97 | if (ch == '\b' || ch == '\x7f') | ||
98 | { // for backspace function, allow user to delete characters | ||
99 | if (AT_templen > 0) | ||
100 | AT_templen--; | ||
101 | break; | ||
102 | } | ||
103 | #endif | ||
104 | if (ch == '\r') | ||
105 | { | ||
106 | AT_RxBuffer[AT_templen++] = '\r'; | ||
107 | #if AT_FCS_VERIFY | ||
108 | at_state = AT_FCS_STATE; | ||
109 | break; | ||
110 | #else | ||
111 | AT_HandleCMD(AT_RxBuffer); | ||
112 | memset(AT_RxBuffer, 0x00, AT_templen); | ||
113 | AT_templen = 0; | ||
114 | at_state = AT_HEAD_STATE1; | ||
115 | #endif | ||
116 | } | ||
117 | else | ||
118 | { | ||
119 | if (AT_templen < (AT_CMD_BUFF_MAX - 1)) { | ||
120 | AT_RxBuffer[AT_templen++] = ch; | ||
121 | // still in AT_DATA_STATE; | ||
122 | } else { | ||
123 | memset(AT_RxBuffer, 0, AT_CMD_BUFF_MAX); | ||
124 | AT_templen = 0; | ||
125 | at_state = AT_HEAD_STATE1; | ||
126 | } | ||
127 | } | ||
128 | break; | ||
129 | |||
130 | #if AT_FCS_VERIFY | ||
131 | case AT_FCS_STATE: | ||
132 | |||
133 | /* Make sure it's correct */ | ||
134 | if ((AT_UartCalcFCS(AT_RxBuffer, AT_templen) == ch)) | ||
135 | { | ||
136 | AT_HandleCMD(AT_RxBuffer); | ||
137 | osal_memset(AT_RxBuffer, 0x00, AT_templen); | ||
138 | AT_templen = 0; | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | AT_ERROR(AT_FATAL_ERROR); // SEND FCS ERROR MSG AT_FATAL_ERROR | ||
143 | } | ||
144 | |||
145 | /* Reset the state, send or discard the buffers at this point */ | ||
146 | at_state = AT_HEAD_STATE1; | ||
147 | |||
148 | break; | ||
149 | #endif | ||
150 | |||
151 | default: | ||
152 | break; | ||
153 | } | ||
154 | |||
155 | isProcessing = FALSE; | ||
156 | } | ||
157 | |||
158 | #if AT_FCS_VERIFY | ||
159 | /*************************************************************************************************** | ||
160 | * @fn AT_UartCalcFCS | ||
161 | * | ||
162 | * @brief Calculate the FCS of a message buffer by XOR'ing each byte. | ||
163 | * Remember to NOT include Head fields, so start at the CMD field. | ||
164 | * | ||
165 | * @param byte *msg_ptr - message pointer | ||
166 | * @param byte len - length (in bytes) of message | ||
167 | * | ||
168 | * @return result byte | ||
169 | ***************************************************************************************************/ | ||
170 | static byte AT_UartCalcFCS( uint8_t *msg_ptr, uint8_t len ) | ||
171 | { | ||
172 | byte x; | ||
173 | byte xorResult; | ||
174 | |||
175 | xorResult = 0; | ||
176 | |||
177 | for ( x = 0; x < len; x++, msg_ptr++ ) | ||
178 | xorResult = xorResult ^ *msg_ptr; | ||
179 | |||
180 | return ( xorResult ); | ||
181 | } | ||
182 | #endif | ||
183 | |||
184 | /*************************************************************************************************** | ||
185 | * @fn AT_HandleCMD | ||
186 | * | ||
187 | * @brief Parse the AT_commands and call it's response function | ||
188 | * | ||
189 | * @param byte *msg_ptr - message pointer | ||
190 | * | ||
191 | * @return None | ||
192 | ***************************************************************************************************/ | ||
193 | static void AT_HandleCMD( uint8_t *msg_ptr ) | ||
194 | { | ||
195 | uint8_t cmd_ptr = 0; | ||
196 | uint16_t i; | ||
197 | AT_DEBUG("\r\n", 2); | ||
198 | AT_DEBUG(msg_ptr, getLength(msg_ptr, 0x02)); | ||
199 | |||
200 | // Get next cmdUnit and upper case it | ||
201 | AT_CmdUnit cmdUnit; | ||
202 | cmd_ptr = AT_get_next_cmdUnit(&cmdUnit, cmd_ptr, msg_ptr); | ||
203 | AT_UpperCaseCmd(&cmdUnit); | ||
204 | |||
205 | // process the cmdUnit | ||
206 | if (cmdUnit.symbol == '\r') { // which means there is no followed operator or command | ||
207 | AT_OK(); | ||
208 | } | ||
209 | else if (cmdUnit.symbol == '\0') { | ||
210 | AT_ERROR(AT_LACK_OPERATOR); | ||
211 | } | ||
212 | else if (cmdUnit.symbol == '+') { | ||
213 | for (i = 0; i < AT_CMD_SZ; i++) { | ||
214 | if (AT_CmdCmp(&cmdUnit, (uint8_t*)AT_Cmd_Arr[i].AT_Cmd_str) == 0) { | ||
215 | #if AT_DEBUG_INF_SHOW | ||
216 | AT_NEXT_LINE(); | ||
217 | AT_RESP(AT_Cmd_Arr[i].ATCmdDescription, strlen(AT_Cmd_Arr[i].ATCmdDescription)); | ||
218 | #endif | ||
219 | AT_Cmd_Arr[i].AT_CmdFn(cmd_ptr, msg_ptr); | ||
220 | break; | ||
221 | } | ||
222 | } | ||
223 | if (AT_CMD_SZ == i) { | ||
224 | if (AT_CmdCmp(&cmdUnit, (uint8_t*)"") == 0) { | ||
225 | AT_ERROR(AT_LACK_CMD); | ||
226 | } else { | ||
227 | AT_ERROR(AT_UNKNOWN_CMD); | ||
228 | } | ||
229 | } | ||
230 | } | ||
231 | else { | ||
232 | AT_ERROR(AT_INVALID_PARA); | ||
233 | } | ||
234 | } | ||
235 | |||
236 | /*************************************************************************************************** | ||
237 | * @fn AT_UARTWriteErrMsg | ||
238 | * | ||
239 | * @brief Send error messages | ||
240 | * Respose : | ||
241 | * ERROR:<error code> | ||
242 | * | ||
243 | * | ||
244 | * @param uint8_t errCode - indicate different error | ||
245 | * @param uint8_t fn - type of error | ||
246 | * | ||
247 | * @return None | ||
248 | ***************************************************************************************************/ | ||
249 | void AT_UARTWriteErrMsg( uint8_t errCode ) | ||
250 | { | ||
251 | uint8_t* errMsg_t = (uint8_t*)"\r\nERROR:XX\r\n"; | ||
252 | uint8_t errMsg[sizeof("\r\nERROR:XX\r\n")]; | ||
253 | uint8_t ch; | ||
254 | uint8_t* pStr = &errMsg[sizeof("\r\nERROR:")-1]; | ||
255 | for (int i = 0; i < sizeof(errMsg); i++) { | ||
256 | errMsg[i] = errMsg_t[i]; | ||
257 | } | ||
258 | ch = (errCode >> 4) & 0x0F; | ||
259 | *pStr++ = ch + ((ch < 10) ? '0' : '7'); | ||
260 | ch = errCode & 0x0F; | ||
261 | *pStr++ = ch + ((ch < 10) ? '0' : '7'); | ||
262 | AT_RESP(errMsg, sizeof("\r\nERROR:XX\r\n")-1); | ||
263 | } | ||
264 | |||
265 | /*************************************************************************************************** | ||
266 | * @fn AT_get_next_cmdUnit | ||
267 | * | ||
268 | * @brief The command have servel unit, this funciton get the next unit | ||
269 | * and save it in cmdUnit(type of AT_CmdUnit, see in AT_UART.h) | ||
270 | * | ||
271 | * @param AT_CmdUnit* cmdUnit - the place to save the cmd unit | ||
272 | * @param uint8_t start_point - the point show the place we start scan the command | ||
273 | * @param uint8_t* msg - the command to scan | ||
274 | * | ||
275 | * @return start_point | ||
276 | ***************************************************************************************************/ | ||
277 | uint8_t AT_get_next_cmdUnit( AT_CmdUnit* cmdUnit, uint8_t start_point, uint8_t* msg ) | ||
278 | { | ||
279 | cmdUnit->unitLen=0; | ||
280 | for(;;start_point++){ | ||
281 | if(msg[start_point] == ' '|| msg[start_point] == '\0'){ | ||
282 | continue; | ||
283 | } | ||
284 | else if((msg[start_point]<='z' && msg[start_point]>='a') || | ||
285 | (msg[start_point]<='Z' && msg[start_point]>='A') || | ||
286 | (msg[start_point]<='9' && msg[start_point]>='0')){ | ||
287 | cmdUnit->symbol ='\0'; //indicate no operator | ||
288 | break; | ||
289 | } | ||
290 | else if(msg[start_point] == '\r'){ //indicate the end of one command | ||
291 | cmdUnit->symbol =msg[start_point]; | ||
292 | return start_point; | ||
293 | } | ||
294 | else { | ||
295 | cmdUnit->symbol =msg[start_point]; | ||
296 | start_point++; | ||
297 | break; | ||
298 | } | ||
299 | } | ||
300 | |||
301 | for(;;start_point++){ | ||
302 | if(msg[start_point] == ' '|| msg[start_point] == '\0'){ | ||
303 | continue; | ||
304 | } | ||
305 | else while((msg[start_point]<='z' && msg[start_point]>='a') || | ||
306 | (msg[start_point]<='Z' && msg[start_point]>='A') || | ||
307 | (msg[start_point]<='9' && msg[start_point]>='0') ) { | ||
308 | if(cmdUnit->unitLen==0) cmdUnit->unit = &msg[start_point]; | ||
309 | cmdUnit->unitLen++; | ||
310 | start_point++; | ||
311 | } | ||
312 | return start_point; | ||
313 | } | ||
314 | } | ||
315 | |||
316 | /*************************************************************************************************** | ||
317 | * @fn AT_CmdCmp | ||
318 | * | ||
319 | * @brief Compare with str2, if equal, return 0; else return cmdUnit.unit[i] - str2[i] | ||
320 | * | ||
321 | * @param AT_CmdUnit* cmdUnit - the cmd unit need to be upper cased | ||
322 | * @param uint8_t* str2 - the string to compare with | ||
323 | * | ||
324 | * @return int8 | ||
325 | ***************************************************************************************************/ | ||
326 | int AT_CmdCmp( AT_CmdUnit* cmdUnit, uint8_t* str2 ) | ||
327 | { | ||
328 | int i; | ||
329 | for(i = 0; i < cmdUnit->unitLen; i++) { | ||
330 | if (cmdUnit->unit[i] != str2[i]) { | ||
331 | return cmdUnit->unit[i] - str2[i]; | ||
332 | } | ||
333 | } | ||
334 | return 0 - str2[cmdUnit->unitLen]; | ||
335 | } | ||
336 | |||
337 | /*************************************************************************************************** | ||
338 | * @fn AT_UpperCaseCmd | ||
339 | * | ||
340 | * @brief Upper case the command | ||
341 | * | ||
342 | * @param AT_CmdUnit* cmdUnit - the cmd unit need to be upper cased | ||
343 | * | ||
344 | * @return None | ||
345 | ***************************************************************************************************/ | ||
346 | void AT_UpperCaseCmd( AT_CmdUnit *cmdUnit ) | ||
347 | { | ||
348 | uint8_t i; | ||
349 | for (i = 0; i < cmdUnit->unitLen; i++) { | ||
350 | if (cmdUnit->unit[i] <= 'z' && cmdUnit->unit[i] >= 'a') { | ||
351 | cmdUnit->unit[i] += ('A' - 'a'); | ||
352 | } | ||
353 | } | ||
354 | } | ||
355 | |||
356 | #if AT_CMD_PATTERN_CHECK | ||
357 | static uint8_t AT_Pattern_Check( char* pattern, AT_CmdUnit* cmdUnitArr ); | ||
358 | /*************************************************************************************************** | ||
359 | * @fn AT_Pattern_Check | ||
360 | * | ||
361 | * @brief Check the command pattern | ||
362 | * | ||
363 | * @param char* pattern - the pattern to be checked | ||
364 | * @param AT_CmdUnit* cmdUnitArr - the command unit | ||
365 | * | ||
366 | * @return uint8_t | ||
367 | ***************************************************************************************************/ | ||
368 | uint8_t AT_Pattern_Check( char* pattern, AT_CmdUnit* cmdUnitArr ) | ||
369 | { | ||
370 | uint8_t i=0; | ||
371 | for(;pattern[i+1]!='\0';i++) { | ||
372 | if(pattern[i] != cmdUnitArr[i].symbol){ | ||
373 | if(cmdUnitArr[i].symbol =='\0') return AT_LACK_OPERATOR; | ||
374 | else if(cmdUnitArr[i].symbol =='\r') return AT_LACK_PARA; | ||
375 | else return AT_INVALID_PARA; | ||
376 | } | ||
377 | } | ||
378 | if(pattern[i]=='\r') { | ||
379 | if(cmdUnitArr[i].symbol!='\r') return AT_INVALID_PARA; | ||
380 | } | ||
381 | else{ | ||
382 | if(pattern[i] != cmdUnitArr[i].symbol){ | ||
383 | if(cmdUnitArr[i].symbol =='\0') return AT_LACK_OPERATOR; | ||
384 | else if(cmdUnitArr[i].symbol =='\r') return AT_LACK_PARA; | ||
385 | else return AT_INVALID_PARA; | ||
386 | } | ||
387 | } | ||
388 | return AT_NO_ERROR; | ||
389 | } | ||
390 | #endif | ||
391 | |||
392 | /******************************************************************************* | ||
393 | * @fn AT_Cmd_Help | ||
394 | * | ||
395 | * @brief AT+HELP - show all the AT commands | ||
396 | * | ||
397 | * @param uint8_t cmd_ptr - the point show the place we start scan the command | ||
398 | * @param uint8_t* msg_ptr - the message pointer | ||
399 | * | ||
400 | * @return None | ||
401 | ******************************************************************************/ | ||
402 | void AT_Cmd_Help( uint8_t cmd_ptr, uint8_t* msg_ptr ) | ||
403 | { | ||
404 | AT_CmdUnit cmdUnitArr[1]; | ||
405 | cmd_ptr = AT_get_next_cmdUnit(&cmdUnitArr[0], cmd_ptr, msg_ptr); | ||
406 | AT_PARSE_CMD_PATTERN_ERROR("\r",cmdUnitArr); | ||
407 | |||
408 | uint8_t i; | ||
409 | AT_NEW_LINE(); | ||
410 | |||
411 | for(i = 0; i < AT_CMD_SZ; i++) { | ||
412 | // uint8_t j; | ||
413 | AT_NEXT_LINE(); | ||
414 | AT_RESP("AT+", 3); | ||
415 | AT_RESP(AT_Cmd_Arr[i].AT_Cmd_str, strlen(AT_Cmd_Arr[i].AT_Cmd_str)); | ||
416 | AT_RESP(".................", AT_CMD_HELP_DESC_OFFSET - strlen(AT_Cmd_Arr[i].AT_Cmd_str)-3); | ||
417 | AT_RESP(AT_Cmd_Arr[i].ATCmdDescription, strlen(AT_Cmd_Arr[i].ATCmdDescription)); | ||
418 | } | ||
419 | AT_NEW_LINE(); | ||
420 | AT_OK(); | ||
421 | } |
... | @@ -30,6 +30,7 @@ | ... | @@ -30,6 +30,7 @@ |
30 | #include "beep.h" | 30 | #include "beep.h" |
31 | #include "key.h" | 31 | #include "key.h" |
32 | #include "usart.h" | 32 | #include "usart.h" |
33 | #include "ATSystem.h" | ||
33 | /* USER CODE END Includes */ | 34 | /* USER CODE END Includes */ |
34 | 35 | ||
35 | /* Private typedef -----------------------------------------------------------*/ | 36 | /* Private typedef -----------------------------------------------------------*/ |
... | @@ -269,6 +270,7 @@ void StartUartTask(void *argument) | ... | @@ -269,6 +270,7 @@ void StartUartTask(void *argument) |
269 | { | 270 | { |
270 | RINGBUF_READ(&temp, 1); | 271 | RINGBUF_READ(&temp, 1); |
271 | mprintf("%c", temp); | 272 | mprintf("%c", temp); |
273 | AT_Process(temp); | ||
272 | } | 274 | } |
273 | 275 | ||
274 | times++; | 276 | times++; | ... | ... |
-
Please register or sign in to post a comment