Initial commit
This commit is contained in:
		
						commit
						ec2f7f033a
					
				
							
								
								
									
										8
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal 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
 | 
			
		||||
							
								
								
									
										2
									
								
								.idea/UART_clay.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.idea/UART_clay.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
 | 
			
		||||
							
								
								
									
										345
									
								
								.idea/editor.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										345
									
								
								.idea/editor.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,345 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="BackendCodeEditorSettings">
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
 | 
			
		||||
    <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" 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_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@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/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/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
 | 
			
		||||
    <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/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" 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/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" 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/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" 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_USER_LINEBREAKS/@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/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_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_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@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_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" 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_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_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_AFTER_FOR_SEMICOLON/@EntryValue" value="true" 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_AFTER_UNARY_OPERATOR/@EntryValue" value="false" 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_BEFORE_EXTENDS_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_BEFORE_FOR_SEMICOLON/@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_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_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/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_EMPTY_TEMPLATE_PARAMS/@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/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/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_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_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_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_BEFORE_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_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
 | 
			
		||||
    <option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
 | 
			
		||||
    <option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										7
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="CMakePythonSetting">
 | 
			
		||||
    <option name="pythonIntegrationState" value="YES" />
 | 
			
		||||
  </component>
 | 
			
		||||
  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										8
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="ProjectModuleManager">
 | 
			
		||||
    <modules>
 | 
			
		||||
      <module fileurl="file://$PROJECT_DIR$/.idea/UART_clay.iml" filepath="$PROJECT_DIR$/.idea/UART_clay.iml" />
 | 
			
		||||
    </modules>
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										10
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
cmake_minimum_required(VERSION 4.0)
 | 
			
		||||
project(UART_clay C)
 | 
			
		||||
 | 
			
		||||
set(CMAKE_C_STANDARD 23)
 | 
			
		||||
#set(CMAKE_CXX_STANDARD 23)
 | 
			
		||||
 | 
			
		||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
 | 
			
		||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
 | 
			
		||||
 | 
			
		||||
add_subdirectory(SDL_implementation)
 | 
			
		||||
							
								
								
									
										32
									
								
								SDL_implementation/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								SDL_implementation/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
include(FetchContent)
 | 
			
		||||
set(FETCHCONTENT_QUIET FALSE)
 | 
			
		||||
 | 
			
		||||
# Download SDL3
 | 
			
		||||
