Browse Source

First commit.

Vladimir N. Shilov 3 years ago
commit
c9595567c6

+ 29 - 0
.gitignore

@@ -0,0 +1,29 @@
+.dep
+build
+bin
+obj
+etc
+*.rar
+*.zip
+*.7z
+*.DBK
+*.PWI
+*.LST
+*.SDI
+*.hex
+*.eep
+*.elf
+*.bin
+*.srec
+*.o
+*.lst
+*.map
+*.d
+*.depend
+
+# IAR project
+EWAVR/Debug
+EWAVR/Release
+EWAVR/settings
+EWAVR/Backup*
+EWAVR/*.dep

+ 106 - 0
Dryer.cbp

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+	<FileVersion major="1" minor="6" />
+	<Project>
+		<Option title="Dryer" />
+		<Option pch_mode="2" />
+		<Option compiler="avr-gcc" />
+		<Option virtualFolders="rtos/;ssd1306xled/;tinyavrlib/" />
+		<Build>
+			<Target title="Debug">
+				<Option output="build/bin/Debug/Dryer.elf" prefix_auto="1" extension_auto="0" />
+				<Option working_dir="" />
+				<Option object_output="build/obj/Debug/" />
+				<Option type="5" />
+				<Option compiler="avr-gcc" />
+				<Compiler>
+					<Add option="-g" />
+				</Compiler>
+			</Target>
+			<Target title="Release">
+				<Option output="build/bin/Release/Dryer.elf" prefix_auto="1" extension_auto="0" />
+				<Option working_dir="" />
+				<Option object_output="build/obj/Release/" />
+				<Option type="5" />
+				<Option compiler="avr-gcc" />
+				<Compiler>
+					<Add option="-Os" />
+				</Compiler>
+			</Target>
+			<Environment>
+				<Variable name="MCU" value="atmega328p" />
+			</Environment>
+		</Build>
+		<Compiler>
+			<Add option="-Wall" />
+			<Add option="-mmcu=atmega328p" />
+			<Add option="-std=gnu11" />
+			<Add option="-DF_CPU=8000000UL" />
+			<Add directory="lib" />
+			<Add directory="inc" />
+		</Compiler>
+		<Linker>
+			<Add option="-mmcu=atmega328p" />
+			<Add option="-Wl,-Map=$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).map,--cref" />
+		</Linker>
+		<ExtraCommands>
+			<Add after="avr-size --target=elf32-avr $(TARGET_OUTPUT_FILE)" />
+			<Add after='cmd /c &quot;avr-objdump -h -S $(TARGET_OUTPUT_FILE) &gt; $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).lss&quot;' />
+			<Add after="avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex" />
+			<Add after="avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).eep" />
+			<Add after="avr-objcopy --no-change-warnings -j .fuse --change-section-lma .fuse=0 -O ihex $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).fuse" />
+		</ExtraCommands>
+		<Unit filename="inc/i2c.h" />
+		<Unit filename="inc/main.h" />
+		<Unit filename="inc/sensor.h" />
+		<Unit filename="lib/rtos/rtos.c">
+			<Option compilerVar="CC" />
+			<Option virtualFolder="rtos/" />
+		</Unit>
+		<Unit filename="lib/rtos/rtos.h">
+			<Option virtualFolder="rtos/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/font6x8.h">
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/font8x16.h">
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/ssd1306xled.c">
+			<Option compilerVar="CC" />
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/ssd1306xled.h">
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/ssd1306xledtx.c">
+			<Option compilerVar="CC" />
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/ssd1306xled/ssd1306xledtx.h">
+			<Option virtualFolder="ssd1306xled/" />
+		</Unit>
+		<Unit filename="lib/tinyavrlib/num2str.c">
+			<Option compilerVar="CC" />
+			<Option virtualFolder="tinyavrlib/" />
+		</Unit>
+		<Unit filename="lib/tinyavrlib/num2str.h">
+			<Option virtualFolder="tinyavrlib/" />
+		</Unit>
+		<Unit filename="src/fuse.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Unit filename="src/i2c.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Unit filename="src/main.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Unit filename="src/sensor.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Extensions>
+			<lib_finder disable_auto="1" />
+		</Extensions>
+	</Project>
+</CodeBlocks_project_file>

+ 65 - 0
Dryer.layout

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_layout_file>
+	<FileVersion major="1" minor="0" />
+	<ActiveTarget name="Debug" />
+	<File name="src\main.c" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="135" topLine="21" />
+		</Cursor>
+	</File>
+	<File name="src\i2c.c" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="318" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="inc\i2c.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="54" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="lib\tinyavrlib\num2str.c" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="2700" topLine="43" />
+		</Cursor>
+	</File>
+	<File name="inc\sensor.h" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="393" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="inc\main.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="38" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="lib\rtos\rtos.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="72" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="lib\ssd1306xled\ssd1306xledtx.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1053" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="lib\ssd1306xled\ssd1306xledtx.c" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="2433" topLine="14" />
+		</Cursor>
+	</File>
+	<File name="src\sensor.c" open="1" top="1" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1691" topLine="70" />
+		</Cursor>
+	</File>
+	<File name="lib\rtos\rtos.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="2098" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="lib\ssd1306xled\ssd1306xled.c" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="4706" topLine="122" />
+		</Cursor>
+	</File>
+</CodeBlocks_layout_file>

+ 2177 - 0
EWAVR/dryer.ewp

@@ -0,0 +1,2177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <fileVersion>3</fileVersion>
+    <configuration>
+        <name>Debug</name>
+        <toolchain>
+            <name>AVR</name>
+        </toolchain>
+        <debug>1</debug>
+        <settings>
+            <name>General</name>
+            <archiveVersion>12</archiveVersion>
+            <data>
+                <version>10</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>GGEnhancedCore</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Variant Memory</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ExePath</name>
+                    <state>Debug\Exe</state>
+                </option>
+                <option>
+                    <name>ObjPath</name>
+                    <state>Debug\Obj</state>
+                </option>
+                <option>
+                    <name>ListPath</name>
+                    <state>Debug\List</state>
+                </option>
+                <option>
+                    <name>GGEnableConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GG64KFlash</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GG64BitDoubles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GGFPSLICCOnfig</name>
+                    <version>0</version>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>LCEnableBitDefs</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>LCHeapSize</name>
+                    <state>0x10</state>
+                </option>
+                <option>
+                    <name>SCCStackSize</name>
+                    <state>0x20</state>
+                </option>
+                <option>
+                    <name>SCExtCStack</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCRStackSize</name>
+                    <state>16</state>
+                </option>
+                <option>
+                    <name>SCExtRStack</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCEnableBus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCAddWaitstate</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCRamBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRamSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRomBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRomSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCNVBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCNVSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCInitWithReti</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GOutputBinary</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GGEepromUtil</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GGEepromUtilSize</name>
+                    <state>1024</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelect</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RTDescription</name>
+                    <state>Use the normal configuration of the C/C++</state>
+                    <state>runtime library. No locale interface,</state>
+                    <state>C locale, no file descriptor support,</state>
+                    <state>no multibytes in printf and scanf, and</state>
+                    <state>no hex floats in strtod.</state>
+                </option>
+                <option>
+                    <name>RTConfigPath</name>
+                    <state>$TOOLKIT_DIR$\LIB\DLIB\dlAVR-3s-ec_mul-sf-n.h</state>
+                </option>
+                <option>
+                    <name>RTLibraryPath</name>
+                    <state>$TOOLKIT_DIR$\LIB\DLIB\dlAVR-3s-ec_mul-sf-n.r90</state>
+                </option>
+                <option>
+                    <name>Input variant</name>
+                    <version>36</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Input description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>Output variant</name>
+                    <version>36</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Output description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelectSlave</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GeneralEnableMisra</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVerbose</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LCTinyHeapSize</name>
+                    <state>0x10</state>
+                </option>
+                <option>
+                    <name>LCNearHeapSize</name>
+                    <state>0x20</state>
+                </option>
+                <option>
+                    <name>LCFarHeapSize</name>
+                    <state>0x1000</state>
+                </option>
+                <option>
+                    <name>LCHugeHeapSize</name>
+                    <state>0x1000</state>
+                </option>
+                <option>
+                    <name>LCsHeapConfigText</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GGNoMULInstruction</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>GenDeviceSelectMenu</name>
+                    <state>m328p	ATmega328P</state>
+                </option>
+                <option>
+                    <name>OGProductVersion</name>
+                    <state>7.30.4.1668</state>
+                </option>
+                <option>
+                    <name>OGLastSavedByProductVersion</name>
+                    <state>7.30.4.1668</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ICCAVR</name>
+            <archiveVersion>6</archiveVersion>
+            <data>
+                <version>17</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>CCVariantProcessor</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnhancedCore</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCVariantMemory</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCPreprocFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocComments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCListCMnemonics</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCListCMessages</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableRemarks</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCDiagSuppress</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagRemark</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagWarning</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagError</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCWarnAsError</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCConstInRAM</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCInitInFlash</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCForceVariables</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOldCallConv</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLockRegs</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCAllowList</name>
+                    <version>3</version>
+                    <state>000000</state>
+                </option>
+                <option>
+                    <name>CCCrossCallPassesList</name>
+                    <version>8</version>
+                    <state>5</state>
+                </option>
+                <option>
+                    <name>CCObjUseModuleName</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCObjModuleName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDebugInfo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCNoErrorMsg</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CC64BitDoubles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CC64KFlash</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableExtBus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableBitDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptForceCrossCall</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCharIs</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCExt</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRequirePrototypes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCompilerRuntimeInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>newCCIncludePaths</name>
+                    <state>$PROJ_DIR$\..\inc</state>
+                    <state>$PROJ_DIR$\..\lib</state>
+                </option>
+                <option>
+                    <name>CCStdIncCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEepromSize</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLockRegsSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOutputFile</name>
+                    <state>$FILE_BNAME$.r90</state>
+                </option>
+                <option>
+                    <name>CompilerMisraOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLibConfigHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>PreInclude</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCOverrideModuleTypeDefault</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRadioModuleType</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRadioModuleTypeSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCCAdditionalCommandLineOptionsSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>IccLang</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccCppDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccAllowVLA</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCppInlineSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccStaticDestr</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccFloatSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptStrategy</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOptLevel</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOptLevelSlave</name>
+                    <state>1</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>AAVR</name>
+            <archiveVersion>5</archiveVersion>
+            <data>
+                <version>11</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>IProcessor</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ACaseSensitivity</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AWarnEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnWhat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnOne</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CDebug</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ADefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>MacroChars</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>UndefAsm</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefLine</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefTime</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefDate</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefTid</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AList</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AListHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AListing</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Includes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacExps</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacExec</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OnlyAssed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MultiLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>TabSpacing</name>
+                    <state>8</state>
+                </option>
+                <option>
+                    <name>AXRef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDefines</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefInternal</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDual</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OAEnhancedCore</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AMaxErrOn</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AMaxErrNum</name>
+                    <state>100</state>
+                </option>
+                <option>
+                    <name>ANewIncludes</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AsmMultiByteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AavrVariantMemory</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AsmHasElpm</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AsmOutputFile</name>
+                    <state>$FILE_BNAME$.r90</state>
+                </option>
+                <option>
+                    <name>AStdIncCheck</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CUSTOM</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <extensions></extensions>
+                <cmdline></cmdline>
+                <hasPrio>0</hasPrio>
+            </data>
+        </settings>
+        <settings>
+            <name>BICOMP</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+        <settings>
+            <name>BUILDACTION</name>
+            <archiveVersion>1</archiveVersion>
+            <data>
+                <prebuild></prebuild>
+                <postbuild></postbuild>
+            </data>
+        </settings>
+        <settings>
+            <name>XLINK</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <version>16</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>XOutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state>dryer.d90</state>
+                </option>
+                <option>
+                    <name>OutputFormat</name>
+                    <version>11</version>
+                    <state>23</state>
+                </option>
+                <option>
+                    <name>FormatVariant</name>
+                    <version>9</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>SecondaryOutputFile</name>
+                    <state>(None for the selected format)</state>
+                </option>
+                <option>
+                    <name>XDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AlwaysOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OverlapWarnings</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>NoGlobalCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XList</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>SegmentMap</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ListSymbols</name>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>XIncludes</name>
+                    <state>$TOOLKIT_DIR$\LIB\</state>
+                </option>
+                <option>
+                    <name>ModuleStatus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XclOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XclFile</name>
+                    <state>$TOOLKIT_DIR$\src\template\cfgm328p.xcl</state>
+                </option>
+                <option>
+                    <name>XclFileSlave</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>DoFill</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>FillerByte</name>
+                    <state>0xFF</state>
+                </option>
+                <option>
+                    <name>DoCrc</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcSize</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcAlgo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcPoly</name>
+                    <state>0x11021</state>
+                </option>
+                <option>
+                    <name>CrcCompl</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RangeCheckAlternatives</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SuppressAllWarn</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SuppressDiags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>TreatAsWarn</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>TreatAsErr</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>ModuleLocalSym</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcBitOrder</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OXSysConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IncludeSuppressed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ModuleSummary</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>xcProgramEntryLabel</name>
+                    <state>__program_start</state>
+                </option>
+                <option>
+                    <name>DebugInformation</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RuntimeControl</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IoEmulation</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AllowExtraOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenerateExtraOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XExtraOutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ExtraOutputFile</name>
+                    <state>dryer.a90</state>
+                </option>
+                <option>
+                    <name>ExtraOutputFormat</name>
+                    <version>11</version>
+                    <state>25</state>
+                </option>
+                <option>
+                    <name>ExtraFormatVariant</name>
+                    <version>9</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>xcOverrideProgramEntryLabel</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>xcProgramEntryLabelSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ListOutputFormat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>BufferedTermOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XcRTLibraryFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OXLibIOConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XLinkMisraHandler</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OverlaySystemMap</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RawBinaryFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinarySymbol</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinarySegment</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinaryAlign</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CrcAlign</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcInitialValue</name>
+                    <state>0x00</state>
+                </option>
+                <option>
+                    <name>CrcUnitSize</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogInputFiles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogModuleSelection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogPrintfScanf</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogSegmentSelection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogStackDepth</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkStackUsageEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkControlFiles</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>XlinkCallGraphFileEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkCallGraphFileName</name>
+                    <state>$LIST_DIR$\$PROJ_FNAME$.call_graph.cgx</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>XAR</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>1</debug>
+                <option>
+                    <name>XAROutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XARInputs</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>BILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+    </configuration>
+    <configuration>
+        <name>Release</name>
+        <toolchain>
+            <name>AVR</name>
+        </toolchain>
+        <debug>0</debug>
+        <settings>
+            <name>General</name>
+            <archiveVersion>12</archiveVersion>
+            <data>
+                <version>10</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>GGEnhancedCore</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Variant Memory</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ExePath</name>
+                    <state>Release\Exe</state>
+                </option>
+                <option>
+                    <name>ObjPath</name>
+                    <state>Release\Obj</state>
+                </option>
+                <option>
+                    <name>ListPath</name>
+                    <state>Release\List</state>
+                </option>
+                <option>
+                    <name>GGEnableConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GG64KFlash</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GG64BitDoubles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GGFPSLICCOnfig</name>
+                    <version>0</version>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>LCEnableBitDefs</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>LCHeapSize</name>
+                    <state>0x10</state>
+                </option>
+                <option>
+                    <name>SCCStackSize</name>
+                    <state>0x20</state>
+                </option>
+                <option>
+                    <name>SCExtCStack</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCRStackSize</name>
+                    <state>16</state>
+                </option>
+                <option>
+                    <name>SCExtRStack</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCEnableBus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCAddWaitstate</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SCRamBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRamSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRomBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCRomSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCNVBase</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCNVSize</name>
+                    <state>0x0</state>
+                </option>
+                <option>
+                    <name>SCInitWithReti</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GOutputBinary</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GGEepromUtil</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GGEepromUtilSize</name>
+                    <state>1024</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelect</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RTDescription</name>
+                    <state>Use the normal configuration of the C/C++</state>
+                    <state>runtime library. No locale interface,</state>
+                    <state>C locale, no file descriptor support,</state>
+                    <state>no multibytes in printf and scanf, and</state>
+                    <state>no hex floats in strtod.</state>
+                </option>
+                <option>
+                    <name>RTConfigPath</name>
+                    <state>$TOOLKIT_DIR$\LIB\DLIB\dlAVR-3s-ec_mul-sf-n.h</state>
+                </option>
+                <option>
+                    <name>RTLibraryPath</name>
+                    <state>$TOOLKIT_DIR$\LIB\DLIB\dlAVR-3s-ec_mul-sf-n.r90</state>
+                </option>
+                <option>
+                    <name>Input variant</name>
+                    <version>36</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Input description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>Output variant</name>
+                    <version>36</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>Output description</name>
+                    <state>Automatic choice of formatter.</state>
+                </option>
+                <option>
+                    <name>GRuntimeLibSelectSlave</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GeneralEnableMisra</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVerbose</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>LCTinyHeapSize</name>
+                    <state>0x10</state>
+                </option>
+                <option>
+                    <name>LCNearHeapSize</name>
+                    <state>0x20</state>
+                </option>
+                <option>
+                    <name>LCFarHeapSize</name>
+                    <state>0x1000</state>
+                </option>
+                <option>
+                    <name>LCHugeHeapSize</name>
+                    <state>0x1000</state>
+                </option>
+                <option>
+                    <name>LCsHeapConfigText</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>GGNoMULInstruction</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraVer</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>GeneralMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>GenDeviceSelectMenu</name>
+                    <state>m328p	ATmega328P</state>
+                </option>
+                <option>
+                    <name>OGProductVersion</name>
+                    <state>7.30.4.1668</state>
+                </option>
+                <option>
+                    <name>OGLastSavedByProductVersion</name>
+                    <state>7.30.4.1668</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>ICCAVR</name>
+            <archiveVersion>6</archiveVersion>
+            <data>
+                <version>17</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>CCVariantProcessor</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnhancedCore</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCVariantMemory</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCDefines</name>
+                    <state>NDEBUG</state>
+                </option>
+                <option>
+                    <name>CCPreprocFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocComments</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCPreprocLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListCMnemonics</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCListCMessages</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssFile</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCListAssSource</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableRemarks</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCDiagSuppress</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagRemark</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagWarning</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDiagError</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCWarnAsError</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCConstInRAM</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCInitInFlash</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCForceVariables</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOldCallConv</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLockRegs</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCAllowList</name>
+                    <version>3</version>
+                    <state>111111</state>
+                </option>
+                <option>
+                    <name>CCCrossCallPassesList</name>
+                    <version>8</version>
+                    <state>5</state>
+                </option>
+                <option>
+                    <name>CCObjUseModuleName</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCObjModuleName</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCDebugInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCNoErrorMsg</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CC64BitDoubles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CC64KFlash</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableExtBus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEnableBitDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptForceCrossCall</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCharIs</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCExt</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCMultibyteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRequirePrototypes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCCompilerRuntimeInfo</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>newCCIncludePaths</name>
+                    <state>$PROJ_DIR$\..\inc</state>
+                    <state>$PROJ_DIR$\..\lib</state>
+                </option>
+                <option>
+                    <name>CCStdIncCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCEepromSize</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLockRegsSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CCOutputFile</name>
+                    <state>$FILE_BNAME$.r90</state>
+                </option>
+                <option>
+                    <name>CompilerMisraOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCLibConfigHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>PreInclude</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CCOverrideModuleTypeDefault</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRadioModuleType</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCRadioModuleTypeSlave</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OCCAdditionalCommandLineOptionsSlave</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules04</name>
+                    <version>0</version>
+                    <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+                </option>
+                <option>
+                    <name>CompilerMisraRules98</name>
+                    <version>0</version>
+                    <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+                </option>
+                <option>
+                    <name>IccLang</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccCppDialect</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccAllowVLA</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccCppInlineSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>IccStaticDestr</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IccFloatSemantics</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptStrategy</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CCOptLevel</name>
+                    <state>3</state>
+                </option>
+                <option>
+                    <name>CCOptLevelSlave</name>
+                    <state>3</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>AAVR</name>
+            <archiveVersion>5</archiveVersion>
+            <data>
+                <version>11</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>IProcessor</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AObjPrefix</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ACaseSensitivity</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AWarnEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnWhat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AWarnOne</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange1</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AWarnRange2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CDebug</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ADefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>MacroChars</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>UndefAsm</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefLine</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefTime</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefDate</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>UndefTid</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AList</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AListHeader</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AListing</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>Includes</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacDefs</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MacExps</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>MacExec</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OnlyAssed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>MultiLine</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>TabSpacing</name>
+                    <state>8</state>
+                </option>
+                <option>
+                    <name>AXRef</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDefines</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefInternal</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AXRefDual</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OAEnhancedCore</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AMaxErrOn</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AMaxErrNum</name>
+                    <state>100</state>
+                </option>
+                <option>
+                    <name>ANewIncludes</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AsmMultiByteSupport</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AavrVariantMemory</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AsmHasElpm</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>AsmOutputFile</name>
+                    <state>$FILE_BNAME$.r90</state>
+                </option>
+                <option>
+                    <name>AStdIncCheck</name>
+                    <state>0</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>CUSTOM</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <extensions></extensions>
+                <cmdline></cmdline>
+                <hasPrio>0</hasPrio>
+            </data>
+        </settings>
+        <settings>
+            <name>BICOMP</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+        <settings>
+            <name>BUILDACTION</name>
+            <archiveVersion>1</archiveVersion>
+            <data>
+                <prebuild></prebuild>
+                <postbuild></postbuild>
+            </data>
+        </settings>
+        <settings>
+            <name>XLINK</name>
+            <archiveVersion>3</archiveVersion>
+            <data>
+                <version>16</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>XOutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state>dryer.a90</state>
+                </option>
+                <option>
+                    <name>OutputFormat</name>
+                    <version>11</version>
+                    <state>25</state>
+                </option>
+                <option>
+                    <name>FormatVariant</name>
+                    <version>9</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>SecondaryOutputFile</name>
+                    <state>(None for the selected format)</state>
+                </option>
+                <option>
+                    <name>XDefines</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>AlwaysOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OverlapWarnings</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>NoGlobalCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XList</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>SegmentMap</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>ListSymbols</name>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>PageLengthCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>PageLength</name>
+                    <state>80</state>
+                </option>
+                <option>
+                    <name>XIncludes</name>
+                    <state>$TOOLKIT_DIR$\LIB\</state>
+                </option>
+                <option>
+                    <name>ModuleStatus</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XclOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XclFile</name>
+                    <state>$TOOLKIT_DIR$\src\template\cfgm328p.xcl</state>
+                </option>
+                <option>
+                    <name>XclFileSlave</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>DoFill</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>FillerByte</name>
+                    <state>0xFF</state>
+                </option>
+                <option>
+                    <name>DoCrc</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcSize</name>
+                    <version>0</version>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcAlgo</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcPoly</name>
+                    <state>0x11021</state>
+                </option>
+                <option>
+                    <name>CrcCompl</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RangeCheckAlternatives</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SuppressAllWarn</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>SuppressDiags</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>TreatAsWarn</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>TreatAsErr</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>ModuleLocalSym</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>CrcBitOrder</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OXSysConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XExtraOptionsCheck</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XExtraOptions</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IncludeSuppressed</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ModuleSummary</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>xcProgramEntryLabel</name>
+                    <state>__program_start</state>
+                </option>
+                <option>
+                    <name>DebugInformation</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>RuntimeControl</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IoEmulation</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>AllowExtraOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>GenerateExtraOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XExtraOutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ExtraOutputFile</name>
+                    <state>dryer.a90</state>
+                </option>
+                <option>
+                    <name>ExtraOutputFormat</name>
+                    <version>11</version>
+                    <state>25</state>
+                </option>
+                <option>
+                    <name>ExtraFormatVariant</name>
+                    <version>9</version>
+                    <state>2</state>
+                </option>
+                <option>
+                    <name>xcOverrideProgramEntryLabel</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>xcProgramEntryLabelSelect</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>ListOutputFormat</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>BufferedTermOutput</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XcRTLibraryFile</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>OXLibIOConfig</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>XLinkMisraHandler</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>OverlaySystemMap</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>RawBinaryFile</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinarySymbol</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinarySegment</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>RawBinaryAlign</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>CrcAlign</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>CrcInitialValue</name>
+                    <state>0x00</state>
+                </option>
+                <option>
+                    <name>CrcUnitSize</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogInputFiles</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogModuleSelection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogPrintfScanf</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogSegmentSelection</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkLogStackDepth</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkStackUsageEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkControlFiles</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>XlinkCallGraphFileEnable</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XlinkCallGraphFileName</name>
+                    <state>$LIST_DIR$\$PROJ_FNAME$.call_graph.cgx</state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>XAR</name>
+            <archiveVersion>2</archiveVersion>
+            <data>
+                <version>0</version>
+                <wantNonLocal>1</wantNonLocal>
+                <debug>0</debug>
+                <option>
+                    <name>XAROutOverride</name>
+                    <state>0</state>
+                </option>
+                <option>
+                    <name>XARInputs</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>OutputFile</name>
+                    <state></state>
+                </option>
+            </data>
+        </settings>
+        <settings>
+            <name>BILINK</name>
+            <archiveVersion>0</archiveVersion>
+            <data />
+        </settings>
+    </configuration>
+    <group>
+        <name>inc</name>
+        <file>
+            <name>$PROJ_DIR$\..\inc\i2c.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\inc\main.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\inc\sensor.h</name>
+        </file>
+    </group>
+    <group>
+        <name>lib</name>
+        <group>
+            <name>rtos</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\rtos\rtos.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\rtos\rtos.h</name>
+            </file>
+        </group>
+        <group>
+            <name>ssd1306xled</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\font6x8.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\font8x16.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xled.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xled.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xledtx.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xledtx.h</name>
+            </file>
+        </group>
+        <group>
+            <name>tinyavrlib</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\tinyavrlib\num2str.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\tinyavrlib\num2str.h</name>
+            </file>
+        </group>
+    </group>
+    <group>
+        <name>src</name>
+        <file>
+            <name>$PROJ_DIR$\..\src\fuse.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\i2c.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\main.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\sensor.c</name>
+        </file>
+    </group>
+</project>

+ 2227 - 0
EWAVR/dryer.ewt

@@ -0,0 +1,2227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+    <fileVersion>3</fileVersion>
+    <configuration>
+        <name>Debug</name>
+        <toolchain>
+            <name>AVR</name>
+        </toolchain>
+        <debug>1</debug>
+        <settings>
+            <name>C-STAT</name>
+            <archiveVersion>262</archiveVersion>
+            <data>
+                <version>262</version>
+                <cstatargs>
+                    <useExtraArgs>0</useExtraArgs>
+                    <extraArgs></extraArgs>
+                    <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+                    <analyzeTimeout>600</analyzeTimeout>
+                    <enableParallel>1</enableParallel>
+                    <parallelThreads>4</parallelThreads>
+                    <enableFalsePositives>0</enableFalsePositives>
+                    <messagesLimitEnabled>1</messagesLimitEnabled>
+                    <messagesLimit>100</messagesLimit>
+                </cstatargs>
+                <cstat_settings>
+                    <cstat_version>1.6.3</cstat_version>
+                    <checks_tree>
+                        <package name="STDCHECKS" enabled="true">
+                            <group enabled="true" name="ARR">
+                                <check name="ARR-inv-index-pos" enabled="true" />
+                                <check name="ARR-inv-index-ptr-pos" enabled="true" />
+                                <check name="ARR-inv-index-ptr" enabled="true" />
+                                <check name="ARR-inv-index" enabled="true" />
+                                <check name="ARR-neg-index" enabled="true" />
+                                <check name="ARR-uninit-index" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ATH">
+                                <check name="ATH-cmp-float" enabled="true" />
+                                <check name="ATH-cmp-unsign-neg" enabled="true" />
+                                <check name="ATH-cmp-unsign-pos" enabled="true" />
+                                <check name="ATH-div-0-assign" enabled="true" />
+                                <check name="ATH-div-0-cmp-aft" enabled="false" />
+                                <check name="ATH-div-0-cmp-bef" enabled="true" />
+                                <check name="ATH-div-0-interval" enabled="true" />
+                                <check name="ATH-div-0-pos" enabled="true" />
+                                <check name="ATH-div-0-unchk-global" enabled="true" />
+                                <check name="ATH-div-0-unchk-local" enabled="true" />
+                                <check name="ATH-div-0-unchk-param" enabled="true" />
+                                <check name="ATH-div-0" enabled="true" />
+                                <check name="ATH-inc-bool" enabled="true" />
+                                <check name="ATH-malloc-overrun" enabled="true" />
+                                <check name="ATH-neg-check-nonneg" enabled="true" />
+                                <check name="ATH-neg-check-pos" enabled="true" />
+                                <check name="ATH-new-overrun" enabled="true" />
+                                <check name="ATH-overflow-cast" enabled="false" />
+                                <check name="ATH-overflow" enabled="true" />
+                                <check name="ATH-shift-bounds" enabled="true" />
+                                <check name="ATH-shift-neg" enabled="true" />
+                                <check name="ATH-sizeof-by-sizeof" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CAST">
+                                <check name="CAST-old-style" enabled="false" />
+                            </group>
+                            <group enabled="true" name="COMMA">
+                                <check name="COMMA-overload" enabled="false" />
+                            </group>
+                            <group enabled="true" name="COMMENT">
+                                <check name="COMMENT-nested" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CONST">
+                                <check name="CONST-member-ret" enabled="true" />
+                            </group>
+                            <group enabled="true" name="COP">
+                                <check name="COP-alloc-ctor" enabled="false" />
+                                <check name="COP-assign-op-ret" enabled="true" />
+                                <check name="COP-assign-op-self" enabled="true" />
+                                <check name="COP-assign-op" enabled="true" />
+                                <check name="COP-copy-ctor" enabled="true" />
+                                <check name="COP-dealloc-dtor" enabled="false" />
+                                <check name="COP-dtor" enabled="true" />
+                                <check name="COP-init-order" enabled="true" />
+                                <check name="COP-init-uninit" enabled="true" />
+                                <check name="COP-member-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CPU">
+                                <check name="CPU-ctor-call-virt" enabled="true" />
+                                <check name="CPU-ctor-implicit" enabled="false" />
+                                <check name="CPU-delete-void" enabled="true" />
+                                <check name="CPU-dtor-call-virt" enabled="true" />
+                                <check name="CPU-malloc-class" enabled="true" />
+                                <check name="CPU-nonvirt-dtor" enabled="true" />
+                                <check name="CPU-return-ref-to-class-data" enabled="true" />
+                            </group>
+                            <group enabled="true" name="DECL">
+                                <check name="DECL-implicit-int" enabled="false" />
+                            </group>
+                            <group enabled="true" name="DEFINE">
+                                <check name="DEFINE-hash-multiple" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ENUM">
+                                <check name="ENUM-bounds" enabled="false" />
+                            </group>
+                            <group enabled="true" name="EXP">
+                                <check name="EXP-cond-assign" enabled="true" />
+                                <check name="EXP-dangling-else" enabled="true" />
+                                <check name="EXP-loop-exit" enabled="true" />
+                                <check name="EXP-main-ret-int" enabled="false" />
+                                <check name="EXP-null-stmt" enabled="false" />
+                                <check name="EXP-stray-semicolon" enabled="false" />
+                            </group>
+                            <group enabled="true" name="EXPR">
+                                <check name="EXPR-const-overflow" enabled="true" />
+                            </group>
+                            <group enabled="true" name="FPT">
+                                <check name="FPT-cmp-null" enabled="true" />
+                                <check name="FPT-literal" enabled="false" />
+                                <check name="FPT-misuse" enabled="true" />
+                            </group>
+                            <group enabled="true" name="FUNC">
+                                <check name="FUNC-implicit-decl" enabled="false" />
+                                <check name="FUNC-unprototyped-all" enabled="false" />
+                                <check name="FUNC-unprototyped-used" enabled="true" />
+                            </group>
+                            <group enabled="true" name="INCLUDE">
+                                <check name="INCLUDE-c-file" enabled="false" />
+                            </group>
+                            <group enabled="true" name="INT">
+                                <check name="INT-use-signed-as-unsigned-pos" enabled="false" />
+                                <check name="INT-use-signed-as-unsigned" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ITR">
+                                <check name="ITR-end-cmp-aft" enabled="true" />
+                                <check name="ITR-end-cmp-bef" enabled="true" />
+                                <check name="ITR-invalidated" enabled="true" />
+                                <check name="ITR-mismatch-alg" enabled="false" />
+                                <check name="ITR-store" enabled="false" />
+                                <check name="ITR-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="LIB">
+                                <check name="LIB-bsearch-overrun-pos" enabled="false" />
+                                <check name="LIB-bsearch-overrun" enabled="false" />
+                                <check name="LIB-fn-unsafe" enabled="false" />
+                                <check name="LIB-fread-overrun-pos" enabled="false" />
+                                <check name="LIB-fread-overrun" enabled="true" />
+                                <check name="LIB-memchr-overrun-pos" enabled="false" />
+                                <check name="LIB-memchr-overrun" enabled="true" />
+                                <check name="LIB-memcpy-overrun-pos" enabled="false" />
+                                <check name="LIB-memcpy-overrun" enabled="true" />
+                                <check name="LIB-memset-overrun-pos" enabled="false" />
+                                <check name="LIB-memset-overrun" enabled="true" />
+                                <check name="LIB-putenv" enabled="false" />
+                                <check name="LIB-qsort-overrun-pos" enabled="false" />
+                                <check name="LIB-qsort-overrun" enabled="false" />
+                                <check name="LIB-return-const" enabled="true" />
+                                <check name="LIB-return-error" enabled="true" />
+                                <check name="LIB-return-leak" enabled="true" />
+                                <check name="LIB-return-neg" enabled="true" />
+                                <check name="LIB-return-null" enabled="true" />
+                                <check name="LIB-sprintf-overrun" enabled="false" />
+                                <check name="LIB-std-sort-overrun-pos" enabled="false" />
+                                <check name="LIB-std-sort-overrun" enabled="true" />
+                                <check name="LIB-strcat-overrun-pos" enabled="false" />
+                                <check name="LIB-strcat-overrun" enabled="true" />
+                                <check name="LIB-strcpy-overrun-pos" enabled="false" />
+                                <check name="LIB-strcpy-overrun" enabled="true" />
+                                <check name="LIB-strncat-overrun-pos" enabled="false" />
+                                <check name="LIB-strncat-overrun" enabled="true" />
+                                <check name="LIB-strncmp-overrun-pos" enabled="false" />
+                                <check name="LIB-strncmp-overrun" enabled="true" />
+                                <check name="LIB-strncpy-overrun-pos" enabled="false" />
+                                <check name="LIB-strncpy-overrun" enabled="true" />
+                            </group>
+                            <group enabled="true" name="LOGIC">
+                                <check name="LOGIC-overload" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MEM">
+                                <check name="MEM-delete-array-op" enabled="true" />
+                                <check name="MEM-delete-op" enabled="true" />
+                                <check name="MEM-double-free-alias" enabled="true" />
+                                <check name="MEM-double-free-some" enabled="true" />
+                                <check name="MEM-double-free" enabled="true" />
+                                <check name="MEM-free-field" enabled="true" />
+                                <check name="MEM-free-fptr" enabled="true" />
+                                <check name="MEM-free-no-alloc-struct" enabled="false" />
+                                <check name="MEM-free-no-alloc" enabled="false" />
+                                <check name="MEM-free-no-use" enabled="true" />
+                                <check name="MEM-free-op" enabled="true" />
+                                <check name="MEM-free-struct-field" enabled="true" />
+                                <check name="MEM-free-variable-alias" enabled="true" />
+                                <check name="MEM-free-variable" enabled="true" />
+                                <check name="MEM-leak-alias" enabled="true" />
+                                <check name="MEM-leak" enabled="false" />
+                                <check name="MEM-malloc-arith" enabled="false" />
+                                <check name="MEM-malloc-diff-type" enabled="true" />
+                                <check name="MEM-malloc-sizeof-ptr" enabled="true" />
+                                <check name="MEM-malloc-sizeof" enabled="true" />
+                                <check name="MEM-malloc-strlen" enabled="false" />
+                                <check name="MEM-realloc-diff-type" enabled="true" />
+                                <check name="MEM-return-free" enabled="true" />
+                                <check name="MEM-return-no-assign" enabled="true" />
+                                <check name="MEM-stack-global-field" enabled="true" />
+                                <check name="MEM-stack-global" enabled="true" />
+                                <check name="MEM-stack-param-ref" enabled="true" />
+                                <check name="MEM-stack-param" enabled="true" />
+                                <check name="MEM-stack-pos" enabled="true" />
+                                <check name="MEM-stack-ref" enabled="true" />
+                                <check name="MEM-stack" enabled="true" />
+                                <check name="MEM-use-free-all" enabled="true" />
+                                <check name="MEM-use-free-some" enabled="true" />
+                            </group>
+                            <group enabled="true" name="PTR">
+                                <check name="PTR-arith-field" enabled="true" />
+                                <check name="PTR-arith-stack" enabled="true" />
+                                <check name="PTR-arith-var" enabled="true" />
+                                <check name="PTR-cmp-str-lit" enabled="true" />
+                                <check name="PTR-null-assign-fun-pos" enabled="false" />
+                                <check name="PTR-null-assign-pos" enabled="false" />
+                                <check name="PTR-null-assign" enabled="true" />
+                                <check name="PTR-null-cmp-aft" enabled="true" />
+                                <check name="PTR-null-cmp-bef-fun" enabled="true" />
+                                <check name="PTR-null-cmp-bef" enabled="true" />
+                                <check name="PTR-null-fun-pos" enabled="true" />
+                                <check name="PTR-null-literal-pos" enabled="false" />
+                                <check name="PTR-overload" enabled="false" />
+                                <check name="PTR-singleton-arith-pos" enabled="false" />
+                                <check name="PTR-singleton-arith" enabled="true" />
+                                <check name="PTR-unchk-param-some" enabled="true" />
+                                <check name="PTR-unchk-param" enabled="false" />
+                                <check name="PTR-uninit-pos" enabled="false" />
+                                <check name="PTR-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="RED">
+                                <check name="RED-alloc-zero-bytes" enabled="false" />
+                                <check name="RED-case-reach" enabled="false" />
+                                <check name="RED-cmp-always" enabled="false" />
+                                <check name="RED-cmp-never" enabled="false" />
+                                <check name="RED-cond-always" enabled="false" />
+                                <check name="RED-cond-const-assign" enabled="true" />
+                                <check name="RED-cond-const-expr" enabled="false" />
+                                <check name="RED-cond-const" enabled="false" />
+                                <check name="RED-cond-never" enabled="false" />
+                                <check name="RED-dead" enabled="true" />
+                                <check name="RED-expr" enabled="false" />
+                                <check name="RED-func-no-effect" enabled="false" />
+                                <check name="RED-local-hides-global" enabled="true" />
+                                <check name="RED-local-hides-local" enabled="false" />
+                                <check name="RED-local-hides-member" enabled="false" />
+                                <check name="RED-local-hides-param" enabled="true" />
+                                <check name="RED-no-effect" enabled="false" />
+                                <check name="RED-self-assign" enabled="true" />
+                                <check name="RED-unused-assign" enabled="true" />
+                                <check name="RED-unused-param" enabled="false" />
+                                <check name="RED-unused-return-val" enabled="false" />
+                                <check name="RED-unused-val" enabled="false" />
+                                <check name="RED-unused-var-all" enabled="true" />
+                            </group>
+                            <group enabled="true" name="RESOURCE">
+                                <check name="RESOURCE-deref-file" enabled="false" />
+                                <check name="RESOURCE-double-close" enabled="true" />
+                                <check name="RESOURCE-file-no-close-all" enabled="true" />
+                                <check name="RESOURCE-file-pos-neg" enabled="false" />
+                                <check name="RESOURCE-file-use-after-close" enabled="true" />
+                                <check name="RESOURCE-implicit-deref-file" enabled="false" />
+                                <check name="RESOURCE-write-ronly-file" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SIZEOF">
+                                <check name="SIZEOF-side-effect" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SPC">
+                                <check name="SPC-order" enabled="true" />
+                                <check name="SPC-uninit-arr-all" enabled="false" />
+                                <check name="SPC-uninit-struct-field-heap" enabled="true" />
+                                <check name="SPC-uninit-struct-field" enabled="false" />
+                                <check name="SPC-uninit-struct" enabled="true" />
+                                <check name="SPC-uninit-var-all" enabled="true" />
+                                <check name="SPC-uninit-var-some" enabled="true" />
+                                <check name="SPC-volatile-reads" enabled="false" />
+                                <check name="SPC-volatile-writes" enabled="false" />
+                            </group>
+                            <group enabled="true" name="STRUCT">
+                                <check name="STRUCT-signed-bit" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SWITCH">
+                                <check name="SWITCH-fall-through" enabled="true" />
+                            </group>
+                            <group enabled="true" name="UNION">
+                                <check name="UNION-overlap-assign" enabled="true" />
+                                <check name="UNION-type-punning" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="CERT" enabled="false">
+                            <group enabled="true" name="CERT-EXP">
+                                <check name="CERT-EXP19-C" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CERT-FIO">
+                                <check name="CERT-FIO37-C" enabled="true" />
+                                <check name="CERT-FIO38-C" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CERT-SIG">
+                                <check name="CERT-SIG31-C" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="SECURITY" enabled="false">
+                            <group enabled="true" name="SEC-BUFFER">
+                                <check name="SEC-BUFFER-memory-leak-alias" enabled="true" />
+                                <check name="SEC-BUFFER-memory-leak" enabled="false" />
+                                <check name="SEC-BUFFER-memset-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-memset-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-qsort-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-qsort-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-sprintf-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-std-sort-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-std-sort-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strcat-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strcat-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strcpy-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strcpy-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncat-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncat-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncmp-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncmp-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncpy-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncpy-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-alloc-size" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-copy-length" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-copy" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-index" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-offset" enabled="true" />
+                                <check name="SEC-BUFFER-use-after-free-all" enabled="true" />
+                                <check name="SEC-BUFFER-use-after-free-some" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-DIV-0">
+                                <check name="SEC-DIV-0-compare-after" enabled="true" />
+                                <check name="SEC-DIV-0-compare-before" enabled="true" />
+                                <check name="SEC-DIV-0-tainted" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-FILEOP">
+                                <check name="SEC-FILEOP-open-no-close" enabled="true" />
+                                <check name="SEC-FILEOP-path-traversal" enabled="false" />
+                                <check name="SEC-FILEOP-use-after-close" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-INJECTION">
+                                <check name="SEC-INJECTION-sql" enabled="false" />
+                                <check name="SEC-INJECTION-xpath" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SEC-LOOP">
+                                <check name="SEC-LOOP-tainted-bound" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-NULL">
+                                <check name="SEC-NULL-assignment-fun-pos" enabled="false" />
+                                <check name="SEC-NULL-assignment" enabled="true" />
+                                <check name="SEC-NULL-cmp-aft" enabled="true" />
+                                <check name="SEC-NULL-cmp-bef-fun" enabled="true" />
+                                <check name="SEC-NULL-cmp-bef" enabled="true" />
+                                <check name="SEC-NULL-literal-pos" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SEC-STRING">
+                                <check name="SEC-STRING-format-string" enabled="true" />
+                                <check name="SEC-STRING-hard-coded-credentials" enabled="false" />
+                            </group>
+                        </package>
+                        <package name="MISRAC2004" enabled="false">
+                            <group enabled="true" name="MISRAC2004-1">
+                                <check name="MISRAC2004-1.1" enabled="true" />
+                                <check name="MISRAC2004-1.2_a" enabled="true" />
+                                <check name="MISRAC2004-1.2_b" enabled="true" />
+                                <check name="MISRAC2004-1.2_c" enabled="true" />
+                                <check name="MISRAC2004-1.2_d" enabled="true" />
+                                <check name="MISRAC2004-1.2_e" enabled="true" />
+                                <check name="MISRAC2004-1.2_f" enabled="true" />
+                                <check name="MISRAC2004-1.2_g" enabled="true" />
+                                <check name="MISRAC2004-1.2_h" enabled="true" />
+                                <check name="MISRAC2004-1.2_i" enabled="true" />
+                                <check name="MISRAC2004-1.2_j" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-2">
+                                <check name="MISRAC2004-2.1" enabled="true" />
+                                <check name="MISRAC2004-2.2" enabled="true" />
+                                <check name="MISRAC2004-2.3" enabled="true" />
+                                <check name="MISRAC2004-2.4" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-5">
+                                <check name="MISRAC2004-5.1" enabled="true" />
+                                <check name="MISRAC2004-5.2" enabled="true" />
+                                <check name="MISRAC2004-5.3" enabled="true" />
+                                <check name="MISRAC2004-5.4" enabled="true" />
+                                <check name="MISRAC2004-5.5" enabled="false" />
+                                <check name="MISRAC2004-5.6" enabled="false" />
+                                <check name="MISRAC2004-5.7" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-6">
+                                <check name="MISRAC2004-6.1" enabled="true" />
+                                <check name="MISRAC2004-6.2" enabled="true" />
+                                <check name="MISRAC2004-6.3" enabled="false" />
+                                <check name="MISRAC2004-6.4" enabled="true" />
+                                <check name="MISRAC2004-6.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-7">
+                                <check name="MISRAC2004-7.1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-8">
+                                <check name="MISRAC2004-8.1" enabled="true" />
+                                <check name="MISRAC2004-8.2" enabled="true" />
+                                <check name="MISRAC2004-8.3" enabled="true" />
+                                <check name="MISRAC2004-8.5_a" enabled="true" />
+                                <check name="MISRAC2004-8.5_b" enabled="true" />
+                                <check name="MISRAC2004-8.6" enabled="true" />
+                                <check name="MISRAC2004-8.7" enabled="true" />
+                                <check name="MISRAC2004-8.8_a" enabled="true" />
+                                <check name="MISRAC2004-8.8_b" enabled="true" />
+                                <check name="MISRAC2004-8.10" enabled="true" />
+                                <check name="MISRAC2004-8.12" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-9">
+                                <check name="MISRAC2004-9.1_a" enabled="true" />
+                                <check name="MISRAC2004-9.1_b" enabled="true" />
+                                <check name="MISRAC2004-9.1_c" enabled="true" />
+                                <check name="MISRAC2004-9.2" enabled="true" />
+                                <check name="MISRAC2004-9.3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-10">
+                                <check name="MISRAC2004-10.1_a" enabled="true" />
+                                <check name="MISRAC2004-10.1_b" enabled="true" />
+                                <check name="MISRAC2004-10.1_c" enabled="true" />
+                                <check name="MISRAC2004-10.1_d" enabled="true" />
+                                <check name="MISRAC2004-10.2_a" enabled="true" />
+                                <check name="MISRAC2004-10.2_b" enabled="true" />
+                                <check name="MISRAC2004-10.2_c" enabled="true" />
+                                <check name="MISRAC2004-10.2_d" enabled="true" />
+                                <check name="MISRAC2004-10.3" enabled="true" />
+                                <check name="MISRAC2004-10.4" enabled="true" />
+                                <check name="MISRAC2004-10.5" enabled="true" />
+                                <check name="MISRAC2004-10.6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-11">
+                                <check name="MISRAC2004-11.1" enabled="true" />
+                                <check name="MISRAC2004-11.3" enabled="false" />
+                                <check name="MISRAC2004-11.4" enabled="false" />
+                                <check name="MISRAC2004-11.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-12">
+                                <check name="MISRAC2004-12.1" enabled="false" />
+                                <check name="MISRAC2004-12.2_a" enabled="true" />
+                                <check name="MISRAC2004-12.2_b" enabled="true" />
+                                <check name="MISRAC2004-12.2_c" enabled="true" />
+                                <check name="MISRAC2004-12.3" enabled="true" />
+                                <check name="MISRAC2004-12.4" enabled="true" />
+                                <check name="MISRAC2004-12.5" enabled="true" />
+                                <check name="MISRAC2004-12.6_a" enabled="false" />
+                                <check name="MISRAC2004-12.6_b" enabled="false" />
+                                <check name="MISRAC2004-12.7" enabled="true" />
+                                <check name="MISRAC2004-12.8" enabled="true" />
+                                <check name="MISRAC2004-12.9" enabled="true" />
+                                <check name="MISRAC2004-12.10" enabled="true" />
+                                <check name="MISRAC2004-12.11" enabled="false" />
+                                <check name="MISRAC2004-12.12_a" enabled="true" />
+                                <check name="MISRAC2004-12.12_b" enabled="true" />
+                                <check name="MISRAC2004-12.13" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-13">
+                                <check name="MISRAC2004-13.1" enabled="true" />
+                                <check name="MISRAC2004-13.2_a" enabled="false" />
+                                <check name="MISRAC2004-13.2_b" enabled="false" />
+                                <check name="MISRAC2004-13.2_c" enabled="false" />
+                                <check name="MISRAC2004-13.2_d" enabled="false" />
+                                <check name="MISRAC2004-13.2_e" enabled="false" />
+                                <check name="MISRAC2004-13.3" enabled="true" />
+                                <check name="MISRAC2004-13.4" enabled="true" />
+                                <check name="MISRAC2004-13.5" enabled="true" />
+                                <check name="MISRAC2004-13.6" enabled="true" />
+                                <check name="MISRAC2004-13.7_a" enabled="true" />
+                                <check name="MISRAC2004-13.7_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-14">
+                                <check name="MISRAC2004-14.1" enabled="true" />
+                                <check name="MISRAC2004-14.2" enabled="true" />
+                                <check name="MISRAC2004-14.3" enabled="true" />
+                                <check name="MISRAC2004-14.4" enabled="true" />
+                                <check name="MISRAC2004-14.5" enabled="true" />
+                                <check name="MISRAC2004-14.6" enabled="true" />
+                                <check name="MISRAC2004-14.7" enabled="true" />
+                                <check name="MISRAC2004-14.8_a" enabled="true" />
+                                <check name="MISRAC2004-14.8_b" enabled="true" />
+                                <check name="MISRAC2004-14.8_c" enabled="true" />
+                                <check name="MISRAC2004-14.8_d" enabled="true" />
+                                <check name="MISRAC2004-14.9" enabled="true" />
+                                <check name="MISRAC2004-14.10" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-15">
+                                <check name="MISRAC2004-15.0" enabled="true" />
+                                <check name="MISRAC2004-15.1" enabled="true" />
+                                <check name="MISRAC2004-15.2" enabled="true" />
+                                <check name="MISRAC2004-15.3" enabled="true" />
+                                <check name="MISRAC2004-15.4" enabled="true" />
+                                <check name="MISRAC2004-15.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-16">
+                                <check name="MISRAC2004-16.1" enabled="true" />
+                                <check name="MISRAC2004-16.2_a" enabled="true" />
+                                <check name="MISRAC2004-16.2_b" enabled="true" />
+                                <check name="MISRAC2004-16.3" enabled="true" />
+                                <check name="MISRAC2004-16.4" enabled="true" />
+                                <check name="MISRAC2004-16.5" enabled="true" />
+                                <check name="MISRAC2004-16.7" enabled="true" />
+                                <check name="MISRAC2004-16.8" enabled="true" />
+                                <check name="MISRAC2004-16.9" enabled="true" />
+                                <check name="MISRAC2004-16.10" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-17">
+                                <check name="MISRAC2004-17.1_a" enabled="true" />
+                                <check name="MISRAC2004-17.1_b" enabled="true" />
+                                <check name="MISRAC2004-17.1_c" enabled="true" />
+                                <check name="MISRAC2004-17.2" enabled="true" />
+                                <check name="MISRAC2004-17.3" enabled="true" />
+                                <check name="MISRAC2004-17.4_a" enabled="true" />
+                                <check name="MISRAC2004-17.4_b" enabled="true" />
+                                <check name="MISRAC2004-17.5" enabled="true" />
+                                <check name="MISRAC2004-17.6_a" enabled="true" />
+                                <check name="MISRAC2004-17.6_b" enabled="true" />
+                                <check name="MISRAC2004-17.6_c" enabled="true" />
+                                <check name="MISRAC2004-17.6_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-18">
+                                <check name="MISRAC2004-18.1" enabled="true" />
+                                <check name="MISRAC2004-18.2" enabled="true" />
+                                <check name="MISRAC2004-18.4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-19">
+                                <check name="MISRAC2004-19.1" enabled="false" />
+                                <check name="MISRAC2004-19.2" enabled="false" />
+                                <check name="MISRAC2004-19.4" enabled="true" />
+                                <check name="MISRAC2004-19.5" enabled="true" />
+                                <check name="MISRAC2004-19.6" enabled="true" />
+                                <check name="MISRAC2004-19.7" enabled="false" />
+                                <check name="MISRAC2004-19.10" enabled="true" />
+                                <check name="MISRAC2004-19.12" enabled="true" />
+                                <check name="MISRAC2004-19.13" enabled="false" />
+                                <check name="MISRAC2004-19.15" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-20">
+                                <check name="MISRAC2004-20.1" enabled="true" />
+                                <check name="MISRAC2004-20.2" enabled="true" />
+                                <check name="MISRAC2004-20.3_a" enabled="true" />
+                                <check name="MISRAC2004-20.3_b" enabled="true" />
+                                <check name="MISRAC2004-20.3_c" enabled="true" />
+                                <check name="MISRAC2004-20.3_d" enabled="true" />
+                                <check name="MISRAC2004-20.3_e" enabled="true" />
+                                <check name="MISRAC2004-20.3_f" enabled="true" />
+                                <check name="MISRAC2004-20.3_g" enabled="true" />
+                                <check name="MISRAC2004-20.3_h" enabled="true" />
+                                <check name="MISRAC2004-20.3_i" enabled="true" />
+                                <check name="MISRAC2004-20.4" enabled="true" />
+                                <check name="MISRAC2004-20.5" enabled="true" />
+                                <check name="MISRAC2004-20.6" enabled="true" />
+                                <check name="MISRAC2004-20.7" enabled="true" />
+                                <check name="MISRAC2004-20.8" enabled="true" />
+                                <check name="MISRAC2004-20.9" enabled="true" />
+                                <check name="MISRAC2004-20.10" enabled="true" />
+                                <check name="MISRAC2004-20.11" enabled="true" />
+                                <check name="MISRAC2004-20.12" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="MISRAC2012" enabled="false">
+                            <group enabled="true" name="MISRAC2012-Dir-4">
+                                <check name="MISRAC2012-Dir-4.3" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.4" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.5" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.6_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.6_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_c" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.8" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.9" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.10" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.11_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_c" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_d" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_e" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_f" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_g" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_h" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_i" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.12" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.13_b" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_c" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_d" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_e" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_f" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_g" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_h" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-1">
+                                <check name="MISRAC2012-Rule-1.3_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_f" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_g" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_h" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_i" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_j" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_k" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_m" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_n" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_o" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_p" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_q" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_r" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_s" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_t" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_u" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_v" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_w" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-2">
+                                <check name="MISRAC2012-Rule-2.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.3" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.6" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.7" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-3">
+                                <check name="MISRAC2012-Rule-3.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-3.2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-5">
+                                <check name="MISRAC2012-Rule-5.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.2_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.2_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.3_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.3_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.4_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.4_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.5_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.5_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.9" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-6">
+                                <check name="MISRAC2012-Rule-6.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-6.2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-7">
+                                <check name="MISRAC2012-Rule-7.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.4_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-8">
+                                <check name="MISRAC2012-Rule-8.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.5_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.7" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.9_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.9_b" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.10" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.11" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.12" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.13" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.14" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-9">
+                                <check name="MISRAC2012-Rule-9.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_f" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.5_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-10">
+                                <check name="MISRAC2012-Rule-10.1_R2" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R3" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R4" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R5" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R6" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R7" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R8" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.4_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-10.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-11">
+                                <check name="MISRAC2012-Rule-11.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-11.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-11.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.9" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-12">
+                                <check name="MISRAC2012-Rule-12.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-12.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-12.3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-13">
+                                <check name="MISRAC2012-Rule-13.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.3" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.4_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.4_b" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-14">
+                                <check name="MISRAC2012-Rule-14.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.3_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-15">
+                                <check name="MISRAC2012-Rule-15.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.6_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.7" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-16">
+                                <check name="MISRAC2012-Rule-16.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.7" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-17">
+                                <check name="MISRAC2012-Rule-17.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-17.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.8" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-18">
+                                <check name="MISRAC2012-Rule-18.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-18.6_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-19">
+                                <check name="MISRAC2012-Rule-19.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-19.2" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-20">
+                                <check name="MISRAC2012-Rule-20.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-20.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.4_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.4_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-20.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.10" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-21">
+                                <check name="MISRAC2012-Rule-21.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.9" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.10" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.11" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.12_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-21.12_b" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-22">
+                                <check name="MISRAC2012-Rule-22.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.5_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.6" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="MISRAC++2008" enabled="false">
+                            <group enabled="true" name="MISRAC++2008-0-1">
+                                <check name="MISRAC++2008-0-1-1" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_a" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_b" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_c" enabled="true" />
+                                <check name="MISRAC++2008-0-1-3" enabled="true" />
+                                <check name="MISRAC++2008-0-1-4_a" enabled="true" />
+                                <check name="MISRAC++2008-0-1-4_b" enabled="true" />
+                                <check name="MISRAC++2008-0-1-6" enabled="true" />
+                                <check name="MISRAC++2008-0-1-7" enabled="true" />
+                                <check name="MISRAC++2008-0-1-8" enabled="false" />
+                                <check name="MISRAC++2008-0-1-9" enabled="true" />
+                                <check name="MISRAC++2008-0-1-11" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-0-2">
+                                <check name="MISRAC++2008-0-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-0-3">
+                                <check name="MISRAC++2008-0-3-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-7">
+                                <check name="MISRAC++2008-2-7-1" enabled="true" />
+                                <check name="MISRAC++2008-2-7-2" enabled="true" />
+                                <check name="MISRAC++2008-2-7-3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-10">
+                                <check name="MISRAC++2008-2-10-1" enabled="true" />
+                                <check name="MISRAC++2008-2-10-2" enabled="true" />
+                                <check name="MISRAC++2008-2-10-3" enabled="true" />
+                                <check name="MISRAC++2008-2-10-4" enabled="true" />
+                                <check name="MISRAC++2008-2-10-5" enabled="false" />
+                                <check name="MISRAC++2008-2-10-6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-13">
+                                <check name="MISRAC++2008-2-13-2" enabled="true" />
+                                <check name="MISRAC++2008-2-13-3" enabled="true" />
+                                <check name="MISRAC++2008-2-13-4_a" enabled="true" />
+                                <check name="MISRAC++2008-2-13-4_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-3-1">
+                                <check name="MISRAC++2008-3-1-1" enabled="true" />
+                                <check name="MISRAC++2008-3-1-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-3-9">
+                                <check name="MISRAC++2008-3-9-2" enabled="false" />
+                                <check name="MISRAC++2008-3-9-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-4-5">
+                                <check name="MISRAC++2008-4-5-1" enabled="true" />
+                                <check name="MISRAC++2008-4-5-2" enabled="true" />
+                                <check name="MISRAC++2008-4-5-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-0">
+                                <check name="MISRAC++2008-5-0-1_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-1_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-1_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-2" enabled="false" />
+                                <check name="MISRAC++2008-5-0-3" enabled="true" />
+                                <check name="MISRAC++2008-5-0-4" enabled="true" />
+                                <check name="MISRAC++2008-5-0-5" enabled="true" />
+                                <check name="MISRAC++2008-5-0-6" enabled="true" />
+                                <check name="MISRAC++2008-5-0-7" enabled="true" />
+                                <check name="MISRAC++2008-5-0-8" enabled="true" />
+                                <check name="MISRAC++2008-5-0-9" enabled="true" />
+                                <check name="MISRAC++2008-5-0-10" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_d" enabled="true" />
+                                <check name="MISRAC++2008-5-0-14" enabled="true" />
+                                <check name="MISRAC++2008-5-0-15_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-15_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_d" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_e" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_f" enabled="true" />
+                                <check name="MISRAC++2008-5-0-19" enabled="true" />
+                                <check name="MISRAC++2008-5-0-21" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-2">
+                                <check name="MISRAC++2008-5-2-4" enabled="true" />
+                                <check name="MISRAC++2008-5-2-5" enabled="true" />
+                                <check name="MISRAC++2008-5-2-6" enabled="true" />
+                                <check name="MISRAC++2008-5-2-7" enabled="true" />
+                                <check name="MISRAC++2008-5-2-9" enabled="false" />
+                                <check name="MISRAC++2008-5-2-10" enabled="false" />
+                                <check name="MISRAC++2008-5-2-11_a" enabled="true" />
+                                <check name="MISRAC++2008-5-2-11_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-3">
+                                <check name="MISRAC++2008-5-3-1" enabled="true" />
+                                <check name="MISRAC++2008-5-3-2_a" enabled="true" />
+                                <check name="MISRAC++2008-5-3-2_b" enabled="true" />
+                                <check name="MISRAC++2008-5-3-3" enabled="true" />
+                                <check name="MISRAC++2008-5-3-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-8">
+                                <check name="MISRAC++2008-5-8-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-14">
+                                <check name="MISRAC++2008-5-14-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-18">
+                                <check name="MISRAC++2008-5-18-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-19">
+                                <check name="MISRAC++2008-5-19-1" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-2">
+                                <check name="MISRAC++2008-6-2-1" enabled="true" />
+                                <check name="MISRAC++2008-6-2-2" enabled="true" />
+                                <check name="MISRAC++2008-6-2-3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-3">
+                                <check name="MISRAC++2008-6-3-1_a" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_b" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_c" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-4">
+                                <check name="MISRAC++2008-6-4-1" enabled="true" />
+                                <check name="MISRAC++2008-6-4-2" enabled="true" />
+                                <check name="MISRAC++2008-6-4-3" enabled="true" />
+                                <check name="MISRAC++2008-6-4-4" enabled="true" />
+                                <check name="MISRAC++2008-6-4-5" enabled="true" />
+                                <check name="MISRAC++2008-6-4-6" enabled="true" />
+                                <check name="MISRAC++2008-6-4-7" enabled="true" />
+                                <check name="MISRAC++2008-6-4-8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-5">
+                                <check name="MISRAC++2008-6-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-6-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-6-5-2" enabled="true" />
+                                <check name="MISRAC++2008-6-5-3" enabled="true" />
+                                <check name="MISRAC++2008-6-5-4" enabled="true" />
+                                <check name="MISRAC++2008-6-5-5" enabled="true" />
+                                <check name="MISRAC++2008-6-5-6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-6">
+                                <check name="MISRAC++2008-6-6-1" enabled="true" />
+                                <check name="MISRAC++2008-6-6-2" enabled="true" />
+                                <check name="MISRAC++2008-6-6-4" enabled="true" />
+                                <check name="MISRAC++2008-6-6-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-1">
+                                <check name="MISRAC++2008-7-1-1" enabled="true" />
+                                <check name="MISRAC++2008-7-1-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-2">
+                                <check name="MISRAC++2008-7-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-4">
+                                <check name="MISRAC++2008-7-4-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-5">
+                                <check name="MISRAC++2008-7-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-7-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_a" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_b" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_c" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_d" enabled="true" />
+                                <check name="MISRAC++2008-7-5-4_a" enabled="false" />
+                                <check name="MISRAC++2008-7-5-4_b" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-0">
+                                <check name="MISRAC++2008-8-0-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-4">
+                                <check name="MISRAC++2008-8-4-1" enabled="true" />
+                                <check name="MISRAC++2008-8-4-3" enabled="true" />
+                                <check name="MISRAC++2008-8-4-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-5">
+                                <check name="MISRAC++2008-8-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-8-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-8-5-1_c" enabled="true" />
+                                <check name="MISRAC++2008-8-5-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-3">
+                                <check name="MISRAC++2008-9-3-1" enabled="true" />
+                                <check name="MISRAC++2008-9-3-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-5">
+                                <check name="MISRAC++2008-9-5-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-6">
+                                <check name="MISRAC++2008-9-6-2" enabled="true" />
+                                <check name="MISRAC++2008-9-6-3" enabled="true" />
+                                <check name="MISRAC++2008-9-6-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-12-1">
+                                <check name="MISRAC++2008-12-1-1_a" enabled="true" />
+                                <check name="MISRAC++2008-12-1-1_b" enabled="true" />
+                                <check name="MISRAC++2008-12-1-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-0">
+                                <check name="MISRAC++2008-16-0-3" enabled="true" />
+                                <check name="MISRAC++2008-16-0-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-2">
+                                <check name="MISRAC++2008-16-2-2" enabled="true" />
+                                <check name="MISRAC++2008-16-2-3" enabled="true" />
+                                <check name="MISRAC++2008-16-2-4" enabled="true" />
+                                <check name="MISRAC++2008-16-2-5" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-3">
+                                <check name="MISRAC++2008-16-3-1" enabled="true" />
+                                <check name="MISRAC++2008-16-3-2" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-17-0">
+                                <check name="MISRAC++2008-17-0-1" enabled="true" />
+                                <check name="MISRAC++2008-17-0-3" enabled="true" />
+                                <check name="MISRAC++2008-17-0-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-0">
+                                <check name="MISRAC++2008-18-0-1" enabled="true" />
+                                <check name="MISRAC++2008-18-0-2" enabled="true" />
+                                <check name="MISRAC++2008-18-0-3" enabled="true" />
+                                <check name="MISRAC++2008-18-0-4" enabled="true" />
+                                <check name="MISRAC++2008-18-0-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-2">
+                                <check name="MISRAC++2008-18-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-4">
+                                <check name="MISRAC++2008-18-4-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-7">
+                                <check name="MISRAC++2008-18-7-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-19-3">
+                                <check name="MISRAC++2008-19-3-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-27-0">
+                                <check name="MISRAC++2008-27-0-1" enabled="true" />
+                            </group>
+                        </package>
+                    </checks_tree>
+                </cstat_settings>
+            </data>
+        </settings>
+    </configuration>
+    <configuration>
+        <name>Release</name>
+        <toolchain>
+            <name>AVR</name>
+        </toolchain>
+        <debug>0</debug>
+        <settings>
+            <name>C-STAT</name>
+            <archiveVersion>262</archiveVersion>
+            <data>
+                <version>262</version>
+                <cstatargs>
+                    <useExtraArgs>0</useExtraArgs>
+                    <extraArgs></extraArgs>
+                    <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+                    <analyzeTimeout>600</analyzeTimeout>
+                    <enableParallel>1</enableParallel>
+                    <parallelThreads>4</parallelThreads>
+                    <enableFalsePositives>0</enableFalsePositives>
+                    <messagesLimitEnabled>1</messagesLimitEnabled>
+                    <messagesLimit>100</messagesLimit>
+                </cstatargs>
+                <cstat_settings>
+                    <cstat_version>1.6.3</cstat_version>
+                    <checks_tree>
+                        <package name="STDCHECKS" enabled="true">
+                            <group enabled="true" name="ARR">
+                                <check name="ARR-inv-index-pos" enabled="true" />
+                                <check name="ARR-inv-index-ptr-pos" enabled="true" />
+                                <check name="ARR-inv-index-ptr" enabled="true" />
+                                <check name="ARR-inv-index" enabled="true" />
+                                <check name="ARR-neg-index" enabled="true" />
+                                <check name="ARR-uninit-index" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ATH">
+                                <check name="ATH-cmp-float" enabled="true" />
+                                <check name="ATH-cmp-unsign-neg" enabled="true" />
+                                <check name="ATH-cmp-unsign-pos" enabled="true" />
+                                <check name="ATH-div-0-assign" enabled="true" />
+                                <check name="ATH-div-0-cmp-aft" enabled="false" />
+                                <check name="ATH-div-0-cmp-bef" enabled="true" />
+                                <check name="ATH-div-0-interval" enabled="true" />
+                                <check name="ATH-div-0-pos" enabled="true" />
+                                <check name="ATH-div-0-unchk-global" enabled="true" />
+                                <check name="ATH-div-0-unchk-local" enabled="true" />
+                                <check name="ATH-div-0-unchk-param" enabled="true" />
+                                <check name="ATH-div-0" enabled="true" />
+                                <check name="ATH-inc-bool" enabled="true" />
+                                <check name="ATH-malloc-overrun" enabled="true" />
+                                <check name="ATH-neg-check-nonneg" enabled="true" />
+                                <check name="ATH-neg-check-pos" enabled="true" />
+                                <check name="ATH-new-overrun" enabled="true" />
+                                <check name="ATH-overflow-cast" enabled="false" />
+                                <check name="ATH-overflow" enabled="true" />
+                                <check name="ATH-shift-bounds" enabled="true" />
+                                <check name="ATH-shift-neg" enabled="true" />
+                                <check name="ATH-sizeof-by-sizeof" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CAST">
+                                <check name="CAST-old-style" enabled="false" />
+                            </group>
+                            <group enabled="true" name="COMMA">
+                                <check name="COMMA-overload" enabled="false" />
+                            </group>
+                            <group enabled="true" name="COMMENT">
+                                <check name="COMMENT-nested" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CONST">
+                                <check name="CONST-member-ret" enabled="true" />
+                            </group>
+                            <group enabled="true" name="COP">
+                                <check name="COP-alloc-ctor" enabled="false" />
+                                <check name="COP-assign-op-ret" enabled="true" />
+                                <check name="COP-assign-op-self" enabled="true" />
+                                <check name="COP-assign-op" enabled="true" />
+                                <check name="COP-copy-ctor" enabled="true" />
+                                <check name="COP-dealloc-dtor" enabled="false" />
+                                <check name="COP-dtor" enabled="true" />
+                                <check name="COP-init-order" enabled="true" />
+                                <check name="COP-init-uninit" enabled="true" />
+                                <check name="COP-member-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CPU">
+                                <check name="CPU-ctor-call-virt" enabled="true" />
+                                <check name="CPU-ctor-implicit" enabled="false" />
+                                <check name="CPU-delete-void" enabled="true" />
+                                <check name="CPU-dtor-call-virt" enabled="true" />
+                                <check name="CPU-malloc-class" enabled="true" />
+                                <check name="CPU-nonvirt-dtor" enabled="true" />
+                                <check name="CPU-return-ref-to-class-data" enabled="true" />
+                            </group>
+                            <group enabled="true" name="DECL">
+                                <check name="DECL-implicit-int" enabled="false" />
+                            </group>
+                            <group enabled="true" name="DEFINE">
+                                <check name="DEFINE-hash-multiple" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ENUM">
+                                <check name="ENUM-bounds" enabled="false" />
+                            </group>
+                            <group enabled="true" name="EXP">
+                                <check name="EXP-cond-assign" enabled="true" />
+                                <check name="EXP-dangling-else" enabled="true" />
+                                <check name="EXP-loop-exit" enabled="true" />
+                                <check name="EXP-main-ret-int" enabled="false" />
+                                <check name="EXP-null-stmt" enabled="false" />
+                                <check name="EXP-stray-semicolon" enabled="false" />
+                            </group>
+                            <group enabled="true" name="EXPR">
+                                <check name="EXPR-const-overflow" enabled="true" />
+                            </group>
+                            <group enabled="true" name="FPT">
+                                <check name="FPT-cmp-null" enabled="true" />
+                                <check name="FPT-literal" enabled="false" />
+                                <check name="FPT-misuse" enabled="true" />
+                            </group>
+                            <group enabled="true" name="FUNC">
+                                <check name="FUNC-implicit-decl" enabled="false" />
+                                <check name="FUNC-unprototyped-all" enabled="false" />
+                                <check name="FUNC-unprototyped-used" enabled="true" />
+                            </group>
+                            <group enabled="true" name="INCLUDE">
+                                <check name="INCLUDE-c-file" enabled="false" />
+                            </group>
+                            <group enabled="true" name="INT">
+                                <check name="INT-use-signed-as-unsigned-pos" enabled="false" />
+                                <check name="INT-use-signed-as-unsigned" enabled="true" />
+                            </group>
+                            <group enabled="true" name="ITR">
+                                <check name="ITR-end-cmp-aft" enabled="true" />
+                                <check name="ITR-end-cmp-bef" enabled="true" />
+                                <check name="ITR-invalidated" enabled="true" />
+                                <check name="ITR-mismatch-alg" enabled="false" />
+                                <check name="ITR-store" enabled="false" />
+                                <check name="ITR-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="LIB">
+                                <check name="LIB-bsearch-overrun-pos" enabled="false" />
+                                <check name="LIB-bsearch-overrun" enabled="false" />
+                                <check name="LIB-fn-unsafe" enabled="false" />
+                                <check name="LIB-fread-overrun-pos" enabled="false" />
+                                <check name="LIB-fread-overrun" enabled="true" />
+                                <check name="LIB-memchr-overrun-pos" enabled="false" />
+                                <check name="LIB-memchr-overrun" enabled="true" />
+                                <check name="LIB-memcpy-overrun-pos" enabled="false" />
+                                <check name="LIB-memcpy-overrun" enabled="true" />
+                                <check name="LIB-memset-overrun-pos" enabled="false" />
+                                <check name="LIB-memset-overrun" enabled="true" />
+                                <check name="LIB-putenv" enabled="false" />
+                                <check name="LIB-qsort-overrun-pos" enabled="false" />
+                                <check name="LIB-qsort-overrun" enabled="false" />
+                                <check name="LIB-return-const" enabled="true" />
+                                <check name="LIB-return-error" enabled="true" />
+                                <check name="LIB-return-leak" enabled="true" />
+                                <check name="LIB-return-neg" enabled="true" />
+                                <check name="LIB-return-null" enabled="true" />
+                                <check name="LIB-sprintf-overrun" enabled="false" />
+                                <check name="LIB-std-sort-overrun-pos" enabled="false" />
+                                <check name="LIB-std-sort-overrun" enabled="true" />
+                                <check name="LIB-strcat-overrun-pos" enabled="false" />
+                                <check name="LIB-strcat-overrun" enabled="true" />
+                                <check name="LIB-strcpy-overrun-pos" enabled="false" />
+                                <check name="LIB-strcpy-overrun" enabled="true" />
+                                <check name="LIB-strncat-overrun-pos" enabled="false" />
+                                <check name="LIB-strncat-overrun" enabled="true" />
+                                <check name="LIB-strncmp-overrun-pos" enabled="false" />
+                                <check name="LIB-strncmp-overrun" enabled="true" />
+                                <check name="LIB-strncpy-overrun-pos" enabled="false" />
+                                <check name="LIB-strncpy-overrun" enabled="true" />
+                            </group>
+                            <group enabled="true" name="LOGIC">
+                                <check name="LOGIC-overload" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MEM">
+                                <check name="MEM-delete-array-op" enabled="true" />
+                                <check name="MEM-delete-op" enabled="true" />
+                                <check name="MEM-double-free-alias" enabled="true" />
+                                <check name="MEM-double-free-some" enabled="true" />
+                                <check name="MEM-double-free" enabled="true" />
+                                <check name="MEM-free-field" enabled="true" />
+                                <check name="MEM-free-fptr" enabled="true" />
+                                <check name="MEM-free-no-alloc-struct" enabled="false" />
+                                <check name="MEM-free-no-alloc" enabled="false" />
+                                <check name="MEM-free-no-use" enabled="true" />
+                                <check name="MEM-free-op" enabled="true" />
+                                <check name="MEM-free-struct-field" enabled="true" />
+                                <check name="MEM-free-variable-alias" enabled="true" />
+                                <check name="MEM-free-variable" enabled="true" />
+                                <check name="MEM-leak-alias" enabled="true" />
+                                <check name="MEM-leak" enabled="false" />
+                                <check name="MEM-malloc-arith" enabled="false" />
+                                <check name="MEM-malloc-diff-type" enabled="true" />
+                                <check name="MEM-malloc-sizeof-ptr" enabled="true" />
+                                <check name="MEM-malloc-sizeof" enabled="true" />
+                                <check name="MEM-malloc-strlen" enabled="false" />
+                                <check name="MEM-realloc-diff-type" enabled="true" />
+                                <check name="MEM-return-free" enabled="true" />
+                                <check name="MEM-return-no-assign" enabled="true" />
+                                <check name="MEM-stack-global-field" enabled="true" />
+                                <check name="MEM-stack-global" enabled="true" />
+                                <check name="MEM-stack-param-ref" enabled="true" />
+                                <check name="MEM-stack-param" enabled="true" />
+                                <check name="MEM-stack-pos" enabled="true" />
+                                <check name="MEM-stack-ref" enabled="true" />
+                                <check name="MEM-stack" enabled="true" />
+                                <check name="MEM-use-free-all" enabled="true" />
+                                <check name="MEM-use-free-some" enabled="true" />
+                            </group>
+                            <group enabled="true" name="PTR">
+                                <check name="PTR-arith-field" enabled="true" />
+                                <check name="PTR-arith-stack" enabled="true" />
+                                <check name="PTR-arith-var" enabled="true" />
+                                <check name="PTR-cmp-str-lit" enabled="true" />
+                                <check name="PTR-null-assign-fun-pos" enabled="false" />
+                                <check name="PTR-null-assign-pos" enabled="false" />
+                                <check name="PTR-null-assign" enabled="true" />
+                                <check name="PTR-null-cmp-aft" enabled="true" />
+                                <check name="PTR-null-cmp-bef-fun" enabled="true" />
+                                <check name="PTR-null-cmp-bef" enabled="true" />
+                                <check name="PTR-null-fun-pos" enabled="true" />
+                                <check name="PTR-null-literal-pos" enabled="false" />
+                                <check name="PTR-overload" enabled="false" />
+                                <check name="PTR-singleton-arith-pos" enabled="false" />
+                                <check name="PTR-singleton-arith" enabled="true" />
+                                <check name="PTR-unchk-param-some" enabled="true" />
+                                <check name="PTR-unchk-param" enabled="false" />
+                                <check name="PTR-uninit-pos" enabled="false" />
+                                <check name="PTR-uninit" enabled="true" />
+                            </group>
+                            <group enabled="true" name="RED">
+                                <check name="RED-alloc-zero-bytes" enabled="false" />
+                                <check name="RED-case-reach" enabled="false" />
+                                <check name="RED-cmp-always" enabled="false" />
+                                <check name="RED-cmp-never" enabled="false" />
+                                <check name="RED-cond-always" enabled="false" />
+                                <check name="RED-cond-const-assign" enabled="true" />
+                                <check name="RED-cond-const-expr" enabled="false" />
+                                <check name="RED-cond-const" enabled="false" />
+                                <check name="RED-cond-never" enabled="false" />
+                                <check name="RED-dead" enabled="true" />
+                                <check name="RED-expr" enabled="false" />
+                                <check name="RED-func-no-effect" enabled="false" />
+                                <check name="RED-local-hides-global" enabled="true" />
+                                <check name="RED-local-hides-local" enabled="false" />
+                                <check name="RED-local-hides-member" enabled="false" />
+                                <check name="RED-local-hides-param" enabled="true" />
+                                <check name="RED-no-effect" enabled="false" />
+                                <check name="RED-self-assign" enabled="true" />
+                                <check name="RED-unused-assign" enabled="true" />
+                                <check name="RED-unused-param" enabled="false" />
+                                <check name="RED-unused-return-val" enabled="false" />
+                                <check name="RED-unused-val" enabled="false" />
+                                <check name="RED-unused-var-all" enabled="true" />
+                            </group>
+                            <group enabled="true" name="RESOURCE">
+                                <check name="RESOURCE-deref-file" enabled="false" />
+                                <check name="RESOURCE-double-close" enabled="true" />
+                                <check name="RESOURCE-file-no-close-all" enabled="true" />
+                                <check name="RESOURCE-file-pos-neg" enabled="false" />
+                                <check name="RESOURCE-file-use-after-close" enabled="true" />
+                                <check name="RESOURCE-implicit-deref-file" enabled="false" />
+                                <check name="RESOURCE-write-ronly-file" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SIZEOF">
+                                <check name="SIZEOF-side-effect" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SPC">
+                                <check name="SPC-order" enabled="true" />
+                                <check name="SPC-uninit-arr-all" enabled="false" />
+                                <check name="SPC-uninit-struct-field-heap" enabled="true" />
+                                <check name="SPC-uninit-struct-field" enabled="false" />
+                                <check name="SPC-uninit-struct" enabled="true" />
+                                <check name="SPC-uninit-var-all" enabled="true" />
+                                <check name="SPC-uninit-var-some" enabled="true" />
+                                <check name="SPC-volatile-reads" enabled="false" />
+                                <check name="SPC-volatile-writes" enabled="false" />
+                            </group>
+                            <group enabled="true" name="STRUCT">
+                                <check name="STRUCT-signed-bit" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SWITCH">
+                                <check name="SWITCH-fall-through" enabled="true" />
+                            </group>
+                            <group enabled="true" name="UNION">
+                                <check name="UNION-overlap-assign" enabled="true" />
+                                <check name="UNION-type-punning" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="CERT" enabled="false">
+                            <group enabled="true" name="CERT-EXP">
+                                <check name="CERT-EXP19-C" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CERT-FIO">
+                                <check name="CERT-FIO37-C" enabled="true" />
+                                <check name="CERT-FIO38-C" enabled="true" />
+                            </group>
+                            <group enabled="true" name="CERT-SIG">
+                                <check name="CERT-SIG31-C" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="SECURITY" enabled="false">
+                            <group enabled="true" name="SEC-BUFFER">
+                                <check name="SEC-BUFFER-memory-leak-alias" enabled="true" />
+                                <check name="SEC-BUFFER-memory-leak" enabled="false" />
+                                <check name="SEC-BUFFER-memset-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-memset-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-qsort-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-qsort-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-sprintf-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-std-sort-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-std-sort-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strcat-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strcat-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strcpy-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strcpy-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncat-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncat-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncmp-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncmp-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-strncpy-overrun-pos" enabled="false" />
+                                <check name="SEC-BUFFER-strncpy-overrun" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-alloc-size" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-copy-length" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-copy" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-index" enabled="true" />
+                                <check name="SEC-BUFFER-tainted-offset" enabled="true" />
+                                <check name="SEC-BUFFER-use-after-free-all" enabled="true" />
+                                <check name="SEC-BUFFER-use-after-free-some" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-DIV-0">
+                                <check name="SEC-DIV-0-compare-after" enabled="true" />
+                                <check name="SEC-DIV-0-compare-before" enabled="true" />
+                                <check name="SEC-DIV-0-tainted" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-FILEOP">
+                                <check name="SEC-FILEOP-open-no-close" enabled="true" />
+                                <check name="SEC-FILEOP-path-traversal" enabled="false" />
+                                <check name="SEC-FILEOP-use-after-close" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-INJECTION">
+                                <check name="SEC-INJECTION-sql" enabled="false" />
+                                <check name="SEC-INJECTION-xpath" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SEC-LOOP">
+                                <check name="SEC-LOOP-tainted-bound" enabled="true" />
+                            </group>
+                            <group enabled="true" name="SEC-NULL">
+                                <check name="SEC-NULL-assignment-fun-pos" enabled="false" />
+                                <check name="SEC-NULL-assignment" enabled="true" />
+                                <check name="SEC-NULL-cmp-aft" enabled="true" />
+                                <check name="SEC-NULL-cmp-bef-fun" enabled="true" />
+                                <check name="SEC-NULL-cmp-bef" enabled="true" />
+                                <check name="SEC-NULL-literal-pos" enabled="false" />
+                            </group>
+                            <group enabled="true" name="SEC-STRING">
+                                <check name="SEC-STRING-format-string" enabled="true" />
+                                <check name="SEC-STRING-hard-coded-credentials" enabled="false" />
+                            </group>
+                        </package>
+                        <package name="MISRAC2004" enabled="false">
+                            <group enabled="true" name="MISRAC2004-1">
+                                <check name="MISRAC2004-1.1" enabled="true" />
+                                <check name="MISRAC2004-1.2_a" enabled="true" />
+                                <check name="MISRAC2004-1.2_b" enabled="true" />
+                                <check name="MISRAC2004-1.2_c" enabled="true" />
+                                <check name="MISRAC2004-1.2_d" enabled="true" />
+                                <check name="MISRAC2004-1.2_e" enabled="true" />
+                                <check name="MISRAC2004-1.2_f" enabled="true" />
+                                <check name="MISRAC2004-1.2_g" enabled="true" />
+                                <check name="MISRAC2004-1.2_h" enabled="true" />
+                                <check name="MISRAC2004-1.2_i" enabled="true" />
+                                <check name="MISRAC2004-1.2_j" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-2">
+                                <check name="MISRAC2004-2.1" enabled="true" />
+                                <check name="MISRAC2004-2.2" enabled="true" />
+                                <check name="MISRAC2004-2.3" enabled="true" />
+                                <check name="MISRAC2004-2.4" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-5">
+                                <check name="MISRAC2004-5.1" enabled="true" />
+                                <check name="MISRAC2004-5.2" enabled="true" />
+                                <check name="MISRAC2004-5.3" enabled="true" />
+                                <check name="MISRAC2004-5.4" enabled="true" />
+                                <check name="MISRAC2004-5.5" enabled="false" />
+                                <check name="MISRAC2004-5.6" enabled="false" />
+                                <check name="MISRAC2004-5.7" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-6">
+                                <check name="MISRAC2004-6.1" enabled="true" />
+                                <check name="MISRAC2004-6.2" enabled="true" />
+                                <check name="MISRAC2004-6.3" enabled="false" />
+                                <check name="MISRAC2004-6.4" enabled="true" />
+                                <check name="MISRAC2004-6.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-7">
+                                <check name="MISRAC2004-7.1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-8">
+                                <check name="MISRAC2004-8.1" enabled="true" />
+                                <check name="MISRAC2004-8.2" enabled="true" />
+                                <check name="MISRAC2004-8.3" enabled="true" />
+                                <check name="MISRAC2004-8.5_a" enabled="true" />
+                                <check name="MISRAC2004-8.5_b" enabled="true" />
+                                <check name="MISRAC2004-8.6" enabled="true" />
+                                <check name="MISRAC2004-8.7" enabled="true" />
+                                <check name="MISRAC2004-8.8_a" enabled="true" />
+                                <check name="MISRAC2004-8.8_b" enabled="true" />
+                                <check name="MISRAC2004-8.10" enabled="true" />
+                                <check name="MISRAC2004-8.12" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-9">
+                                <check name="MISRAC2004-9.1_a" enabled="true" />
+                                <check name="MISRAC2004-9.1_b" enabled="true" />
+                                <check name="MISRAC2004-9.1_c" enabled="true" />
+                                <check name="MISRAC2004-9.2" enabled="true" />
+                                <check name="MISRAC2004-9.3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-10">
+                                <check name="MISRAC2004-10.1_a" enabled="true" />
+                                <check name="MISRAC2004-10.1_b" enabled="true" />
+                                <check name="MISRAC2004-10.1_c" enabled="true" />
+                                <check name="MISRAC2004-10.1_d" enabled="true" />
+                                <check name="MISRAC2004-10.2_a" enabled="true" />
+                                <check name="MISRAC2004-10.2_b" enabled="true" />
+                                <check name="MISRAC2004-10.2_c" enabled="true" />
+                                <check name="MISRAC2004-10.2_d" enabled="true" />
+                                <check name="MISRAC2004-10.3" enabled="true" />
+                                <check name="MISRAC2004-10.4" enabled="true" />
+                                <check name="MISRAC2004-10.5" enabled="true" />
+                                <check name="MISRAC2004-10.6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-11">
+                                <check name="MISRAC2004-11.1" enabled="true" />
+                                <check name="MISRAC2004-11.3" enabled="false" />
+                                <check name="MISRAC2004-11.4" enabled="false" />
+                                <check name="MISRAC2004-11.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-12">
+                                <check name="MISRAC2004-12.1" enabled="false" />
+                                <check name="MISRAC2004-12.2_a" enabled="true" />
+                                <check name="MISRAC2004-12.2_b" enabled="true" />
+                                <check name="MISRAC2004-12.2_c" enabled="true" />
+                                <check name="MISRAC2004-12.3" enabled="true" />
+                                <check name="MISRAC2004-12.4" enabled="true" />
+                                <check name="MISRAC2004-12.5" enabled="true" />
+                                <check name="MISRAC2004-12.6_a" enabled="false" />
+                                <check name="MISRAC2004-12.6_b" enabled="false" />
+                                <check name="MISRAC2004-12.7" enabled="true" />
+                                <check name="MISRAC2004-12.8" enabled="true" />
+                                <check name="MISRAC2004-12.9" enabled="true" />
+                                <check name="MISRAC2004-12.10" enabled="true" />
+                                <check name="MISRAC2004-12.11" enabled="false" />
+                                <check name="MISRAC2004-12.12_a" enabled="true" />
+                                <check name="MISRAC2004-12.12_b" enabled="true" />
+                                <check name="MISRAC2004-12.13" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-13">
+                                <check name="MISRAC2004-13.1" enabled="true" />
+                                <check name="MISRAC2004-13.2_a" enabled="false" />
+                                <check name="MISRAC2004-13.2_b" enabled="false" />
+                                <check name="MISRAC2004-13.2_c" enabled="false" />
+                                <check name="MISRAC2004-13.2_d" enabled="false" />
+                                <check name="MISRAC2004-13.2_e" enabled="false" />
+                                <check name="MISRAC2004-13.3" enabled="true" />
+                                <check name="MISRAC2004-13.4" enabled="true" />
+                                <check name="MISRAC2004-13.5" enabled="true" />
+                                <check name="MISRAC2004-13.6" enabled="true" />
+                                <check name="MISRAC2004-13.7_a" enabled="true" />
+                                <check name="MISRAC2004-13.7_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-14">
+                                <check name="MISRAC2004-14.1" enabled="true" />
+                                <check name="MISRAC2004-14.2" enabled="true" />
+                                <check name="MISRAC2004-14.3" enabled="true" />
+                                <check name="MISRAC2004-14.4" enabled="true" />
+                                <check name="MISRAC2004-14.5" enabled="true" />
+                                <check name="MISRAC2004-14.6" enabled="true" />
+                                <check name="MISRAC2004-14.7" enabled="true" />
+                                <check name="MISRAC2004-14.8_a" enabled="true" />
+                                <check name="MISRAC2004-14.8_b" enabled="true" />
+                                <check name="MISRAC2004-14.8_c" enabled="true" />
+                                <check name="MISRAC2004-14.8_d" enabled="true" />
+                                <check name="MISRAC2004-14.9" enabled="true" />
+                                <check name="MISRAC2004-14.10" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-15">
+                                <check name="MISRAC2004-15.0" enabled="true" />
+                                <check name="MISRAC2004-15.1" enabled="true" />
+                                <check name="MISRAC2004-15.2" enabled="true" />
+                                <check name="MISRAC2004-15.3" enabled="true" />
+                                <check name="MISRAC2004-15.4" enabled="true" />
+                                <check name="MISRAC2004-15.5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-16">
+                                <check name="MISRAC2004-16.1" enabled="true" />
+                                <check name="MISRAC2004-16.2_a" enabled="true" />
+                                <check name="MISRAC2004-16.2_b" enabled="true" />
+                                <check name="MISRAC2004-16.3" enabled="true" />
+                                <check name="MISRAC2004-16.4" enabled="true" />
+                                <check name="MISRAC2004-16.5" enabled="true" />
+                                <check name="MISRAC2004-16.7" enabled="true" />
+                                <check name="MISRAC2004-16.8" enabled="true" />
+                                <check name="MISRAC2004-16.9" enabled="true" />
+                                <check name="MISRAC2004-16.10" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-17">
+                                <check name="MISRAC2004-17.1_a" enabled="true" />
+                                <check name="MISRAC2004-17.1_b" enabled="true" />
+                                <check name="MISRAC2004-17.1_c" enabled="true" />
+                                <check name="MISRAC2004-17.2" enabled="true" />
+                                <check name="MISRAC2004-17.3" enabled="true" />
+                                <check name="MISRAC2004-17.4_a" enabled="true" />
+                                <check name="MISRAC2004-17.4_b" enabled="true" />
+                                <check name="MISRAC2004-17.5" enabled="true" />
+                                <check name="MISRAC2004-17.6_a" enabled="true" />
+                                <check name="MISRAC2004-17.6_b" enabled="true" />
+                                <check name="MISRAC2004-17.6_c" enabled="true" />
+                                <check name="MISRAC2004-17.6_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-18">
+                                <check name="MISRAC2004-18.1" enabled="true" />
+                                <check name="MISRAC2004-18.2" enabled="true" />
+                                <check name="MISRAC2004-18.4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-19">
+                                <check name="MISRAC2004-19.1" enabled="false" />
+                                <check name="MISRAC2004-19.2" enabled="false" />
+                                <check name="MISRAC2004-19.4" enabled="true" />
+                                <check name="MISRAC2004-19.5" enabled="true" />
+                                <check name="MISRAC2004-19.6" enabled="true" />
+                                <check name="MISRAC2004-19.7" enabled="false" />
+                                <check name="MISRAC2004-19.10" enabled="true" />
+                                <check name="MISRAC2004-19.12" enabled="true" />
+                                <check name="MISRAC2004-19.13" enabled="false" />
+                                <check name="MISRAC2004-19.15" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2004-20">
+                                <check name="MISRAC2004-20.1" enabled="true" />
+                                <check name="MISRAC2004-20.2" enabled="true" />
+                                <check name="MISRAC2004-20.3_a" enabled="true" />
+                                <check name="MISRAC2004-20.3_b" enabled="true" />
+                                <check name="MISRAC2004-20.3_c" enabled="true" />
+                                <check name="MISRAC2004-20.3_d" enabled="true" />
+                                <check name="MISRAC2004-20.3_e" enabled="true" />
+                                <check name="MISRAC2004-20.3_f" enabled="true" />
+                                <check name="MISRAC2004-20.3_g" enabled="true" />
+                                <check name="MISRAC2004-20.3_h" enabled="true" />
+                                <check name="MISRAC2004-20.3_i" enabled="true" />
+                                <check name="MISRAC2004-20.4" enabled="true" />
+                                <check name="MISRAC2004-20.5" enabled="true" />
+                                <check name="MISRAC2004-20.6" enabled="true" />
+                                <check name="MISRAC2004-20.7" enabled="true" />
+                                <check name="MISRAC2004-20.8" enabled="true" />
+                                <check name="MISRAC2004-20.9" enabled="true" />
+                                <check name="MISRAC2004-20.10" enabled="true" />
+                                <check name="MISRAC2004-20.11" enabled="true" />
+                                <check name="MISRAC2004-20.12" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="MISRAC2012" enabled="false">
+                            <group enabled="true" name="MISRAC2012-Dir-4">
+                                <check name="MISRAC2012-Dir-4.3" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.4" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.5" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.6_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.6_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.7_c" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.8" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.9" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.10" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.11_a" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_b" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_c" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_d" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_e" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_f" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_g" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_h" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.11_i" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.12" enabled="false" />
+                                <check name="MISRAC2012-Dir-4.13_b" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_c" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_d" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_e" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_f" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_g" enabled="true" />
+                                <check name="MISRAC2012-Dir-4.13_h" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-1">
+                                <check name="MISRAC2012-Rule-1.3_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_f" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_g" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_h" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_i" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_j" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_k" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_m" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_n" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_o" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_p" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_q" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_r" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_s" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_t" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_u" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_v" enabled="true" />
+                                <check name="MISRAC2012-Rule-1.3_w" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-2">
+                                <check name="MISRAC2012-Rule-2.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-2.3" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.6" enabled="false" />
+                                <check name="MISRAC2012-Rule-2.7" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-3">
+                                <check name="MISRAC2012-Rule-3.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-3.2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-5">
+                                <check name="MISRAC2012-Rule-5.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.2_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.2_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.3_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.3_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.4_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.4_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.5_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.5_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-5.9" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-6">
+                                <check name="MISRAC2012-Rule-6.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-6.2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-7">
+                                <check name="MISRAC2012-Rule-7.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-7.4_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-8">
+                                <check name="MISRAC2012-Rule-8.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.5_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.7" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.9_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.9_b" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.10" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.11" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.12" enabled="true" />
+                                <check name="MISRAC2012-Rule-8.13" enabled="false" />
+                                <check name="MISRAC2012-Rule-8.14" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-9">
+                                <check name="MISRAC2012-Rule-9.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.1_f" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-9.5_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-10">
+                                <check name="MISRAC2012-Rule-10.1_R2" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R3" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R4" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R5" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R6" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R7" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.1_R8" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.4_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-10.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-10.8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-11">
+                                <check name="MISRAC2012-Rule-11.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-11.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-11.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-11.9" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-12">
+                                <check name="MISRAC2012-Rule-12.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-12.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-12.3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-13">
+                                <check name="MISRAC2012-Rule-13.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.3" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.4_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.4_b" enabled="false" />
+                                <check name="MISRAC2012-Rule-13.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-13.6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-14">
+                                <check name="MISRAC2012-Rule-14.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.3_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.3_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-14.4_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-15">
+                                <check name="MISRAC2012-Rule-15.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.4" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-15.6_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.6_e" enabled="true" />
+                                <check name="MISRAC2012-Rule-15.7" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-16">
+                                <check name="MISRAC2012-Rule-16.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-16.7" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-17">
+                                <check name="MISRAC2012-Rule-17.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-17.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-17.8" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-18">
+                                <check name="MISRAC2012-Rule-18.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.1_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-18.6_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.6_d" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-18.8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-19">
+                                <check name="MISRAC2012-Rule-19.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-19.2" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-20">
+                                <check name="MISRAC2012-Rule-20.1" enabled="false" />
+                                <check name="MISRAC2012-Rule-20.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.4_c89" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.4_c99" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.5" enabled="false" />
+                                <check name="MISRAC2012-Rule-20.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-20.10" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-21">
+                                <check name="MISRAC2012-Rule-21.1" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.2" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.5" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.6" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.7" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.8" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.9" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.10" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.11" enabled="true" />
+                                <check name="MISRAC2012-Rule-21.12_a" enabled="false" />
+                                <check name="MISRAC2012-Rule-21.12_b" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC2012-Rule-22">
+                                <check name="MISRAC2012-Rule-22.1_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.1_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.2_c" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.3" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.4" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.5_a" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.5_b" enabled="true" />
+                                <check name="MISRAC2012-Rule-22.6" enabled="true" />
+                            </group>
+                        </package>
+                        <package name="MISRAC++2008" enabled="false">
+                            <group enabled="true" name="MISRAC++2008-0-1">
+                                <check name="MISRAC++2008-0-1-1" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_a" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_b" enabled="true" />
+                                <check name="MISRAC++2008-0-1-2_c" enabled="true" />
+                                <check name="MISRAC++2008-0-1-3" enabled="true" />
+                                <check name="MISRAC++2008-0-1-4_a" enabled="true" />
+                                <check name="MISRAC++2008-0-1-4_b" enabled="true" />
+                                <check name="MISRAC++2008-0-1-6" enabled="true" />
+                                <check name="MISRAC++2008-0-1-7" enabled="true" />
+                                <check name="MISRAC++2008-0-1-8" enabled="false" />
+                                <check name="MISRAC++2008-0-1-9" enabled="true" />
+                                <check name="MISRAC++2008-0-1-11" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-0-2">
+                                <check name="MISRAC++2008-0-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-0-3">
+                                <check name="MISRAC++2008-0-3-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-7">
+                                <check name="MISRAC++2008-2-7-1" enabled="true" />
+                                <check name="MISRAC++2008-2-7-2" enabled="true" />
+                                <check name="MISRAC++2008-2-7-3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-10">
+                                <check name="MISRAC++2008-2-10-1" enabled="true" />
+                                <check name="MISRAC++2008-2-10-2" enabled="true" />
+                                <check name="MISRAC++2008-2-10-3" enabled="true" />
+                                <check name="MISRAC++2008-2-10-4" enabled="true" />
+                                <check name="MISRAC++2008-2-10-5" enabled="false" />
+                                <check name="MISRAC++2008-2-10-6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-2-13">
+                                <check name="MISRAC++2008-2-13-2" enabled="true" />
+                                <check name="MISRAC++2008-2-13-3" enabled="true" />
+                                <check name="MISRAC++2008-2-13-4_a" enabled="true" />
+                                <check name="MISRAC++2008-2-13-4_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-3-1">
+                                <check name="MISRAC++2008-3-1-1" enabled="true" />
+                                <check name="MISRAC++2008-3-1-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-3-9">
+                                <check name="MISRAC++2008-3-9-2" enabled="false" />
+                                <check name="MISRAC++2008-3-9-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-4-5">
+                                <check name="MISRAC++2008-4-5-1" enabled="true" />
+                                <check name="MISRAC++2008-4-5-2" enabled="true" />
+                                <check name="MISRAC++2008-4-5-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-0">
+                                <check name="MISRAC++2008-5-0-1_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-1_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-1_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-2" enabled="false" />
+                                <check name="MISRAC++2008-5-0-3" enabled="true" />
+                                <check name="MISRAC++2008-5-0-4" enabled="true" />
+                                <check name="MISRAC++2008-5-0-5" enabled="true" />
+                                <check name="MISRAC++2008-5-0-6" enabled="true" />
+                                <check name="MISRAC++2008-5-0-7" enabled="true" />
+                                <check name="MISRAC++2008-5-0-8" enabled="true" />
+                                <check name="MISRAC++2008-5-0-9" enabled="true" />
+                                <check name="MISRAC++2008-5-0-10" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-13_d" enabled="true" />
+                                <check name="MISRAC++2008-5-0-14" enabled="true" />
+                                <check name="MISRAC++2008-5-0-15_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-15_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_a" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_b" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_c" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_d" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_e" enabled="true" />
+                                <check name="MISRAC++2008-5-0-16_f" enabled="true" />
+                                <check name="MISRAC++2008-5-0-19" enabled="true" />
+                                <check name="MISRAC++2008-5-0-21" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-2">
+                                <check name="MISRAC++2008-5-2-4" enabled="true" />
+                                <check name="MISRAC++2008-5-2-5" enabled="true" />
+                                <check name="MISRAC++2008-5-2-6" enabled="true" />
+                                <check name="MISRAC++2008-5-2-7" enabled="true" />
+                                <check name="MISRAC++2008-5-2-9" enabled="false" />
+                                <check name="MISRAC++2008-5-2-10" enabled="false" />
+                                <check name="MISRAC++2008-5-2-11_a" enabled="true" />
+                                <check name="MISRAC++2008-5-2-11_b" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-3">
+                                <check name="MISRAC++2008-5-3-1" enabled="true" />
+                                <check name="MISRAC++2008-5-3-2_a" enabled="true" />
+                                <check name="MISRAC++2008-5-3-2_b" enabled="true" />
+                                <check name="MISRAC++2008-5-3-3" enabled="true" />
+                                <check name="MISRAC++2008-5-3-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-8">
+                                <check name="MISRAC++2008-5-8-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-14">
+                                <check name="MISRAC++2008-5-14-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-18">
+                                <check name="MISRAC++2008-5-18-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-5-19">
+                                <check name="MISRAC++2008-5-19-1" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-2">
+                                <check name="MISRAC++2008-6-2-1" enabled="true" />
+                                <check name="MISRAC++2008-6-2-2" enabled="true" />
+                                <check name="MISRAC++2008-6-2-3" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-3">
+                                <check name="MISRAC++2008-6-3-1_a" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_b" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_c" enabled="true" />
+                                <check name="MISRAC++2008-6-3-1_d" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-4">
+                                <check name="MISRAC++2008-6-4-1" enabled="true" />
+                                <check name="MISRAC++2008-6-4-2" enabled="true" />
+                                <check name="MISRAC++2008-6-4-3" enabled="true" />
+                                <check name="MISRAC++2008-6-4-4" enabled="true" />
+                                <check name="MISRAC++2008-6-4-5" enabled="true" />
+                                <check name="MISRAC++2008-6-4-6" enabled="true" />
+                                <check name="MISRAC++2008-6-4-7" enabled="true" />
+                                <check name="MISRAC++2008-6-4-8" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-5">
+                                <check name="MISRAC++2008-6-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-6-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-6-5-2" enabled="true" />
+                                <check name="MISRAC++2008-6-5-3" enabled="true" />
+                                <check name="MISRAC++2008-6-5-4" enabled="true" />
+                                <check name="MISRAC++2008-6-5-5" enabled="true" />
+                                <check name="MISRAC++2008-6-5-6" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-6-6">
+                                <check name="MISRAC++2008-6-6-1" enabled="true" />
+                                <check name="MISRAC++2008-6-6-2" enabled="true" />
+                                <check name="MISRAC++2008-6-6-4" enabled="true" />
+                                <check name="MISRAC++2008-6-6-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-1">
+                                <check name="MISRAC++2008-7-1-1" enabled="true" />
+                                <check name="MISRAC++2008-7-1-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-2">
+                                <check name="MISRAC++2008-7-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-4">
+                                <check name="MISRAC++2008-7-4-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-7-5">
+                                <check name="MISRAC++2008-7-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-7-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_a" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_b" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_c" enabled="true" />
+                                <check name="MISRAC++2008-7-5-2_d" enabled="true" />
+                                <check name="MISRAC++2008-7-5-4_a" enabled="false" />
+                                <check name="MISRAC++2008-7-5-4_b" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-0">
+                                <check name="MISRAC++2008-8-0-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-4">
+                                <check name="MISRAC++2008-8-4-1" enabled="true" />
+                                <check name="MISRAC++2008-8-4-3" enabled="true" />
+                                <check name="MISRAC++2008-8-4-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-8-5">
+                                <check name="MISRAC++2008-8-5-1_a" enabled="true" />
+                                <check name="MISRAC++2008-8-5-1_b" enabled="true" />
+                                <check name="MISRAC++2008-8-5-1_c" enabled="true" />
+                                <check name="MISRAC++2008-8-5-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-3">
+                                <check name="MISRAC++2008-9-3-1" enabled="true" />
+                                <check name="MISRAC++2008-9-3-2" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-5">
+                                <check name="MISRAC++2008-9-5-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-9-6">
+                                <check name="MISRAC++2008-9-6-2" enabled="true" />
+                                <check name="MISRAC++2008-9-6-3" enabled="true" />
+                                <check name="MISRAC++2008-9-6-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-12-1">
+                                <check name="MISRAC++2008-12-1-1_a" enabled="true" />
+                                <check name="MISRAC++2008-12-1-1_b" enabled="true" />
+                                <check name="MISRAC++2008-12-1-3" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-0">
+                                <check name="MISRAC++2008-16-0-3" enabled="true" />
+                                <check name="MISRAC++2008-16-0-4" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-2">
+                                <check name="MISRAC++2008-16-2-2" enabled="true" />
+                                <check name="MISRAC++2008-16-2-3" enabled="true" />
+                                <check name="MISRAC++2008-16-2-4" enabled="true" />
+                                <check name="MISRAC++2008-16-2-5" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-16-3">
+                                <check name="MISRAC++2008-16-3-1" enabled="true" />
+                                <check name="MISRAC++2008-16-3-2" enabled="false" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-17-0">
+                                <check name="MISRAC++2008-17-0-1" enabled="true" />
+                                <check name="MISRAC++2008-17-0-3" enabled="true" />
+                                <check name="MISRAC++2008-17-0-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-0">
+                                <check name="MISRAC++2008-18-0-1" enabled="true" />
+                                <check name="MISRAC++2008-18-0-2" enabled="true" />
+                                <check name="MISRAC++2008-18-0-3" enabled="true" />
+                                <check name="MISRAC++2008-18-0-4" enabled="true" />
+                                <check name="MISRAC++2008-18-0-5" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-2">
+                                <check name="MISRAC++2008-18-2-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-4">
+                                <check name="MISRAC++2008-18-4-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-18-7">
+                                <check name="MISRAC++2008-18-7-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-19-3">
+                                <check name="MISRAC++2008-19-3-1" enabled="true" />
+                            </group>
+                            <group enabled="true" name="MISRAC++2008-27-0">
+                                <check name="MISRAC++2008-27-0-1" enabled="true" />
+                            </group>
+                        </package>
+                    </checks_tree>
+                </cstat_settings>
+            </data>
+        </settings>
+    </configuration>
+    <group>
+        <name>inc</name>
+        <file>
+            <name>$PROJ_DIR$\..\inc\i2c.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\inc\main.h</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\inc\sensor.h</name>
+        </file>
+    </group>
+    <group>
+        <name>lib</name>
+        <group>
+            <name>rtos</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\rtos\rtos.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\rtos\rtos.h</name>
+            </file>
+        </group>
+        <group>
+            <name>ssd1306xled</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\font6x8.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\font8x16.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xled.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xled.h</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xledtx.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\ssd1306xled\ssd1306xledtx.h</name>
+            </file>
+        </group>
+        <group>
+            <name>tinyavrlib</name>
+            <file>
+                <name>$PROJ_DIR$\..\lib\tinyavrlib\num2str.c</name>
+            </file>
+            <file>
+                <name>$PROJ_DIR$\..\lib\tinyavrlib\num2str.h</name>
+            </file>
+        </group>
+    </group>
+    <group>
+        <name>src</name>
+        <file>
+            <name>$PROJ_DIR$\..\src\fuse.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\i2c.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\main.c</name>
+        </file>
+        <file>
+            <name>$PROJ_DIR$\..\src\sensor.c</name>
+        </file>
+    </group>
+</project>

+ 7 - 0
EWAVR/dryer.eww

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspace>
+    <project>
+        <path>$WS_DIR$\dryer.ewp</path>
+    </project>
+    <batchBuild />
+</workspace>

+ 672 - 0
Makefile

@@ -0,0 +1,672 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+# Carlos Lamas
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = atmega328p
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#     Typical values are:
+#         F_CPU =  1000000
+#         F_CPU =  1843200
+#         F_CPU =  2000000
+#         F_CPU =  3686400
+#         F_CPU =  4000000
+#         F_CPU =  7372800
+#         F_CPU =  8000000
+#         F_CPU = 11059200
+#         F_CPU = 14745600
+#         F_CPU = 16000000
+#         F_CPU = 18432000
+#         F_CPU = 20000000
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = dryer
+
+
+# Object files directory
+#     To put object files in current directory, use a dot (.), do NOT make
+#     this an empty or blank macro!
+OBJDIR = build/obj
+
+
+# Binary files directory
+#     To put object files in current directory, use a dot (.), do NOT make
+#     this an empty or blank macro!
+BINDIR = build/bin
+LIBDIR = build/lib
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = src/main.c
+SRC += src/fuse.c
+SRC += src/i2c.c
+SRC += src/sensor.c
+SRC += lib/rtos/rtos.c
+SRC += lib/tinyavrlib/num2str.c
+SRC += lib/ssd1306xled/ssd1306xled.c
+SRC += lib/ssd1306xled/ssd1306xledtx.c
+
+
+# List C++ source files here. (C dependencies are automatically generated.)
+CPPSRC =
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC =
+
+
+# Optimization level, can be [0, 1, 2, 3, s].
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = inc lib
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu11
+
+
+# Place -D or -U options here for C sources
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+
+# Place -D or -U options here for ASM sources
+ADEFS = -DF_CPU=$(F_CPU)
+
+
+# Place -D or -U options here for C++ sources
+CPPDEFS = -DF_CPU=$(F_CPU)UL
+#CPPDEFS += -D__STDC_LIMIT_MACROS
+#CPPDEFS += -D__STDC_CONSTANT_MACROS
+
+
+
+#---------------- Compiler Options C ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char
+CFLAGS += -funsigned-bitfields
+CFLAGS += -fshort-enums
+CFLAGS += -ffunction-sections
+CFLAGS += -fdata-sections
+#CFLAGS += -flto
+CFLAGS += -ffreestanding
+CFLAGS += -mrelax
+#CFLAGS += -fno-ivopts
+#CFLAGS += -fwhole-program
+#CFLAGS += -mcall-prologues
+#CFLAGS += -fno-split-wide-types
+CFLAGS += -W -Wall -Wextra -Wstrict-prototypes -Wundef -Werror
+#CFLAGS += -Wunreachable-code
+#CFLAGS += -Wsign-compare
+CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Compiler Options C++ ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CPPFLAGS = -g$(DEBUG)
+CPPFLAGS += $(CPPDEFS)
+CPPFLAGS += -O$(OPT)
+CPPFLAGS += -funsigned-char
+CPPFLAGS += -funsigned-bitfields
+CPPFLAGS += -fpack-struct
+CPPFLAGS += -fshort-enums
+CPPFLAGS += -fno-exceptions
+CPPFLAGS += -Wall
+CPPFLAGS += -Wundef
+CPPFLAGS += -fno-rtti
+CPPFLAGS += -fno-exceptions
+#CPPFLAGS += -mshort-calls
+#CPPFLAGS += -ffunction-sections
+#CPPFLAGS += -fdata-sections
+#CPPFLAGS += -mcall-prologues
+#CPPFLAGS += -fno-unit-at-a-time
+#CPPFLAGS += --param inline-call-cost=1
+#CPPFLAGS += -fno-split-wide-types
+#CPPFLAGS += -Wstrict-prototypes
+#CPPFLAGS += -Wunreachable-code
+#CPPFLAGS += -Wsign-compare
+#CPPFLAGS += -fvtable-gc
+CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
+CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+#CPPFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -adhlns:   create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+#  -listing-cont-lines: Sets the maximum number of continuation lines of hex
+#       dump that will be displayed for a given single line of source input.
+ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gdwarf-2,--listing-cont-lines=100
+#ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB =
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB =
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+# List any extra directories to look for libraries here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRALIBDIRS =
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(BINDIR)/$(TARGET).map,--cref
+#LDFLAGS += -Wl,-static
+LDFLAGS += -Wl,-gc-sections,-flto
+#LDFLAGS += -Wl,-s
+#LDFLAGS += -Wl,-relax
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+#LDFLAGS += -T $(TARGET).ld
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = usbasp
+#AVRDUDE_PROGRAMMER = avr910
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+#AVRDUDE_PORT = com3    # programmer connected to serial device
+AVRDUDE_PORT = usb	# programmer connected to serial device
+
+# set com port baudrate
+#AVRDUDE_COM_BAUD = -b 115200
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(BINDIR)/$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(BINDIR)/$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+AVRDUDE_MCU = m328p
+#AVRDUDE_MCU = $(MCU)
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_COM_BAUD)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+#DEBUG_BACKEND = avarice
+DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+AVRPATH = C:/mcu/avr-gcc/bin
+SHELL = sh
+CC = $(AVRPATH)/avr-gcc
+OBJCOPY = $(AVRPATH)/avr-objcopy
+OBJDUMP = $(AVRPATH)/avr-objdump
+SIZE = $(AVRPATH)/avr-size
+AR = $(AVRPATH)/avr-ar rcs
+NM = $(AVRPATH)/avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling C:
+MSG_COMPILING_CPP = Compiling C++:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+MSG_CREATING_LIBRARY = Creating library:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
+
+# Define all listing files.
+LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+# Change the build target to build a HEX file or a library.
+build: elf hex eep lss sym
+#build: lib
+
+
+elf: $(BINDIR)/$(TARGET).elf
+hex: $(BINDIR)/$(TARGET).hex
+eep: $(BINDIR)/$(TARGET).eep
+lss: $(BINDIR)/$(TARGET).lss
+sym: $(BINDIR)/$(TARGET).sym
+LIBNAME=$(BINDIR)/lib$(TARGET).a
+lib: $(LIBNAME)
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(BINDIR)/$(TARGET).hex
+#ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(BINDIR)/$(TARGET).elf
+ELFSIZE = $(SIZE) --target=elf32-avr $(BINDIR)/$(TARGET).elf
+sizebefore:
+	@if test -f $(BINDIR)/$(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(BINDIR)/$(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion :
+	@$(CC) --version
+
+
+
+# Program the device.
+program: $(BINDIR)/$(TARGET).hex $(BINDIR)/$(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set
+#     a breakpoint at main().
+gdb-config:
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(BINDIR)/$(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif
+	@echo break main >> $(GDBINIT_FILE)
+
+debug: gdb-config $(BINDIR)/$(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(BINDIR)/$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT = $(OBJCOPY) --debugging
+COFFCONVERT += --change-section-address .data-0x800000
+COFFCONVERT += --change-section-address .bss-0x800000
+COFFCONVERT += --change-section-address .noinit-0x800000
+COFFCONVERT += --change-section-address .eeprom-0x810000
+
+
+
+coff: $(BINDIR)/$(TARGET).elf
+#	@echo
+	@echo $(MSG_COFF) $(BINDIR)/$(TARGET).cof
+	@$(COFFCONVERT) -O coff-avr $< $(BINDIR)/$(TARGET).cof
+
+
+extcoff: $(BINDIR)/$(TARGET).elf
+#	@echo
+	@echo $(MSG_EXTENDED_COFF) $(BINDIR)/$(TARGET).cof
+	@$(COFFCONVERT) -O coff-ext-avr $< $(BINDIR)/$(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+#	@echo
+	@echo $(MSG_FLASH) $@
+	@$(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock -R .signature $< $@
+
+%.eep: %.elf
+#	@echo
+	@echo $(MSG_EEPROM) $@
+	@-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+#	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	@$(OBJDUMP) -h -S -z $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+#	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	@$(NM) -n $< > $@
+
+
+
+# Create library from object files.
+.SECONDARY : $(BINDIR)/$(TARGET).a
+.PRECIOUS : $(OBJ)
+%.a: $(OBJ)
+#	@echo
+	@echo $(MSG_CREATING_LIBRARY) $@
+	@$(AR) $@ $(OBJ)
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(BINDIR)/$(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+#	@echo
+	@echo $(MSG_LINKING) $@
+	@$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+$(OBJDIR)/%.o : %.c
+#	@echo
+	@echo $(MSG_COMPILING) $<
+	@$(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create object files from C++ source files.
+$(OBJDIR)/%.o : %.cpp
+#	@echo
+	@echo $(MSG_COMPILING_CPP) $<
+	@$(CC) -c $(ALL_CPPFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	@$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Compile: create assembler files from C++ source files.
+%.s : %.cpp
+	@$(CC) -S $(ALL_CPPFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+$(OBJDIR)/%.o : %.S
+#	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	@$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	@$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	@$(REMOVE) $(BINDIR)/$(TARGET).hex
+	@$(REMOVE) $(BINDIR)/$(TARGET).eep
+	@$(REMOVE) $(BINDIR)/$(TARGET).cof
+	@$(REMOVE) $(BINDIR)/$(TARGET).elf
+	@$(REMOVE) $(BINDIR)/$(TARGET).map
+	@$(REMOVE) $(BINDIR)/$(TARGET).sym
+	@$(REMOVE) $(BINDIR)/$(TARGET).lss
+	@$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
+	@$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
+	@$(REMOVE) $(CPPSRC:%.c=$(OBJDIR)/%.o)
+	@$(REMOVE) $(CPPSRC:%.c=$(OBJDIR)/%.lst)
+	@$(REMOVE) $(ASRC:%.S=$(OBJDIR)/%.o)
+	@$(REMOVE) $(ASRC:%.S=$(OBJDIR)/%.lst)
+	@$(REMOVE) $(SRC:.c=.s)
+	@$(REMOVE) $(SRC:.c=.d)
+	@$(REMOVE) $(SRC:.c=.i)
+	@$(REMOVE) $(CPPSRC:.c=.s)
+	@$(REMOVE) $(CPPSRC:.c=.d)
+	@$(REMOVE) $(CPPSRC:.c=.i)
+	@$(REMOVEDIR) .dep
+
+
+# Create object files directory
+$(shell mkdir $(OBJDIR) 2>/dev/null)
+
+# Create bin files directory
+$(shell mkdir $(BINDIR) 2>/dev/null)
+
+# Create lib files directory
+$(shell mkdir $(LIBDIR)/rtos 2>/dev/null)
+$(shell mkdir $(LIBDIR)/ssd1306xled 2>/dev/null)
+$(shell mkdir $(LIBDIR)/tinyavrlib 2>/dev/null)
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config

+ 24 - 0
ReadMe.txt

@@ -0,0 +1,24 @@
+Проект "Сушилка"
+
+В корпусе от старой микроволновки, принудительный вентелятор, управляя теном 
+поддерживать заданную температуру.
+
+MCU	: Atmega328a (Arduino ProMini)
+Sensor	: AHT10 (Temperature + Humidity)
+Display	: I2C OLED SSD1306
+Control	: Управление нагревом тэна посредством симмистора через оптопару с датчиком "0".
+Input	: 9-ти позиционый переключатель, задачик темпертуры: 50..90 градусов, шаг 5 градусов.
+UART	: Опциональо, для отладки.
+
+=====
+18.02.2022
+
+Управление тэном с помощью алгоритма Брзенхма. Для начала попробуем 100 шагов 
+по 10 мс. Возможно не хватит дискретности.
+
+Переключатель - периодически опрашивать, при изменении позиции менять уставку 
+температуры.
+
+AHT10 - 400 kHz, I2C addr 0x70
+
+SSD1306 - 400 kHz, I2C addr 0x78 (0x7a ?)

BIN
hw/drayer.dch


+ 19 - 0
inc/i2c.h

@@ -0,0 +1,19 @@
+#ifndef _I2C_H_
+#define _I2C_H_
+
+/* I2C Status */
+typedef enum {
+  I2C_Ret_OK    = 0,
+  I2C_Ret_NACK  = -1,
+  I2C_Ret_ERR   = -2,
+  I2C_Ret_TOut  = -3
+} i2c_status_t;
+
+void I2C_Init(void);
+void I2C_Close(void);
+void I2C_Start(void);
+void I2C_Stop(void);
+i2c_status_t I2C_WriteByte(const uint8_t data);
+i2c_status_t I2C_ReadByte(uint8_t *data, const uint8_t ack);
+
+#endif /* _I2C_H_ */

