diff --git a/B15F.aps b/B15F.aps
index 08b5532..e608e9b 100644
--- a/B15F.aps
+++ b/B15F.aps
@@ -1 +1 @@
-<AVRStudio><MANAGEMENT><ProjectName>B15F</ProjectName><Created>22-Mar-2019 14:29:54</Created><LastEdit>26-Mar-2019 08:32:01</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>22-Mar-2019 14:29:54</Created><Version>4</Version><Build>4, 19, 0, 730</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>B15F.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>ATmega1284.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>spi.cpp</SOURCEFILE><SOURCEFILE>main.cpp</SOURCEFILE><SOURCEFILE>Makefile</SOURCEFILE><SOURCEFILE>mcp23s17.cpp</SOURCEFILE><SOURCEFILE>TLC5615.cpp</SOURCEFILE><SOURCEFILE>adu.cpp</SOURCEFILE><SOURCEFILE>selftest.cpp</SOURCEFILE><SOURCEFILE>global_vars.cpp</SOURCEFILE><HEADERFILE>spi.h</HEADERFILE><HEADERFILE>mcp23s17.h</HEADERFILE><HEADERFILE>TLC5615.h</HEADERFILE><HEADERFILE>adu.h</HEADERFILE><HEADERFILE>selftest.h</HEADERFILE><HEADERFILE>global_vars.h</HEADERFILE><OTHERFILE>default\B15F.lss</OTHERFILE><OTHERFILE>default\B15F.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>c++</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>B15F.elf</OUTPUTFILENAME><OUTPUTDIR>c++\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>Makefile</EXTERNALMAKEFILE><PART>atmega1284</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>B15F.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>spi.cpp</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS><INCLUDE>C:\avr8-gnu-toolchain-win32_x86\avr\include\</INCLUDE></INCDIRS><LIBDIRS><LIBDIR>C:\avr8-gnu-toolchain-win32_x86\avr\lib\</LIBDIR></LIBDIRS><LIBS><LIB>libc.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2       -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>0</USES_WINAVR><GCC_LOC>C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>F:\spi.h</Name><Name>F:\mcp23s17.h</Name><Name>F:\TLC5615.h</Name><Name>F:\adu.h</Name><Name>F:\selftest.h</Name><Name>F:\global_vars.h</Name><Name>F:\spi.cpp</Name><Name>F:\main.cpp</Name><Name>F:\Makefile</Name><Name>F:\mcp23s17.cpp</Name><Name>F:\TLC5615.cpp</Name><Name>F:\adu.cpp</Name><Name>F:\selftest.cpp</Name><Name>F:\global_vars.cpp</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.cpp</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>Makefile</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>selftest.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>selftest.cpp</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>global_vars.cpp</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>spi.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>spi.cpp</FileName><Status>1</Status></File00006></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
+<AVRStudio><MANAGEMENT><ProjectName>B15F</ProjectName><Created>22-Mar-2019 14:29:54</Created><LastEdit>26-Mar-2019 15:02:47</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>22-Mar-2019 14:29:54</Created><Version>4</Version><Build>4, 19, 0, 730</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>B15F.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>JTAGICE mkII</CURRENT_TARGET><CURRENT_PART>ATmega1284.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>spi.cpp</SOURCEFILE><SOURCEFILE>main.cpp</SOURCEFILE><SOURCEFILE>Makefile</SOURCEFILE><SOURCEFILE>mcp23s17.cpp</SOURCEFILE><SOURCEFILE>TLC5615.cpp</SOURCEFILE><SOURCEFILE>adu.cpp</SOURCEFILE><SOURCEFILE>selftest.cpp</SOURCEFILE><SOURCEFILE>global_vars.cpp</SOURCEFILE><SOURCEFILE>usart.cpp</SOURCEFILE><SOURCEFILE>requests.cpp</SOURCEFILE><HEADERFILE>spi.h</HEADERFILE><HEADERFILE>mcp23s17.h</HEADERFILE><HEADERFILE>TLC5615.h</HEADERFILE><HEADERFILE>adu.h</HEADERFILE><HEADERFILE>selftest.h</HEADERFILE><HEADERFILE>global_vars.h</HEADERFILE><HEADERFILE>usart.h</HEADERFILE><HEADERFILE>requests.h</HEADERFILE><OTHERFILE>default\B15F.lss</OTHERFILE><OTHERFILE>default\B15F.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>c++</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega128</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>B15F.elf</OUTPUTFILENAME><OUTPUTDIR>c++\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>Makefile</EXTERNALMAKEFILE><PART>atmega1284</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>B15F.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>spi.cpp</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS><INCLUDE>C:\avr8-gnu-toolchain-win32_x86\avr\include\</INCLUDE></INCDIRS><LIBDIRS><LIBDIR>C:\avr8-gnu-toolchain-win32_x86\avr\lib\</LIBDIR></LIBDIRS><LIBS><LIB>libc.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2       -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>0</USES_WINAVR><GCC_LOC>C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>F:\spi.h</Name><Name>F:\mcp23s17.h</Name><Name>F:\TLC5615.h</Name><Name>F:\adu.h</Name><Name>F:\selftest.h</Name><Name>F:\global_vars.h</Name><Name>F:\usart.h</Name><Name>F:\requests.h</Name><Name>F:\spi.cpp</Name><Name>F:\main.cpp</Name><Name>F:\Makefile</Name><Name>F:\mcp23s17.cpp</Name><Name>F:\TLC5615.cpp</Name><Name>F:\adu.cpp</Name><Name>F:\selftest.cpp</Name><Name>F:\global_vars.cpp</Name><Name>F:\usart.cpp</Name><Name>F:\requests.cpp</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>Makefile</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>main.cpp</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>requests.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>requests.cpp</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>usart.cpp</FileName><Status>1</Status></File00004></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
diff --git a/B15F.elf b/B15F.elf
index 3ecadd1..eb23975 100644
Binary files a/B15F.elf and b/B15F.elf differ
diff --git a/B15F.hex b/B15F.hex
index 54d07c1..b59e8ef 100644
--- a/B15F.hex
+++ b/B15F.hex
@@ -6,100 +6,107 @@
 :100050000C9464000C9464000C9464000C94640090
 :100060000C9464000C9464000C9464000C94640080
 :100070000C9464000C9464000C9464000C94640070