FetchContent_Declare(
 | 
			
		||||
        SDL3
 | 
			
		||||
        GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
 | 
			
		||||
        GIT_TAG release-3.2.24
 | 
			
		||||
        GIT_SHALLOW TRUE
 | 
			
		||||
        GIT_PROGRESS TRUE
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Using SDL via FetchContent")
 | 
			
		||||
FetchContent_MakeAvailable(SDL3)
 | 
			
		||||
set_property(DIRECTORY "${sdl3_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
# Download SDL_ttf
 | 
			
		||||
FetchContent_Declare(
 | 
			
		||||
        SDL_ttf
 | 
			
		||||
        GIT_REPOSITORY https://github.com/libsdl-org/SDL_ttf.git
 | 
			
		||||
        GIT_TAG release-3.2.2
 | 
			
		||||
        GIT_SHALLOW TRUE
 | 
			
		||||
        GIT_PROGRESS TRUE
 | 
			
		||||
)
 | 
			
		||||
message(STATUS "Using SDL_ttf via FetchContent")
 | 
			
		||||
FetchContent_MakeAvailable(SDL_ttf)
 | 
			
		||||
set_property(DIRECTORY "${sdl_ttf_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE)
 | 
			
		||||
 | 
			
		||||
add_executable(SDL main.c)
 | 
			
		||||
target_link_libraries(SDL PRIVATE
 | 
			
		||||
        SDL3::SDL3
 | 
			
		||||
        SDL3_ttf::SDL3_ttf
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										265
									
								
								SDL_implementation/clay_renderer_SDL3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								SDL_implementation/clay_renderer_SDL3.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,265 @@
 | 
			
		||||
#include "../include/clay.h"
 | 
			
		||||
// #include <SDL3/SDL_main.h>
 | 
			
		||||
#include <SDL3/SDL.h>
 | 
			
		||||
#include <SDL3_ttf/SDL_ttf.h>
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SDL_Renderer *renderer;
 | 
			
		||||
    TTF_TextEngine *textEngine;
 | 
			
		||||
    TTF_Font **fonts;
 | 
			
		||||
} Clay_SDL3RendererData;
 | 
			
		||||
 | 
			
		||||
/* Global for convenience. Even in 4k this is enough for smooth curves (low radius or rect size coupled with
 | 
			
		||||
 * no AA or low resolution might make it appear as jagged curves) */
 | 
			
		||||
static int NUM_CIRCLE_SEGMENTS = 16;
 | 
			
		||||
 | 
			
		||||
// All rendering is performed by a single SDL call, avoiding multiple RenderRect + plumbing choice for circles.
 | 
			
		||||
static void SDL_Clay_RenderFillRoundedRect(Clay_SDL3RendererData *rendererData, const SDL_FRect rect,
 | 
			
		||||
                                           const float cornerRadius, const Clay_Color _color) {
 | 
			
		||||
    const SDL_FColor color = { _color.r/255, _color.g/255, _color.b/255, _color.a/255 };
 | 
			
		||||
 | 
			
		||||
    int indexCount = 0, vertexCount = 0;
 | 
			
		||||
 | 
			
		||||
    const float minRadius = SDL_min(rect.w, rect.h) / 2.0f;
 | 
			
		||||
    const float clampedRadius = SDL_min(cornerRadius, minRadius);
 | 
			
		||||
 | 
			
		||||
    const int numCircleSegments = SDL_max(NUM_CIRCLE_SEGMENTS, (int) clampedRadius * 0.5f);
 | 
			
		||||
 | 
			
		||||
    int totalVertices = 4 + (4 * (numCircleSegments * 2)) + 2 * 4;
 | 
			
		||||
    int totalIndices = 6 + (4 * (numCircleSegments * 3)) + 6 * 4;
 | 
			
		||||
 | 
			
		||||
    SDL_Vertex vertices[totalVertices];
 | 
			
		||||
    int indices[totalIndices];
 | 
			
		||||
 | 
			
		||||
    //define center rectangle
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + clampedRadius, rect.y + clampedRadius}, color, {0, 0} }; //0 center TL
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w - clampedRadius, rect.y + clampedRadius}, color, {1, 0} }; //1 center TR
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w - clampedRadius, rect.y + rect.h - clampedRadius}, color, {1, 1} }; //2 center BR
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + clampedRadius, rect.y + rect.h - clampedRadius}, color, {0, 1} }; //3 center BL
 | 
			
		||||
 | 
			
		||||
    indices[indexCount++] = 0;
 | 
			
		||||
    indices[indexCount++] = 1;
 | 
			
		||||
    indices[indexCount++] = 3;
 | 
			
		||||
    indices[indexCount++] = 1;
 | 
			
		||||
    indices[indexCount++] = 2;
 | 
			
		||||
    indices[indexCount++] = 3;
 | 
			
		||||
 | 
			
		||||
    //define rounded corners as triangle fans
 | 
			
		||||
    const float step = SDL_PI_F / 2 / numCircleSegments;
 | 
			
		||||
    for (int i = 0; i < numCircleSegments; ++i) {
 | 
			
		||||
        const float angle1 = (float)i * step;
 | 
			
		||||
        const float angle2 = ((float)i + 1.0f) * step;
 | 
			
		||||
 | 
			
		||||
        for (int j = 0; j < 4; ++j) {  //iterate over four corners
 | 
			
		||||
            float cx, cy, signX, signY;
 | 
			
		||||
 | 
			
		||||
            switch (j) {
 | 
			
		||||
                case 0: cx = rect.x + clampedRadius; cy = rect.y + clampedRadius; signX = -1; signY = -1; break; // Top-left
 | 
			
		||||
                case 1: cx = rect.x + rect.w - clampedRadius; cy = rect.y + clampedRadius; signX = 1; signY = -1; break; // Top-right
 | 
			
		||||
                case 2: cx = rect.x + rect.w - clampedRadius; cy = rect.y + rect.h - clampedRadius; signX = 1; signY = 1; break; // Bottom-right
 | 
			
		||||
                case 3: cx = rect.x + clampedRadius; cy = rect.y + rect.h - clampedRadius; signX = -1; signY = 1; break; // Bottom-left
 | 
			
		||||
                default: return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            vertices[vertexCount++] = (SDL_Vertex){ {cx + SDL_cosf(angle1) * clampedRadius * signX, cy + SDL_sinf(angle1) * clampedRadius * signY}, color, {0, 0} };
 | 
			
		||||
            vertices[vertexCount++] = (SDL_Vertex){ {cx + SDL_cosf(angle2) * clampedRadius * signX, cy + SDL_sinf(angle2) * clampedRadius * signY}, color, {0, 0} };
 | 
			
		||||
 | 
			
		||||
            indices[indexCount++] = j; // Connect to corresponding central rectangle vertex
 | 
			
		||||
            indices[indexCount++] = vertexCount - 2;
 | 
			
		||||
            indices[indexCount++] = vertexCount - 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Define edge rectangles
 | 
			
		||||
    // Top Edge
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + clampedRadius, rect.y}, color, {0, 0} }; // TL
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w - clampedRadius, rect.y}, color, {1, 0} }; // TR
 | 
			
		||||
 | 
			
		||||
    indices[indexCount++] = 0;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 2; // TL
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // TR
 | 
			
		||||
    indices[indexCount++] = 1;
 | 
			
		||||
    indices[indexCount++] = 0;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // TR
 | 
			
		||||
 | 
			
		||||
    // Right edge
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w, rect.y + clampedRadius}, color, {1, 0} }; // RT
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w, rect.y + rect.h - clampedRadius}, color, {1, 1} }; // RB
 | 
			
		||||
 | 
			
		||||
    indices[indexCount++] = 1;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 2; // RT
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // RB
 | 
			
		||||
    indices[indexCount++] = 2;
 | 
			
		||||
    indices[indexCount++] = 1;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // RB
 | 
			
		||||
 | 
			
		||||
    // Bottom edge
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + rect.w - clampedRadius, rect.y + rect.h}, color, {1, 1} }; // BR
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x + clampedRadius, rect.y + rect.h}, color, {0, 1} }; // BL
 | 
			
		||||
 | 
			
		||||
    indices[indexCount++] = 2;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 2; // BR
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // BL
 | 
			
		||||
    indices[indexCount++] = 3;
 | 
			
		||||
    indices[indexCount++] = 2;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // BL
 | 
			
		||||
 | 
			
		||||
    // Left edge
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x, rect.y + rect.h - clampedRadius}, color, {0, 1} }; // LB
 | 
			
		||||
    vertices[vertexCount++] = (SDL_Vertex){ {rect.x, rect.y + clampedRadius}, color, {0, 0} }; // LT
 | 
			
		||||
 | 
			
		||||
    indices[indexCount++] = 3;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 2; // LB
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // LT
 | 
			
		||||
    indices[indexCount++] = 0;
 | 
			
		||||
    indices[indexCount++] = 3;
 | 
			
		||||
    indices[indexCount++] = vertexCount - 1; // LT
 | 
			
		||||
 | 
			
		||||
    SDL_RenderGeometry(rendererData->renderer, nullptr, vertices, vertexCount, indices, indexCount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void SDL_Clay_RenderArc(const Clay_SDL3RendererData *rendererData, const SDL_FPoint center, const float radius,
 | 
			
		||||
                          const float startAngle, const float endAngle, const float thickness, const Clay_Color color) {
 | 
			
		||||
    SDL_SetRenderDrawColor(rendererData->renderer, color.r, color.g, color.b, color.a);
 | 
			
		||||
 | 
			
		||||
    const float radStart = startAngle * (SDL_PI_F / 180.0f);
 | 
			
		||||
    const float radEnd = endAngle * (SDL_PI_F / 180.0f);
 | 
			
		||||
 | 
			
		||||
    const int numCircleSegments = SDL_max(NUM_CIRCLE_SEGMENTS, (int)(radius * 1.5f)); // Increase circle segments for larger circles, 1.5 is arbitrary.
 | 
			
		||||
 | 
			
		||||
    const float angleStep = (radEnd - radStart) / (float)numCircleSegments;
 | 
			
		||||
    constexpr float thicknessStep = 0.4f; // Arbitrary value to avoid overlapping lines. Changing THICKNESS_STEP or numCircleSegments might cause artifacts.
 | 
			
		||||
 | 
			
		||||
    for (float t = thicknessStep; t < thickness - thicknessStep; t += thicknessStep) {
 | 
			
		||||
        SDL_FPoint points[numCircleSegments + 1];
 | 
			
		||||
        const float clampedRadius = SDL_max(radius - t, 1.0f);
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i <= numCircleSegments; ++i) {
 | 
			
		||||
            const float angle = radStart + i * angleStep;
 | 
			
		||||
            points[i] = (SDL_FPoint){
 | 
			
		||||
                SDL_roundf(center.x + SDL_cosf(angle) * clampedRadius),
 | 
			
		||||
                SDL_roundf(center.y + SDL_sinf(angle) * clampedRadius) };
 | 
			
		||||
        }
 | 
			
		||||
        SDL_RenderLines(rendererData->renderer, points, numCircleSegments + 1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDL_Rect currentClippingRectangle;
 | 
			
		||||
 | 
			
		||||
static void SDL_Clay_RenderClayCommands(Clay_SDL3RendererData *rendererData, Clay_RenderCommandArray *rcommands) {
 | 
			
		||||
    for (size_t i = 0; i < rcommands->length; ++i) {
 | 
			
		||||
        Clay_RenderCommand *rcmd = Clay_RenderCommandArray_Get(rcommands, i);
 | 
			
		||||
        const Clay_BoundingBox bounding_box = rcmd->boundingBox;
 | 
			
		||||
        const SDL_FRect rect = { (int)bounding_box.x, (int)bounding_box.y, (int)bounding_box.width, (int)bounding_box.height };
 | 
			
		||||
 | 
			
		||||
        switch (rcmd->commandType) {
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: {
 | 
			
		||||
                const Clay_RectangleRenderData *config = &rcmd->renderData.rectangle;
 | 
			
		||||
                SDL_SetRenderDrawBlendMode(rendererData->renderer, SDL_BLENDMODE_BLEND);
 | 
			
		||||
                SDL_SetRenderDrawColor(rendererData->renderer, config->backgroundColor.r, config->backgroundColor.g, config->backgroundColor.b, config->backgroundColor.a);
 | 
			
		||||
                if (config->cornerRadius.topLeft > 0) {
 | 
			
		||||
                    SDL_Clay_RenderFillRoundedRect(rendererData, rect, config->cornerRadius.topLeft, config->backgroundColor);
 | 
			
		||||
                } else {
 | 
			
		||||
                    SDL_RenderFillRect(rendererData->renderer, &rect);
 | 
			
		||||
                }
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_TEXT: {
 | 
			
		||||
                const Clay_TextRenderData *config = &rcmd->renderData.text;
 | 
			
		||||
                TTF_Font *font = rendererData->fonts[config->fontId];
 | 
			
		||||
                TTF_SetFontSize(font, config->fontSize);
 | 
			
		||||
                TTF_Text *text = TTF_CreateText(rendererData->textEngine, font, config->stringContents.chars, config->stringContents.length);
 | 
			
		||||
                TTF_SetTextColor(text, config->textColor.r, config->textColor.g, config->textColor.b, config->textColor.a);
 | 
			
		||||
                TTF_DrawRendererText(text, rect.x, rect.y);
 | 
			
		||||
                TTF_DestroyText(text);
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_BORDER: {
 | 
			
		||||
                const Clay_BorderRenderData *config = &rcmd->renderData.border;
 | 
			
		||||
 | 
			
		||||
                const float minRadius = SDL_min(rect.w, rect.h) / 2.0f;
 | 
			
		||||
                const Clay_CornerRadius clampedRadii = {
 | 
			
		||||
                    .topLeft = SDL_min(config->cornerRadius.topLeft, minRadius),
 | 
			
		||||
                    .topRight = SDL_min(config->cornerRadius.topRight, minRadius),
 | 
			
		||||
                    .bottomLeft = SDL_min(config->cornerRadius.bottomLeft, minRadius),
 | 
			
		||||
                    .bottomRight = SDL_min(config->cornerRadius.bottomRight, minRadius)
 | 
			
		||||
                };
 | 
			
		||||
                // Edges
 | 
			
		||||
                SDL_SetRenderDrawColor(rendererData->renderer, config->color.r, config->color.g, config->color.b, config->color.a);
 | 
			
		||||
                if (config->width.left > 0) {
 | 
			
		||||
                    const float starting_y = rect.y + clampedRadii.topLeft;
 | 
			
		||||
                    const float length = rect.h - clampedRadii.topLeft - clampedRadii.bottomLeft;
 | 
			
		||||
                    SDL_FRect line = { rect.x - 1, starting_y, config->width.left, length };
 | 
			
		||||
                    SDL_RenderFillRect(rendererData->renderer, &line);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->width.right > 0) {
 | 
			
		||||
                    const float starting_x = rect.x + rect.w - (float)config->width.right + 1;
 | 
			
		||||
                    const float starting_y = rect.y + clampedRadii.topRight;
 | 
			
		||||
                    float length = rect.h - clampedRadii.topRight - clampedRadii.bottomRight;
 | 
			
		||||
                    SDL_FRect line = { starting_x, starting_y, config->width.right, length };
 | 
			
		||||
                    SDL_RenderFillRect(rendererData->renderer, &line);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->width.top > 0) {
 | 
			
		||||
                    const float starting_x = rect.x + clampedRadii.topLeft;
 | 
			
		||||
                    const float length = rect.w - clampedRadii.topLeft - clampedRadii.topRight;
 | 
			
		||||
                    SDL_FRect line = { starting_x, rect.y - 1, length, config->width.top };
 | 
			
		||||
                    SDL_RenderFillRect(rendererData->renderer, &line);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->width.bottom > 0) {
 | 
			
		||||
                    const float starting_x = rect.x + clampedRadii.bottomLeft;
 | 
			
		||||
                    const float starting_y = rect.y + rect.h - (float)config->width.bottom + 1;
 | 
			
		||||
                    const float length = rect.w - clampedRadii.bottomLeft - clampedRadii.bottomRight;
 | 
			
		||||
                    SDL_FRect line = { starting_x, starting_y, length, config->width.bottom };
 | 
			
		||||
                    SDL_SetRenderDrawColor(rendererData->renderer, config->color.r, config->color.g, config->color.b, config->color.a);
 | 
			
		||||
                    SDL_RenderFillRect(rendererData->renderer, &line);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // Corners
 | 
			
		||||
                if (config->cornerRadius.topLeft > 0) {
 | 
			
		||||
                    const float centerX = rect.x + clampedRadii.topLeft - 1;
 | 
			
		||||
                    const float centerY = rect.y + clampedRadii.topLeft - 1;
 | 
			
		||||
                    SDL_Clay_RenderArc(rendererData, (SDL_FPoint){centerX, centerY}, clampedRadii.topLeft,
 | 
			
		||||
                        180.0f, 270.0f, config->width.top, config->color);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->cornerRadius.topRight > 0) {
 | 
			
		||||
                    const float centerX = rect.x + rect.w - clampedRadii.topRight;
 | 
			
		||||
                    const float centerY = rect.y + clampedRadii.topRight;
 | 
			
		||||
                    SDL_Clay_RenderArc(rendererData, (SDL_FPoint){centerX, centerY}, clampedRadii.topRight,
 | 
			
		||||
                        270.0f, 360.0f, config->width.top, config->color);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->cornerRadius.bottomLeft > 0) {
 | 
			
		||||
                    const float centerX = rect.x + clampedRadii.bottomLeft - 1;
 | 
			
		||||
                    const float centerY = rect.y + rect.h - clampedRadii.bottomLeft;
 | 
			
		||||
                    SDL_Clay_RenderArc(rendererData, (SDL_FPoint){centerX, centerY}, clampedRadii.bottomLeft,
 | 
			
		||||
                        90.0f, 180.0f, config->width.bottom, config->color);
 | 
			
		||||
                }
 | 
			
		||||
                if (config->cornerRadius.bottomRight > 0) {
 | 
			
		||||
                    const float centerX = rect.x + rect.w - clampedRadii.bottomRight;
 | 
			
		||||
                    const float centerY = rect.y + rect.h - clampedRadii.bottomRight;
 | 
			
		||||
                    SDL_Clay_RenderArc(rendererData, (SDL_FPoint){centerX, centerY}, clampedRadii.bottomRight,
 | 
			
		||||
                        0.0f, 90.0f, config->width.bottom, config->color);
 | 
			
		||||
                }
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_SCISSOR_START: {
 | 
			
		||||
                const Clay_BoundingBox boundingBox = rcmd->boundingBox;
 | 
			
		||||
                currentClippingRectangle = (SDL_Rect) {
 | 
			
		||||
                    .x = boundingBox.x,
 | 
			
		||||
                    .y = boundingBox.y,
 | 
			
		||||
                    .w = boundingBox.width,
 | 
			
		||||
                    .h = boundingBox.height
 | 
			
		||||
                };
 | 
			
		||||
                SDL_SetRenderClipRect(rendererData->renderer, ¤tClippingRectangle);
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_SCISSOR_END: {
 | 
			
		||||
                SDL_SetRenderClipRect(rendererData->renderer, nullptr);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_IMAGE: {
 | 
			
		||||
                SDL_Texture *texture = rcmd->renderData.image.imageData;
 | 
			
		||||
                const SDL_FRect dest = { rect.x, rect.y, rect.w, rect.h };
 | 
			
		||||
                SDL_RenderTexture(rendererData->renderer, texture, nullptr, &dest);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            default:
 | 
			
		||||
                SDL_Log("Unknown render command type: %d", rcmd->commandType);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										208
									
								
								SDL_implementation/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								SDL_implementation/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,208 @@
 | 
			
		||||
#define SDL_MAIN_USE_CALLBACKS
 | 
			
		||||
#include <SDL3/SDL_main.h>
 | 
			
		||||
#include <SDL3/SDL.h>
 | 
			
		||||
#include <SDL3_ttf/SDL_ttf.h>
 | 
			
		||||
 | 
			
		||||
#define CLAY_IMPLEMENTATION
 | 
			
		||||
#include "../include/clay.h"
 | 
			
		||||
#include "clay_renderer_SDL3.c"
 | 
			
		||||
 | 
			
		||||
#include "../include/shared_layout.c"
 | 
			
		||||
#include "../include/uart_func.c"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
typedef struct app_state {
 | 
			
		||||
    SDL_Window *window;
 | 
			
		||||
    Clay_SDL3RendererData rendererData;
 | 
			
		||||
    Uint64 NOW;
 | 
			
		||||
    Uint64 LAST;
 | 
			
		||||
    double deltaTime;
 | 
			
		||||
} AppState;
 | 
			
		||||
uart_data uart_message_data;
 | 
			
		||||
 | 
			
		||||
static Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData) {
 | 
			
		||||
    TTF_Font **fonts = userData;
 | 
			
		||||
    TTF_Font *font = fonts[config->fontId];
 | 
			
		||||
    int width, height;
 | 
			
		||||
 | 
			
		||||
    TTF_SetFontSize(font, config->fontSize);
 | 
			
		||||
    if (!TTF_GetStringSize(font, text.chars, text.length, &width, &height)) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to measure text: %s", SDL_GetError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (Clay_Dimensions) { (float) width, (float) height };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HandleClayErrors(const Clay_ErrorData errorData) {
 | 
			
		||||
    printf("Error: %s\n", errorData.errorText.chars);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDL_AppResult SDL_AppInit(void **appstate, const int argc, char *argv[]) {
 | 
			
		||||
    (void) argc;
 | 
			
		||||
    (void) argv;
 | 
			
		||||
 | 
			
		||||
    uart_message_data.serial_port = open_uart_port("/dev/ttyUSB0");
 | 
			
		||||
    if (uart_message_data.serial_port < 0) {
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!TTF_Init()) {
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AppState *state = SDL_calloc(1, sizeof(AppState));
 | 
			
		||||
    if (!state) {
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
    *appstate = state;
 | 
			
		||||
 | 
			
		||||
    if (!SDL_CreateWindowAndRenderer("Clay Test", 640, 480, 0, &state->window, &state->rendererData.renderer)) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to create engine from renderer: %s", SDL_GetError());
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
    SDL_SetWindowResizable(state->window, true);
 | 
			
		||||
    SDL_SetWindowMinimumSize(state->window, 640, 480);
 | 
			
		||||
 | 
			
		||||
    state->rendererData.textEngine = TTF_CreateRendererTextEngine(state->rendererData.renderer);
 | 
			
		||||
    if (!state->rendererData.textEngine) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to create text engine from renderer: %s", SDL_GetError());
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    state->rendererData.fonts = SDL_calloc(2, sizeof(TTF_Font *));
 | 
			
		||||
    if (!state->rendererData.fonts) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to allocate memory for the font array: %s", SDL_GetError());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    FILE* FontFile = fopen("/usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf", "rb");
 | 
			
		||||
 | 
			
		||||
    fseek(FontFile, 0, SEEK_END);
 | 
			
		||||
    const long FontSize = ftell(FontFile);
 | 
			
		||||
    fseek(FontFile, 0, SEEK_SET);
 | 
			
		||||
    char* FontBuffer = malloc(FontSize + 1);
 | 
			
		||||
    const size_t bytesRead = fread(FontBuffer, 1, FontSize, FontFile);
 | 
			
		||||
    fclose(FontFile);
 | 
			
		||||
    SDL_IOStream* file_rw = SDL_IOFromConstMem(FontBuffer, bytesRead);
 | 
			
		||||
 | 
			
		||||
    TTF_Font* font = TTF_OpenFontIO(file_rw, true, 12);
 | 
			
		||||
    if (!font) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Failed to load font: %s", SDL_GetError());
 | 
			
		||||
        return SDL_APP_FAILURE;
 | 
			
		||||
    }
 | 
			
		||||
    state->rendererData.fonts[MAIN_FONT] = font;
 | 
			
		||||
 | 
			
		||||
    /* Initialise Clay */
 | 
			
		||||
    const uint64_t totalMemorySize = Clay_MinMemorySize();
 | 
			
		||||
    const Clay_Arena clayMemory = Clay_CreateArenaWithCapacityAndMemory(totalMemorySize, SDL_malloc(totalMemorySize));
 | 
			
		||||
 | 
			
		||||
    /* Initialise text buffers */
 | 
			
		||||
    uart_message_data.buffer.length = 20;
 | 
			
		||||
    uart_message_data.buffer.chars = malloc(uart_message_data.buffer.length * sizeof(char));
 | 
			
		||||
 | 
			
		||||
    modal_message.chars = uart_message_data.buffer.chars;
 | 
			
		||||
    modal_message.length = 0;
 | 
			
		||||
 | 
			
		||||
    int width, height;
 | 
			
		||||
    SDL_GetWindowSize(state->window, &width, &height);
 | 
			
		||||
    Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) width, (float) height }, (Clay_ErrorHandler) { HandleClayErrors });
 | 
			
		||||
    Clay_SetMeasureTextFunction(SDL_MeasureText, state->rendererData.fonts);
 | 
			
		||||
 | 
			
		||||
    state->NOW = SDL_GetPerformanceCounter();
 | 
			
		||||
 | 
			
		||||
    *appstate = state;
 | 
			
		||||
    return SDL_APP_CONTINUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDL_AppResult SDL_AppIterate(void *appstate) {
 | 
			
		||||
    AppState *state = appstate;
 | 
			
		||||
 | 
			
		||||
    Clay_RenderCommandArray render_commands = Clay_CreateLayout(&uart_message_data);
 | 
			
		||||
 | 
			
		||||
    SDL_SetRenderDrawColor(state->rendererData.renderer, 0, 0, 0, 255);
 | 
			
		||||
    SDL_RenderClear(state->rendererData.renderer);
 | 
			
		||||
 | 
			
		||||
    SDL_Clay_RenderClayCommands(&state->rendererData, &render_commands);
 | 
			
		||||
 | 
			
		||||
    SDL_RenderPresent(state->rendererData.renderer);
 | 
			
		||||
 | 
			
		||||
    return SDL_APP_CONTINUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) {
 | 
			
		||||
    const AppState *state = appstate;
 | 
			
		||||
    SDL_AppResult ret_val = SDL_APP_CONTINUE;
 | 
			
		||||
 | 
			
		||||
    switch (event->type) {
 | 
			
		||||
        case SDL_EVENT_QUIT:
 | 
			
		||||
            ret_val = SDL_APP_SUCCESS;
 | 
			
		||||
            break;
 | 
			
		||||
        case SDL_EVENT_KEY_UP:
 | 
			
		||||
            switch (event->key.scancode) {
 | 
			
		||||
                #ifndef NDEBUG
 | 
			
		||||
                case SDL_SCANCODE_D:
 | 
			
		||||
                    Clay_SetDebugModeEnabled(!Clay_IsDebugModeEnabled());
 | 
			
		||||
                    break;
 | 
			
		||||
                #endif
 | 
			
		||||
                case SDL_SCANCODE_Q:
 | 
			
		||||
                    ret_val = SDL_APP_SUCCESS;
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case SDL_EVENT_WINDOW_RESIZED:
 | 
			
		||||
            Clay_SetLayoutDimensions((Clay_Dimensions) { (float) event->window.data1, (float) event->window.data2 });
 | 
			
		||||
            break;
 | 
			
		||||
        case SDL_EVENT_MOUSE_MOTION:
 | 
			
		||||
            Clay_SetPointerState((Clay_Vector2) { event->motion.x, event->motion.y },
 | 
			
		||||
                event->motion.state & SDL_BUTTON_LMASK);
 | 
			
		||||
            break;
 | 
			
		||||
        case SDL_EVENT_MOUSE_BUTTON_DOWN:
 | 
			
		||||
        case SDL_EVENT_MOUSE_BUTTON_UP:
 | 
			
		||||
            Clay_SetPointerState((Clay_Vector2) { event->motion.x, event->motion.y },
 | 
			
		||||
                     event->button.down);
 | 
			
		||||
            break;
 | 
			
		||||
        #ifndef NDEBUG
 | 
			
		||||
        case SDL_EVENT_MOUSE_WHEEL:
 | 
			
		||||
            Clay_UpdateScrollContainers(true,
 | 
			
		||||
                (Clay_Vector2) {event->wheel.x, event->wheel.y}, state->deltaTime);
 | 
			
		||||
        #endif
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret_val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDL_AppQuit(void *appstate, SDL_AppResult result) {
 | 
			
		||||
    (void) result;
 | 
			
		||||
 | 
			
		||||
    if (result != SDL_APP_SUCCESS) {
 | 
			
		||||
        SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Application failed to run");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    AppState *state = appstate;
 | 
			
		||||
 | 
			
		||||
    if (state) {
 | 
			
		||||
        if (state->rendererData.renderer)
 | 
			
		||||
            SDL_DestroyRenderer(state->rendererData.renderer);
 | 
			
		||||
 | 
			
		||||
        if (state->window)
 | 
			
		||||
            SDL_DestroyWindow(state->window);
 | 
			
		||||
 | 
			
		||||
        if (state->rendererData.fonts) {
 | 
			
		||||
            for (size_t i = 0; i < sizeof(state->rendererData.fonts) / sizeof(*state->rendererData.fonts); ++i) {
 | 
			
		||||
                TTF_CloseFont(state->rendererData.fonts[i]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            SDL_free(state->rendererData.fonts);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (state->rendererData.textEngine)
 | 
			
		||||
            TTF_DestroyRendererTextEngine(state->rendererData.textEngine);
 | 
			
		||||
 | 
			
		||||
        SDL_free(state);
 | 
			
		||||
    }
 | 
			
		||||
    TTF_Quit();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4454
									
								
								include/clay.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4454
									
								
								include/clay.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										151
									
								
								include/shared_layout.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								include/shared_layout.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,151 @@
 | 
			
		||||
#ifndef UART_CLAY_COMMON_LAYOUT_H
 | 
			
		||||
#define UART_CLAY_COMMON_LAYOUT_H
 | 
			
		||||
 | 
			
		||||
#include "uart_func.c"
 | 
			
		||||
 | 
			
		||||
typedef enum { MAIN_FONT, SMALL_FONT } FONT_ID;
 | 
			
		||||
 | 
			
		||||
const Clay_Color COLOR_RED = {255, 45, 0, 255};
 | 
			
		||||
const Clay_Color COLOR_GREEN = {25, 255, 25, 255};
 | 
			
		||||
const Clay_Color COLOR_BLUE = {0, 120, 255, 255};
 | 
			
		||||
const Clay_Color COLOR_ORANGE = {225, 127, 0, 255};
 | 
			
		||||
const Clay_Color COLOR_LIGHT = {224, 215, 210, 255};
 | 
			
		||||
const Clay_Color COLOR_BLACK = {0, 0, 0, 255};
 | 
			
		||||
 | 
			
		||||
const Clay_Sizing EXPAND = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) };
 | 
			
		||||
const Clay_ChildAlignment CENTER_X_Y = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER };
 | 
			
		||||
 | 
			
		||||
const Clay_LayoutConfig BUTTON_CONFIG = {
 | 
			
		||||
    .sizing = EXPAND,
 | 
			
		||||
    .childAlignment = CENTER_X_Y
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const Clay_TextElementConfig LARGE_TEXT = { .textColor = COLOR_BLACK, .fontId = MAIN_FONT, .fontSize = 30 };
 | 
			
		||||
 | 
			
		||||
Clay_String modal_message;
 | 
			
		||||
 | 
			
		||||
Clay_Color darken(const Clay_Color color, const int scale) {
 | 
			
		||||
    return (Clay_Color){
 | 
			
		||||
        color.r * (100 - scale) / 100,
 | 
			
		||||
        color.g * (100 - scale) / 100,
 | 
			
		||||
        color.b * (100 - scale) / 100,
 | 
			
		||||
        color.a
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void toggle_red(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
 | 
			
		||||
    const uart_data *data = (uart_data *)userData;
 | 
			
		||||
 | 
			
		||||
    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
 | 
			
		||||
        constexpr size_t response_length = 15;
 | 
			
		||||
        handle_uart(data, 'r', response_length);
 | 
			
		||||
        modal_message.length = response_length - 2;
 | 
			
		||||
        UART_modal_show = true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void toggle_green(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
 | 
			
		||||
    const uart_data *data = (uart_data *)userData;
 | 
			
		||||
 | 
			
		||||
    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
 | 
			
		||||
        constexpr size_t response_length = 17;
 | 
			
		||||
        handle_uart(data, 'g', response_length);
 | 
			
		||||
        modal_message.length = response_length - 2;
 | 
			
		||||
 | 
			
		||||
        UART_modal_show = true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void toggle_blue(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
 | 
			
		||||
    const uart_data *data = (uart_data *)userData;
 | 
			
		||||
 | 
			
		||||
    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
 | 
			
		||||
        constexpr size_t response_length = 16;
 | 
			
		||||
        handle_uart(data, 'b', response_length);
 | 
			
		||||
        modal_message.length = response_length - 2;
 | 
			
		||||
        UART_modal_show = true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void toggle_orange(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
 | 
			
		||||
    const uart_data *data = (uart_data *)userData;
 | 
			
		||||
 | 
			
		||||
    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
 | 
			
		||||
        constexpr size_t response_length = 18;
 | 
			
		||||
        handle_uart(data, 'o', response_length);
 | 
			
		||||
        modal_message.length = response_length - 2;
 | 
			
		||||
        UART_modal_show = true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void hide_modal(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) {
 | 
			
		||||
    if (pointerInfo.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) {
 | 
			
		||||
        UART_modal_show = false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Button(const Clay_String label, const Clay_Color color, void (*onHoverFunction)(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData), const intptr_t data) {
 | 
			
		||||
    CLAY_AUTO_ID({
 | 
			
		||||
        .layout = BUTTON_CONFIG, .backgroundColor = color, .cornerRadius = CLAY_CORNER_RADIUS(16)
 | 
			
		||||
    }) {
 | 
			
		||||
        Clay_OnHover(onHoverFunction, data);
 | 
			
		||||
        CLAY_TEXT(label, (void *)&LARGE_TEXT);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Modal() {
 | 
			
		||||
    CLAY_AUTO_ID({
 | 
			
		||||
        .layout = {
 | 
			
		||||
            .layoutDirection = CLAY_TOP_TO_BOTTOM,
 | 
			
		||||
            .sizing = { .height = CLAY_SIZING_PERCENT(0.25f), .width = CLAY_SIZING_PERCENT(0.55f) },
 | 
			
		||||
            .childAlignment = CENTER_X_Y,
 | 
			
		||||
            .padding = CLAY_PADDING_ALL(16),
 | 
			
		||||
            .childGap = 8,
 | 
			
		||||
        },
 | 
			
		||||
        .cornerRadius = CLAY_CORNER_RADIUS(16),
 | 
			
		||||
        .floating = {
 | 
			
		||||
            .attachTo = CLAY_ATTACH_TO_PARENT,
 | 
			
		||||
            .attachPoints = { .element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER }
 | 
			
		||||
        },
 | 
			
		||||
        .backgroundColor = darken(COLOR_LIGHT, 10)
 | 
			
		||||
    }) {
 | 
			
		||||
        CLAY_TEXT(modal_message, (void *)&LARGE_TEXT);
 | 
			
		||||
        CLAY_AUTO_ID({ .layout = { .sizing = EXPAND } });
 | 
			
		||||
        CLAY_AUTO_ID({
 | 
			
		||||
            .layout = {
 | 
			
		||||
                .sizing = { .height = CLAY_SIZING_FIT(), .width = CLAY_SIZING_GROW() },
 | 
			
		||||
                .childAlignment = CENTER_X_Y
 | 
			
		||||
            }, .backgroundColor = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(16)
 | 
			
		||||
        }) {
 | 
			
		||||
            Clay_OnHover(hide_modal, 0);
 | 
			
		||||
            CLAY_TEXT(CLAY_STRING("X"), (void *)&LARGE_TEXT);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Clay_RenderCommandArray Clay_CreateLayout(uart_data *data) {
 | 
			
		||||
    Clay_BeginLayout();
 | 
			
		||||
    Clay__debugViewWidth = 700;
 | 
			
		||||
 | 
			
		||||
    CLAY(CLAY_ID("Outer"),{
 | 
			
		||||
        .layout = {
 | 
			
		||||
            .layoutDirection = CLAY_TOP_TO_BOTTOM,
 | 
			
		||||
            .sizing = EXPAND,
 | 
			
		||||
            .padding = CLAY_PADDING_ALL(16),
 | 
			
		||||
            .childGap = 16
 | 
			
		||||
        },
 | 
			
		||||
        .backgroundColor = COLOR_LIGHT,
 | 
			
		||||
    }) {
 | 
			
		||||
        if (UART_modal_show) {
 | 
			
		||||
            Modal();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Button(CLAY_STRING("Red"), COLOR_RED, UART_modal_show ? nullptr : toggle_red, (intptr_t)data);
 | 
			
		||||
        Button(CLAY_STRING("Green"), COLOR_GREEN, UART_modal_show ? nullptr : toggle_green, (intptr_t)data);
 | 
			
		||||
        Button(CLAY_STRING("Blue"), COLOR_BLUE, UART_modal_show ? nullptr : toggle_blue, (intptr_t)data);
 | 
			
		||||
        Button(CLAY_STRING("Orange"), COLOR_ORANGE, UART_modal_show ? nullptr : toggle_orange, (intptr_t)data);
 | 
			
		||||
    }
 | 
			
		||||
    return Clay_EndLayout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif //UART_CLAY_COMMON_LAYOUT_H
 | 
			
		||||
							
								
								
									
										79
									
								
								include/uart_func.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								include/uart_func.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
#ifndef UART_CLAY_UART_FUNC_H
 | 
			
		||||
#define UART_CLAY_UART_FUNC_H
 | 
			
		||||
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "clay.h"
 | 
			
		||||
 | 
			
		||||
bool UART_modal_show = false;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    int serial_port;
 | 
			
		||||
    Clay_String buffer;
 | 
			
		||||
} uart_data;
 | 
			
		||||
 | 
			
		||||
static void trim_message(const Clay_String message, const size_t length) {
 | 
			
		||||
    memset((void *)message.chars + length - 2, 0, message.length - length + 2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int open_uart_port(const char *file_path) {
 | 
			
		||||
    const int serial_port = open(file_path, O_RDWR);
 | 
			
		||||
    if (serial_port < 0) {
 | 
			
		||||
        printf("Error %i from open: %s\n", errno, strerror(errno));
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    struct termios tty;
 | 
			
		||||
    if (tcgetattr(serial_port, &tty) < 0) {
 | 
			
		||||
        printf("Error %i from tcgetattr: %s\n", errno, strerror(errno));
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    tty.c_cflag &= ~PARENB; // Clear parity bit, disabling parity
 | 
			
		||||
    tty.c_cflag &= ~CSTOPB; // Clear stop field, only one stop bit used in communication
 | 
			
		||||
    tty.c_cflag &= ~CSIZE; // Clear all the size bits
 | 
			
		||||
    tty.c_cflag |= CS8; // 8 bits per byte
 | 
			
		||||
    tty.c_cflag &= ~CRTSCTS; // Disable RTS/CTS hardware flow control
 | 
			
		||||
    tty.c_cflag |= CREAD | CLOCAL; // Turn on READ & ignore ctrl lines (CLOCAL = 1)
 | 
			
		||||
 | 
			
		||||
    tty.c_lflag &= ~ICANON; // Non-canonical mode
 | 
			
		||||
    tty.c_lflag &= ~ECHO; // Disable echo
 | 
			
		||||
    tty.c_lflag &= ~ECHOE; // Disable erasure
 | 
			
		||||
    tty.c_lflag &= ~ECHONL; // Disable new-line echo
 | 
			
		||||
    tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP
 | 
			
		||||
 | 
			
		||||
    tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl
 | 
			
		||||
    tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL);
 | 
			
		||||
    // Disable any special handling of received bytes
 | 
			
		||||
 | 
			
		||||
    tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars)
 | 
			
		||||
    tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed
 | 
			
		||||
 | 
			
		||||
    tty.c_cc[VTIME] = 0;
 | 
			
		||||
    tty.c_cc[VMIN] = 1;
 | 
			
		||||
 | 
			
		||||
    // Set baud rate to be 9600
 | 
			
		||||
    cfsetspeed(&tty, B9600);
 | 
			
		||||
 | 
			
		||||
    // Save tty settings, also checking for error
 | 
			
		||||
    if (tcsetattr(serial_port, TCSANOW, &tty) != 0) {
 | 
			
		||||
        printf("Can't set fd state. Error %d, %s", errno, strerror(errno));
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return serial_port;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void handle_uart(const uart_data *data, const char msg, const int response_length) {
 | 
			
		||||
    write(data->serial_port, &msg, 1);
 | 
			
		||||
 | 
			
		||||
    memset((void *)data->buffer.chars, 0, data->buffer.length);
 | 
			
		||||
    read(data->serial_port, (void *)data->buffer.chars, response_length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif //UART_CLAY_UART_FUNC_H
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user