+ 101 - 0
inc/main.h

@@ -0,0 +1,101 @@
+#ifndef _MAIN_H_
+#define _MAIN_H_
+
+#if defined(__GNUC__)
+# include <avr/io.h>
+# include <avr/sleep.h>
+# include <avr/interrupt.h>
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+# include <stdint.h>
+#endif
+
+/**
+ * Global defines
+ */
+#ifndef F_CPU
+  #define F_CPU   8000000
+#endif
+#define F_TWI             400000
+#define TIMER0_HZ         1000
+#define TIMER0_PRESCALER  64
+#define	TIMER0_CNT        (0x100 - (F_CPU / TIMER0_PRESCALER / TIMER0_HZ))
+
+/**
+ * Bitwise macro
+ */
+#define SetBit(x,y)    do{ x |=  (1 << (y));} while(0)
+#define ClrBit(x,y)    do{ x &= ~(1 << (y));} while(0)
+#define InvBit(x,y)    do{(x)^=  (1 << (y));} while(0)
+#define IsBit(x,y)        (x &   (1 << (y)))
+
+#define ResBit(reg,bit)    (reg &= ~_BV(bit))
+/*
+ Автоматически включается avr/sfr_defs.h, кторый содержит:
+	_BV(bit) === (1<<(bit))
+	bit_is_set(sfr, bit)
+	bit_is_clear(sfr, bit)
+	loop_until_bit_is_set(sfr, bit)
+	loop_until_bit_is_clear(sfr, bit)
+*/
+
+/**
+ * Global Type defines
+ */
+typedef unsigned char      u08;
+typedef unsigned short     u16;
+typedef unsigned long      u32;
+typedef unsigned long long u64;
+
+typedef   signed char      s08;
+typedef   signed short     s16;
+typedef   signed long      s32;
+typedef   signed long long s64;
+
+/**
+ * Interrupt macro
+ */
+static volatile u08 saveRegister;
+
+#if defined(__GNUC__)
+#define  ENABLE_INTERRUPT do{sei();}while(0)
+#define DISABLE_INTERRUPT do{saveRegister = SREG; cli();}while(0)
+#elif defined(__ICCAVR__)
+#define  ENABLE_INTERRUPT do{__enable_interrupt();}while(0)
+#define DISABLE_INTERRUPT do{saveRegister = SREG; __disable_interrupt();}while(0)
+#endif
+#define RESTORE_INTERRUPT do{SREG = saveRegister;}while(0)
+//использовать RESTORE только после DISABLE
+
+
+/**
+ * Logical values
+ */
+#define TRUE  1
+#define FALSE 0
+
+#define HIGH  1
+#define LOW   0
+
+#define ON    1
+#define OFF   0
+
+//#define NULL  0
+
+/**
+ * Maximum values of types
+ */
+#define MAX08U	255
+#define MAX16U	65535
+#define MAX32U	4294967295
+
+#define MIN08S	-128
+#define MAX08S	 127
+#define MIN16S	-32768
+#define MAX16S	 32767
+#define MIN32S	-2147483648
+#define MAX32S	 2147483647
+
+/*--------------------------------------------------------------------------*/
+#endif /* _MAIN_H_ */