-:100080000C9464000C9464000C9464000A03112422
+:100080000C9464000C9464000C94640043031124E9
 :100090001FBECFEFD0E4DEBFCDBF21E0A0E0B1E0D6
 :1000A00001C01D92A231B207E1F710E0C7E4D0E031
-:1000B00004C02197FE010E943103C634D107C9F75D
-:1000C0000E94F4020C943A030C9400001F920F92C9
+:1000B00004C02197FE010E946A03C634D107C9F724
+:1000C0000E9429030C9473030C9400001F920F925A
 :1000D0000FB60F92112491E085B1892785B92FEFD2
 :1000E00034E38CE0215030408040E1F700C0000054
-:1000F000F3CF81E191E00E94B40060E08EE091E0F6
-:100100000E94F7006FEF8EE091E00E94180160E01E
-:100110008BE091E00E94F7006FEF8BE091E00E948E
-:1001200018016FEF88E091E00E94180181E091E0F2
-:100130000E94ED0180E091E00C94DA02CF9380E020
-:1001400091E00E94ED0280E091E00E94ED02C82F54
-:100150006FEF80E091E00E94E6026C2F80E091E07A
-:10016000CF910C94E602089584B1806B84B92698EF
-:100170008AB18C618AB980E58CBD81E08DBD8BB17F
-:10018000837E8BB95A9A5B9A5C9A08958BB1837E71
-:100190008BB98BB160FD10C090E0892B8BB98BB10E
-:1001A00061FD10C090E0892B8BB98BB162FD10C04E
-:1001B00090E0892B8BB9089594E0892B8BB98BB192
-:1001C00061FFF0CF98E0892B8BB98BB162FFF0CF44
-:1001D00090E1892B8BB908956EBD0DB407FEFDCF5C
-:1001E0008EB50895FC0171836083428308951F9347
-:1001F000CF93DF93EC01162F6A81888199810E9449
-:10020000C60060E4888199810E94EC0060E08881EA
-:1002100099810E94EC00612F888199810E94EC00F5
-:1002200067E088819981DF91CF911F910C94C6007E
-:100230001F93CF93DF93EC01162F6A8188819981F8
-:100240000E94C60060E4888199810E94EC0061E010
-:10025000888199810E94EC00612F888199810E9498
-:10026000EC0067E088819981DF91CF911F910C9418
-:10027000C6001F93CF93DF93EC01162F6A8188810C
-:1002800099810E94C60060E4888199810E94EC00F7
-:1002900062E1888199810E94EC00612F88819981B7
-:1002A0000E94EC0067E088819981DF91CF911F91D6
-:1002B0000C94C6001F93CF93DF93EC01162F6A8135
-:1002C000888199810E94C60060E4888199810E949A
-:1002D000EC0063E1888199810E94EC00612F8881A4
-:1002E00099810E94EC0067E088819981DF91CF912C
-:1002F0001F910C94C6001F93CF93DF93EC016A818A
-:10030000888199810E94C60061E4888199810E9458
-:10031000EC0062E1888199810E94EC0060E08881B4
-:1003200099810E94EC00182F67E0888199810E94D2
-:10033000C600812FDF91CF911F9108951F93CF9316
-:10034000DF93EC016A81888199810E94C60061E493
-:10035000888199810E94EC0063E1888199810E94E3
-:10036000EC0060E0888199810E94EC00182F67E022
-:10037000888199810E94C600812FDF91CF911F91C2
-:100380000895FC01428308950F931F93CF93DF9349
-:10039000EC018B016A81888199810E94C600B801B5
-:1003A0000024660F771F001C660F771F001C672F45
-:1003B000702D888199810E94EC00602F660F660F76
-:1003C000888199810E94EC0067E088819981DF91A2
-:1003D000CF911F910F910C94C60010927C0087E87A
-:1003E00080937A00089580917C00807E682B6093D2
-:1003F0007C0080917A00806480937A0083EA91E0A7
-:100400000197F1F700C0000080917A0086FDFCCFD3
-:10041000809178009091790008950F931F93CF9366
-:10042000DF9361E08EE091E00E943901C1E0D0E00D
-:1004300001E010E02FEF84E39CE0215080409040E9
-:10044000E1F700C00000B8010C2E01C0660F0A944D
-:10045000EAF78EE091E00E9439012196C930D1057A
-:1004600049F7DF91CF911F910F9108950F931F933B
-:10047000CF93DF9361E08BE091E00E943901C1E00E
-:10048000D0E001E010E02FEF84E39CE021508040B9
-:100490009040E1F700C00000B8010C2E01C0660FCB
-:1004A0000A94EAF78BE091E00E9439012196C93065
-:1004B000D10549F7DF91CF911F910F910895CF9307
-:1004C000DF93C0E0D0E0BE0185E091E00E94C4016E
-:1004D00087E893E10197F1F700C000002196C1156C
-:1004E00094E0D90781F72FE78AE196E02150804018
-:1004F0009040E1F700C0000060E070E085E091E02E
-:10050000DF91CF910C94C401CF93DF93C0E0D0E092
-:10051000BE0182E091E00E94C40187E893E1019767
-:10052000F1F700C000002196C11594E0D90781F7CA
-:100530002FE78AE196E0215080409040E1F700C02B
-:10054000000060E070E082E091E0DF91CF910C94D8
-:10055000C40160E081E091E00E94F301BC0185E00C
-:1005600091E00E94C40161E081E091E00E94F3010A
-:10057000BC0182E091E00E94C4018EE091E00E9403
-:100580009E01682F8EE091E00E94390188E091E0A1
-:100590000E949E01682F8BE091E00E943901D9CF23
-:1005A0000E940D020E9436020E945F020E94840295
-:1005B0000E94A90288E18093C10086E08093C20076
-:1005C0001092C5008FE18093C40008956093C60027
-:1005D0008091C00086FFFCCF08958091C00087FF06
-:1005E000FCCF8091C60008950E94790080E091E0E0
-:1005F0000E94ED0280E091E00E94ED02C82F6FEFB3
-:1006000080E091E00E94E6026C2F80E091E00E9481
-:10061000E602ECCF81E191E00E94B30042E061E1AB
-:1006200071E08EE091E00E94F20043E061E171E050
-:100630008BE091E00E94F20045E061E171E088E02A
-:1006400091E00E94F20040E061E171E085E091E01C
-:100650000E94C10141E061E171E082E091E00C940F
-:10066000C101EE0FFF1F0024001C0BBE0790F69186
-:08067000E02D0994F894FFCF7E
+:1000F000F3CF81E191E00E94B00060E08EE091E0FA
+:100100000E94F3006FEF8EE091E00E94140160E026
+:100110008BE091E00E94F3006FEF8BE091E00E9492
+:1001200014016FEF88E091E00E94140181E091E0FA
+:100130000E94E90180E091E00C94D60280E091E019
+:100140000E94F202823049F0833029F0813009F0B8
+:1001500008950C940A030C941C030C941B0308953B
+:1001600084B1806B84B926988AB18C618AB980E5A4
+:100170008CBD81E08DBD8BB1837E8BB95A9A5B9A21
+:100180005C9A08958BB1837E8BB98BB160FD10C0F2
+:1001900090E0892B8BB98BB161FD10C090E0892B69
+:1001A0008BB98BB162FD10C090E0892B8BB908959B
+:1001B00094E0892B8BB98BB161FFF0CF98E0892B4C
+:1001C0008BB98BB162FFF0CF90E1892B8BB9089589
+:1001D0006EBD0DB407FEFDCF8EB50895FC01718391
+:1001E0006083428308951F93CF93DF93EC01162F12
+:1001F0006A81888199810E94C20060E48881998126
+:100200000E94E80060E0888199810E94E800612FE7
+:10021000888199810E94E80067E088819981DF9157
+:10022000CF911F910C94C2001F93CF93DF93EC01E9
+:10023000162F6A81888199810E94C20060E48881BA
+:1002400099810E94E80061E0888199810E94E8001C
+:10025000612F888199810E94E80067E088819981F7
+:10026000DF91CF911F910C94C2001F93CF93DF9326
+:10027000EC01162F6A81888199810E94C20060E496
+:10028000888199810E94E80062E1888199810E94B9
+:10029000E800612F888199810E94E80067E08881E9
+:1002A0009981DF91CF911F910C94C2001F93CF933E
+:1002B000DF93EC01162F6A81888199810E94C20028
+:1002C00060E4888199810E94E80063E188819981D6
+:1002D0000E94E800612F888199810E94E80067E010
+:1002E00088819981DF91CF911F910C94C2001F9357
+:1002F000CF93DF93EC016A81888199810E94C200CB
+:1003000061E4888199810E94E80062E18881998195
+:100310000E94E80060E0888199810E94E800182F1F
+:1003200067E0888199810E94C200812FDF91CF917F
+:100330001F9108951F93CF93DF93EC016A81888109
+:1003400099810E94C20061E4888199810E94E8003D
+:1003500063E1888199810E94E80060E08881998149
+:100360000E94E800182F67E0888199810E94C200EE
+:10037000812FDF91CF911F910895FC014283089551
+:100380000F931F93CF93DF93EC018B016A818881D8
+:1003900099810E94C200B8010024660F771F001CDB
+:1003A000660F771F001C672F702D888199810E942E
+:1003B000E800602F660F660F888199810E94E8002F
+:1003C00067E088819981DF91CF911F910F910C9403
+:1003D000C20010927C0087E880937A000895809193
+:1003E0007C00807E682B60937C0080917A00806422
+:1003F00080937A0083EA91E00197F1F700C0000052
+:1004000080917A0086FDFCCF8091780090917900F0
+:1004100008950F931F93CF93DF9361E08EE091E0F7
+:100420000E943501C1E0D0E001E010E02FEF84E34D
+:100430009CE0215080409040E1F700C00000B801EE
+:100440000C2E01C0660F0A94EAF78EE091E00E943C
+:1004500035012196C930D10549F7DF91CF911F9120
+:100460000F9108950F931F93CF93DF9361E08BE07B
+:1004700091E00E943501C1E0D0E001E010E02FEFF3
+:1004800084E39CE0215080409040E1F700C00000F0
+:10049000B8010C2E01C0660F0A94EAF78BE091E0D8
+:1004A0000E9435012196C930D10549F7DF91CF91DE
+:1004B0001F910F910895CF93DF93C0E0D0E0BE016C
+:1004C00085E091E00E94C00187E893E10197F1F790
+:1004D00000C000002196C11594E0D90781F72FE7ED
+:1004E0008AE196E0215080409040E1F700C0000092
+:1004F00060E070E085E091E0DF91CF910C94C00165
+:10050000CF93DF93C0E0D0E0BE0182E091E00E9493
+:10051000C00187E893E10197F1F700C00000219640
+:10052000C11594E0D90781F72FE78AE196E02150C1
+:1005300080409040E1F700C0000060E070E082E0A1
+:1005400091E0DF91CF910C94C00160E081E091E0F7
+:100550000E94EF01BC0185E091E00E94C00161E0D2
+:1005600081E091E00E94EF01BC0182E091E00E94F5
+:10057000C0018EE091E00E949A01682F8EE091E028
+:100580000E94350188E091E00E949A01682F8BE07B
+:1005900091E00E943501D9CF0E9409020E943202E7
+:1005A0000E945B020E9480020E94A50288E1809363
+:1005B000C10086E08093C2001092C5008FE1809355
+:1005C000C40008956093C6008091C00086FFFCCFF0
+:1005D00008956093C6007093C6008091C00086FFA6
+:1005E000FCCF08958091C00087FFFCCF8091C600AA
+:1005F00008958091C00087FFFCCF2091C60030E0B5
+:100600009091C00097FFFCCF8091C600A901582BA4
+:10061000CA010895CF9380E091E00E94F202C82FB2
+:100620006FEF80E091E00E94E2026C2F80E091E0A9
+:10063000CF910C94E202089580E091E00E94F902CB
+:10064000BC01660F771F680F791F80E091E00C9462
+:10065000E9020E94790080E091E00E94F20282307B
+:1006600061F0833069F08130B1F70E940A0380E0C5
+:1006700091E00E94F2028230A1F70E941B03EBCFAF
+:100680000E941C03E8CF81E191E00E94AF0042E0AC
+:1006900061E171E08EE091E00E94EE0043E061E1F3
+:1006A00071E08BE091E00E94EE0045E061E171E0D5
+:1006B00088E091E00E94EE0040E061E171E085E0B9
+:1006C00091E00E94BD0141E061E171E082E091E0D2
+:1006D0000C94BD01EE0FFF1F0024001C0BBE079001
+:0A06E000F691E02D0994F894FFCF85
 :00000001FF
