Compare commits
23 Commits
0621715ce5
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a131cfdd9c | |||
| 2648fc3598 | |||
| 0cb666c860 | |||
| 47f91eeae5 | |||
| b58379ac75 | |||
| a6849cd900 | |||
| 839dbee16e | |||
| e27b3ca794 | |||
| 007a3fd16f | |||
| 4a85827150 | |||
| 271bd845bf | |||
| 69c736b1eb | |||
| 9d0f5d06ea | |||
| 941aedd79f | |||
| a355e36636 | |||
| fa0a664e43 | |||
| 2aa9648dd4 | |||
| 5dd404d44b | |||
| 3c2889b8f7 | |||
| b86af180ab | |||
| 89940fbec2 | |||
| 21dbd883f7 | |||
| 02f53416ab |
40
.gitignore
vendored
Normal file → Executable file
40
.gitignore
vendored
Normal file → Executable file
@@ -1,34 +1,6 @@
|
|||||||
# ---> C++
|
.pio
|
||||||
# Prerequisites
|
.vscode/*
|
||||||
*.d
|
.vscode/.browse.c_cpp.db*
|
||||||
|
.vscode/c_cpp_properties.json
|
||||||
# Compiled Object files
|
.vscode/launch.json
|
||||||
*.slo
|
.vscode/ipch
|
||||||
*.lo
|
|
||||||
*.o
|
|
||||||
*.obj
|
|
||||||
|
|
||||||
# Precompiled Headers
|
|
||||||
*.gch
|
|
||||||
*.pch
|
|
||||||
|
|
||||||
# Compiled Dynamic libraries
|
|
||||||
*.so
|
|
||||||
*.dylib
|
|
||||||
*.dll
|
|
||||||
|
|
||||||
# Fortran module files
|
|
||||||
*.mod
|
|
||||||
*.smod
|
|
||||||
|
|
||||||
# Compiled Static libraries
|
|
||||||
*.lai
|
|
||||||
*.la
|
|
||||||
*.a
|
|
||||||
*.lib
|
|
||||||
|
|
||||||
# Executables
|
|
||||||
*.exe
|
|
||||||
*.out
|
|
||||||
*.app
|
|
||||||
|
|
||||||
|
|||||||
8
.idea/.gitignore
generated
vendored
Executable file
8
.idea/.gitignore
generated
vendored
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
103
.idea/codeStyles/Project.xml
generated
Normal file
103
.idea/codeStyles/Project.xml
generated
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<RiderCodeStyleSettings>
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
||||||
|
</RiderCodeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
||||||
5
.idea/codeStyles/codeStyleConfig.xml
generated
Executable file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
|
</state>
|
||||||
|
</component>
|
||||||
580
.idea/editor.xml
generated
Normal file
580
.idea/editor.xml
generated
Normal file
@@ -0,0 +1,580 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BackendCodeEditorSettings">
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
||||||
|
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
|
||||||
|
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexRemoved" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
2
.idea/helicopter_firmware.iml
generated
Executable file
2
.idea/helicopter_firmware.iml
generated
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module classpath="External" external.linked.project.id="helicopter_firmware" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="PlatformIO" type="CPP_MODULE" version="4" />
|
||||||
24
.idea/misc.xml
generated
Executable file
24
.idea/misc.xml
generated
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="BackendCodeEditorMiscSettings">
|
||||||
|
<option name="/Default/RiderDebugger/RiderRestoreDecompile/RestoreDecompileSetting/@EntryValue" value="false" type="bool" />
|
||||||
|
<option name="/Default/Housekeeping/GlobalSettingsUpgraded/IsUpgraded/@EntryValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/Housekeeping/FeatureSuggestion/FeatureSuggestionManager/DisabledSuggesters/=SwitchToGoToActionSuggester/@EntryIndexedValue" value="true" type="bool" />
|
||||||
|
<option name="/Default/Housekeeping/FeatureSuggestion/FeatureSuggestionManager/DisabledSuggesters/=SwitchToGoToActionSuggester/@EntryIndexRemoved" />
|
||||||
|
<option name="/Default/Environment/Hierarchy/GeneratedFilesCacheKey/Timestamp/@EntryValue" value="4" type="long" />
|
||||||
|
</component>
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="PlatformIOSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<PlatformioProjectSettings>
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</PlatformioProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="PlatformIOWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||||
|
</project>
|
||||||
6
.idea/vcs.xml
generated
Executable file
6
.idea/vcs.xml
generated
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
83
Barometer.h
83
Barometer.h
@@ -1,83 +0,0 @@
|
|||||||
#include "GyverBME280.h"
|
|
||||||
|
|
||||||
class Barometer {
|
|
||||||
public:
|
|
||||||
Barometer(GyverBME280 *bme) {
|
|
||||||
_bme = bme;
|
|
||||||
};
|
|
||||||
|
|
||||||
~Barometer() {
|
|
||||||
delete this->_bme;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool initialize(void) {
|
|
||||||
_bme->setMode(NORMAL_MODE);
|
|
||||||
_bme->setFilter(FILTER_COEF_16);
|
|
||||||
_bme->setTempOversampling(OVERSAMPLING_2);
|
|
||||||
_bme->setPressOversampling(OVERSAMPLING_16);
|
|
||||||
_bme->setStandbyTime(STANDBY_500US);
|
|
||||||
return _bme->begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
void measureBaseAltitudeSync(void) {
|
|
||||||
for(int i = 0; i < _calibrationIterationsCount; ++i){
|
|
||||||
_startedAltitude += altitude();
|
|
||||||
delay(1);
|
|
||||||
}
|
|
||||||
_startedAltitude /= _calibrationIterationsCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
void measureBaseAltitudeAsync(void) {
|
|
||||||
_isStartCalibration = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
float rawAltitude() {
|
|
||||||
return pressureToAltitude(_bme->readPressure())*100;
|
|
||||||
}
|
|
||||||
|
|
||||||
float rawFlightHeight() {
|
|
||||||
return rawAltitude() - _startedAltitude;
|
|
||||||
}
|
|
||||||
|
|
||||||
float altitude() {
|
|
||||||
return _filterRA(pressureToAltitude(_bme->readPressure())*100); // convert from m to cm
|
|
||||||
}
|
|
||||||
|
|
||||||
float flightHeight() {
|
|
||||||
return altitude() - _startedAltitude;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tick() {
|
|
||||||
if(_isStartCalibration) {
|
|
||||||
if(_isStartCalibration && millis() - _calibrationTimer >= _calibrationIterationDelay) {
|
|
||||||
_startedAltitude += altitude();
|
|
||||||
}
|
|
||||||
if(++_calibrationIterationsCounter >= _calibrationIterationsCount) {
|
|
||||||
_startedAltitude /= _calibrationIterationsCount;
|
|
||||||
_isStartCalibration = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
GyverBME280 *_bme = nullptr;
|
|
||||||
float _startedAltitude = 0;
|
|
||||||
bool _isStartCalibration = false;
|
|
||||||
int _calibrationTimer;
|
|
||||||
int _calibrationIterationsCounter = 0;
|
|
||||||
const int _calibrationIterationsCount = 1500;
|
|
||||||
const int _calibrationIterationDelay = 1; // [ms]
|
|
||||||
|
|
||||||
float _filterRA(float newVal) {
|
|
||||||
// running average filter
|
|
||||||
constexpr auto WINDOW_SIZE = 100;
|
|
||||||
static int t = 0;
|
|
||||||
static float vals[WINDOW_SIZE];
|
|
||||||
static float average = 0;
|
|
||||||
if (++t >= WINDOW_SIZE) t = 0;
|
|
||||||
average -= vals[t];
|
|
||||||
average += newVal;
|
|
||||||
vals[t] = newVal;
|
|
||||||
return ((float)average / WINDOW_SIZE);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#include "board_pins.h"
|
|
||||||
|
|
||||||
class BatteryController {
|
|
||||||
public:
|
|
||||||
BatteryController(){}
|
|
||||||
|
|
||||||
void initialize() {
|
|
||||||
pinMode(BATTERY_DATA_SWITCH_PIN, OUTPUT);
|
|
||||||
digitalWrite(BATTERY_DATA_SWITCH_PIN, HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
float measureVoltage() {
|
|
||||||
return analogRead(BATTERY_DATA_PIN)*3.3/4095;
|
|
||||||
}
|
|
||||||
|
|
||||||
int percent(int minVoltage=7200, int maxVoltage=8400) {
|
|
||||||
return map(int(measureVoltage()*1000), minVoltage, maxVoltage, 0, 100);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
219
GyverBME280.cpp
219
GyverBME280.cpp
@@ -1,219 +0,0 @@
|
|||||||
#include "GyverBME280.h"
|
|
||||||
|
|
||||||
/* ============ Utilities ============ */
|
|
||||||
|
|
||||||
float pressureToAltitude(float pressure) {
|
|
||||||
if (!pressure) return 0; // If the pressure module has been disabled return '0'
|
|
||||||
pressure /= 100.0F; // Convert [Pa] to [hPa]
|
|
||||||
return 44330.0f * (1.0f - pow(pressure / 1013.25f, 0.1903f)); // Сalculate altitude
|
|
||||||
}
|
|
||||||
|
|
||||||
float pressureToMmHg(float pressure) {
|
|
||||||
return (float)(pressure * 0.00750061683f); // Convert [Pa] to [mm Hg]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============ Setup & begin ============ */
|
|
||||||
|
|
||||||
GyverBME280::GyverBME280(TwoWire &wire) {
|
|
||||||
_wire = &wire;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GyverBME280::begin() {
|
|
||||||
return begin(0x76);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GyverBME280::begin(uint8_t address) {
|
|
||||||
_i2c_address = address;
|
|
||||||
/* === Start I2C bus & check BME280 === */
|
|
||||||
if (!reset()) return false; // BME280 software reset & ack check
|
|
||||||
uint8_t ID = readRegister(0xD0);
|
|
||||||
if (ID != 0x60 && ID != 0x58) return false; // Check chip ID (bme/bmp280)
|
|
||||||
readCalibrationData(); // Read all calibration values
|
|
||||||
|
|
||||||
/* === Load settings to BME280 === */
|
|
||||||
writeRegister(0xF2, _hum_oversampl); // write hum oversampling value
|
|
||||||
writeRegister(0xF2, readRegister(0xF2)); // rewrite hum oversampling register
|
|
||||||
writeRegister(0xF4, ((_temp_oversampl << 5) | (_press_oversampl << 2) | _operating_mode)); // write temp & press oversampling value , normal mode
|
|
||||||
writeRegister(0xF5, ((_standby_time << 5) | (_filter_coef << 2))); // write standby time & filter coef
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::setMode(uint8_t mode) {
|
|
||||||
_operating_mode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GyverBME280::setFilter(uint8_t mode) {
|
|
||||||
_filter_coef = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::setStandbyTime(uint8_t mode) {
|
|
||||||
_standby_time = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::setHumOversampling(uint8_t mode) {
|
|
||||||
_hum_oversampl = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::setTempOversampling(uint8_t mode) {
|
|
||||||
_temp_oversampl = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::setPressOversampling(uint8_t mode) {
|
|
||||||
_press_oversampl = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============ Reading ============ */
|
|
||||||
|
|
||||||
int32_t GyverBME280::readTempInt(void) {
|
|
||||||
int32_t temp_raw = readRegister24(0xFA); // Read 24-bit value
|
|
||||||
if (temp_raw == 0x800000) return 0; // If the temperature module has been disabled return '0'
|
|
||||||
|
|
||||||
temp_raw >>= 4; // Start temperature reading in integers
|
|
||||||
int32_t value_1 = ((((temp_raw >> 3) - ((int32_t)CalibrationData._T1 << 1))) *
|
|
||||||
((int32_t)CalibrationData._T2)) >> 11;
|
|
||||||
int32_t value_2 = (((((temp_raw >> 4) - ((int32_t)CalibrationData._T1)) *
|
|
||||||
((temp_raw >> 4) - ((int32_t)CalibrationData._T1))) >> 12) * ((int32_t)CalibrationData._T3)) >> 14;
|
|
||||||
|
|
||||||
return ((int32_t)value_1 + value_2); // Return temperature in integers
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float GyverBME280::readTemperature(void) {
|
|
||||||
int32_t temp_raw = readTempInt();
|
|
||||||
float T = (temp_raw * 5 + 128) >> 8;
|
|
||||||
return T / 100.0; // Return temperature in float
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float GyverBME280::readPressure(void) {
|
|
||||||
uint32_t press_raw = readRegister24(0xF7); // Read 24-bit value
|
|
||||||
if (press_raw == 0x800000) return 0; // If the pressure module has been disabled return '0'
|
|
||||||
|
|
||||||
press_raw >>= 4; // Start pressure converting
|
|
||||||
int64_t value_1 = ((int64_t)readTempInt()) - 128000;
|
|
||||||
int64_t value_2 = value_1 * value_1 * (int64_t)CalibrationData._P6;
|
|
||||||
value_2 = value_2 + ((value_1 * (int64_t)CalibrationData._P5) << 17);
|
|
||||||
value_2 = value_2 + (((int64_t)CalibrationData._P4) << 35);
|
|
||||||
value_1 = ((value_1 * value_1 * (int64_t)CalibrationData._P3) >> 8) + ((value_1 * (int64_t)CalibrationData._P2) << 12);
|
|
||||||
value_1 = (((((int64_t)1) << 47) + value_1)) * ((int64_t)CalibrationData._P1) >> 33;
|
|
||||||
|
|
||||||
if (!value_1) return 0; // Avoid division by zero
|
|
||||||
|
|
||||||
int64_t p = 1048576 - press_raw;
|
|
||||||
p = (((p << 31) - value_2) * 3125) / value_1;
|
|
||||||
value_1 = (((int64_t)CalibrationData._P9) * (p >> 13) * (p >> 13)) >> 25;
|
|
||||||
value_2 = (((int64_t)CalibrationData._P8) * p) >> 19;
|
|
||||||
p = ((p + value_1 + value_2) >> 8) + (((int64_t)CalibrationData._P7) << 4);
|
|
||||||
|
|
||||||
return (float)p / 256; // Return pressure in float
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float GyverBME280::readHumidity(void) {
|
|
||||||
_wire->beginTransmission(_i2c_address); // Start I2C transmission
|
|
||||||
_wire->write(0xFD); // Request humidity data register
|
|
||||||
if (_wire->endTransmission() != 0) return 0;
|
|
||||||
_wire->requestFrom(_i2c_address, 2); // Request humidity data
|
|
||||||
int32_t hum_raw = ((uint16_t)_wire->read() << 8) | (uint16_t)_wire->read(); // Read humidity data
|
|
||||||
if (hum_raw == 0x8000) return 0; // If the humidity module has been disabled return '0'
|
|
||||||
|
|
||||||
int32_t value = (readTempInt() - ((int32_t)76800)); // Start humidity converting
|
|
||||||
value = (((((hum_raw << 14) - (((int32_t)CalibrationData._H4) << 20) -
|
|
||||||
(((int32_t)CalibrationData._H5) * value)) +((int32_t)16384)) >> 15) *
|
|
||||||
(((((((value * ((int32_t)CalibrationData._H6)) >> 10) *(((value *
|
|
||||||
((int32_t)CalibrationData._H3)) >> 11) + ((int32_t)32768))) >> 10) +
|
|
||||||
((int32_t)2097152)) * ((int32_t)CalibrationData._H2) + 8192) >> 14));
|
|
||||||
value = (value - (((((value >> 15) * (value >> 15)) >> 7) * ((int32_t)CalibrationData._H1)) >> 4));
|
|
||||||
value = (value < 0) ? 0 : value;
|
|
||||||
value = (value > 419430400) ? 419430400 : value;
|
|
||||||
float h = (value >> 12);
|
|
||||||
|
|
||||||
return h / 1024.0; // Return humidity in float
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============ Misc ============ */
|
|
||||||
|
|
||||||
bool GyverBME280::isMeasuring(void) {
|
|
||||||
return (bool)((readRegister(0xF3) & 0x08) >> 3); // Read status register & mask bit "measuring"
|
|
||||||
}
|
|
||||||
|
|
||||||
void GyverBME280::oneMeasurement(void) {
|
|
||||||
writeRegister(0xF4 , ((readRegister(0xF4) & 0xFC) | 0x02)); // Set the operating mode to FORCED_MODE
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ============ Private ============ */
|
|
||||||
|
|
||||||
/* = BME280 software reset = */
|
|
||||||
bool GyverBME280::reset(void) {
|
|
||||||
if (!writeRegister(0x0E , 0xB6)) return false;
|
|
||||||
delay(10);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* = Read and combine three BME280 registers = */
|
|
||||||
uint32_t GyverBME280::readRegister24(uint8_t address) {
|
|
||||||
_wire->beginTransmission(_i2c_address);
|
|
||||||
_wire->write(address);
|
|
||||||
if (_wire->endTransmission() != 0) return 0x800000;
|
|
||||||
_wire->requestFrom(_i2c_address, 3);
|
|
||||||
return (((uint32_t)_wire->read() << 16) | ((uint32_t)_wire->read() << 8) | (uint32_t)_wire->read());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* = Write one 8-bit BME280 register = */
|
|
||||||
bool GyverBME280::writeRegister(uint8_t address , uint8_t data) {
|
|
||||||
_wire->beginTransmission(_i2c_address);
|
|
||||||
_wire->write(address);
|
|
||||||
_wire->write(data);
|
|
||||||
if (_wire->endTransmission() != 0) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* = Read one 8-bit BME280 register = */
|
|
||||||
uint8_t GyverBME280::readRegister(uint8_t address) {
|
|
||||||
_wire->beginTransmission(_i2c_address);
|
|
||||||
_wire->write(address);
|
|
||||||
if (_wire->endTransmission() != 0) return 0;
|
|
||||||
_wire->requestFrom(_i2c_address , 1);
|
|
||||||
return _wire->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* = Structure to store all calibration values = */
|
|
||||||
void GyverBME280::readCalibrationData(void) {
|
|
||||||
/* first part request*/
|
|
||||||
_wire->beginTransmission(_i2c_address);
|
|
||||||
_wire->write(0x88);
|
|
||||||
if (_wire->endTransmission() != 0) return;
|
|
||||||
_wire->requestFrom(_i2c_address , 25);
|
|
||||||
/* reading */
|
|
||||||
CalibrationData._T1 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._T2 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._T3 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P1 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P2 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P3 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P4 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P5 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P6 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P7 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P8 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._P9 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._H1 = _wire->read();
|
|
||||||
|
|
||||||
/* second part request*/
|
|
||||||
_wire->beginTransmission(_i2c_address);
|
|
||||||
_wire->write(0xE1);
|
|
||||||
_wire->endTransmission();
|
|
||||||
_wire->requestFrom(_i2c_address , 8);
|
|
||||||
/* reading */
|
|
||||||
CalibrationData._H2 = (_wire->read() | (_wire->read() << 8));
|
|
||||||
CalibrationData._H3 = _wire->read();
|
|
||||||
CalibrationData._H4 = (_wire->read() << 4);
|
|
||||||
uint8_t interVal = _wire->read();
|
|
||||||
CalibrationData._H4 |= (interVal & 0xF);
|
|
||||||
CalibrationData._H5 = (((interVal & 0xF0) >> 4) | (_wire->read() << 4));
|
|
||||||
CalibrationData._H6 = _wire->read();
|
|
||||||
}
|
|
||||||
112
GyverBME280.h
112
GyverBME280.h
@@ -1,112 +0,0 @@
|
|||||||
/*
|
|
||||||
Лёгкая библиотека для работы с BME280 по I2C для Arduino
|
|
||||||
Документация:
|
|
||||||
GitHub: https://github.com/GyverLibs/GyverBME280
|
|
||||||
|
|
||||||
Egor 'Nich1con' Zaharov for AlexGyver, alex@alexgyver.ru
|
|
||||||
https://alexgyver.ru/
|
|
||||||
MIT License
|
|
||||||
|
|
||||||
Версии:
|
|
||||||
v1.3 - исправлена ошибка при отриц. температуре
|
|
||||||
v1.4 - разбил на h и cpp
|
|
||||||
v1.5 - добавлена поддержка BMP280s
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GyverBME280_h
|
|
||||||
#define GyverBME280_h
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <Wire.h>
|
|
||||||
|
|
||||||
#define NORMAL_MODE 0x03
|
|
||||||
#define FORCED_MODE 0x02
|
|
||||||
|
|
||||||
#define STANDBY_500US 0x00
|
|
||||||
#define STANDBY_10MS 0x06
|
|
||||||
#define STANDBY_20MS 0x07
|
|
||||||
#define STANDBY_6250US 0x01
|
|
||||||
#define STANDBY_125MS 0x02
|
|
||||||
#define STANDBY_250MS 0x03
|
|
||||||
#define STANDBY_500MS 0x04
|
|
||||||
#define STANDBY_1000MS 0x05
|
|
||||||
|
|
||||||
#define MODULE_DISABLE 0x00
|
|
||||||
#define OVERSAMPLING_1 0x01
|
|
||||||
#define OVERSAMPLING_2 0x02
|
|
||||||
#define OVERSAMPLING_4 0x03
|
|
||||||
#define OVERSAMPLING_8 0x04
|
|
||||||
#define OVERSAMPLING_16 0x05
|
|
||||||
|
|
||||||
#define FILTER_DISABLE 0x00
|
|
||||||
#define FILTER_COEF_2 0x01
|
|
||||||
#define FILTER_COEF_4 0x02
|
|
||||||
#define FILTER_COEF_8 0x03
|
|
||||||
#define FILTER_COEF_16 0x04
|
|
||||||
|
|
||||||
|
|
||||||
// ================================= CLASS ===================================
|
|
||||||
|
|
||||||
class GyverBME280 {
|
|
||||||
|
|
||||||
public:
|
|
||||||
GyverBME280(TwoWire &wire); // Create an object of class BME280
|
|
||||||
bool begin(); // Initialize sensor with standart 0x76 address
|
|
||||||
bool begin(uint8_t address); // Initialize sensor with not standart 0x76 address
|
|
||||||
bool isMeasuring(void); // Returns 'true' while the measurement is in progress
|
|
||||||
float readPressure(void); // Read and calculate atmospheric pressure [float , Pa]
|
|
||||||
float readHumidity(void); // Read and calculate air humidity [float , %]
|
|
||||||
void oneMeasurement(void); // Make one measurement and go back to sleep [FORCED_MODE only]
|
|
||||||
void setMode(uint8_t mode);
|
|
||||||
float readTemperature(void); // Read and calculate air temperature [float , *C]
|
|
||||||
void setFilter(uint8_t mode); // Adjust the filter ratio other than the standard one [before begin()]
|
|
||||||
void setStandbyTime(uint8_t mode); // Adjust the sleep time between measurements [NORMAL_MODE only][before begin()]
|
|
||||||
void setHumOversampling(uint8_t mode); // Set oversampling or disable humidity module [before begin()]
|
|
||||||
void setTempOversampling(uint8_t mode); // Set oversampling or disable temperature module [before begin()]
|
|
||||||
void setPressOversampling(uint8_t mode); // Set oversampling or disable pressure module [before begin()]
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
//============================== DEFAULT SETTINGS ========================================|
|
|
||||||
TwoWire *_wire = nullptr;
|
|
||||||
int _i2c_address = 0x76; // BME280 address on I2C bus |
|
|
||||||
uint8_t _operating_mode = NORMAL_MODE; // Sensor operation mode |
|
|
||||||
uint8_t _standby_time = STANDBY_250MS; // Time between measurements in NORMAL_MODE |
|
|
||||||
uint8_t _filter_coef = FILTER_COEF_16; // Filter ratio IIR |
|
|
||||||
uint8_t _temp_oversampl = OVERSAMPLING_4; // Temperature module oversampling parameter |
|
|
||||||
uint8_t _hum_oversampl = OVERSAMPLING_1; // Humidity module oversampling parameter |
|
|
||||||
uint8_t _press_oversampl = OVERSAMPLING_2; // Pressure module oversampling parameter |
|
|
||||||
//========================================================================================|
|
|
||||||
|
|
||||||
bool reset(void); // BME280 software reset
|
|
||||||
int32_t readTempInt(); // Temperature reading in integers for the function of reading
|
|
||||||
void readCalibrationData(void); // Read all cells containing calibration values
|
|
||||||
uint8_t readRegister(uint8_t address); // Read one 8-bit BME280 register
|
|
||||||
uint32_t readRegister24(uint8_t address); // Read and combine three BME280 registers
|
|
||||||
bool writeRegister(uint8_t address , uint8_t data); // Write one 8-bit BME280 register
|
|
||||||
|
|
||||||
struct { // Structure to store all calibration values
|
|
||||||
uint16_t _T1;
|
|
||||||
int16_t _T2;
|
|
||||||
int16_t _T3;
|
|
||||||
uint16_t _P1;
|
|
||||||
int16_t _P2;
|
|
||||||
int16_t _P3;
|
|
||||||
int16_t _P4;
|
|
||||||
int16_t _P5;
|
|
||||||
int16_t _P6;
|
|
||||||
int16_t _P7;
|
|
||||||
int16_t _P8;
|
|
||||||
int16_t _P9;
|
|
||||||
uint8_t _H1;
|
|
||||||
int16_t _H2;
|
|
||||||
uint8_t _H3;
|
|
||||||
int16_t _H4;
|
|
||||||
int16_t _H5;
|
|
||||||
int8_t _H6;
|
|
||||||
} CalibrationData;
|
|
||||||
};
|
|
||||||
|
|
||||||
float pressureToMmHg(float pressure); // Convert [Pa] to [mm Hg]
|
|
||||||
float pressureToAltitude(float pressure); // Convert pressure to altitude
|
|
||||||
#endif
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#include <BasicLinearAlgebra.h>
|
|
||||||
|
|
||||||
class Kalman2DFilter {
|
|
||||||
public:
|
|
||||||
Kalman2DFilter(float dt=4.f, float accelUncertainty=10.f, float barometerUncertainty=100.f) {
|
|
||||||
dt /= 1000.f;
|
|
||||||
F = {1, dt,
|
|
||||||
0, 1};
|
|
||||||
G = {0.5f*dt*dt,
|
|
||||||
dt};
|
|
||||||
H = {1,0};
|
|
||||||
I = {1, 0,
|
|
||||||
0, 1};
|
|
||||||
Q = G * ~G * accelUncertainty*accelUncertainty;
|
|
||||||
R = {barometerUncertainty*barometerUncertainty};
|
|
||||||
P = {0, 0,
|
|
||||||
0, 0};
|
|
||||||
S = {0,
|
|
||||||
0};
|
|
||||||
}
|
|
||||||
|
|
||||||
void filter(const float &AccZInertial,
|
|
||||||
const float &AltitudeBarometer,
|
|
||||||
float &AltitudeKalman,
|
|
||||||
float &VelocityVerticalKalman) {
|
|
||||||
Acc = {AccZInertial};
|
|
||||||
S = F * S + G * Acc;
|
|
||||||
P = F * P * ~F + Q;
|
|
||||||
L = H * P * ~H + R;
|
|
||||||
K = P * ~H * Inverse(L);
|
|
||||||
M = {AltitudeBarometer};
|
|
||||||
S = S + K * (M - H * S);
|
|
||||||
AltitudeKalman = S(0,0);
|
|
||||||
VelocityVerticalKalman = S(1,0);
|
|
||||||
P = (I - K * H) * P;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
BLA::Matrix<2,2> F; BLA::Matrix<2,1> G;
|
|
||||||
BLA::Matrix<2,2> P; BLA::Matrix<2,2> Q;
|
|
||||||
BLA::Matrix<2,1> S; BLA::Matrix<1,2> H;
|
|
||||||
BLA::Matrix<2,2> I; BLA::Matrix<1,1> Acc;
|
|
||||||
BLA::Matrix<2,1> K; BLA::Matrix<1,1> R;
|
|
||||||
BLA::Matrix<1,1> L; BLA::Matrix<1,1> M;
|
|
||||||
};
|
|
||||||
94
MPU.h
94
MPU.h
@@ -1,94 +0,0 @@
|
|||||||
#include "MPU6050_6Axis_MotionApps20.h"
|
|
||||||
#include "board_pins.h"
|
|
||||||
#include "esp_log.h"
|
|
||||||
|
|
||||||
volatile bool _isDMPDataReady = false;
|
|
||||||
void IRAM_ATTR _dmpInterruption() {_isDMPDataReady = true;}
|
|
||||||
|
|
||||||
class MPU {
|
|
||||||
public:
|
|
||||||
MPU(MPU6050_6Axis_MotionApps20 *mpu) {
|
|
||||||
_mpu = mpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
~MPU() {
|
|
||||||
delete _mpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool initialize() {
|
|
||||||
_mpu->initialize();
|
|
||||||
delay(250);
|
|
||||||
if(!_mpu->testConnection()) {
|
|
||||||
ESP_LOGE(_TAG, "MPU6050 test connection failed!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_mpu->setDLPFMode(MPU6050_DLPF_BW_10); // 10 Hz bandwidth
|
|
||||||
//mpu.setFullScaleGyroRange(MPU6050_GYRO_FS_500); // set sensivity, not recomended
|
|
||||||
//mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_8);
|
|
||||||
|
|
||||||
if(_mpu->dmpInitialize()) {
|
|
||||||
ESP_LOGE(_TAG, "Failed to initialize DMP!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_mpu->setDMPEnabled(true);
|
|
||||||
attachInterrupt(MPU6050_INT_PIN, _dmpInterruption, RISING);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool tick(bool &err) {
|
|
||||||
err = false;
|
|
||||||
if(!_isDMPDataReady) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if(!_mpu->dmpGetCurrentFIFOPacket(_fifoBuffer)) {
|
|
||||||
ESP_LOGE(_TAG, "Failed to get DMP data!");
|
|
||||||
err = true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Quaternion q;
|
|
||||||
VectorFloat gravity;
|
|
||||||
VectorInt16 accel;
|
|
||||||
VectorInt16 accelReal;
|
|
||||||
|
|
||||||
_mpu->dmpGetQuaternion(&q, _fifoBuffer);
|
|
||||||
_mpu->dmpGetGravity(&gravity, &q);
|
|
||||||
_mpu->dmpGetYawPitchRoll(_ypr, &q, &gravity);
|
|
||||||
_mpu->dmpGetAccel(&accel, _fifoBuffer);
|
|
||||||
_mpu->dmpGetLinearAccel(&accelReal, &accel, &gravity);
|
|
||||||
_isDMPDataReady = false;
|
|
||||||
|
|
||||||
_ax = accel.x/8192.f;
|
|
||||||
_ay = accel.y/8192.f;
|
|
||||||
_az = accel.z/8192.f;
|
|
||||||
|
|
||||||
_calculateZInertial(gravity);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* getters */
|
|
||||||
float accZInertial() {return _AccZInertial;}
|
|
||||||
float yaw() {return degrees(_ypr[0]);};
|
|
||||||
float pitch() {return degrees(_ypr[1]);};
|
|
||||||
float roll() {return degrees(_ypr[2]);};
|
|
||||||
|
|
||||||
private:
|
|
||||||
MPU6050_6Axis_MotionApps20 *_mpu = nullptr;
|
|
||||||
float _ypr[3];
|
|
||||||
float _ax, _ay, _az;
|
|
||||||
float _AccZInertial = 0;
|
|
||||||
uint8_t _fifoBuffer[45];
|
|
||||||
//volatile bool _isDMPDataReady = false;
|
|
||||||
const char *_TAG = "MPU6050 module";
|
|
||||||
|
|
||||||
void _calculateZInertial(VectorFloat &gravity) {
|
|
||||||
const float anglePitch = _ypr[1];
|
|
||||||
const float angleRoll = _ypr[2];
|
|
||||||
_AccZInertial = -sin(anglePitch)*_ax +
|
|
||||||
cos(anglePitch)*
|
|
||||||
sin(angleRoll)*_ay +
|
|
||||||
cos(anglePitch)*
|
|
||||||
cos(angleRoll)*_az;
|
|
||||||
_AccZInertial = (_AccZInertial-1)*gravity.z*100;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
#include "Barometer.h"
|
|
||||||
#include "GyverBME280.h"
|
|
||||||
#include "Wire.h"
|
|
||||||
#include "board_pins.h"
|
|
||||||
#include "I2Cdev.h"
|
|
||||||
#include "Kalman2DFilter.h"
|
|
||||||
#include "MPU6050_6Axis_MotionApps20.h"
|
|
||||||
#include "BatteryController.h"
|
|
||||||
#include "MPU.h"
|
|
||||||
|
|
||||||
TwoWire i2c = TwoWire(0);
|
|
||||||
Barometer barometer(new GyverBME280(i2c));
|
|
||||||
MPU mpu(new MPU6050(MPU6050_DEFAULT_ADDRESS, &i2c));
|
|
||||||
Kalman2DFilter kalman2d(10.f, 1.f, 1.8f);
|
|
||||||
BatteryController battery;
|
|
||||||
|
|
||||||
void setup() {
|
|
||||||
Serial.begin(115200);
|
|
||||||
i2c.begin(I2C_SDA_PIN, I2C_SCL_PIN, 400000);
|
|
||||||
Serial.println(barometer.initialize());
|
|
||||||
Serial.println(mpu.initialize());
|
|
||||||
barometer.measureBaseAltitudeSync();
|
|
||||||
battery.initialize();
|
|
||||||
Serial.println("System initialized");
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop() {
|
|
||||||
/*Serial.print("ax:");
|
|
||||||
Serial.print(ax);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print("ay:");
|
|
||||||
Serial.print(ay);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print("az:");
|
|
||||||
Serial.print(az);
|
|
||||||
Serial.print(",");*/
|
|
||||||
bool err;
|
|
||||||
barometer.tick();
|
|
||||||
if(mpu.tick(err) && !err) {
|
|
||||||
float kalmanAltitude, ZVelocityAltitude;
|
|
||||||
float barometerAltitude = barometer.rawFlightHeight();
|
|
||||||
kalman2d.filter(mpu.accZInertial(), barometerAltitude, kalmanAltitude, ZVelocityAltitude);
|
|
||||||
//Serial.print("Yaw:");
|
|
||||||
//Serial.print(mpu.yaw());
|
|
||||||
//Serial.print(",");
|
|
||||||
//Serial.print("Roll:");
|
|
||||||
//Serial.print(mpu.roll());
|
|
||||||
//Serial.print(",");
|
|
||||||
//Serial.print("Pitch:");
|
|
||||||
//Serial.print(mpu.pitch());
|
|
||||||
//Serial.print(",");
|
|
||||||
//Serial.print("Flight height:");
|
|
||||||
Serial.print(barometerAltitude);
|
|
||||||
Serial.print(",");
|
|
||||||
//Serial.print("Kalman altitude:");
|
|
||||||
Serial.print(kalmanAltitude);
|
|
||||||
Serial.print(",");
|
|
||||||
/*Serial.print(G);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print(Pc);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print(P);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print(Xp);
|
|
||||||
Serial.print(",");*/
|
|
||||||
//Serial.print("Kalman2 altitude: ");
|
|
||||||
Serial.println(ZVelocityAltitude);
|
|
||||||
/*Serial.print("Vertical velocity:");
|
|
||||||
Serial.print(ZVelocityAltitude);
|
|
||||||
Serial.print(",");
|
|
||||||
Serial.print("Battery percent: ");
|
|
||||||
Serial.println(battery.percent());*/
|
|
||||||
}
|
|
||||||
|
|
||||||
//Serial.print(",");
|
|
||||||
/*
|
|
||||||
//Serial.print("AccZInertial:");
|
|
||||||
Serial.print(AccZInertial);
|
|
||||||
Serial.print(",");
|
|
||||||
//Serial.print("Altitude:");
|
|
||||||
Serial.print(AltitudeBarometer);
|
|
||||||
Serial.print(",");
|
|
||||||
//Serial.print("kAltitude:");
|
|
||||||
Serial.print(AltitudeKalman);
|
|
||||||
Serial.print(",");
|
|
||||||
//Serial.print("Battery voltage: ");
|
|
||||||
//Serial.print(battery.measureVoltage());
|
|
||||||
//Serial.print(",");
|
|
||||||
//Serial.print("kZvelocity:");
|
|
||||||
Serial.println(VelocityVerticalKalman);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
#include "driver/adc.h"
|
|
||||||
|
|
||||||
#define I2C_SDA_PIN 21
|
|
||||||
#define I2C_SCL_PIN 18
|
|
||||||
#define MPU6050_INT_PIN 19
|
|
||||||
#define BATTERY_ADC_CHANNEL ADC2_CHANNEL_0
|
|
||||||
#define BATTERY_DATA_PIN 4
|
|
||||||
#define BATTERY_DATA_SWITCH_PIN 17
|
|
||||||
17
convert_sysincludes.py
Executable file
17
convert_sysincludes.py
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
Import("env" ,"projenv")
|
||||||
|
|
||||||
|
platform = env.PioPlatform()
|
||||||
|
FRAMEWORK_DIR = Path(platform.get_package_dir("framework-arduinoespressif32"))
|
||||||
|
framework_includes = list()
|
||||||
|
filtered_cpppath = list()
|
||||||
|
# apply these changes to current working env, the project env and the global env
|
||||||
|
for e in (env, projenv, DefaultEnvironment()):
|
||||||
|
for p in e["CPPPATH"]:
|
||||||
|
# is the current include path inside the framework directory?
|
||||||
|
if FRAMEWORK_DIR in Path(p).parents:
|
||||||
|
framework_includes.append(p)
|
||||||
|
else:
|
||||||
|
filtered_cpppath.append(p)
|
||||||
|
e.Replace(CPPPATH=filtered_cpppath)
|
||||||
|
e.Append(CCFLAGS=[("-isystem", p) for p in framework_includes])
|
||||||
70
get-platformio.py
Executable file
70
get-platformio.py
Executable file
File diff suppressed because one or more lines are too long
39
include/README
Executable file
39
include/README
Executable file
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
This directory is intended for project header files.
|
||||||
|
|
||||||
|
A header file is a file containing C declarations and macro definitions
|
||||||
|
to be shared between several project source files. You request the use of a
|
||||||
|
header file in your project source file (C, C++, etc) located in `src` folder
|
||||||
|
by including it, with the C preprocessing directive `#include'.
|
||||||
|
|
||||||
|
```src/main.c
|
||||||
|
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Including a header file produces the same results as copying the header file
|
||||||
|
into each source file that needs it. Such copying would be time-consuming
|
||||||
|
and error-prone. With a header file, the related declarations appear
|
||||||
|
in only one place. If they need to be changed, they can be changed in one
|
||||||
|
place, and programs that include the header file will automatically use the
|
||||||
|
new version when next recompiled. The header file eliminates the labor of
|
||||||
|
finding and changing all the copies as well as the risk that a failure to
|
||||||
|
find one copy will result in inconsistencies within a program.
|
||||||
|
|
||||||
|
In C, the usual convention is to give header files names that end with `.h'.
|
||||||
|
It is most portable to use only letters, digits, dashes, and underscores in
|
||||||
|
header file names, and at most one dot.
|
||||||
|
|
||||||
|
Read more about using header files in official GCC documentation:
|
||||||
|
|
||||||
|
* Include Syntax
|
||||||
|
* Include Operation
|
||||||
|
* Once-Only Headers
|
||||||
|
* Computed Includes
|
||||||
|
|
||||||
|
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
||||||
46
lib/README
Executable file
46
lib/README
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
This directory is intended for project specific (private) libraries.
|
||||||
|
PlatformIO will compile them to static libraries and link into executable file.
|
||||||
|
|
||||||
|
The source code of each library should be placed in a an own separate directory
|
||||||
|
("lib/your_library_name/[here are source files]").
|
||||||
|
|
||||||
|
For example, see a structure of the following two libraries `Foo` and `Bar`:
|
||||||
|
|
||||||
|
|--lib
|
||||||
|
| |
|
||||||
|
| |--Bar
|
||||||
|
| | |--docs
|
||||||
|
| | |--examples
|
||||||
|
| | |--src
|
||||||
|
| | |- Bar.c
|
||||||
|
| | |- Bar.h
|
||||||
|
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||||
|
| |
|
||||||
|
| |--Foo
|
||||||
|
| | |- Foo.c
|
||||||
|
| | |- Foo.h
|
||||||
|
| |
|
||||||
|
| |- README --> THIS FILE
|
||||||
|
|
|
||||||
|
|- platformio.ini
|
||||||
|
|--src
|
||||||
|
|- main.c
|
||||||
|
|
||||||
|
and a contents of `src/main.c`:
|
||||||
|
```
|
||||||
|
#include <Foo.h>
|
||||||
|
#include <Bar.h>
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
PlatformIO Library Dependency Finder will find automatically dependent
|
||||||
|
libraries scanning project source files.
|
||||||
|
|
||||||
|
More information about PlatformIO Library Dependency Finder
|
||||||
|
- https://docs.platformio.org/page/librarymanager/ldf.html
|
||||||
48
platformio.ini
Executable file
48
platformio.ini
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
; PlatformIO Project Configuration File
|
||||||
|
;
|
||||||
|
; Build options: build flags, source filter
|
||||||
|
; Upload options: custom upload port, speed and extra flags
|
||||||
|
; Library options: dependencies, extra library storages
|
||||||
|
; Advanced options: extra scripting
|
||||||
|
;
|
||||||
|
; Please visit documentation for the other options and examples
|
||||||
|
; https://docs.platformio.org/page/projectconf.html
|
||||||
|
|
||||||
|
[platformio]
|
||||||
|
default_envs = esp32dev
|
||||||
|
|
||||||
|
[common]
|
||||||
|
lib_deps_builtin =
|
||||||
|
Wire
|
||||||
|
BluetoothSerial
|
||||||
|
lib_deps_external =
|
||||||
|
https://git.gogacoder.com/gogacoder/GyverBME280.git @ ~1.5.0
|
||||||
|
https://git.gogacoder.com/gogacoder/MPU6050.git @ ~1.0.0
|
||||||
|
https://git.gogacoder.com/gogacoder/I2Cdev.git @ ~1.0.1
|
||||||
|
https://github.com/GyverLibs/StringUtils @ 1.2.6
|
||||||
|
https://github.com/GyverLibs/GSON.git @ 1.1.5
|
||||||
|
https://github.com/tomstewart89/BasicLinearAlgebra.git @ 4.3
|
||||||
|
https://github.com/GyverLibs/mString.git @ 1.7
|
||||||
|
https://github.com/GyverLibs/GyverPID @ 3.3
|
||||||
|
https://github.com/pololu/vl53l0x-arduino @ 1.3.1
|
||||||
|
https://github.com/pololu/lps-arduino
|
||||||
|
|
||||||
|
[env:esp32dev]
|
||||||
|
platform = espressif32 @ 6.5.0
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
lib_deps = ${common.lib_deps_external}
|
||||||
|
monitor_speed = 115200
|
||||||
|
board_build.partitions = huge_app.csv
|
||||||
|
build_src_flags =
|
||||||
|
-std=c++2a
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Werror=all
|
||||||
|
-Wno-error=pedantic
|
||||||
|
-Wpedantic
|
||||||
|
-O2
|
||||||
|
build_flags = -DCORE_DEBUG_LEVEL=3
|
||||||
|
check_tool = pvs-studio
|
||||||
|
check_flags = pvs-studio: --analysis-mode=4 --exclude-path=.pio/libdeps --lic-file=~/.config/PVS-Studio/PVS-Studio.lic
|
||||||
|
extra_scripts = post:convert_sysincludes.py
|
||||||
39
.clang-format → src/.clang-format
Normal file → Executable file
39
.clang-format → src/.clang-format
Normal file → Executable file
@@ -1,8 +1,8 @@
|
|||||||
# Source: https://github.com/arduino/tooling-project-assets/tree/main/other/clang-format-configuration
|
# Source: https://github.com/arduino/tooling-project-assets/tree/main/other/clang-format-configuration
|
||||||
---
|
---
|
||||||
|
TabWidth: 2
|
||||||
AccessModifierOffset: -2
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: Align
|
||||||
AlignArrayOfStructures: None
|
|
||||||
AlignConsecutiveAssignments: None
|
AlignConsecutiveAssignments: None
|
||||||
AlignConsecutiveBitFields: None
|
AlignConsecutiveBitFields: None
|
||||||
AlignConsecutiveDeclarations: None
|
AlignConsecutiveDeclarations: None
|
||||||
@@ -17,7 +17,6 @@ AllowShortBlocksOnASingleLine: Always
|
|||||||
AllowShortCaseLabelsOnASingleLine: true
|
AllowShortCaseLabelsOnASingleLine: true
|
||||||
AllowShortEnumsOnASingleLine: true
|
AllowShortEnumsOnASingleLine: true
|
||||||
AllowShortFunctionsOnASingleLine: Empty
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
|
|
||||||
AllowShortLambdasOnASingleLine: Empty
|
AllowShortLambdasOnASingleLine: Empty
|
||||||
AllowShortLoopsOnASingleLine: true
|
AllowShortLoopsOnASingleLine: true
|
||||||
AlwaysBreakAfterDefinitionReturnType: None
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
@@ -26,7 +25,6 @@ AlwaysBreakBeforeMultilineStrings: false
|
|||||||
AlwaysBreakTemplateDeclarations: No
|
AlwaysBreakTemplateDeclarations: No
|
||||||
AttributeMacros:
|
AttributeMacros:
|
||||||
- __capability
|
- __capability
|
||||||
BasedOnStyle: LLVM
|
|
||||||
BinPackArguments: true
|
BinPackArguments: true
|
||||||
BinPackParameters: true
|
BinPackParameters: true
|
||||||
BitFieldColonSpacing: Both
|
BitFieldColonSpacing: Both
|
||||||
@@ -59,7 +57,7 @@ BreakConstructorInitializers: BeforeColon
|
|||||||
BreakConstructorInitializersBeforeComma: false
|
BreakConstructorInitializersBeforeComma: false
|
||||||
BreakInheritanceList: BeforeColon
|
BreakInheritanceList: BeforeColon
|
||||||
BreakStringLiterals: false
|
BreakStringLiterals: false
|
||||||
ColumnLimit: 0
|
ColumnLimit: 90
|
||||||
CommentPragmas: ''
|
CommentPragmas: ''
|
||||||
CompactNamespaces: false
|
CompactNamespaces: false
|
||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
@@ -69,7 +67,6 @@ Cpp11BracedListStyle: false
|
|||||||
DeriveLineEnding: true
|
DeriveLineEnding: true
|
||||||
DerivePointerAlignment: true
|
DerivePointerAlignment: true
|
||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
EmptyLineAfterAccessModifier: Leave
|
|
||||||
EmptyLineBeforeAccessModifier: Leave
|
EmptyLineBeforeAccessModifier: Leave
|
||||||
ExperimentalAutoDetectBinPacking: false
|
ExperimentalAutoDetectBinPacking: false
|
||||||
FixNamespaceComments: false
|
FixNamespaceComments: false
|
||||||
@@ -77,8 +74,6 @@ ForEachMacros:
|
|||||||
- foreach
|
- foreach
|
||||||
- Q_FOREACH
|
- Q_FOREACH
|
||||||
- BOOST_FOREACH
|
- BOOST_FOREACH
|
||||||
IfMacros:
|
|
||||||
- KJ_IF_MAYBE
|
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
@@ -95,20 +90,14 @@ IncludeCategories:
|
|||||||
CaseSensitive: false
|
CaseSensitive: false
|
||||||
IncludeIsMainRegex: ''
|
IncludeIsMainRegex: ''
|
||||||
IncludeIsMainSourceRegex: ''
|
IncludeIsMainSourceRegex: ''
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseBlocks: true
|
|
||||||
IndentCaseLabels: true
|
|
||||||
IndentExternBlock: Indent
|
|
||||||
IndentGotoLabels: false
|
IndentGotoLabels: false
|
||||||
IndentPPDirectives: None
|
IndentPPDirectives: None
|
||||||
IndentRequires: true
|
|
||||||
IndentWidth: 2
|
IndentWidth: 2
|
||||||
IndentWrappedFunctionNames: false
|
IndentWrappedFunctionNames: false
|
||||||
InsertTrailingCommas: None
|
InsertTrailingCommas: None
|
||||||
JavaScriptQuotes: Leave
|
JavaScriptQuotes: Leave
|
||||||
JavaScriptWrapImports: true
|
JavaScriptWrapImports: true
|
||||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
LambdaBodyIndentation: Signature
|
|
||||||
Language: Cpp
|
Language: Cpp
|
||||||
MacroBlockBegin: ''
|
MacroBlockBegin: ''
|
||||||
MacroBlockEnd: ''
|
MacroBlockEnd: ''
|
||||||
@@ -119,26 +108,17 @@ ObjCBlockIndentWidth: 2
|
|||||||
ObjCBreakBeforeNestedBlockParam: true
|
ObjCBreakBeforeNestedBlockParam: true
|
||||||
ObjCSpaceAfterProperty: false
|
ObjCSpaceAfterProperty: false
|
||||||
ObjCSpaceBeforeProtocolList: true
|
ObjCSpaceBeforeProtocolList: true
|
||||||
PPIndentWidth: -1
|
|
||||||
PackConstructorInitializers: BinPack
|
|
||||||
PenaltyBreakAssignment: 1
|
PenaltyBreakAssignment: 1
|
||||||
PenaltyBreakBeforeFirstCallParameter: 1
|
PenaltyBreakBeforeFirstCallParameter: 1
|
||||||
PenaltyBreakComment: 1
|
PenaltyBreakComment: 1
|
||||||
PenaltyBreakFirstLessLess: 1
|
PenaltyBreakFirstLessLess: 1
|
||||||
PenaltyBreakOpenParenthesis: 1
|
|
||||||
PenaltyBreakString: 1
|
PenaltyBreakString: 1
|
||||||
PenaltyBreakTemplateDeclaration: 1
|
PenaltyBreakTemplateDeclaration: 1
|
||||||
PenaltyExcessCharacter: 1
|
PenaltyExcessCharacter: 1
|
||||||
PenaltyIndentedWhitespace: 1
|
PenaltyIndentedWhitespace: 1
|
||||||
PenaltyReturnTypeOnItsOwnLine: 1
|
PenaltyReturnTypeOnItsOwnLine: 1
|
||||||
PointerAlignment: Right
|
PointerAlignment: Right
|
||||||
QualifierAlignment: Leave
|
|
||||||
ReferenceAlignment: Pointer
|
|
||||||
ReflowComments: false
|
ReflowComments: false
|
||||||
RemoveBracesLLVM: false
|
|
||||||
SeparateDefinitionBlocks: Leave
|
|
||||||
ShortNamespaceLines: 0
|
|
||||||
SortIncludes: Never
|
|
||||||
SortJavaStaticImport: Before
|
SortJavaStaticImport: Before
|
||||||
SortUsingDeclarations: false
|
SortUsingDeclarations: false
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
@@ -151,26 +131,14 @@ SpaceBeforeCpp11BracedList: false
|
|||||||
SpaceBeforeCtorInitializerColon: true
|
SpaceBeforeCtorInitializerColon: true
|
||||||
SpaceBeforeInheritanceColon: true
|
SpaceBeforeInheritanceColon: true
|
||||||
SpaceBeforeParens: ControlStatements
|
SpaceBeforeParens: ControlStatements
|
||||||
SpaceBeforeParensOptions:
|
|
||||||
AfterControlStatements: true
|
|
||||||
AfterForeachMacros: true
|
|
||||||
AfterFunctionDefinitionName: false
|
|
||||||
AfterFunctionDeclarationName: false
|
|
||||||
AfterIfMacros: true
|
|
||||||
AfterOverloadedOperator: false
|
|
||||||
BeforeNonEmptyParentheses: false
|
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
SpaceBeforeSquareBrackets: false
|
SpaceBeforeSquareBrackets: false
|
||||||
SpaceInEmptyBlock: false
|
SpaceInEmptyBlock: false
|
||||||
SpaceInEmptyParentheses: false
|
SpaceInEmptyParentheses: false
|
||||||
SpacesBeforeTrailingComments: 2
|
SpacesBeforeTrailingComments: 2
|
||||||
SpacesInAngles: Leave
|
|
||||||
SpacesInCStyleCastParentheses: false
|
SpacesInCStyleCastParentheses: false
|
||||||
SpacesInConditionalStatement: false
|
SpacesInConditionalStatement: false
|
||||||
SpacesInContainerLiterals: false
|
SpacesInContainerLiterals: false
|
||||||
SpacesInLineCommentPrefix:
|
|
||||||
Minimum: 0
|
|
||||||
Maximum: -1
|
|
||||||
SpacesInParentheses: false
|
SpacesInParentheses: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
Standard: Auto
|
Standard: Auto
|
||||||
@@ -179,7 +147,7 @@ StatementAttributeLikeMacros:
|
|||||||
StatementMacros:
|
StatementMacros:
|
||||||
- Q_UNUSED
|
- Q_UNUSED
|
||||||
- QT_REQUIRE_VERSION
|
- QT_REQUIRE_VERSION
|
||||||
TabWidth: 2
|
#TabWidth: 2
|
||||||
UseCRLF: false
|
UseCRLF: false
|
||||||
UseTab: Never
|
UseTab: Never
|
||||||
WhitespaceSensitiveMacros:
|
WhitespaceSensitiveMacros:
|
||||||
@@ -188,3 +156,4 @@ WhitespaceSensitiveMacros:
|
|||||||
- BOOST_PP_STRINGIZE
|
- BOOST_PP_STRINGIZE
|
||||||
- NS_SWIFT_NAME
|
- NS_SWIFT_NAME
|
||||||
- CF_SWIFT_NAME
|
- CF_SWIFT_NAME
|
||||||
|
IndentWidth: 4
|
||||||
28
src/App.hpp
Executable file
28
src/App.hpp
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "Logic/FlightDispatcher.hpp"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
class Application {
|
||||||
|
public:
|
||||||
|
Application(FlightDispatcher *dispatcher) {
|
||||||
|
assert(dispatcher != nullptr);
|
||||||
|
_dispatcher = dispatcher;
|
||||||
|
ESP_LOGI(_tag, "ESP_IDF version: %s", esp_get_idf_version());
|
||||||
|
ESP_LOGI(_tag, "Application startup complete");
|
||||||
|
}
|
||||||
|
|
||||||
|
void tick() {
|
||||||
|
_dispatcher->tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
~Application() {
|
||||||
|
ESP_LOGI(_tag, "Application destroyed");
|
||||||
|
delete _dispatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
FlightDispatcher *_dispatcher = nullptr;
|
||||||
|
static constexpr const char *_tag = "Application";
|
||||||
|
};
|
||||||
23
src/BoardI2C.hpp
Executable file
23
src/BoardI2C.hpp
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define CONFIG_DISABLE_HAL_LOCKS 0
|
||||||
|
|
||||||
|
#include "Wire.h"
|
||||||
|
#include "board_pins.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
class BoardI2C : public TwoWire {
|
||||||
|
public:
|
||||||
|
BoardI2C() : TwoWire(0) {
|
||||||
|
if (begin(I2C_SDA_PIN, I2C_SCL_PIN, 100000)) {
|
||||||
|
setTimeOut(10);
|
||||||
|
ESP_LOGI("I2CBus", "Bus initialized");
|
||||||
|
} else {
|
||||||
|
ESP_LOGE("I2CBus", "Failed to initialize the i2c software bus!");
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
48
src/Filters/Kalman2DFilter.hpp
Executable file
48
src/Filters/Kalman2DFilter.hpp
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <BasicLinearAlgebra.h>
|
||||||
|
|
||||||
|
class Kalman2DFilter {
|
||||||
|
public:
|
||||||
|
Kalman2DFilter(float dt = 4.f, float accelUncertainty = 10.f, float barometerUncertainty = 100.f) {
|
||||||
|
dt /= 1000.f;
|
||||||
|
F = {1, dt, 0, 1};
|
||||||
|
G = {0.5f * dt * dt, dt};
|
||||||
|
H = {1, 0};
|
||||||
|
I = {1, 0, 0, 1};
|
||||||
|
Q = G * ~G * accelUncertainty * accelUncertainty;
|
||||||
|
R = {barometerUncertainty * barometerUncertainty};
|
||||||
|
P = {0, 0, 0, 0};
|
||||||
|
S = {0, 0};
|
||||||
|
}
|
||||||
|
|
||||||
|
void filter(const float &AccZInertial, const float &AltitudeBarometer,
|
||||||
|
float &AltitudeKalman, float &VelocityVerticalKalman) {
|
||||||
|
Acc = {AccZInertial};
|
||||||
|
S = F * S + G * Acc;
|
||||||
|
P = F * P * ~F + Q;
|
||||||
|
L = H * P * ~H + R;
|
||||||
|
K = P * ~H * Inverse(L);
|
||||||
|
M = {AltitudeBarometer};
|
||||||
|
S = S + K * (M - H * S);
|
||||||
|
AltitudeKalman = S(0, 0);
|
||||||
|
VelocityVerticalKalman = S(1, 0);
|
||||||
|
P = (I - K * H) * P;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
BLA::Matrix<2, 2> F;
|
||||||
|
BLA::Matrix<2, 1> G;
|
||||||
|
BLA::Matrix<2, 2> P;
|
||||||
|
BLA::Matrix<2, 2> Q;
|
||||||
|
BLA::Matrix<2, 1> S;
|
||||||
|
BLA::Matrix<1, 2> H;
|
||||||
|
BLA::Matrix<2, 2> I;
|
||||||
|
BLA::Matrix<1, 1> Acc;
|
||||||
|
BLA::Matrix<2, 1> K;
|
||||||
|
BLA::Matrix<1, 1> R;
|
||||||
|
BLA::Matrix<1, 1> L;
|
||||||
|
BLA::Matrix<1, 1> M;
|
||||||
|
};
|
||||||
47
src/Filters/kalman.hpp
Executable file
47
src/Filters/kalman.hpp
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
// упрощённый Калман для одномерного случая
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _GKalman_h
|
||||||
|
#define _GKalman_h
|
||||||
|
|
||||||
|
class GKalman {
|
||||||
|
public:
|
||||||
|
// разброс измерения, разброс оценки, скорость изменения значений
|
||||||
|
GKalman(float mea_e, float est_e, float q) {
|
||||||
|
setParameters(mea_e, est_e, q);
|
||||||
|
}
|
||||||
|
|
||||||
|
// разброс измерения, скорость изменения значений (разброс измерения принимается равным разбросу оценки)
|
||||||
|
GKalman(float mea_e, float q) {
|
||||||
|
setParameters(mea_e, mea_e, q);
|
||||||
|
}
|
||||||
|
|
||||||
|
// разброс измерения, разброс оценки, скорость изменения значений
|
||||||
|
void setParameters(float mea_e, float est_e, float q) {
|
||||||
|
_err_measure = mea_e;
|
||||||
|
_err_estimate = est_e;
|
||||||
|
_q = q;
|
||||||
|
}
|
||||||
|
|
||||||
|
// разброс измерения, скорость изменения значений (разброс измерения принимается равным разбросу оценки)
|
||||||
|
void setParameters(float mea_e, float q) {
|
||||||
|
setParameters(mea_e, mea_e, q);
|
||||||
|
}
|
||||||
|
|
||||||
|
// возвращает фильтрованное значение
|
||||||
|
float filtered(float value) {
|
||||||
|
float _kalman_gain, _current_estimate;
|
||||||
|
_kalman_gain = _err_estimate / (_err_estimate + _err_measure);
|
||||||
|
_current_estimate = _last_estimate + _kalman_gain * (value - _last_estimate);
|
||||||
|
_err_estimate = (1.0 - _kalman_gain)*_err_estimate + fabs(_last_estimate-_current_estimate)*_q;
|
||||||
|
_last_estimate=_current_estimate;
|
||||||
|
return _current_estimate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
float _err_measure = 0.0;
|
||||||
|
float _err_estimate = 0.0;
|
||||||
|
float _q = 0.0;
|
||||||
|
float _last_estimate = 0.0;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
20
src/Filters/median3.hpp
Executable file
20
src/Filters/median3.hpp
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
// быстрый медианный фильтр 3-го порядка
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _GMedian3_h
|
||||||
|
#define _GMedian3_h
|
||||||
|
|
||||||
|
template < typename TYPE >
|
||||||
|
class GMedian3 {
|
||||||
|
public:
|
||||||
|
TYPE filtered(TYPE value) { // возвращает фильтрованное значение
|
||||||
|
buf[_counter] = value;
|
||||||
|
if (++_counter > 2) _counter = 0;
|
||||||
|
return (max(buf[0], buf[1]) == max(buf[1], buf[2])) ? max(buf[0], buf[2]) : max(buf[1], min(buf[0], buf[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
TYPE buf[3];
|
||||||
|
uint8_t _counter = 0;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
50
src/Filters/runningAverage.hpp
Executable file
50
src/Filters/runningAverage.hpp
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
// экспоненциальное бегущее среднее
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _GFilterRA_h
|
||||||
|
#define _GFilterRA_h
|
||||||
|
|
||||||
|
class GFilterRA {
|
||||||
|
public:
|
||||||
|
GFilterRA(){}
|
||||||
|
|
||||||
|
GFilterRA(float coef, uint16_t interval) {
|
||||||
|
_coef = coef;
|
||||||
|
_prd = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
GFilterRA(float coef) {
|
||||||
|
_coef = coef;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setCoef(float coef) {
|
||||||
|
_coef = coef;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPeriod(uint16_t interval) {
|
||||||
|
_prd = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
float filteredTime(float value) {
|
||||||
|
if (millis() - _tmr >= _prd) {
|
||||||
|
_tmr += _prd;
|
||||||
|
filtered(value);
|
||||||
|
}
|
||||||
|
return _fil;
|
||||||
|
}
|
||||||
|
|
||||||
|
float filtered(float value) {
|
||||||
|
return _fil += (value - _fil) * _coef;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void setStep(uint16_t interval) {
|
||||||
|
_prd = interval;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
float _coef = 0.0, _fil = 0.0;
|
||||||
|
uint32_t _tmr = 0;
|
||||||
|
uint16_t _prd = 0;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
222
src/Logic/FlightController.cpp
Executable file
222
src/Logic/FlightController.cpp
Executable file
@@ -0,0 +1,222 @@
|
|||||||
|
#include "FlightController.hpp"
|
||||||
|
|
||||||
|
FlightController::FlightController(
|
||||||
|
Sensors *sensors, SavedPidRegulator *heightController, SavedPidRegulator *yawController,
|
||||||
|
BrushedMotor *rotor1, BrushedMotor *rotor2,
|
||||||
|
PIDController *tailRotorController, bool unlimitedBattery
|
||||||
|
) {
|
||||||
|
assert(sensors != nullptr);
|
||||||
|
assert(heightController != nullptr);
|
||||||
|
assert(yawController != nullptr);
|
||||||
|
assert(tailRotorController != nullptr);
|
||||||
|
assert(rotor1 != nullptr);
|
||||||
|
assert(rotor2 != nullptr);
|
||||||
|
|
||||||
|
_sensors = sensors;
|
||||||
|
_unlimitedBattery = unlimitedBattery;
|
||||||
|
_heightController = heightController;
|
||||||
|
_yawController = yawController;
|
||||||
|
_tailRotorController = tailRotorController;
|
||||||
|
_rotor1 = rotor1;
|
||||||
|
_rotor2 = rotor2;
|
||||||
|
|
||||||
|
_status = DeviceStatus::Idle;
|
||||||
|
_checkBatteryCharge();
|
||||||
|
stopAllRotors();
|
||||||
|
_initPidControllers();
|
||||||
|
ESP_LOGI(_tag, "Flight controller initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
FlightController::~FlightController() {
|
||||||
|
delete _sensors;
|
||||||
|
delete _heightController;
|
||||||
|
delete _yawController;
|
||||||
|
delete _tailRotorController;
|
||||||
|
delete _rotor1;
|
||||||
|
delete _rotor2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::tick() {
|
||||||
|
bool hasUpdates = _sensors->tick();
|
||||||
|
_checkBatteryCharge();
|
||||||
|
// TODO: don't apply pid values to motors while DeviceStatus != IsFlying
|
||||||
|
switch (_status) {
|
||||||
|
case DeviceStatus::Idle:
|
||||||
|
break;
|
||||||
|
case DeviceStatus::ChargeRequired:
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsPreparingForTakeoff:
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsImuCalibration:
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsBoarding:
|
||||||
|
/* TODO: implement boarding */
|
||||||
|
if (hasUpdates) {
|
||||||
|
_boarding();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsFlying:
|
||||||
|
/* TODO: implement flying */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (hasUpdates and (_status == DeviceStatus::IsFlying or _status == DeviceStatus::IsBoarding)) {
|
||||||
|
_tailRotorController->input = round(_sensors->mpuData().pitch * 10) / 10;
|
||||||
|
_tailRotorController->update();
|
||||||
|
|
||||||
|
_heightController->input = _sensors->flightHeight();
|
||||||
|
//auto baseDuty = (uint32_t) round(_heightController->getResultNow());
|
||||||
|
//_rotor1->setDuty(baseDuty);
|
||||||
|
//_rotor2->setDuty(baseDuty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ReportedDeviceState FlightController::currentDeviceState() const {
|
||||||
|
return {
|
||||||
|
.batteryCharge = _sensors->batteryCharge(),
|
||||||
|
.flightHeight = _sensors->flightHeight(),
|
||||||
|
.status = _status,
|
||||||
|
.mpuState = _sensors->mpuData()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::startTakeoff() {
|
||||||
|
/* Start preparation for takeoff */
|
||||||
|
_checkBatteryCharge();
|
||||||
|
if (_status != DeviceStatus::Idle)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_status = DeviceStatus::IsPreparingForTakeoff;
|
||||||
|
_sensors->onMeasuaringAltitudeFinished([this]() {
|
||||||
|
if (_status == DeviceStatus::IsPreparingForTakeoff) {
|
||||||
|
// Preparation for takeoff is done
|
||||||
|
_takeoff();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
_sensors->measureBaseAltitudeAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::startBoarding() {
|
||||||
|
if (_status == DeviceStatus::IsFlying) {
|
||||||
|
_status = DeviceStatus::IsBoarding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::_checkBatteryCharge() {
|
||||||
|
if (_unlimitedBattery)
|
||||||
|
return;
|
||||||
|
if (_sensors->batteryCharge() <= _batteryCriticalCharge) {
|
||||||
|
if (_status == DeviceStatus::IsFlying) {
|
||||||
|
startBoarding();
|
||||||
|
} else {
|
||||||
|
_status = DeviceStatus::ChargeRequired;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::_takeoff() {
|
||||||
|
// TODO: implement takeoff
|
||||||
|
_status = DeviceStatus::IsFlying;
|
||||||
|
_tailRotorController->enable();
|
||||||
|
_heightController->integral = 0.f;
|
||||||
|
_heightController->setpoint = _defaultFlightHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::_boarding() {
|
||||||
|
if (_sensors->flightHeight() <= _defaultStopMotorHeight) {
|
||||||
|
stopAllRotors();
|
||||||
|
} else {
|
||||||
|
_heightController->setpoint -= _boarding_speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::startImuCalibration() {
|
||||||
|
if (_status != DeviceStatus::Idle)
|
||||||
|
return;
|
||||||
|
ESP_LOGI(_tag, "Started IMU calibration");
|
||||||
|
_status = DeviceStatus::IsImuCalibration;
|
||||||
|
_sensors->startMpuCalibration();
|
||||||
|
_sensors->onMpuCalibrationFinished([this]() {
|
||||||
|
this->_status = DeviceStatus::Idle;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::moveToFlightHeight(float newFlightHeight) {
|
||||||
|
// TODO: implement setting flight height
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::newFlightHeightStickPosition(int16_t newFlightHeightStickPostition) {
|
||||||
|
// TODO: implement stick input
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::newYawStickPosition(int16_t newYawStickPostition) {
|
||||||
|
// TODO: implement stick input
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::newPitchStickPosition(int16_t newYawStickPostition) {
|
||||||
|
// TODO: implement stick input
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setRotor1Duty(int16_t rotor1Duty) {
|
||||||
|
{
|
||||||
|
auto duty = (int16_t) map((long) rotor1Duty, 0, 5000, 0, 1023);
|
||||||
|
_rotor1->setExtendedDuty(duty);
|
||||||
|
_rotor2->setExtendedDuty(duty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setRotor2Duty(int16_t rotor2Duty) {
|
||||||
|
{
|
||||||
|
auto duty = (int16_t) map((long) rotor2Duty, 0, 5000, 0, 1023);
|
||||||
|
_rotor1->setExtendedDuty(duty);
|
||||||
|
_rotor2->setExtendedDuty(duty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setRotor3Duty(int16_t rotor3Duty) {
|
||||||
|
if (_status == DeviceStatus::Idle) {
|
||||||
|
auto duty = (int16_t) map((long) rotor3Duty, -5000, 5000, -1023, 1023);
|
||||||
|
_tailRotorController->setRotorDuty(duty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::stopAllRotors() {
|
||||||
|
_tailRotorController->disable();
|
||||||
|
setRotor1Duty(0);
|
||||||
|
setRotor2Duty(0);
|
||||||
|
setRotor3Duty(0);
|
||||||
|
_status = DeviceStatus::Idle;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setHeightControllerParams(float p, float i, float d) {
|
||||||
|
if (_status == DeviceStatus::Idle) {
|
||||||
|
_heightController->setParams({.p = p, .i = i, .d = d});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setYawControllerParams(float p, float i, float d) {
|
||||||
|
if (_status == DeviceStatus::Idle) {
|
||||||
|
_yawController->setParams({.p = p, .i = i, .d = d});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightController::setPitchControllerParams(float p, float i, float d) {
|
||||||
|
if (_status == DeviceStatus::Idle) {
|
||||||
|
_tailRotorController->setParams({.p = p, .i = i, .d = d});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PidSettings FlightController::pidSettings() const {
|
||||||
|
PidSettings settings{};
|
||||||
|
settings.flightController = {.p = _heightController->Kp, .i = _heightController->Ki, .d = _heightController->Kd};
|
||||||
|
settings.yawController = {.p = _yawController->Kp, .i = _yawController->Ki, .d = _yawController->Kd};
|
||||||
|
settings.pitchController = {
|
||||||
|
.p = _tailRotorController->Kp, .i = _tailRotorController->Ki, .d = _tailRotorController->Kd
|
||||||
|
};
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void FlightController::_initPidControllers() {
|
||||||
|
_tailRotorController->setpoint = 180.f;
|
||||||
|
_heightController->setLimits(0, _rotor1->maxDuty());
|
||||||
|
}
|
||||||
110
src/Logic/FlightController.hpp
Executable file
110
src/Logic/FlightController.hpp
Executable file
@@ -0,0 +1,110 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "PIDController.hpp"
|
||||||
|
#include "Sensors/Sensors.hpp"
|
||||||
|
|
||||||
|
enum DeviceStatus {
|
||||||
|
Idle = 0,
|
||||||
|
IsPreparingForTakeoff,
|
||||||
|
IsFlying,
|
||||||
|
IsBoarding,
|
||||||
|
IsImuCalibration,
|
||||||
|
ChargeRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ReportedDeviceState {
|
||||||
|
int batteryCharge;
|
||||||
|
float flightHeight;
|
||||||
|
DeviceStatus status;
|
||||||
|
MpuData mpuState;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FlightParams {
|
||||||
|
float height; // [cm]
|
||||||
|
float yaw; // [degrees]
|
||||||
|
float pitch; // [degrees]
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PidSettings {
|
||||||
|
PidParams flightController;
|
||||||
|
PidParams yawController;
|
||||||
|
PidParams pitchController;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FlightController {
|
||||||
|
public:
|
||||||
|
FlightController(Sensors *sensors, SavedPidRegulator *heightController, SavedPidRegulator *yawController,
|
||||||
|
BrushedMotor *_rotor1, BrushedMotor *_rotor2,
|
||||||
|
PIDController *tailRotor, bool unlimitedBattery);
|
||||||
|
|
||||||
|
~FlightController();
|
||||||
|
|
||||||
|
[[nodiscard]] ReportedDeviceState currentDeviceState() const;
|
||||||
|
|
||||||
|
void startTakeoff();
|
||||||
|
|
||||||
|
void startBoarding();
|
||||||
|
|
||||||
|
void startImuCalibration();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
|
||||||
|
[[deprecated]] void moveToFlightHeight(float newFlightHeight); //[cm]
|
||||||
|
[[deprecated]] void newFlightHeightStickPosition(int16_t newFlightHeightStickPostition);
|
||||||
|
|
||||||
|
[[deprecated]] void newYawStickPosition(int16_t newYawStickPostition);
|
||||||
|
|
||||||
|
[[deprecated]] void newPitchStickPosition(int16_t newPitchStickPostition);
|
||||||
|
|
||||||
|
void setRotor1Duty(int16_t rotor1Duty);
|
||||||
|
|
||||||
|
void setRotor2Duty(int16_t rotor2Duty);
|
||||||
|
|
||||||
|
void setRotor3Duty(int16_t rotor3Duty);
|
||||||
|
|
||||||
|
void stopAllRotors();
|
||||||
|
|
||||||
|
void setHeightControllerParams(float p, float i, float d);
|
||||||
|
|
||||||
|
void setYawControllerParams(float p, float i, float d);
|
||||||
|
|
||||||
|
void setPitchControllerParams(float p, float i, float d);
|
||||||
|
|
||||||
|
[[nodiscard]] PidSettings pidSettings() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _checkBatteryCharge();
|
||||||
|
|
||||||
|
void _initPidControllers();
|
||||||
|
|
||||||
|
void _updateSetpoints();
|
||||||
|
|
||||||
|
void _updatePidControllers();
|
||||||
|
|
||||||
|
void _takeoff();
|
||||||
|
|
||||||
|
void _boarding();
|
||||||
|
|
||||||
|
Sensors *_sensors = nullptr;
|
||||||
|
SavedPidRegulator *_heightController = nullptr;
|
||||||
|
SavedPidRegulator *_yawController = nullptr;
|
||||||
|
PIDController *_tailRotorController = nullptr;
|
||||||
|
BrushedMotor *_rotor1 = nullptr;
|
||||||
|
BrushedMotor *_rotor2 = nullptr;
|
||||||
|
DeviceStatus _status;
|
||||||
|
//uint32_t _flightTimer;
|
||||||
|
//float _verticalVelocityOffset = 0.f; // [cm/10 ms]
|
||||||
|
//float _pitchVelocityOffset = 0.f; // [degrees/10 ms]
|
||||||
|
|
||||||
|
static constexpr const char *_tag = "FlightController";
|
||||||
|
static constexpr uint8_t _batteryCriticalCharge = 15; // [%]
|
||||||
|
static constexpr float _defaultFlightHeight = 55.f; // [cm]
|
||||||
|
static constexpr float _defaultHorizontAngle = 180.f; // [degrees]
|
||||||
|
static constexpr float _boarding_speed = 0.1; // [cm/10 ms]
|
||||||
|
static constexpr float _defaultStopMotorHeight = 15; // [cm]
|
||||||
|
|
||||||
|
|
||||||
|
bool _unlimitedBattery = false; // for debug purposes
|
||||||
|
};
|
||||||
189
src/Logic/FlightDispatcher.cpp
Executable file
189
src/Logic/FlightDispatcher.cpp
Executable file
@@ -0,0 +1,189 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "FlightDispatcher.hpp"
|
||||||
|
|
||||||
|
FlightDispatcher::FlightDispatcher(BluetoothDispatcher *bluetoothDispatcher,
|
||||||
|
FlightController *flightController, volatile bool loop_on_fail) {
|
||||||
|
assert(bluetoothDispatcher != nullptr);
|
||||||
|
assert(flightController != nullptr);
|
||||||
|
|
||||||
|
_bluetoothDispatcher = bluetoothDispatcher;
|
||||||
|
_flightController = flightController;
|
||||||
|
|
||||||
|
bluetoothDispatcher->onNewDeviceConnected([this](BTAddress device) {
|
||||||
|
this->_onNewDeviceConnected(device);
|
||||||
|
});
|
||||||
|
bluetoothDispatcher->onNewPackageReceived([this](char *package) {
|
||||||
|
this->_onNewMessageReceived(package);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (_bluetoothDispatcher->initialize()) {
|
||||||
|
ESP_LOGI(_tag, "Bluetooth initialized successfully.");
|
||||||
|
} else {
|
||||||
|
ESP_LOGE(_tag, "Failed to initialize Bluetooth dispatcher!");
|
||||||
|
while (loop_on_fail);
|
||||||
|
}
|
||||||
|
_telemetryTimer = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
FlightDispatcher::~FlightDispatcher() {
|
||||||
|
delete _bluetoothDispatcher;
|
||||||
|
delete _flightController;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::tick() {
|
||||||
|
_flightController->tick();
|
||||||
|
_bluetoothDispatcher->tick();
|
||||||
|
if (millis() - _telemetryTimer >= _telemetryTimeIntervalMS) {
|
||||||
|
_sendTelemetry();
|
||||||
|
_telemetryTimer = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::_onNewDeviceConnected(BTAddress device) {
|
||||||
|
_sendTelemetry();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::_onNewMessageReceived(char *package) {
|
||||||
|
using sutil::SH;
|
||||||
|
ESP_LOGD(_tag, "Received new package: %s", package);
|
||||||
|
gson::Doc pkg;
|
||||||
|
if (!pkg.parse(package, _jsonMaxDepth)) {
|
||||||
|
ESP_LOGE(_tag, "Parcing error occured with new package (error %s, place %d): %s",
|
||||||
|
pkg.readError(), pkg.errorIndex(), package);
|
||||||
|
} else {
|
||||||
|
pkg.hashKeys();
|
||||||
|
for (int keyIndex = 0; keyIndex < pkg.length(); ++keyIndex) {
|
||||||
|
auto pair = pkg[pkg.keyHash(keyIndex)];
|
||||||
|
auto value = pair.value();
|
||||||
|
|
||||||
|
if (!pair.valid()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (pkg.keyHash(keyIndex)) {
|
||||||
|
case SH("status"):
|
||||||
|
_changeStatus((DeviceStatus) value.toInt32());
|
||||||
|
break;
|
||||||
|
case SH("flightHeight"):
|
||||||
|
_flightController->moveToFlightHeight(value.toFloat());
|
||||||
|
break;
|
||||||
|
case SH("hS"):
|
||||||
|
_flightController->newFlightHeightStickPosition(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("yS"):
|
||||||
|
_flightController->newYawStickPosition(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("pS"):
|
||||||
|
_flightController->newPitchStickPosition(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("r1"):
|
||||||
|
_flightController->setRotor1Duty(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("r2"):
|
||||||
|
_flightController->setRotor2Duty(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("r3"):
|
||||||
|
_flightController->setRotor3Duty(value.toInt16());
|
||||||
|
break;
|
||||||
|
case SH("stop"):
|
||||||
|
_flightController->stopAllRotors();
|
||||||
|
break;
|
||||||
|
case SH("p1"):
|
||||||
|
if (pair.type() == gson::Type::Object and pair.includes(SH("p"))
|
||||||
|
and pair.includes(SH("i")) and pair.includes(SH("d"))) {
|
||||||
|
_flightController->setHeightControllerParams(
|
||||||
|
pair[SH("p")].toFloat(), pair[SH("i")].toFloat(), pair[SH("d")].toFloat());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SH("p2"):
|
||||||
|
if (pair.type() == gson::Type::Object and pair.includes(SH("p"))
|
||||||
|
and pair.includes(SH("i")) and pair.includes(SH("d"))) {
|
||||||
|
_flightController->setPitchControllerParams(
|
||||||
|
pair[SH("p")].toFloat(), pair[SH("i")].toFloat(), pair[SH("d")].toFloat());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SH("p3"):
|
||||||
|
if (pair.type() == gson::Type::Object and pair.includes(SH("p"))
|
||||||
|
and pair.includes(SH("i")) and pair.includes(SH("d"))) {
|
||||||
|
_flightController->setYawControllerParams(
|
||||||
|
pair[SH("p")].toFloat(), pair[SH("i")].toFloat(), pair[SH("d")].toFloat());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SH("pidSettingOpened"):
|
||||||
|
_pidSettingsOpened();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::_changeStatus(const DeviceStatus &newStatus) {
|
||||||
|
switch (newStatus) {
|
||||||
|
case DeviceStatus::IsImuCalibration:
|
||||||
|
_flightController->startImuCalibration();
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsFlying:
|
||||||
|
_flightController->startTakeoff();
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsPreparingForTakeoff:
|
||||||
|
_flightController->startTakeoff();
|
||||||
|
break;
|
||||||
|
case DeviceStatus::IsBoarding:
|
||||||
|
_flightController->startBoarding();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::_pidSettingsOpened() {
|
||||||
|
auto settings = _flightController->pidSettings();
|
||||||
|
gson::string pkg;
|
||||||
|
pkg.beginObj();
|
||||||
|
|
||||||
|
pkg.beginObj("p1");
|
||||||
|
pkg.addFloat("p", settings.flightController.p, 5);
|
||||||
|
pkg.addFloat("i", settings.flightController.i, 5);
|
||||||
|
pkg.addFloat("d", settings.flightController.d, 5);
|
||||||
|
pkg.endObj();
|
||||||
|
|
||||||
|
pkg.beginObj("p2");
|
||||||
|
pkg.addFloat("p", settings.pitchController.p, 5);
|
||||||
|
pkg.addFloat("i", settings.pitchController.i, 5);
|
||||||
|
pkg.addFloat("d", settings.pitchController.d, 5);
|
||||||
|
pkg.endObj();
|
||||||
|
|
||||||
|
pkg.beginObj("p3");
|
||||||
|
pkg.addFloat("p", settings.yawController.p, 5);
|
||||||
|
pkg.addFloat("i", settings.yawController.i, 5);
|
||||||
|
pkg.addFloat("d", settings.yawController.d, 5);
|
||||||
|
pkg.endObj();
|
||||||
|
|
||||||
|
pkg.endObj();
|
||||||
|
pkg.end();
|
||||||
|
pkg.s = String(MessageType::PidSettings) + ";" + pkg.s;
|
||||||
|
_bluetoothDispatcher->sendPackage(pkg.s.c_str());
|
||||||
|
ESP_LOGI(_tag, "PID settings sended %s", pkg.s.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlightDispatcher::_sendTelemetry() {
|
||||||
|
/* Notify mobile client about device state */
|
||||||
|
auto state = _flightController->currentDeviceState();
|
||||||
|
gson::string package;
|
||||||
|
package.beginObj();
|
||||||
|
package["charge"] = state.batteryCharge;
|
||||||
|
package["flightHeight"] = state.flightHeight;
|
||||||
|
package["status"] = state.status;
|
||||||
|
package["y"] = state.mpuState.yaw;
|
||||||
|
package["p"] = state.mpuState.pitch;
|
||||||
|
package["r"] = state.mpuState.roll;
|
||||||
|
package["zIn"] = state.mpuState.zInertial;
|
||||||
|
package.endObj();
|
||||||
|
package.end();
|
||||||
|
package.s = String(MessageType::UpdatePackage) + ";" + package.s;
|
||||||
|
_bluetoothDispatcher->sendPackage(package.s.c_str());
|
||||||
|
}
|
||||||
47
src/Logic/FlightDispatcher.hpp
Executable file
47
src/Logic/FlightDispatcher.hpp
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "FlightController.hpp"
|
||||||
|
#include "GSON.h"
|
||||||
|
#include "RF/BluetoothDispatcher.hpp"
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
// Message type annotation for mobile app
|
||||||
|
enum MessageType {
|
||||||
|
UpdatePackage = 0, PidSettings
|
||||||
|
};
|
||||||
|
|
||||||
|
class FlightDispatcher {
|
||||||
|
/* Deserialize state and update it in FlightController. */
|
||||||
|
public:
|
||||||
|
FlightDispatcher(BluetoothDispatcher *bluetoothDispatcher,
|
||||||
|
FlightController *flightController, volatile bool loop_on_fail = true);
|
||||||
|
|
||||||
|
~FlightDispatcher();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/* Telemetry flow */
|
||||||
|
void _sendTelemetry();
|
||||||
|
|
||||||
|
/* Events handlers */
|
||||||
|
void _onNewDeviceConnected(BTAddress device);
|
||||||
|
|
||||||
|
void _onNewMessageReceived(char *package);
|
||||||
|
|
||||||
|
/* Requests handlers */
|
||||||
|
void _changeStatus(const DeviceStatus &newStatus);
|
||||||
|
|
||||||
|
void _pidSettingsOpened();
|
||||||
|
|
||||||
|
/* Compile time settings */
|
||||||
|
static constexpr const char *_tag = "FlightDispatcher";
|
||||||
|
static constexpr const int _telemetryTimeIntervalMS = 200;
|
||||||
|
static constexpr const uint8_t _jsonMaxDepth = 5;
|
||||||
|
|
||||||
|
uint32_t _telemetryTimer = millis();
|
||||||
|
BluetoothDispatcher *_bluetoothDispatcher;
|
||||||
|
FlightController *_flightController;
|
||||||
|
};
|
||||||
55
src/Logic/PIDController.hpp
Executable file
55
src/Logic/PIDController.hpp
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Motor/BrushedMotor.hpp"
|
||||||
|
#include "SavedPidRegulator.hpp"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
|
||||||
|
class PIDController : public SavedPidRegulator {
|
||||||
|
public:
|
||||||
|
PIDController(float p, float i, float d, BrushedMotor *rotor,
|
||||||
|
const char *name = "PID", uint16_t dt = 10, const bool isEnabled = false)
|
||||||
|
: SavedPidRegulator(p, i, d, name, dt) {
|
||||||
|
assert(rotor != nullptr);
|
||||||
|
_rotor = rotor;
|
||||||
|
_isEnabled = isEnabled;
|
||||||
|
setLimits(-_rotor->maxDuty(), _rotor->maxDuty());
|
||||||
|
setDirection(REVERSE);
|
||||||
|
_pid_timer = millis();
|
||||||
|
ESP_LOGI(_tag, "PID %s initialized with params (%f, %f, %f)", name, Kp, Ki, Kd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void enable() {
|
||||||
|
_isEnabled = true;
|
||||||
|
_rotor->setDuty(0);
|
||||||
|
integral = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void disable() {
|
||||||
|
_isEnabled = false;
|
||||||
|
_rotor->setDuty(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void update() {
|
||||||
|
if (_isEnabled) {
|
||||||
|
//ESP_LOGI(_tag, "Setpoint: %f", setpoint);
|
||||||
|
//ESP_LOGI(_tag, "Input: %f", input);
|
||||||
|
//ESP_LOGI(_tag, "Output: %d", (int16_t) round(getResultNow()));
|
||||||
|
setRotorDuty((int16_t) round(getResultNow()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setRotorDuty(int16_t duty) {
|
||||||
|
/* Used only for test purposes */
|
||||||
|
_rotor->setExtendedDuty(duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
//uint16_t _dt;
|
||||||
|
BrushedMotor *_rotor = nullptr;
|
||||||
|
uint32_t _pid_timer = 0;
|
||||||
|
bool _isEnabled = false;
|
||||||
|
};
|
||||||
73
src/Logic/SavedPidRegulator.hpp
Executable file
73
src/Logic/SavedPidRegulator.hpp
Executable file
@@ -0,0 +1,73 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "GyverPID.h"
|
||||||
|
#include "Preferences.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
struct PidParams {
|
||||||
|
float p;
|
||||||
|
float i;
|
||||||
|
float d;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SavedPidRegulator : public GyverPID {
|
||||||
|
public:
|
||||||
|
SavedPidRegulator(float p, float i, float d, const char *name = "saved_pid", const uint16_t dt = 10)
|
||||||
|
: GyverPID(p, i, d, static_cast<int16_t>(dt)) {
|
||||||
|
_name = name;
|
||||||
|
_preferences.begin(name);
|
||||||
|
_pDefault = p;
|
||||||
|
_iDefault = i;
|
||||||
|
_dDefault = d;
|
||||||
|
_loadPreferences();
|
||||||
|
ESP_LOGI(_tag, "PID %s initialized with params (%f, %f, %f)", _name.c_str(), Kp, Ki, Kd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setParams(PidParams params) {
|
||||||
|
this->Kp = params.p;
|
||||||
|
this->Ki = params.i;
|
||||||
|
this->Kd = params.d;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
PidParams getParams() {
|
||||||
|
PidParams params{};
|
||||||
|
params.p = Kp;
|
||||||
|
params.i = Ki;
|
||||||
|
params.d = Kd;
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetToDefault() {
|
||||||
|
this->Kp = _pDefault;
|
||||||
|
this->Ki = _iDefault;
|
||||||
|
this->Kd = _dDefault;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
void save() {
|
||||||
|
_preferences.putFloat("p", Kp);
|
||||||
|
_preferences.putFloat("i", Ki);
|
||||||
|
_preferences.putFloat("d", Kd);
|
||||||
|
ESP_LOGI(_tag, "PID %s saved with params (%f, %f, %f)", _name.c_str(), Kp, Ki, Kd);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static constexpr const char *_tag = "PIDController";
|
||||||
|
|
||||||
|
private:
|
||||||
|
float _pDefault = 0.f;
|
||||||
|
float _iDefault = 0.f;
|
||||||
|
float _dDefault = 0.f;
|
||||||
|
|
||||||
|
String _name = "PID";
|
||||||
|
Preferences _preferences;
|
||||||
|
|
||||||
|
void _loadPreferences() {
|
||||||
|
if (_preferences.isKey("p") and _preferences.isKey("i") and _preferences.isKey("d")) {
|
||||||
|
Kp = _preferences.getFloat("p", _pDefault);
|
||||||
|
Ki = _preferences.getFloat("i", _iDefault);
|
||||||
|
Kd = _preferences.getFloat("d", _dDefault);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
77
src/Motor/BrushedMotor.cpp
Executable file
77
src/Motor/BrushedMotor.cpp
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "BrushedMotor.hpp"
|
||||||
|
|
||||||
|
BrushedMotor::BrushedMotor(uint32_t pwmAGpioNum, uint32_t pwmBGpioNum, uint32_t frequency,
|
||||||
|
uint8_t channel, uint8_t resolution, const char *name, bool forward_directional) {
|
||||||
|
_resolution = resolution;
|
||||||
|
_pwmAGpioNum = pwmAGpioNum;
|
||||||
|
_pwmBGpioNum = pwmBGpioNum;
|
||||||
|
_channel = channel;
|
||||||
|
_frequency = frequency;
|
||||||
|
_forward_directional = forward_directional;
|
||||||
|
_tag_name = name;
|
||||||
|
pinMode(_pwmAGpioNum, OUTPUT);
|
||||||
|
pinMode(_pwmBGpioNum, OUTPUT);
|
||||||
|
ledcAttachPin(_pwmAGpioNum, _channel);
|
||||||
|
ledcSetup(_channel, _frequency, _resolution);
|
||||||
|
coast();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::setDuty(uint32_t duty) const {
|
||||||
|
ledcWrite(_channel, duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::decrement(uint32_t k) const {
|
||||||
|
ledcWrite(_channel, ledcRead(_channel) - k);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::setExtendedDuty(int32_t duty) {
|
||||||
|
if (duty > 0) {
|
||||||
|
forward();
|
||||||
|
} else if (duty < 0) {
|
||||||
|
backward();
|
||||||
|
}
|
||||||
|
setDuty(abs(duty));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t BrushedMotor::maxDuty() const {
|
||||||
|
return pow(2, _resolution) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::_apply_directional() const {
|
||||||
|
auto current_duty = ledcRead(_channel);
|
||||||
|
if (_forward_directional) {
|
||||||
|
ledcDetachPin(_pwmBGpioNum);
|
||||||
|
ledcAttachPin(_pwmAGpioNum, _channel);
|
||||||
|
} else {
|
||||||
|
ledcDetachPin(_pwmAGpioNum);
|
||||||
|
ledcAttachPin(_pwmBGpioNum, _channel);
|
||||||
|
}
|
||||||
|
setDuty(current_duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::forward() {
|
||||||
|
if (_forward_directional)
|
||||||
|
return;
|
||||||
|
ESP_LOGI(_tag_name.c_str(), "Moving forward");
|
||||||
|
_forward_directional = true;
|
||||||
|
_apply_directional();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::backward() {
|
||||||
|
if (!_forward_directional)
|
||||||
|
return;
|
||||||
|
_forward_directional = false;
|
||||||
|
_apply_directional();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::reverse() {
|
||||||
|
_forward_directional = !_forward_directional;
|
||||||
|
_apply_directional();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrushedMotor::coast() const {
|
||||||
|
setDuty(0);
|
||||||
|
}
|
||||||
43
src/Motor/BrushedMotor.hpp
Executable file
43
src/Motor/BrushedMotor.hpp
Executable file
@@ -0,0 +1,43 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include "Arduino.h"
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
class BrushedMotor {
|
||||||
|
// TODO: rewrite with MCPWM
|
||||||
|
public:
|
||||||
|
BrushedMotor(uint32_t pwmAGpioNum, uint32_t pwmBGpioNum, uint32_t frequency,
|
||||||
|
uint8_t channel, uint8_t resolution, const char *name = "Rotor1", bool forward_directional = true);
|
||||||
|
|
||||||
|
void setDuty(uint32_t duty) const;
|
||||||
|
|
||||||
|
void setExtendedDuty(int32_t duty);
|
||||||
|
|
||||||
|
[[nodiscard]] uint32_t maxDuty() const;
|
||||||
|
|
||||||
|
void forward();
|
||||||
|
|
||||||
|
void backward();
|
||||||
|
|
||||||
|
void reverse();
|
||||||
|
|
||||||
|
void coast() const;
|
||||||
|
|
||||||
|
void decrement(uint32_t k) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint8_t _channel;
|
||||||
|
uint32_t _frequency;
|
||||||
|
uint32_t _resolution;
|
||||||
|
|
||||||
|
uint32_t _pwmAGpioNum;
|
||||||
|
uint32_t _pwmBGpioNum;
|
||||||
|
bool _forward_directional;
|
||||||
|
String _tag_name = "BrushedMotor";
|
||||||
|
|
||||||
|
void _apply_directional() const;
|
||||||
|
};
|
||||||
107
src/RF/BluetoothDispatcher.cpp
Executable file
107
src/RF/BluetoothDispatcher.cpp
Executable file
@@ -0,0 +1,107 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "BluetoothDispatcher.hpp"
|
||||||
|
|
||||||
|
static DeviceConnectedCb deviceConnectedCallback = nullptr;
|
||||||
|
|
||||||
|
static void deviceConnectedStaticCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param);
|
||||||
|
|
||||||
|
BluetoothDispatcher::BluetoothDispatcher(BluetoothSerial *controller, const char *device_name) {
|
||||||
|
assert(controller != nullptr);
|
||||||
|
assert(device_name != nullptr);
|
||||||
|
|
||||||
|
_device_name = device_name;
|
||||||
|
_controller = controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BluetoothDispatcher::initialize(int readTimeoutMS) {
|
||||||
|
bool success = _controller->begin(_device_name, false);
|
||||||
|
_controller->enableSSP();
|
||||||
|
_controller->onConfirmRequest([this](uint16_t pin) {
|
||||||
|
_onConfirmRequest(pin);
|
||||||
|
});
|
||||||
|
_controller->onAuthComplete([this](boolean success) {
|
||||||
|
_onAuthComplete(success);
|
||||||
|
});
|
||||||
|
_controller->register_callback(deviceConnectedStaticCallback);
|
||||||
|
deviceConnectedCallback = [this](BTAddress device) {
|
||||||
|
_onDeviceConnected(device);
|
||||||
|
};
|
||||||
|
//_controller->setTimeout(readTimeoutMS);
|
||||||
|
if (!success) {
|
||||||
|
ESP_LOGI(_tag, "Failed to initialize Bluetooth controller!");
|
||||||
|
assert(false);
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(_tag, "Bluetooth host initialized");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::onNewPackageReceived(NewPackageCallback newPackageReceivedCb) {
|
||||||
|
_newPackageReceivedCb = std::move(newPackageReceivedCb);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::tick(const char message_delimeter) {
|
||||||
|
/* Call the callback, if new package received */
|
||||||
|
/* Warning! Logging below can cause errors and freezes */
|
||||||
|
while (_controller->available()) {
|
||||||
|
int c = _controller->read();
|
||||||
|
if (c == -1) {
|
||||||
|
_buffer.clear();
|
||||||
|
} else if (c == message_delimeter) {
|
||||||
|
if (_newPackageReceivedCb) {
|
||||||
|
_newPackageReceivedCb(_buffer.buf);
|
||||||
|
}
|
||||||
|
_buffer.clear();
|
||||||
|
} else {
|
||||||
|
_buffer += (char) c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BluetoothDispatcher::~BluetoothDispatcher() {
|
||||||
|
_controller->end();
|
||||||
|
delete _controller;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::_onConfirmRequest(uint16_t pin) {
|
||||||
|
ESP_LOGI(_tag, "The Bluetooth PIN is: %06lu", (long unsigned int) pin);
|
||||||
|
_controller->confirmReply(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::_onAuthComplete(boolean success) const {
|
||||||
|
if (success) {
|
||||||
|
ESP_LOGI(_tag, "Pairing success!");
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(_tag, "Pairing failed, rejected by user!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::_onDeviceConnected(BTAddress device) {
|
||||||
|
ESP_LOGI(_tag, "New device connected: %s", device.toString(true).c_str());
|
||||||
|
_buffer.clear();
|
||||||
|
_controller->flush();
|
||||||
|
if (_deviceConnectedCallback) {
|
||||||
|
_deviceConnectedCallback(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::onNewDeviceConnected(DeviceConnectedCb deviceConnectedCb) {
|
||||||
|
/* Callback called if device connected successfully. */
|
||||||
|
_deviceConnectedCallback = std::move(deviceConnectedCb);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BluetoothDispatcher::sendPackage(const char *package) {
|
||||||
|
if (!_controller->hasClient())
|
||||||
|
return;
|
||||||
|
_controller->println(package);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void deviceConnectedStaticCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
|
||||||
|
if (event == ESP_SPP_SRV_OPEN_EVT and param->srv_open.status == ESP_SPP_SUCCESS
|
||||||
|
and deviceConnectedCallback) {
|
||||||
|
deviceConnectedCallback(BTAddress(param->srv_open.rem_bda));
|
||||||
|
}
|
||||||
|
}
|
||||||
62
src/RF/BluetoothDispatcher.hpp
Executable file
62
src/RF/BluetoothDispatcher.hpp
Executable file
@@ -0,0 +1,62 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define TX_QUEUE_SIZE 512
|
||||||
|
|
||||||
|
#include "BluetoothSerial.h"
|
||||||
|
#include "HardwareSerial.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "mString.h"
|
||||||
|
|
||||||
|
/* Check the ESP configuration */
|
||||||
|
#if not defined(CONFIG_BT_ENABLED) || not defined(CONFIG_BLUEDROID_ENABLED)
|
||||||
|
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if not defined(CONFIG_BT_SPP_ENABLED)
|
||||||
|
#error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if not defined(CONFIG_BT_SSP_ENABLED)
|
||||||
|
#error Simple Secure Pairing for Bluetooth is not available or not enabled.
|
||||||
|
#endif
|
||||||
|
/* ************************* */
|
||||||
|
|
||||||
|
typedef std::function<void(BTAddress device)> DeviceConnectedCb;
|
||||||
|
typedef std::function<void(char *package)> NewPackageCallback;
|
||||||
|
|
||||||
|
class BluetoothDispatcher {
|
||||||
|
public:
|
||||||
|
BluetoothDispatcher(BluetoothSerial *controller, const char *device_name = "Helicopter");
|
||||||
|
|
||||||
|
bool initialize(int readTimeoutMS = 10);
|
||||||
|
|
||||||
|
void tick(const char message_delimeter = '\n');
|
||||||
|
|
||||||
|
void onNewPackageReceived(NewPackageCallback newPackageReceivedCb);
|
||||||
|
|
||||||
|
void onNewDeviceConnected(DeviceConnectedCb deviceConnectedCb);
|
||||||
|
|
||||||
|
void sendPackage(const char *package);
|
||||||
|
|
||||||
|
~BluetoothDispatcher();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void _onConfirmRequest(uint16_t pin);
|
||||||
|
|
||||||
|
void _onAuthComplete(boolean success) const;
|
||||||
|
|
||||||
|
void _onDeviceConnected(BTAddress device);
|
||||||
|
|
||||||
|
const char *_device_name = nullptr;
|
||||||
|
BluetoothSerial *_controller = nullptr;
|
||||||
|
DeviceConnectedCb _deviceConnectedCallback = nullptr;
|
||||||
|
NewPackageCallback _newPackageReceivedCb = nullptr;
|
||||||
|
constexpr static const char *_tag = "BluetoothDispatcher";
|
||||||
|
|
||||||
|
static constexpr uint16_t _buffer_size = 512;
|
||||||
|
mString<_buffer_size> _buffer;
|
||||||
|
};
|
||||||
82
src/Sensors/Barometer.hpp
Normal file
82
src/Sensors/Barometer.hpp
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "GyverBME280.h"
|
||||||
|
|
||||||
|
typedef std::function<void()> OnMeasuringFinishedCb;
|
||||||
|
|
||||||
|
class Barometer {
|
||||||
|
public:
|
||||||
|
explicit Barometer(GyverBME280 *bme) {
|
||||||
|
assert(bme != nullptr);
|
||||||
|
_bme = bme;
|
||||||
|
}
|
||||||
|
|
||||||
|
~Barometer() {
|
||||||
|
delete this->_bme;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool initialize(void) {
|
||||||
|
_bme->setMode(NORMAL_MODE);
|
||||||
|
_bme->setFilter(FILTER_COEF_16);
|
||||||
|
_bme->setTempOversampling(OVERSAMPLING_2);
|
||||||
|
_bme->setPressOversampling(OVERSAMPLING_16);
|
||||||
|
_bme->setStandbyTime(STANDBY_500US);
|
||||||
|
return _bme->begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void measureBaseAltitudeSync(void) {
|
||||||
|
for (int i = 0; i < _calibrationIterationsCount; ++i) {
|
||||||
|
_startedAltitude += altitude();
|
||||||
|
delay(_calibrationIterationDelay);
|
||||||
|
}
|
||||||
|
_startedAltitude /= _calibrationIterationsCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void measureBaseAltitudeAsync(void) {
|
||||||
|
_calibrationIterationsCounter = 0;
|
||||||
|
_calibrationTimer = millis();
|
||||||
|
_isCalibration = true;
|
||||||
|
_startedAltitude = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float altitude() /* [cm] */ {
|
||||||
|
return pressureToAltitude(_bme->readPressure()) * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
float flightHeight() /* [cm] */ {
|
||||||
|
if (_isCalibration)
|
||||||
|
return 0.f;
|
||||||
|
return round(altitude() - _startedAltitude);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onMeasuaringHeightFinished(OnMeasuringFinishedCb callback) {
|
||||||
|
_measuaringHeightFinishedCb = std::move(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tick() {
|
||||||
|
if (_isCalibration) {
|
||||||
|
if (millis() - _calibrationTimer >= _calibrationIterationDelay) {
|
||||||
|
_startedAltitude += altitude();
|
||||||
|
}
|
||||||
|
if (++_calibrationIterationsCounter >= _calibrationIterationsCount) {
|
||||||
|
_startedAltitude /= _calibrationIterationsCount;
|
||||||
|
_isCalibration = false;
|
||||||
|
if (_measuaringHeightFinishedCb) {
|
||||||
|
_measuaringHeightFinishedCb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
GyverBME280 *_bme;
|
||||||
|
float _startedAltitude = 0.f;
|
||||||
|
bool _isCalibration = false;
|
||||||
|
uint32_t _calibrationTimer = 0;
|
||||||
|
int _calibrationIterationsCounter = 0;
|
||||||
|
OnMeasuringFinishedCb _measuaringHeightFinishedCb = nullptr;
|
||||||
|
static constexpr int _calibrationIterationsCount = 800;
|
||||||
|
static constexpr int _calibrationIterationDelay = 1; // [ms]
|
||||||
|
};
|
||||||
81
src/Sensors/BarometerBMP280.hpp
Executable file
81
src/Sensors/BarometerBMP280.hpp
Executable file
@@ -0,0 +1,81 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "GyverBME280.h"
|
||||||
|
|
||||||
|
typedef std::function<void()> OnMeasuringFinishedCb;
|
||||||
|
|
||||||
|
class Barometer {
|
||||||
|
public:
|
||||||
|
Barometer(GyverBME280 *bme) {
|
||||||
|
_bme = bme;
|
||||||
|
};
|
||||||
|
|
||||||
|
~Barometer() {
|
||||||
|
delete this->_bme;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool initialize(void) {
|
||||||
|
_bme->setMode(NORMAL_MODE);
|
||||||
|
_bme->setFilter(FILTER_COEF_16);
|
||||||
|
_bme->setTempOversampling(OVERSAMPLING_2);
|
||||||
|
_bme->setPressOversampling(OVERSAMPLING_16);
|
||||||
|
_bme->setStandbyTime(STANDBY_500US);
|
||||||
|
return _bme->begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void measureBaseAltitudeSync(void) {
|
||||||
|
for (int i = 0; i < _calibrationIterationsCount; ++i) {
|
||||||
|
_startedAltitude += altitude();
|
||||||
|
delay(_calibrationIterationDelay);
|
||||||
|
}
|
||||||
|
_startedAltitude /= _calibrationIterationsCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void measureBaseAltitudeAsync(void) {
|
||||||
|
_calibrationIterationsCounter = 0;
|
||||||
|
_calibrationTimer = millis();
|
||||||
|
_isCalibration = true;
|
||||||
|
_startedAltitude = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float altitude() /* [cm] */ {
|
||||||
|
return pressureToAltitude(_bme->readPressure()) * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
float flightHeight() /* [cm] */ {
|
||||||
|
if (_isCalibration)
|
||||||
|
return 0.f;
|
||||||
|
else return round(altitude() - _startedAltitude);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onMeasuaringHeightFinished(OnMeasuringFinishedCb callback) {
|
||||||
|
_measuaringHeightFinishedCb = std::move(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tick() {
|
||||||
|
if (_isCalibration) {
|
||||||
|
if (millis() - _calibrationTimer >= _calibrationIterationDelay) {
|
||||||
|
_startedAltitude += altitude();
|
||||||
|
}
|
||||||
|
if (++_calibrationIterationsCounter >= _calibrationIterationsCount) {
|
||||||
|
_startedAltitude /= _calibrationIterationsCount;
|
||||||
|
_isCalibration = false;
|
||||||
|
if (_measuaringHeightFinishedCb) {
|
||||||
|
_measuaringHeightFinishedCb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
GyverBME280 *_bme;
|
||||||
|
float _startedAltitude = 0.f;
|
||||||
|
bool _isCalibration = false;
|
||||||
|
uint32_t _calibrationTimer = 0;
|
||||||
|
int _calibrationIterationsCounter = 0;
|
||||||
|
OnMeasuringFinishedCb _measuaringHeightFinishedCb = nullptr;
|
||||||
|
static constexpr int _calibrationIterationsCount = 800;
|
||||||
|
static constexpr int _calibrationIterationDelay = 1; // [ms]
|
||||||
|
};
|
||||||
40
src/Sensors/BatteryController.hpp
Executable file
40
src/Sensors/BatteryController.hpp
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "board_pins.h"
|
||||||
|
|
||||||
|
|
||||||
|
class BatteryController {
|
||||||
|
public:
|
||||||
|
BatteryController(const uint16_t batteryPin, const uint16_t battery_data_switch_pin) {
|
||||||
|
_battery_pin = batteryPin;
|
||||||
|
_battery_data_switch_pin = battery_data_switch_pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initialize() const {
|
||||||
|
pinMode(_battery_data_switch_pin, OUTPUT);
|
||||||
|
digitalWrite(_battery_data_switch_pin, HIGH);
|
||||||
|
analogReadResolution(12);
|
||||||
|
analogSetWidth(12);
|
||||||
|
adcAttachPin(_battery_pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
int percent(const float minVoltage = 7.2f, const float maxVoltage = 8.4f,
|
||||||
|
const float r1 = 3.f, const float r2 = 2.f, const float k = 2.85f) {
|
||||||
|
// It's magic. I will return and refactor it.
|
||||||
|
float pinVoltage = analogReadMilliVolts(_battery_pin) / 1000.f;
|
||||||
|
// k = (r1 + r2) / r2
|
||||||
|
float batteryVoltage = pinVoltage * k;
|
||||||
|
return constrain(_map(batteryVoltage, minVoltage, maxVoltage, 0, 100), 0, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint16_t _battery_pin;
|
||||||
|
uint16_t _battery_data_switch_pin;
|
||||||
|
static constexpr const char *_tag = "BatteryController";
|
||||||
|
|
||||||
|
static float _map(float x, float in_min, float in_max, float out_min, float out_max) {
|
||||||
|
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||||
|
}
|
||||||
|
};
|
||||||
274
src/Sensors/MPU.hpp
Executable file
274
src/Sensors/MPU.hpp
Executable file
@@ -0,0 +1,274 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "MPU6050_6Axis_MotionApps20.h"
|
||||||
|
#include "Preferences.h"
|
||||||
|
#include "board_pins.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
static volatile bool _isDMPDataReady = false;
|
||||||
|
|
||||||
|
static void IRAM_ATTR _dmpInterruption() {
|
||||||
|
_isDMPDataReady = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef std::function<void()> OnCalibrationFinishedCb;
|
||||||
|
|
||||||
|
class MPU {
|
||||||
|
public:
|
||||||
|
MPU(MPU6050_6Axis_MotionApps20 *mpu) {
|
||||||
|
assert(mpu != nullptr);
|
||||||
|
_mpu = mpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
~MPU() {
|
||||||
|
delete _mpu;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool initialize() {
|
||||||
|
_mpu->initialize();
|
||||||
|
|
||||||
|
if (!_preferences.begin("imu")) {
|
||||||
|
ESP_LOGE(_TAG, "Failed to open the preferences!");
|
||||||
|
} else {
|
||||||
|
_loadOffsets();
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(250);
|
||||||
|
if (!_mpu->testConnection()) {
|
||||||
|
ESP_LOGE(_TAG, "MPU6050 test connection failed!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_mpu->setDLPFMode(MPU6050_DLPF_BW_10); // 10 Hz bandwidth
|
||||||
|
//mpu.setFullScaleGyroRange(MPU6050_GYRO_FS_500); // set sensivity, not recommended
|
||||||
|
//mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_8);
|
||||||
|
|
||||||
|
if (_mpu->dmpInitialize()) {
|
||||||
|
ESP_LOGE(_TAG, "Failed to initialize DMP!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_mpu->setDMPEnabled(true);
|
||||||
|
attachInterrupt(MPU6050_INT_PIN, _dmpInterruption, RISING);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tick(bool &err) {
|
||||||
|
err = false;
|
||||||
|
if (!_isDMPDataReady) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!_mpu->dmpGetCurrentFIFOPacket(_fifoBuffer)) {
|
||||||
|
ESP_LOGE(_TAG, "Failed to get DMP data!");
|
||||||
|
err = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Quaternion q;
|
||||||
|
VectorFloat gravity;
|
||||||
|
VectorInt16 accel;
|
||||||
|
VectorInt16 gyro;
|
||||||
|
VectorInt16 accelReal;
|
||||||
|
|
||||||
|
_mpu->dmpGetQuaternion(&q, _fifoBuffer);
|
||||||
|
_mpu->dmpGetGravity(&gravity, &q);
|
||||||
|
_mpu->dmpGetYawPitchRoll(_ypr, &q, &gravity);
|
||||||
|
_mpu->dmpGetAccel(&accel, _fifoBuffer);
|
||||||
|
_mpu->dmpGetGyro(&gyro, _fifoBuffer);
|
||||||
|
_mpu->dmpGetLinearAccel(&accelReal, &accel, &gravity);
|
||||||
|
_isDMPDataReady = false;
|
||||||
|
|
||||||
|
_ax = accel.x / 8192.f;
|
||||||
|
_ay = accel.y / 8192.f;
|
||||||
|
_az = accel.z / 8192.f;
|
||||||
|
|
||||||
|
_gx = gyro.x / 131.f;
|
||||||
|
_gy = gyro.y / 131.f;
|
||||||
|
_gz = gyro.z / 131.f;
|
||||||
|
|
||||||
|
_calculateZInertial(gravity);
|
||||||
|
|
||||||
|
if (_isCalibration) {
|
||||||
|
if (_calibrationsIterCounter >= _calibrationIterCount) {
|
||||||
|
_axOffset /= _calibrationsIterCounter;
|
||||||
|
_ayOffset /= _calibrationsIterCounter;
|
||||||
|
_azOffset /= _calibrationsIterCounter;
|
||||||
|
|
||||||
|
_gxOffset /= _calibrationsIterCounter;
|
||||||
|
_gyOffset /= _calibrationsIterCounter;
|
||||||
|
_gzOffset /= _calibrationsIterCounter;
|
||||||
|
|
||||||
|
_prOffset[0] /= _calibrationsIterCounter;
|
||||||
|
_prOffset[1] /= _calibrationsIterCounter;
|
||||||
|
|
||||||
|
_prOffset[0] = DEG_TO_RAD * (180 - RAD_TO_DEG * _prOffset[0]);
|
||||||
|
_prOffset[1] = DEG_TO_RAD * (180 - RAD_TO_DEG * _prOffset[1]);
|
||||||
|
ESP_LOGI(_TAG, "Calibration offsets: roll: %f, pitch: %f", RAD_TO_DEG * _prOffset[1],
|
||||||
|
RAD_TO_DEG * _prOffset[0]);
|
||||||
|
|
||||||
|
_isCalibration = false;
|
||||||
|
_updateOffsets();
|
||||||
|
_calibrationsIterCounter = 0;
|
||||||
|
if (_calibrationFinishedCb) {
|
||||||
|
_calibrationFinishedCb();
|
||||||
|
}
|
||||||
|
ESP_LOGI(_TAG, "Calibration finished!");
|
||||||
|
} else {
|
||||||
|
_axOffset += _ax;
|
||||||
|
_ayOffset += _ay;
|
||||||
|
_azOffset += _az;
|
||||||
|
_gxOffset += _gx;
|
||||||
|
_gyOffset += _gy;
|
||||||
|
_gzOffset += _gz;
|
||||||
|
_prOffset[0] += pitch() * DEG_TO_RAD;
|
||||||
|
_prOffset[1] += roll() * DEG_TO_RAD;
|
||||||
|
_calibrationsIterCounter++;
|
||||||
|
ESP_LOGI(_TAG, "Angles on calibration: roll: %f, pitch: %f", roll(),
|
||||||
|
pitch());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* getters */
|
||||||
|
float accZInertial() const {
|
||||||
|
return _AccZInertial;
|
||||||
|
}
|
||||||
|
|
||||||
|
float yaw() const {
|
||||||
|
return degrees(_ypr[0]) + 180.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
float pitch() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return 360.f - (degrees(_ypr[1]) + 180);
|
||||||
|
} else {
|
||||||
|
return 360.f - (degrees(_ypr[1]) + 180) + degrees(_prOffset[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float roll() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return 360.f - (degrees(_ypr[2]) + 180);
|
||||||
|
} else {
|
||||||
|
return 360.f - (degrees(_ypr[2] + _prOffset[1]) + 180) + degrees(_prOffset[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float ax() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _ax;
|
||||||
|
} else {
|
||||||
|
return _ax - _axOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float ay() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _ay;
|
||||||
|
} else {
|
||||||
|
return _ay - _ayOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float az() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _az;
|
||||||
|
} else {
|
||||||
|
return _az - _azOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float gravityZ() const {
|
||||||
|
return _gravity;
|
||||||
|
}
|
||||||
|
|
||||||
|
float gx() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _gx;
|
||||||
|
} else {
|
||||||
|
return _gx - _gxOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float gy() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _gy;
|
||||||
|
} else {
|
||||||
|
return _gy - _gyOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float gz() const {
|
||||||
|
if (_isCalibration) {
|
||||||
|
return _gz;
|
||||||
|
} else {
|
||||||
|
return _gz - _gzOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void startCalibration() {
|
||||||
|
_isCalibration = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void onCalibrationFinished(OnCalibrationFinishedCb callback) {
|
||||||
|
_calibrationFinishedCb = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MPU6050_6Axis_MotionApps20 *_mpu = nullptr;
|
||||||
|
float _ypr[3] = {0};
|
||||||
|
float _ax = 0, _ay = 0, _az = 0;
|
||||||
|
float _gx = 0, _gy = 0, _gz = 0;
|
||||||
|
float _gravity = 0;
|
||||||
|
float _AccZInertial = 0;
|
||||||
|
|
||||||
|
float _axOffset = 0, _ayOffset = 0, _azOffset = 0;
|
||||||
|
float _gxOffset = 0, _gyOffset = 0, _gzOffset = 0;
|
||||||
|
float _prOffset[2] = {0}; // yaw isn't used
|
||||||
|
|
||||||
|
uint8_t _fifoBuffer[45] = {0};
|
||||||
|
Preferences _preferences;
|
||||||
|
|
||||||
|
const char *_TAG = "MPU6050 module";
|
||||||
|
static constexpr const int _calibrationIterCount = 250;
|
||||||
|
|
||||||
|
bool _isCalibration = false;
|
||||||
|
int _calibrationsIterCounter = 0;
|
||||||
|
OnCalibrationFinishedCb _calibrationFinishedCb = nullptr;
|
||||||
|
|
||||||
|
void _calculateZInertial(VectorFloat &gravity) {
|
||||||
|
const float anglePitch = _ypr[1];
|
||||||
|
const float angleRoll = _ypr[2];
|
||||||
|
_gravity = gravity.z;
|
||||||
|
|
||||||
|
_AccZInertial = -sin(anglePitch) * _ax + cos(anglePitch) * sin(angleRoll) * _ay
|
||||||
|
+ cos(anglePitch) * cos(angleRoll) * _az;
|
||||||
|
_AccZInertial = (_AccZInertial - 1) * gravity.z * 100.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _loadOffsets() {
|
||||||
|
_axOffset = _preferences.getFloat("ax", 0.f);
|
||||||
|
_ayOffset = _preferences.getFloat("ax", 0.f);
|
||||||
|
_azOffset = _preferences.getFloat("az", 0.f);
|
||||||
|
_gxOffset = _preferences.getFloat("gx", 0.f);
|
||||||
|
_gyOffset = _preferences.getFloat("gy", 0.f);
|
||||||
|
_gzOffset = _preferences.getFloat("gz", 0.f);
|
||||||
|
_prOffset[0] = _preferences.getFloat("pitch", 0.f);
|
||||||
|
_prOffset[1] = _preferences.getFloat("roll", 0.f);
|
||||||
|
ESP_LOGI(_TAG, "Offsets loaded: pitch: %f, roll %f", _prOffset[0], _prOffset[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _updateOffsets() {
|
||||||
|
_preferences.putFloat("ax", _axOffset);
|
||||||
|
_preferences.putFloat("ay", _ayOffset);
|
||||||
|
_preferences.putFloat("az", _azOffset);
|
||||||
|
_preferences.putFloat("gx", _gxOffset);
|
||||||
|
_preferences.putFloat("gy", _gyOffset);
|
||||||
|
_preferences.putFloat("gz", _gzOffset);
|
||||||
|
_preferences.putFloat("pitch", _prOffset[0]);
|
||||||
|
_preferences.putFloat("roll", _prOffset[1]);
|
||||||
|
ESP_LOGI(_TAG, "Offsets saved.");
|
||||||
|
}
|
||||||
|
};
|
||||||
13
src/Sensors/RangingSensor.cpp
Executable file
13
src/Sensors/RangingSensor.cpp
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "RangingSensor.hpp"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
RangingSensor::RangingSensor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void RangingSensor::startFlight() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void RangingSensor::tick() {
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RangingSensor::getDistance() { return 0; }
|
||||||
22
src/Sensors/RangingSensor.hpp
Executable file
22
src/Sensors/RangingSensor.hpp
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef HELICOPTER_FIRMWARE_RANGINGSENSOR_H
|
||||||
|
#define HELICOPTER_FIRMWARE_RANGINGSENSOR_H
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
class RangingSensor {
|
||||||
|
public:
|
||||||
|
RangingSensor();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
|
||||||
|
void startFlight();
|
||||||
|
|
||||||
|
uint32_t getDistance();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //HELICOPTER_FIRMWARE_RANGINGSENSOR_H
|
||||||
140
src/Sensors/Sensors.cpp
Executable file
140
src/Sensors/Sensors.cpp
Executable file
@@ -0,0 +1,140 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "Sensors.hpp"
|
||||||
|
|
||||||
|
Sensors::Sensors(Barometer *barometer, RangingSensor *ranging_sensor, MPU *mpu, Kalman2DFilter *filter,
|
||||||
|
BatteryController *battery, HeightSensor heightSensor) {
|
||||||
|
assert(barometer != nullptr);
|
||||||
|
assert(mpu != nullptr);
|
||||||
|
assert(filter != nullptr);
|
||||||
|
assert(battery != nullptr);
|
||||||
|
assert(ranging_sensor != nullptr);
|
||||||
|
|
||||||
|
_barometer = barometer;
|
||||||
|
_mpu = mpu;
|
||||||
|
_2d_filter = filter;
|
||||||
|
_battery = battery;
|
||||||
|
_ranging_sensor = ranging_sensor;
|
||||||
|
_heightSensor = heightSensor;
|
||||||
|
|
||||||
|
ESP_LOGI(_tag, "Initialize BMP280...");
|
||||||
|
if (_barometer->initialize()) {
|
||||||
|
ESP_LOGI(_tag, "BMP280 initialized");
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(_tag, "BMP280 initialization failed!");
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGI(_tag, "Initialize MPU6050...");
|
||||||
|
if (_mpu->initialize()) {
|
||||||
|
ESP_LOGI(_tag, "MPU6050 initialized");
|
||||||
|
} else {
|
||||||
|
ESP_LOGI(_tag, "MPU6050 initialization failed!");
|
||||||
|
//assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
_battery->initialize();
|
||||||
|
ESP_LOGI(_tag, "BatteryController initialized");
|
||||||
|
|
||||||
|
ESP_LOGI(_tag, "Sensors initialized");
|
||||||
|
}
|
||||||
|
|
||||||
|
Sensors::~Sensors() {
|
||||||
|
delete _barometer;
|
||||||
|
delete _mpu;
|
||||||
|
delete _2d_filter;
|
||||||
|
delete _battery;
|
||||||
|
delete _ranging_sensor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensors::measureBaseAltitudeSync(void) {
|
||||||
|
_barometer->measureBaseAltitudeSync();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensors::measureBaseAltitudeAsync(void) {
|
||||||
|
if (_heightSensor == HeightSensor::RangeMeterOnly) {
|
||||||
|
_ranging_sensor->startFlight();
|
||||||
|
if (_onMeasuaringAltitudeFinished) {
|
||||||
|
_onMeasuaringAltitudeFinished();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_barometer->measureBaseAltitudeAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
float Sensors::rawFlightHeight(void) const {
|
||||||
|
/* Returns flight height from barometer immediately */
|
||||||
|
switch (_heightSensor) {
|
||||||
|
case HeightSensor::Hybrid:
|
||||||
|
if (_barometer->flightHeight() >= 200.f) {
|
||||||
|
return _barometer->flightHeight();
|
||||||
|
} else {
|
||||||
|
return (float) _ranging_sensor->getDistance();
|
||||||
|
}
|
||||||
|
case HeightSensor::BarometerOnly:
|
||||||
|
return _barometer->flightHeight();
|
||||||
|
case HeightSensor::RangeMeterOnly:
|
||||||
|
return (float) _ranging_sensor->getDistance();
|
||||||
|
default:
|
||||||
|
return _barometer->flightHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float Sensors::flightHeight(void) const {
|
||||||
|
/* Returns flight height from cache immediately */
|
||||||
|
return _flightHeightFromBarometer;
|
||||||
|
}
|
||||||
|
|
||||||
|
MpuData Sensors::mpuData() const {
|
||||||
|
if (_mpuData.ax == 0.f and _mpuData.gravity == 0.f) {
|
||||||
|
ESP_LOGW(_tag, "MPU data looks like .tick() has never called");
|
||||||
|
}
|
||||||
|
return _mpuData;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Sensors::tick(void) {
|
||||||
|
/* Super loop iteraion */
|
||||||
|
/* Return true on update */
|
||||||
|
_barometer->tick();
|
||||||
|
_ranging_sensor->tick();
|
||||||
|
bool err;
|
||||||
|
bool isMpuDataReady = _mpu->tick(err);
|
||||||
|
if (isMpuDataReady and !err) {
|
||||||
|
_2d_filter->filter(_mpu->accZInertial(), _barometer->flightHeight(),
|
||||||
|
_flightHeightFromBarometer, _zVelocityAltitude);
|
||||||
|
_zVelocityAltitude = _mpu->accZInertial();
|
||||||
|
_mpuData = {.ax = _mpu->ax(),
|
||||||
|
.ay = _mpu->ay(),
|
||||||
|
.az = _mpu->az(),
|
||||||
|
.gx = _mpu->gx(),
|
||||||
|
.gy = _mpu->gy(),
|
||||||
|
.gz = _mpu->gz(),
|
||||||
|
.yaw = _mpu->yaw(),
|
||||||
|
.pitch = _mpu->pitch(),
|
||||||
|
.roll = _mpu->roll(),
|
||||||
|
.gravity = _mpu->gravityZ(),
|
||||||
|
.zInertial = _mpu->accZInertial()};
|
||||||
|
return true;
|
||||||
|
} else if (err) {
|
||||||
|
ESP_LOGE(_tag, "Failed to get DMP data!");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Sensors::batteryCharge(void) const {
|
||||||
|
return _battery->percent();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensors::onMpuCalibrationFinished(OnCalibrationFinishedCb callback) {
|
||||||
|
_mpu->onCalibrationFinished(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensors::startMpuCalibration() {
|
||||||
|
_mpu->startCalibration();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sensors::onMeasuaringAltitudeFinished(OnMeasuringFinishedCb callback) {
|
||||||
|
_onMeasuaringAltitudeFinished = callback;
|
||||||
|
_barometer->onMeasuaringHeightFinished(std::move(callback));
|
||||||
|
}
|
||||||
71
src/Sensors/Sensors.hpp
Executable file
71
src/Sensors/Sensors.hpp
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "Barometer.hpp"
|
||||||
|
#include "BatteryController.hpp"
|
||||||
|
#include "Filters/Kalman2DFilter.hpp"
|
||||||
|
#include "RangingSensor.hpp"
|
||||||
|
#include "MPU.hpp"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
/* Sensors module provides cached and filtered sensors values */
|
||||||
|
|
||||||
|
struct MpuData {
|
||||||
|
float ax, ay, az;
|
||||||
|
float gx, gy, gz;
|
||||||
|
float yaw, pitch, roll;
|
||||||
|
float gravity;
|
||||||
|
float zInertial;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum HeightSensor {
|
||||||
|
RangeMeterOnly,
|
||||||
|
BarometerOnly,
|
||||||
|
Hybrid
|
||||||
|
};
|
||||||
|
|
||||||
|
class Sensors {
|
||||||
|
public:
|
||||||
|
Sensors(Barometer *barometer, RangingSensor *rangingSensor, MPU *mpu, Kalman2DFilter *filter,
|
||||||
|
BatteryController *battery, HeightSensor heightSensor = Hybrid);
|
||||||
|
|
||||||
|
~Sensors();
|
||||||
|
|
||||||
|
void measureBaseAltitudeSync(void);
|
||||||
|
|
||||||
|
void measureBaseAltitudeAsync(void);
|
||||||
|
|
||||||
|
void onMeasuaringAltitudeFinished(OnMeasuringFinishedCb callback);
|
||||||
|
|
||||||
|
float rawFlightHeight(void) const;
|
||||||
|
|
||||||
|
float flightHeight(void) const;
|
||||||
|
|
||||||
|
void startMpuCalibration();
|
||||||
|
|
||||||
|
void onMpuCalibrationFinished(OnCalibrationFinishedCb callback);
|
||||||
|
|
||||||
|
MpuData mpuData(void) const;
|
||||||
|
|
||||||
|
int batteryCharge(void) const; // [%]
|
||||||
|
|
||||||
|
bool tick(void);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Barometer *_barometer = nullptr;
|
||||||
|
MPU *_mpu = nullptr;
|
||||||
|
BatteryController *_battery = nullptr;
|
||||||
|
Kalman2DFilter *_2d_filter = nullptr;
|
||||||
|
RangingSensor *_ranging_sensor = nullptr;
|
||||||
|
HeightSensor _heightSensor;
|
||||||
|
OnMeasuringFinishedCb _onMeasuaringAltitudeFinished = nullptr;
|
||||||
|
|
||||||
|
/* cached filtered values */
|
||||||
|
float _flightHeightFromBarometer = 0.f;
|
||||||
|
float _zVelocityAltitude = 0.f;
|
||||||
|
MpuData _mpuData = {0.f};
|
||||||
|
|
||||||
|
|
||||||
|
static constexpr const char *_tag = "Sensors";
|
||||||
|
};
|
||||||
10
src/board_pins.h
Executable file
10
src/board_pins.h
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define I2C_SDA_PIN 21
|
||||||
|
#define I2C_SCL_PIN 18
|
||||||
|
#define MPU6050_INT_PIN 19
|
||||||
|
#define BATTERY_ADC_CHANNEL ADC2_CHANNEL_0
|
||||||
|
#define BATTERY_DATA_PIN 4
|
||||||
|
#define BATTERY_DATA_SWITCH_PIN 17
|
||||||
40
src/main.cpp
Executable file
40
src/main.cpp
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
// This is a personal academic project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: https://pvs-studio.com
|
||||||
|
|
||||||
|
#include "App.hpp"
|
||||||
|
#include "BoardI2C.hpp"
|
||||||
|
#include "Sensors/RangingSensor.hpp"
|
||||||
|
#include "LPS.h"
|
||||||
|
|
||||||
|
BoardI2C i2c;
|
||||||
|
|
||||||
|
static Application *app = nullptr;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
try {
|
||||||
|
app = new Application(new FlightDispatcher(
|
||||||
|
new BluetoothDispatcher(new BluetoothSerial(), "Redmi Note 8 Pro"),
|
||||||
|
new FlightController(
|
||||||
|
new Sensors(new Barometer(new GyverBME280(i2c)),
|
||||||
|
new RangingSensor(),
|
||||||
|
new MPU(new MPU6050(MPU6050_DEFAULT_ADDRESS, &i2c)),
|
||||||
|
new Kalman2DFilter(10.f, 1.f, 1.8f),
|
||||||
|
new BatteryController(BATTERY_DATA_PIN, BATTERY_DATA_SWITCH_PIN),
|
||||||
|
HeightSensor::BarometerOnly),
|
||||||
|
new SavedPidRegulator(3.5f, 0.0015f, 0.01f, "HeightControl"), // height
|
||||||
|
new SavedPidRegulator(2.f, 12.f, 0.f, "YawControl"), // yaw
|
||||||
|
new BrushedMotor(23, 16, 30000, 0, 10),
|
||||||
|
new BrushedMotor(26, 27, 30000, 1, 10),
|
||||||
|
new PIDController(210.f, 15.f, 20.f,
|
||||||
|
new BrushedMotor(25, 33, 30000, 3, 10),
|
||||||
|
"PitchControl"), // pitch
|
||||||
|
true)));
|
||||||
|
} catch (std::bad_alloc &e) {
|
||||||
|
ESP_LOGI("Main", "Failed to allocate memory: %s", e.what());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
app->tick();
|
||||||
|
}
|
||||||
11
test/README
Executable file
11
test/README
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
This directory is intended for PlatformIO Test Runner and project tests.
|
||||||
|
|
||||||
|
Unit Testing is a software testing method by which individual units of
|
||||||
|
source code, sets of one or more MCU program modules together with associated
|
||||||
|
control data, usage procedures, and operating procedures, are tested to
|
||||||
|
determine whether they are fit for use. Unit testing finds problems early
|
||||||
|
in the development cycle.
|
||||||
|
|
||||||
|
More information about PlatformIO Unit Testing:
|
||||||
|
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
||||||
Reference in New Issue
Block a user