+ 31 - 0
inc/sensor.h

@@ -0,0 +1,31 @@
+#pragma once
+#ifndef _SENSOR_H_
+#define _SENSOR_H_
+
+#if defined(__GNUC__)
+# include <avr/io.h>
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+# include <stdint.h>
+#endif
+
+/* Status code */
+typedef enum {
+  AHT10_St_OK = 0,
+  AHT10_St_Err,
+  AHT10_St_Bsy
+} aht10_st_t;
+
+/* Data type */
+typedef struct {
+  int8_t Humidity;
+  int8_t Temperature;
+} aht10_t;
+
+/* Function */
+aht10_st_t AHT10_Init(void);
+aht10_st_t AHT10_StartMeasure(void);
+aht10_st_t AHT10_GetData(aht10_t * data);
+
+#endif /* _SENSOR_H_ */

+ 163 - 0
lib/rtos/rtos.c

@@ -0,0 +1,163 @@
+#include "rtos.h"
+
+/* Private varibles */
+static volatile task TaskArray[MAX_TASKS]; // очередь задач
+static volatile u08 arrayTail;             // "хвост" очереди
+
+/* Private defines */
+
+/* External variables */
+extern volatile uint8_t TWI_WDT;
+
+/* Delay counter */
+volatile uint16_t TDelay;
+
+/**
+ * Инициализация РТОС
+ */
+inline void RTOS_Init()
+{
+  // "хвост" в 0
+  arrayTail = 0;
+}
+
+/**
+ * Добавление задачи в список
+ */
+void RTOS_SetTask (void (*taskFunc)(void), u16 taskDelay, u16 taskPeriod)
+{
+  u08 i;
+
+  if (!taskFunc) {
+    return;
+  }
+
+  for (i = 0; i < arrayTail; i++) {       // поиск задачи в текущем списке
+    if (TaskArray[i].pFunc == taskFunc) { // если нашли, то обновляем переменные
+      DISABLE_INTERRUPT;
+
+      TaskArray[i].delay  = taskDelay;
+      TaskArray[i].period = taskPeriod;
+      TaskArray[i].run    = 0;
+
+      RESTORE_INTERRUPT;
+      return;                             // обновив, выходим
+    }
+  }
+
+  if (arrayTail < MAX_TASKS) {            // если такой задачи в списке нет
+    // и есть место,то добавляем
+    DISABLE_INTERRUPT;
+
+    TaskArray[arrayTail].pFunc  = taskFunc;
+    TaskArray[arrayTail].delay  = taskDelay;
+    TaskArray[arrayTail].period = taskPeriod;
+    TaskArray[arrayTail].run    = 0;
+
+    arrayTail ++;                         // увеличиваем "хвост"
+    RESTORE_INTERRUPT;
+  }
+}
+
+/**
+ * Удаление задачи из списка
+ */
+inline void RTOS_DeleteTask (void (*taskFunc)(void))
+{
+  u08 i;
+  for (i=0; i<arrayTail; i++) {           // проходим по списку задач
+    if (TaskArray[i].pFunc == taskFunc) { // если задача в списке найдена
+
+      DISABLE_INTERRUPT;
+      if (i != (arrayTail - 1)) {         // переносим последнюю задачу на место удаляемой
+        TaskArray[i] = TaskArray[arrayTail - 1];
+      }
+      arrayTail --;                       // уменьшаем указатель "хвоста"
+      RESTORE_INTERRUPT;
+      return;
+    }
+  }
+}
+
+/**
+ * Диспетчер РТОС, вызывается в main
+ */
+
+void RTOS_DispatchTask(void)
+{
+  u08 i;
+  void (*function) (void);
+
+  for (i=0; i<arrayTail; i++) {               // проходим по списку задач
+    if (TaskArray[i].run == 1) {              // если флаг на выполнение взведен, запоминаем задачу, т.к. во
+      function = TaskArray[i].pFunc;          // время выполнения может измениться индекс
+      if (TaskArray[i].period == 0) {         // если период равен 0
+        RTOS_DeleteTask(TaskArray[i].pFunc);  // удаляем задачу из списка,
+      } else {
+        TaskArray[i].run = 0;                 // иначе снимаем флаг запуска
+        if (!TaskArray[i].delay) {            // если задача не изменила задержку, задаем ее
+          TaskArray[i].delay = TaskArray[i].period - 1;
+        }                                     // задача для себя может сделать паузу
+      }
+      (*function)();                          // выполняем задачу
+    }
+  }
+}
+
+/**
+ * Delay, msek
+ * также, что-бы зря не терять время -- крутим диспетчер
+ */
+void tdelay_ms(uint16_t msek)
+{
+
+  TDelay = msek;
+
+  do {
+    RTOS_DispatchTask();
+    // делать нехрен -- спим, ждём прерывание
+#if defined(__GNUC__)
+    set_sleep_mode(SLEEP_MODE_IDLE);
+    sleep_mode();
+#elif defined(__ICCAVR__)
+    MCUCR = 1<<SE;
+    __sleep();
+#endif
+  } while (TDelay>0);
+
+}
+
+/**
+ * Таймерная служба РТОС и tdelay (прерывание аппаратного таймера)
+ */
+#if defined(__ICCAVR__)
+#pragma vector=TIMER0_OVF_vect
+__interrupt void TIMER0_OVF_ISR(void)
+#elif defined(__GNUC__)
+ISR(TIMER0_OVF_vect)
+#endif
+{
+  /* reload timer counter */
+  TCNT0 = TIMER0_CNT;
+
+  /* RTOS_Timer */
+  u08 i;
+  for (i=0; i<arrayTail; i++) {     // проходим по списку задач
+    if (TaskArray[i].delay == 0) {  // если время до выполнения истекло
+      TaskArray[i].run = 1;         // взводим флаг запуска,
+    } else {
+      TaskArray[i].delay--;         // иначе уменьшаем время
+    }
+  }
+
+  /* Delay_ms counter */
+  if (TDelay > 0) {
+    TDelay --;
+  }
+
+  /* I2C wachdog counter */
+  if (TWI_WDT > 0) {
+    TWI_WDT --;
+  }
+
+}