diff --git a/Makefile b/Makefile
index bc20456..85c7e1a 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ OUTPUT  = B15F.elf
 HEX		= B15F.hex
 CFLAGS  = -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000
 LDFLAGS = 
-OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o
+OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o requests.o
 
 
 COMPILE = $(COMPILER_PATH) $(CFLAGS)
diff --git a/b15f.aws b/b15f.aws
index a961817..1407eab 100644
--- a/b15f.aws
+++ b/b15f.aws
@@ -1 +1 @@
-<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA1284"/><Files><File00000 Name="F:\main.cpp" Position="267 101 1369 495" LineCol="29 6" State="Maximized"/><File00001 Name="F:\Makefile" Position="289 130 1383 494" LineCol="14 67" State="Maximized"/><File00002 Name="F:\selftest.h" Position="263 71 1501 647" LineCol="9 13" State="Maximized"/><File00003 Name="F:\selftest.cpp" Position="333 188 1427 552" LineCol="32 13" State="Maximized"/><File00004 Name="F:\vars.h" Position="355 217 1449 581" LineCol="12 19" State="Maximized"/></Files></AVRWorkspace>
+<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA1284"/><Files><File00000 Name="F:\Makefile" Position="342 159 1436 523" LineCol="31 19" State="Maximized"/><File00001 Name="F:\main.cpp" Position="430 275 1528 643" LineCol="58 9" State="Maximized"/><File00002 Name="F:\requests.h" Position="294 71 1501 647" LineCol="10 0" State="Maximized"/><File00003 Name="F:\requests.cpp" Position="320 130 1418 498" LineCol="21 16" State="Maximized"/></Files></AVRWorkspace>
diff --git a/main.cpp b/main.cpp
index 1650305..2dad6ac 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,7 @@
 #include <avr/wdt.h>
 #include "global_vars.h"
 #include "selftest.h"
