88ee1883 by 张亚玄

add AT system

1 parent bbbcab84
...@@ -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="&quot;F:\IoT\STM32\workspace\STM32Test\Core\Src\LED&quot;"/>
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="&quot;F:\IoT\STM32\workspace\STM32Test\Core\Src\LED&quot;"/>
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>
......
1 !.c 1 !.c
2 !.h 2 !.h
3 Debug 3 Debug
4 Release
...\ No newline at end of file ...\ No newline at end of file
......
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\\")"}
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
......
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++;
......