+ 49 - 0
lib/rtos/rtos.h

@@ -0,0 +1,49 @@
+#pragma once
+#ifndef RTOS_H
+#define RTOS_H
+
+/******************************************************************************************
+ * За основу взят планировщик задач с сайта ChipEnable.ru                                 *
+ * http://chipenable.ru/index.php/programming-avr/item/110-planirovschik.html             *
+ *                                                                                        *
+ * Доработал Шибанов Владимир aka KontAr                                                  *
+ * Дата: 26.03.2014                                                                       *
+ *                                                                                        *
+ * Изменения:                                                                             *
+ * - добавлен однократный вызов задачи                                                    *
+ * - добавлено удаление задачи по имени                                                   *
+ * - при повторном добавлении задачи обновляются ее переменные                            *
+ * - добавлен указатель на "хвост" списка                                                 *
+ * - функции РТОС скорректированы с учетом "хвоста"                                       *
+ ******************************************************************************************
+ * shilov, 2015.04.07									                                                    *
+ * совместил с модулем милисекундных задержек на таймере				                          *
+ ******************************************************************************************/
+
+#include "main.h"
+
+/* Maximum task number */
+#define MAX_TASKS      30
+
+/**
+ * Task structure
+ */
+typedef struct task {
+   void (*pFunc) (void);  // указатель на функцию
+   u16 delay;             // задержка перед первым запуском задачи
+   u16 period;            // период запуска задачи
+   u08 run;               // флаг готовности задачи к запуску
+} task;
+
+/**
+ * Function prototypes
+ */
+void RTOS_Init (void);
+void RTOS_SetTask (void (*taskFunc)(void), u16 taskDelay, u16 taskPeriod);
+void RTOS_DeleteTask (void (*taskFunc)(void));
+void RTOS_DispatchTask (void);
+void RTOS_Timer (void);
+
+void tdelay_ms(uint16_t msek);
+
+#endif