+#include "requests.h"
 
 
 #define LED PB0
@@ -35,9 +36,27 @@ void initAll()
 void handleRequest()
 {
 	const uint8_t req = usart.readByte();
-	uint8_t dummy = usart.readByte();
-	usart.writeByte(USART::MSG_OK);
-	usart.writeByte(dummy);
+
+	switch(req)
+	{
+		case RQ_DISC:
+			break;
+
+		case RQ_TEST:
+			rqTestConnection();
+			break;
+		
+		case RQ_INFO:
+			rqBoardInfo();
+			break;
+		
+		case RQ_INT:
+			rqTestIntConv();
+			break;
+
+		default:
+			break;
+	}
 }
 
 int main()
diff --git a/requests.cpp b/requests.cpp
new file mode 100644
index 0000000..236b99a
--- /dev/null
+++ b/requests.cpp
@@ -0,0 +1,18 @@
+#include "requests.h"
+
+void rqTestConnection()
+{
+	uint8_t dummy = usart.readByte();
+	usart.writeByte(USART::MSG_OK);
+	usart.writeByte(dummy);
+}
+
+void rqBoardInfo()
+{
+
+}
+
+void rqTestIntConv()
+{
+	usart.writeInt(usart.readInt() * 3);
+}
diff --git a/requests.h b/requests.h
new file mode 100644
index 0000000..b62c9b2
--- /dev/null
+++ b/requests.h
@@ -0,0 +1,16 @@
+#ifndef REQUESTS_H
+#define REQUESTS_H
+
+#include "global_vars.h"
+
+constexpr static uint8_t RQ_DISC = 0;
+constexpr static uint8_t RQ_TEST = 1;
+constexpr static uint8_t RQ_INFO = 2;
+constexpr static uint8_t RQ_INT  = 3;
+
+void rqTestConnection(void);
+void rqBoardInfo(void);
+void rqTestIntConv(void);
+void rqTestLongConv(void);
+
+#endif // REQUESTS_H
diff --git a/usart.cpp b/usart.cpp
index b50c905..4ef8f5b 100644
--- a/usart.cpp
+++ b/usart.cpp
@@ -19,8 +19,24 @@ void USART::writeByte(uint8_t b)
 	while(!(UCSR0A & _BV(TXC0)));
 }
 
+
+void USART::writeInt(uint16_t v)
+{
+	UDR0 = v & 0xFF;
+	v >>= 8;
+	UDR0 = v & 0xFF;
+	while(!(UCSR0A & _BV(TXC0)));
+}
+
 uint8_t USART::readByte()
 {
 	while (!(UCSR0A & (1<<RXC0)));
     return UDR0;
 }
+
+uint16_t USART::readInt()
+{
+	uint16_t v = readByte();
+	v |= readByte() << 8;
+	return v;
+}
diff --git a/usart.h b/usart.h
index 39bdee1..6a7cf29 100644
--- a/usart.h
+++ b/usart.h
@@ -10,8 +10,13 @@ class USART
 {
 public:
 	void init(void);
+
 	void writeByte(uint8_t);
+	void writeInt(uint16_t);
+	void writeLong(uint32_t);
 	uint8_t readByte(void);
+	uint16_t readInt(void);
+	uint32_t readLong(void);
 
 	constexpr static uint8_t MSG_OK = 0xFF;
 	constexpr static uint8_t MSG_FAIL = 0xFE;