+ 127 - 0
lib/ssd1306xled/font6x8.h

@@ -0,0 +1,127 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+// ============================================================================
+
+#if defined(__GNUC__)
+#include <avr/pgmspace.h>
+#elif defined(__ICCAVR__)
+#	include <ioavr.h>
+#	include <intrinsics.h>
+# include <stdint.h>
+#define PROGMEM __flash
+#define pgm_read_byte(a)  (*(unsigned char __flash *)(a))
+#define pgm_read_word(a)  (*(unsigned __flash *)(a))
+#endif
+
+// ----------------------------------------------------------------------------
+
+/* Standard ASCII 6x8 font */
+const uint8_t PROGMEM ssd1306xled_font6x8data [] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp
+  0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // !
+  0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // "
+  0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // #
+  0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $
+  0x00, 0x62, 0x64, 0x08, 0x13, 0x23, // %
+  0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // &
+  0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // '
+  0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // (
+  0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // )
+  0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // *
+  0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // +
+  0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // ,
+  0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // -
+  0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // .
+  0x00, 0x20, 0x10, 0x08, 0x04, 0x02, // /
+  0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
+  0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1
+  0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2
+  0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3
+  0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4
+  0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5
+  0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6
+  0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7
+  0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8
+  0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9
+  0x00, 0x00, 0x36, 0x36, 0x00, 0x00, // :
+  0x00, 0x00, 0x56, 0x36, 0x00, 0x00, // ;
+  0x00, 0x08, 0x14, 0x22, 0x41, 0x00, // <
+  0x00, 0x14, 0x14, 0x14, 0x14, 0x14, // =
+  0x00, 0x00, 0x41, 0x22, 0x14, 0x08, // >
+  0x00, 0x02, 0x01, 0x51, 0x09, 0x06, // ?
+  0x00, 0x32, 0x49, 0x59, 0x51, 0x3E, // @
+  0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A
+  0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, // B
+  0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, // C
+  0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C, // D
+  0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, // E
+  0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, // F
+  0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A, // G
+  0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, // H
+  0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, // I
+  0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, // J
+  0x00, 0x7F, 0x08, 0x14, 0x22, 0x41, // K
+  0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, // L
+  0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M
+  0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, // N
+  0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, // O
+  0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, // P
+  0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, // Q
+  0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, // R
+  0x00, 0x46, 0x49, 0x49, 0x49, 0x31, // S
+  0x00, 0x01, 0x01, 0x7F, 0x01, 0x01, // T
+  0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, // U
+  0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, // V
+  0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, // W
+  0x00, 0x63, 0x14, 0x08, 0x14, 0x63, // X
+  0x00, 0x07, 0x08, 0x70, 0x08, 0x07, // Y
+  0x00, 0x61, 0x51, 0x49, 0x45, 0x43, // Z
+  0x00, 0x00, 0x7F, 0x41, 0x41, 0x00, // [
+  0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55, // 55
+  0x00, 0x00, 0x41, 0x41, 0x7F, 0x00, // ]
+  0x00, 0x04, 0x02, 0x01, 0x02, 0x04, // ^
+  0x00, 0x40, 0x40, 0x40, 0x40, 0x40, // _
+  0x00, 0x00, 0x01, 0x02, 0x04, 0x00, // '
+  0x00, 0x20, 0x54, 0x54, 0x54, 0x78, // a
+  0x00, 0x7F, 0x48, 0x44, 0x44, 0x38, // b
+  0x00, 0x38, 0x44, 0x44, 0x44, 0x20, // c
+  0x00, 0x38, 0x44, 0x44, 0x48, 0x7F, // d
+  0x00, 0x38, 0x54, 0x54, 0x54, 0x18, // e
+  0x00, 0x08, 0x7E, 0x09, 0x01, 0x02, // f
+  0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C, // g
+  0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h
+  0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, // i
+  0x00, 0x40, 0x80, 0x84, 0x7D, 0x00, // j
+  0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k
+  0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, // l
+  0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m
+  0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, // n
+  0x00, 0x38, 0x44, 0x44, 0x44, 0x38, // o
+  0x00, 0xFC, 0x24, 0x24, 0x24, 0x18, // p
+  0x00, 0x18, 0x24, 0x24, 0x18, 0xFC, // q
+  0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r
+  0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s
+  0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t
+  0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u
+  0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v
+  0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w
+  0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x
+  0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y
+  0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z
+  0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // horiz lines
+};
+
+// ============================================================================

+ 130 - 0
lib/ssd1306xled/font8x16.h

@@ -0,0 +1,130 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+// ============================================================================
+
+#if defined(__GNUC__)
+#include <avr/pgmspace.h>
+#elif defined(__ICCAVR__)
+#	include <ioavr.h>
+#	include <intrinsics.h>
+# include <stdint.h>
+#define PROGMEM __flash
+#define pgm_read_byte(a)  (*(unsigned char __flash *)(a))
+#define pgm_read_word(a)  (*(unsigned __flash *)(a))
+#endif
+
+// ----------------------------------------------------------------------------
+
+/* Standard ASCII 8x16 font */
+const uint8_t PROGMEM ssd1306xled_font8x16data [] = {
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0
+  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00, // ! 1
+  0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " 2
+  0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00, // # 3
+  0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00, // $ 4
+  0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00, // % 5
+  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10, // & 6
+  0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' 7
+  0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00, // ( 8
+  0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00, // ) 9
+  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00, // * 10
+  0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00, // + 11
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00, // , 12
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, // - 13
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00, // . 14
+  0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00, // / 15
+  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, // 0 16
+  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // 1 17
+  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, // 2 18
+  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, // 3 19
+  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, // 4 20
+  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, // 5 21
+  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, // 6 22
+  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // 7 23
+  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, // 8 24
+  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, // 9 25
+  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // : 26
+  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00, // ; 27
+  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00, // < 28
+  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // = 29
+  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00, // > 30
+  0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00, // ? 31
+  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00, // @ 32
+  0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20, // A 33
+  0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00, // B 34
+  0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00, // C 35
+  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00, // D 36
+  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00, // E 37
+  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00, // F 38
+  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00, // G 39
+  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20, // H 40
+  0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // I 41
+  0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00, // J 42
+  0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00, // K 43
+  0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00, // L 44
+  0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00, // M 45
+  0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00, // N 46
+  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00, // O 47
+  0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00, // P 48
+  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00, // Q 49
+  0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20, // R 50
+  0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00, // S 51
+  0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00, // T 52
+  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00, // U 53
+  0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00, // V 54
+  0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00, // W 55
+  0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20, // X 56
+  0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00, // Y 57
+  0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00, // Z 58
+  0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00, // [ 59
+  0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00, // \ 60
+  0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00, // ] 61
+  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ 62
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, // _ 63
+  0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` 64
+  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20, // a 65
+  0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00, // b 66
+  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00, // c 67
+  0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20, // d 68
+  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00, // e 69
+  0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // f 70
+  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00, // g 71
+  0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20, // h 72
+  0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // i 73
+  0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00, // j 74
+  0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00, // k 75
+  0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, // l 76
+  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F, // m 77
+  0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20, // n 78
+  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00, // o 79
+  0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00, // p 80
+  0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80, // q 81
+  0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00, // r 82
+  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00, // s 83
+  0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00, // t 84
+  0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20, // u 85
+  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00, // v 86
+  0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00, // w 87
+  0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00, // x 88
+  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00, // y 89
+  0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00, // z 90
+  0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40, // { 91
+  0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, // | 92
+  0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00, // } 93
+  0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ 94
+};
+
+// ============================================================================

+ 185 - 0
lib/ssd1306xled/ssd1306xled.c

@@ -0,0 +1,185 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+// ============================================================================
+// ACKNOWLEDGEMENTS:
+// - Some code and ideas initially based on "IIC_wtihout_ACK"
+//   by http://www.14blog.com/archives/1358 (defunct)
+// - Init sequence used info from Adafruit_SSD1306.cpp init code.
+// ============================================================================
+
+#if defined(__GNUC__)
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+# include <stdint.h>
+#define PROGMEM __flash
+#define pgm_read_byte(a)  (*(unsigned char __flash *)(a))
+#define pgm_read_word(a)  (*(unsigned __flash *)(a))
+#endif
+
+#include "ssd1306xled.h"
+#include "i2c.h"
+
+// ----------------------------------------------------------------------------
+
+void ssd1306_start_command(void);	// Initiate transmission of command
+void ssd1306_start_data(void);	// Initiate transmission of data
+void ssd1306_data_byte(uint8_t);	// Transmission 1 byte of data
+void ssd1306_stop(void);	// Finish transmission
+
+// ----------------------------------------------------------------------------
+
+const uint8_t PROGMEM ssd1306_init_sequence [] = {	// Initialization Sequence
+
+  0xAE,			// Set Display ON/OFF - AE=OFF, AF=ON
+  0xD5, 0xF0,		// Set display clock divide ratio/oscillator frequency, set divide ratio
+  0xA8, 0x3F,		// Set multiplex ratio (1 to 64) ... (height - 1)
+  0xD3, 0x00,		// Set display offset. 00 = no offset
+  0x40 | 0x00,	// Set start line address, at 0.
+  0x8D, 0x14,		// Charge Pump Setting, 14h = Enable Charge Pump
+  0x20, 0x00,		// Set Memory Addressing Mode - 00=Horizontal, 01=Vertical, 10=Page, 11=Invalid
+  0xA0 | 0x01,	// Set Segment Re-map
+  0xC8,			// Set COM Output Scan Direction
+  0xDA, 0x12,		// Set COM Pins Hardware Configuration - 128x32:0x02, 128x64:0x12
+  0x81, 0x3F,		// Set contrast control register
+  0xD9, 0x22,		// Set pre-charge period (0x22 or 0xF1)
+  0xDB, 0x20,		// Set Vcomh Deselect Level - 0x00: 0.65 x VCC, 0x20: 0.77 x VCC (RESET), 0x30: 0.83 x VCC
+  0xA4,			// Entire Display ON (resume) - output RAM to display
+  0xA6,			// Set Normal/Inverse Display mode. A6=Normal; A7=Inverse
+  0x2E,			// Deactivate Scroll command
+  0xAF,			// Set Display ON/OFF - AE=OFF, AF=ON
+  //
+  0x22, 0x00, 0x3f,	// Set Page Address (start,end)
+  0x21, 0x00,	0x7f,	// Set Column Address (start,end)
+  //
+  // 0xD6, 0x01,		// Set Zoom In, 0=disabled, 1=enabled
+  /*
+  	0xAE,			// Display OFF (sleep mode)
+  	0x20, 0x00,		// Set Memory Addressing Mode - 00=Horizontal, 01=Vertical, , 10=Page, 11=Invalid
+  	0xB0,			// Set Page Start Address for Page Addressing Mode, 0-7
+  	0xC8,			// Set COM Output Scan Direction
+  	0x00,			// ---set low column address
+  	0x10,			// ---set high column address
+  	0x40,			// --set start line address
+  	0x81, 0x3F,		// Set contrast control register
+  	0xA1,			// Set Segment Re-map. A0=address mapped; A1=address 127 mapped.
+  	0xA6,			// Set display mode. A6=Normal; A7=Inverse
+  	0xA8, 0x3F,		// Set multiplex ratio(1 to 64)
+  	0xA4,			// Output RAM to Display - 0xA4=Output follows RAM content; 0xA5,Output ignores RAM content
+  	0xD3, 0x00,		// Set display offset. 00 = no offset
+  	0xD5, 0xF0,		// --set display clock divide ratio/oscillator frequency
+  	0xD9, 0x22,		// Set pre-charge period
+  	0xDA, 0x12,		// Set com pins hardware configuration
+  	0xDB, 0x20,		// --set vcomh, 0x20,0.77xVcc
+  	0x8D, 0x14,		// Charge Pump Setting, 14h = Enable Charge Pump
+  	0xAF,			// Display ON in normal mode
+  */
+};
+
+// ============================================================================
+
+// NOTE: These functions are separate sub-library for handling I2C simplified output.
+// NAME: I2CSW - I2C Simple Writer.
+// Convenience definitions for manipulating PORTB pins
+// NOTE: These definitions are used only internally by the I2CSW library
+#define I2CSW_HIGH(PORT) PORTB |= (1 << PORT)
+#define I2CSW_LOW(PORT) PORTB &= ~(1 << PORT)
+
+// TO-DO: Implement and use the definitions below.
+#define I2CSW_SDA_DDI()		// Data direction INPUT (0x17 is DDRB)
+#define I2CSW_SDA_DDO()		// Data direction OUTPUT
+#define I2CSW_SDA_HI()		// Port to HIGH
+#define I2CSW_SDA_LO()		// Port to LOW
+#define I2CSW_SCL_DDI()		// Data direction INPUT
+#define I2CSW_SCL_DDO()		// Data direction OUTPUTT
+#define I2CSW_SCL_HI()		// Port to HIGH
+#define I2CSW_SCL_LO()		// Port to LOW
+// IMPORTANT/NOTE: There is no need to use AVR ASM instructions such as "cbi" and "sbi"
+// The compiler optimizes the bit-shift operations to those instructions.
+
+// ============================================================================
+
+void ssd1306_start_command(void)
+{
+  I2C_Start();
+  I2C_WriteByte(SSD1306_SADDR);	// Slave address: R/W(SA0)=0 - write
+  I2C_WriteByte(0x00);			// Control byte: D/C=0 - write command
+}
+
+void ssd1306_start_data(void)
+{
+  I2C_Start();
+  I2C_WriteByte(SSD1306_SADDR);	// Slave address, R/W(SA0)=0 - write
+  I2C_WriteByte(0x40);			// Control byte: D/C=1 - write data
+}
+
+void ssd1306_data_byte(uint8_t b)
+{
+  I2C_WriteByte(b);
+}
+
+void ssd1306_stop(void)
+{
+  I2C_Stop();
+}
+
+// ============================================================================
+
+void ssd1306_init(void)
+{
+  ssd1306_start_command();	// Initiate transmission of command
+  for (uint8_t i = 0; i < sizeof (ssd1306_init_sequence); i++) {
+    ssd1306_data_byte(pgm_read_byte(&ssd1306_init_sequence[i]));	// Send the command out
+  }
+  ssd1306_stop();	// Finish transmission of data
+}
+
+void ssd1306_setpos(uint8_t x, uint8_t y)
+{
+  ssd1306_start_command();
+  ssd1306_data_byte(0xb0 | (y & 0x07));	// Set page start address
+  ssd1306_data_byte(x & 0x0f);			// Set the lower nibble of the column start address
+  ssd1306_data_byte(0x10 | (x >> 4));		// Set the higher nibble of the column start address
+  ssd1306_stop();	// Finish transmission of data
+}
+
+void ssd1306_fill(uint8_t p)
+{
+  ssd1306_setpos(0, 0);
+  ssd1306_start_data(); // Initiate transmission of data
+  for (uint16_t i = 128 * 8; i > 0; i--) {
+    ssd1306_data_byte(p);
+  }
+  ssd1306_stop(); // Finish transmission of data
+}
+
+void ssd1306_fill4(uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4)
+{
+  ssd1306_setpos(0, 0);
+  ssd1306_start_data();	// Initiate transmission of data
+  for (uint16_t i = 0; i < 128 * 8 / 4; i++) {
+    ssd1306_data_byte(p1);
+    ssd1306_data_byte(p2);
+    ssd1306_data_byte(p3);
+    ssd1306_data_byte(p4);
+  }
+  ssd1306_stop();	// Finish transmission of data
+}
+
+// ============================================================================

+ 42 - 0
lib/ssd1306xled/ssd1306xled.h

@@ -0,0 +1,42 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+#ifndef SSD1306XLED_H
+#define SSD1306XLED_H
+
+// ============================================================================
+
+// -----(+)-------------------->-----> [Vcc]	Pin 1 on the SSD1306 display board
+// -----(-)-------------------->-----> [GND]	Pin 2 on the SSD1306 display board
+#define SSD1306_SCL		PB2   // ----> [SCL]	Pin 3 on the SSD1306 display board
+#define SSD1306_SDA		PB0   // ----> [SDA]	Pin 4 on the SSD1306 display board
+
+#define SSD1306_SADDR	0x78  // Display IC2 slave address, default 0x78
+
+// ----------------------------------------------------------------------------
+
+#define ssd1306_clear() ssd1306_fill(0)
+#define ssd1306_fill2(p1, p2) ssd1306_fill4(p1, p2, p1, p2)
+
+// ----------------------------------------------------------------------------
+
+void ssd1306_init(void);
+void ssd1306_setpos(uint8_t, uint8_t);
+void ssd1306_fill(uint8_t);
+void ssd1306_fill4(uint8_t, uint8_t, uint8_t, uint8_t);
+
+// ============================================================================
+
+#endif

+ 120 - 0
lib/ssd1306xled/ssd1306xledtx.c

@@ -0,0 +1,120 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+// ============================================================================
+
+#if defined(__GNUC__)
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+# include <stdint.h>
+#define PROGMEM __flash
+#define pgm_read_byte(a)  (*(unsigned char __flash *)(a))
+#define pgm_read_word(a)  (*(unsigned __flash *)(a))
+#endif
+
+#include "tinyavrlib/num2str.h"
+
+#include "ssd1306xled.h"
+#include "ssd1306xledtx.h"
+
+// ----------------------------------------------------------------------------
+
+extern void ssd1306_start_data(void);	// Initiate transmission of data
+extern void ssd1306_data_byte(uint8_t);	// Transmission 1 byte of data
+extern void ssd1306_stop(void);			// Finish transmission
+
+// ----------------------------------------------------------------------------
+
+const uint8_t *ssd1306tx_font_src;
+uint8_t ssd1306tx_font_char_base;
+
+// ----------------------------------------------------------------------------
+
+void ssd1306tx_init(const uint8_t *fron_src, uint8_t char_base)
+{
+  ssd1306tx_font_src = fron_src;
+  ssd1306tx_font_char_base = char_base;
+}
+
+// ----------------------------------------------------------------------------
+
+void ssd1306tx_char(char ch)
+{
+  uint16_t j = (ch << 2) + (ch << 1) - 192; // Equiv.: j=(ch-32)*6 <== Convert ASCII code to font data index.
+  ssd1306_start_data();
+  for (uint8_t i = 0; i < 6; i++) {
+    ssd1306_data_byte(pgm_read_byte(&ssd1306tx_font_src[j + i]));
+  }
+  ssd1306_stop();
+}
+
+void ssd1306tx_string(char *s)
+{
+  while (*s) {
+    ssd1306tx_char(*s++);
+  }
+}
+
+// ----------------------------------------------------------------------------
+
+char ssd1306_numdec_buffer[USINT2DECASCII_MAX_DIGITS + 1];
+
+void ssd1306tx_numdec(uint16_t num)
+{
+  ssd1306_numdec_buffer[USINT2DECASCII_MAX_DIGITS] = '\0';   // Terminate the string.
+  uint8_t digits = usint2decascii(num, ssd1306_numdec_buffer);
+  ssd1306tx_string(ssd1306_numdec_buffer + digits);
+}
+
+void ssd1306tx_numdecp(uint16_t num)
+{
+  ssd1306_numdec_buffer[USINT2DECASCII_MAX_DIGITS] = '\0';   // Terminate the string.
+  usint2decascii(num, ssd1306_numdec_buffer);
+  ssd1306tx_string(ssd1306_numdec_buffer);
+}
+
+// ----------------------------------------------------------------------------
+
+void ssd1306tx_stringxy(const uint8_t *fron_src, uint8_t x, uint8_t y, const char s[])
+{
+  uint16_t j, k = 0;
+  while (s[k] != '\0') {
+    j = s[k] * 16 - (32 * 16); // Convert ASCII code to font data index. NOTE: (x*16) already optimized to (x<<4).
+    if (x > 120) {
+      x = 0;    // Go to the next line.
+      y++;
+    }
+    ssd1306_setpos(x, y);
+    ssd1306_start_data();
+    for (uint8_t i = 0; i < 8; i++) {
+      ssd1306_data_byte(pgm_read_byte(&fron_src[j + i]));
+    }
+    ssd1306_stop();
+    ssd1306_setpos(x, y + 1);
+    ssd1306_start_data();
+    for (uint8_t i = 0; i < 8; i++) {
+      ssd1306_data_byte(pgm_read_byte(&fron_src[j + i + 8]));
+    }
+    ssd1306_stop();
+    x += 8;
+    k++;
+  }
+}
+
+// ============================================================================

+ 42 - 0
lib/ssd1306xled/ssd1306xledtx.h

@@ -0,0 +1,42 @@
+/**
+ * SSD1306xLED - Library for the SSD1306 based OLED/PLED 128x64 displays
+ *
+ * @author Neven Boyanov
+ *
+ * This is part of the Tinusaur/SSD1306xLED project.
+ *
+ * Copyright (c) 2018 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/ssd1306xled
+ *
+ */
+
+#ifndef SSD1306XLEDTX_H
+#define SSD1306XLEDTX_H
+
+// ============================================================================
+
+#define ssd1306_numdec(n) ssd1306tx_numdec(n)
+
+// ----------------------------------------------------------------------------
+
+extern uint8_t *ssd1306xled_font6x8;
+extern uint8_t *ssd1306xled_font8x16;
+
+// ----------------------------------------------------------------------------
+
+void ssd1306tx_init(const uint8_t *fron_src, uint8_t char_base);
+
+void ssd1306tx_char(char ch);
+void ssd1306tx_string(char *s);
+
+void ssd1306tx_numdec(uint16_t num);
+void ssd1306tx_numdecp(uint16_t num);
+
+void ssd1306tx_stringxy(const uint8_t *fron_src, uint8_t x, uint8_t y, const char s[]);
+
+// ============================================================================
+
+#endif

+ 97 - 0
lib/tinyavrlib/num2str.c

@@ -0,0 +1,97 @@
+/**
+ * NUM2STR - Functions to handle the conversion of numeric vales to strings.
+ *
+ * @author	Neven Boyanov
+ *
+ * This is part of the Tinusaur/TinyAVRLib project.
+ *
+ * Copyright (c) 2017 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/tinyavrlib
+ *
+ */
+
+// ============================================================================
+
+#include "num2str.h"
+
+// ----------------------------------------------------------------------------
+//  NOTE: The resulting ASCII text should not be terminated with '\0' in the 
+//        functions below because the buffer might be part of a larger text.
+// ----------------------------------------------------------------------------
+
+uint8_t usint2decascii(uint16_t num, char *buffer) {
+	const unsigned short powers[] = { 10000u, 1000u, 100u, 10u, 1u }; // The "const unsigned short" combination gives shortest code.
+	char digit; // "digit" is stored in a char array, so it should be of type char.
+	uint8_t digits = USINT2DECASCII_MAX_DIGITS - 1;
+	for (uint8_t pos = 0; pos < 5; pos++) { // "pos" is index in array.
+		digit = 0;
+		while (num >= powers[pos]) {
+			digit++;
+			num -= powers[pos];
+		}
+		// Fixed width, space (or anything else) padded result, digits offset.
+		// Note: Determines the offset of the first significant digit.
+		// Note: Could be used for variable width, not padded, left aligned result.
+		if (digits == USINT2DECASCII_MAX_DIGITS - 1) {
+			if (digit == 0) {
+				if (pos < USINT2DECASCII_MAX_DIGITS - 1)	// Check position, so single "0" will be handled properly.
+					digit = 0;//!!! -16;	// Use: "-16" for space (' '), "-3" for dash/minus ('-'), "0" for zero ('0'), etc. ...
+			} else {
+				digits = pos;
+			}
+		}
+		buffer[pos] = digit + '0';	// Convert to ASCII
+
+	}
+	return digits;
+}
+
+// ----------------------------------------------------------------------------
+
+uint8_t usint2hexascii(uint16_t num, char *buffer) {
+	for (int8_t pos = USINT2HEXASCII_MAX_DIGITS - 1; pos >= 0 ; pos--) { // "pos" is index in an array.
+		char digit = num & 0x000f;
+		if (digit <= 9) {
+			buffer[pos] = digit + '0';	// Convert to ASCII
+		} else {
+			buffer[pos] = digit + 'A' - 10;	// Convert to ASCII
+		}
+		num = num >> 4;
+	}
+	return 4;
+}
+
+// ----------------------------------------------------------------------------
+// NOTE: The buffer should be always at least MAX_DIGITS in length - the function works with 16-bit numbers.
+
+uint8_t usint2binascii(uint16_t num, char *buffer) {
+	uint16_t power = 0x8000;	// This is the 1000 0000 0000 0000 binary number.
+	char digit; // "digit" is stored in a char array, so it should be of type char.
+	uint8_t digits = USINT2BINASCII_MAX_DIGITS - 1;
+	for (uint8_t pos = 0; pos < USINT2BINASCII_MAX_DIGITS; pos++) { // "pos" is index in an array.
+		digit = 0;
+		if (num >= power) {
+			digit++;
+			num -= power;
+		}
+		// Fixed width, space ('0', or anything else) padded result, digits offset.
+		// Note: Determines the offset of the first significant digit.
+		// Note: Could be used for variable width, not padded, left aligned result.
+		if (digits == USINT2BINASCII_MAX_DIGITS - 1) {
+			if (digit == 0) {
+				if (pos < USINT2BINASCII_MAX_DIGITS - 1) // Check position, so single "0" will be handled properly.
+					digit = 0; // Use: "-16" for space (' '), "-3" for dash/minus ('-'), "0" for zero ('0'), etc.
+			} else {
+				digits = pos;
+			}
+		}
+		buffer[pos] = digit + '0';	// Convert to ASCII
+		power = power >> 1;
+	}
+	return digits;
+}
+
+// ============================================================================

+ 41 - 0
lib/tinyavrlib/num2str.h

@@ -0,0 +1,41 @@
+/**
+ * NUM2STR - Functions to handle the conversion of numeric vales to strings.
+ *
+ * @author	Neven Boyanov
+ *
+ * This is part of the Tinusaur/TinyAVRLib project.
+ *
+ * Copyright (c) 2017 Neven Boyanov, The Tinusaur Team. All Rights Reserved.
+ * Distributed as open source software under MIT License, see LICENSE.txt file.
+ * Retain in your source code the link http://tinusaur.org to the Tinusaur project.
+ *
+ * Source code available at: https://bitbucket.org/tinusaur/tinyavrlib
+ *
+ */
+
+// ============================================================================
+
+#ifndef NUM2STR_H
+#define NUM2STR_H
+
+// ----------------------------------------------------------------------------
+
+#include <stdint.h>
+
+// ----------------------------------------------------------------------------
+
+#define USINT2DECASCII_MAX_DIGITS 5
+#define USINT2HEXASCII_MAX_DIGITS 4
+#define USINT2BINASCII_MAX_DIGITS 16
+
+// ----------------------------------------------------------------------------
+
+uint8_t usint2decascii(uint16_t, char *);
+uint8_t usint2hexascii(uint16_t, char *);
+uint8_t usint2binascii(uint16_t, char *);
+
+// ----------------------------------------------------------------------------
+
+#endif
+
+// ============================================================================

+ 13 - 0
src/fuse.c

@@ -0,0 +1,13 @@
+#if defined(__GNUC__)
+# include <avr/io.h>
+
+FUSES = {
+    .low = LFUSE_DEFAULT,
+    .high = HFUSE_DEFAULT,
+    .extended = EFUSE_DEFAULT
+};
+
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+#endif

+ 116 - 0
src/i2c.c

@@ -0,0 +1,116 @@
+/****************************************************
+Low Level I2C Data Transreceiveing APIs
+
+PLEASE SEE WWW.EXTREMEELECTRONICS.CO.IN FOR DETAILED
+SCHEMATICS,USER GUIDE AND VIDOES.
+
+COPYRIGHT (C) 2008-2009 EXTREME ELECTRONICS INDIA
+****************************************************/
+
+#if defined(__GNUC__)
+# include <avr/io.h>
+#elif defined(__ICCAVR__)
+# include <ioavr.h>
+# include <intrinsics.h>
+# include <stdint.h>
+#endif
+
+#include "i2c.h"
+
+#define TWI_TIMEOUT		20
+volatile uint8_t TWI_WDT;
+
+void I2C_Init(void) {
+  //Enable the TWI Module
+  TWCR |= (1<<TWEN);
+}
+
+void I2C_Close(void) {
+  //Disable the module
+  TWCR &= (~(1<<TWEN));
+}
+
+
+void I2C_Start(void) {
+  //Put Start Condition on Bus
+  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
+
+  //Poll Till Done
+  TWI_WDT = TWI_TIMEOUT;
+  while (!(TWCR & (1<<TWINT)) && (TWI_WDT > 0));
+}
+
+void I2C_Stop(void) {
+  //Put Stop Condition on bus
+  TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
+
+  //Wait for STOP to finish
+  TWI_WDT = TWI_TIMEOUT;
+  while(TWCR & (1<<TWSTO) && (TWI_WDT > 0));
+}
+
+i2c_status_t I2C_WriteByte(uint8_t data) {
+
+  TWDR = data;
+
+  //Initiate Transfer
+  TWCR = (1<<TWEN) | (1<<TWINT);
+
+  //Poll Till Done
+  TWI_WDT = TWI_TIMEOUT;
+  while (!(TWCR & (1<<TWINT))) {
+    if (0 == TWI_WDT) {
+      return I2C_Ret_TOut;
+    }
+  }
+
+  //Check Status
+  if ((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x28 || (TWSR & 0xF8) == 0x40) {
+    //SLA+W Transmitted and ACK received
+    //or
+    //SLA+R Transmitted and ACK received
+    //or
+    //DATA Transmitted and ACK recived
+    return I2C_Ret_OK;
+  } else {
+    return I2C_Ret_ERR; //Error
+  }
+}
+
+i2c_status_t I2C_ReadByte(uint8_t *data,uint8_t ack)
+{
+  //Set up ACK
+  if (ack) {
+    //return ACK after reception
+    TWCR |= (1<<TWEA);
+  } else {
+    //return NACK after reception
+    //Signals slave to stop giving more data
+    //usually used for last byte read.
+    TWCR &= (~(1<<TWEA));
+  }
+
+  //Now enable Reception of data by clearing TWINT
+  TWCR |= (1<<TWINT);
+
+  //Wait till done
+  TWI_WDT = TWI_TIMEOUT;
+  while (!(TWCR & (1<<TWINT))) {
+    if (0 == TWI_WDT) {
+      return I2C_Ret_TOut;
+    }
+  }
+
+  //Check status
+  if ((TWSR & 0xF8) == 0x58 || (TWSR & 0xF8) == 0x50) {
+    //Data received and ACK returned
+    //	or
+    //Data received and NACK returned
+
+    //Read the data
+    *data = TWDR;
+    return I2C_Ret_OK;
+  } else {
+    return I2C_Ret_ERR;	//Error
+  }
+}

+ 136 - 0
src/main.c

@@ -0,0 +1,136 @@
+/**
+ * Dryer
+ */
+#include "main.h"
+#include "sensor.h"
+#include "rtos/rtos.h"
+#include "ssd1306xled/font6x8.h"
+#include "ssd1306xled/font8x16.h"
+#include "ssd1306xled/ssd1306xled.h"
+#include "ssd1306xled/ssd1306xledtx.h"
+
+/* Defines */
+
+/* Variables */
+
+/* Function prototypes */
+static void board_Init(void);
+
+int main(void) {
+  board_Init();
+  RTOS_Init();
+  AHT10_Init();
+
+  tdelay_ms(40);
+  ssd1306_init();
+
+  ssd1306_clear();
+  ssd1306_fill2(0x80, 0x00);
+  tdelay_ms(500);
+  ssd1306tx_stringxy((uint8_t const *)ssd1306xled_font8x16data, 0, 0, "Hello, World! :)");
+  ssd1306_setpos(7, 2);
+  ssd1306tx_string("SSD1306xLED Library");
+  ssd1306_setpos(0, 3);
+  ssd1306tx_string("!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[5]^_`");
+  ssd1306tx_stringxy((uint8_t const *)ssd1306xled_font8x16data, 0, 5, "TINUSAUR Project");
+  ssd1306_setpos(7, 7);
+  ssd1306tx_string("http://tinusaur.org");
+
+//  RTOS_SetTask(AHT10_StartMeasure, 0, 500);
+  aht10_t Sensor;
+  aht10_st_t status;
+
+  do {
+
+    RTOS_DispatchTask();
+
+    status = AHT10_StartMeasure();
+    tdelay_ms(200);
+    status = AHT10_GetData(&Sensor);
+    if (status == AHT10_St_OK) {
+      ssd1306_setpos(1, 3);
+      ssd1306tx_numdec(Sensor.Temperature);
+    }
+
+    // делать нечего -- спим, ждём прерывание
+#if defined(__GNUC__)
+    set_sleep_mode(SLEEP_MODE_IDLE);
+    sleep_mode();
+#elif defined(__ICCAVR__)
+    MCUCR = 1<<SE;
+    __sleep();
+#endif
+  } while (1);
+}
+
+/**
+ *  S u b r o u t i n e s
+ */
+
+/**
+ * @brief Initialize periphery
+ */
+static void board_Init(void) {
+  /* power off Analog Comparator */
+  ACSR = ACD;
+
+  /* I/O-Ports */
+  DDRB = 0x02; // PB2 - Triac control
+  DDRC = 0x30; // I2C output
+  DDRD = 0x03; // D2..D7 input / UART output
+  PORTB = 0x02; // close Triac
+  PORTC = 0x3e; // I2C = 1, enable pull-up for switch
+  PORTD = 0xfc; // enable pull-up for switch
+
+  /* Timer0 - RTOS & tdelay_ms() */
+  TCCR0A = ((0<<CS02)|(1<<CS01)|(1<<CS00));
+  TCNT0 = TIMER0_CNT;
+  TIMSK0 |= (1<<TOIE0);
+
+  /* Timer1 */
+
+  /* Timer2 - refresh screen values */
+  //TCCR2 = 0x00;
+  //TCNT2 = 0x00;
+  //TIMSK |= _BV(TOIE2);
+
+  /* TWI / I2C, 400 kHz mode, Prescaler=1
+     ((F_CPU / F_TWI) - 16) / 2
+     ((8000000 / 400000) - 16) / 2 = 2 */
+  TWBR = 2;
+
+#ifdef USE_UART
+  /* USART */
+  DDRD |= _BV(PD0); // RX to Input
+  // Set baud rate
+  UBRRH = (BAUD_PRESCALE >> 8);
+  UBRRL = BAUD_PRESCALE;
+  #if (BAUD_U2X != 0)
+  // Asynchronous Double Speed
+  UCSRA = 1 << U2X;
+  #endif // BAUD_U2X
+  // Turn on USART hardware (no RX, TX)
+  UCSRB = (1 << RXEN) | (1 << TXEN);
+  // 8 bit char sizes, 1 stop bit
+  //UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); -- default value
+#endif // USE_UART
+
+  /* Enable Interrupts */
+#if defined(__GNUC__)
+  sei();
+#elif defined(__ICCAVR__)
+  __enable_interrupt();
+#endif
+}
+
+/**
+ * I n t e r r u p t s
+ */
+#if defined(__GNUC__)
+/**
+ * @brief заглушка для неиспользуемых прерываний
+ */
+ISR(__vector_default,ISR_NAKED) {
+  reti();
+}
+#endif

+ 122 - 0
src/sensor.c

@@ -0,0 +1,122 @@
+#include "sensor.h"
+#include "i2c.h"
+
+/* Type def */
+typedef union {
+  uint32_t  u32;
+  struct {
+    #ifdef LITTLE_ENDIAN  // Byte-order is little endian
+    uint8_t u8ll;
+    uint8_t u8lh;
+    uint8_t u8hl;
+    uint8_t u8hh;
+    #else                 // Byte-order is big endian
+    uint8_t u8hh;
+    uint8_t u8hl;
+    uint8_t u8lh;
+    uint8_t u8ll;
+    #endif
+  } s8;
+} nt32_t;
+
+/* Defines */
+#define I2C_ADDR    0x70
+
+#define CMD_INIT    0xe1
+#define CMD_MEASURE 0xac
+#define CMD_SRESET  0xba
+
+#define STATUS_BUSY 0x80
+#define STATUS_CMD  0x40
+#define STATUS_CYC  0x20
+#define STATUS_CAL  0x04
+
+aht10_st_t AHT10_Init(void)
+{
+  i2c_status_t res;
+
+  I2C_Start();
+
+  res = I2C_WriteByte(I2C_ADDR);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  res = I2C_WriteByte(CMD_INIT);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  I2C_Stop();
+
+  return AHT10_St_OK;
+}
+
+aht10_st_t AHT10_StartMeasure(void)
+{
+  i2c_status_t res;
+
+  I2C_Start();
+
+  res = I2C_WriteByte(I2C_ADDR);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  res = I2C_WriteByte(CMD_MEASURE);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  I2C_Stop();
+
+  return AHT10_St_OK;
+}
+
+aht10_st_t AHT10_GetData(aht10_t * data)
+{
+  i2c_status_t res;
+
+  I2C_Start();
+
+  /* Send I2C read addr */
+  res = I2C_WriteByte(I2C_ADDR | 0x1);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  /* Now read the value with NACK */
+  uint8_t buf[6];
+  res = I2C_ReadByte(buf, 0);
+  if (res != I2C_Ret_OK) {
+    return AHT10_St_Err;
+  }
+
+  I2C_Stop();
+
+  if ((buf[0] & STATUS_BUSY) != 0) {
+    return AHT10_St_Bsy;
+  }
+  /* Calculate values */
+  uint32_t result;
+  nt32_t tmp;
+
+  /* Humidity = Srh * 100% / 2^20 */
+  tmp.s8.u8hl = buf[1];
+  tmp.s8.u8lh = buf[2];
+  tmp.s8.u8ll = buf[3];
+  result = tmp.u32 >> 4;
+  result *= 100;
+  result /= 1048576;
+  data->Humidity = (int8_t)result;
+
+  /* Temperature = St * 200 / 2^20 - 50 */
+  tmp.s8.u8hl = buf[3] & 0xf;
+  tmp.s8.u8lh = buf[4];
+  tmp.s8.u8ll = buf[5];
+  result = tmp.u32 * 200;
+  result /= 1048576;
+  data->Temperature = (int8_t)(result - 50);
+
+  return AHT10_St_OK;
+}