From 4d2ea6013ced96bc4ebddb939f696e0805c188f1 Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Tue, 2 Apr 2019 16:19:42 +0200 Subject: [PATCH] Das Wunder --- firmware/B15F.elf | Bin 16060 -> 16112 bytes firmware/B15F.hex | 603 ++++++++++++++++++++------------------- firmware/global_vars.cpp | 8 +- firmware/global_vars.h | 1 + firmware/main.cpp | 13 +- firmware/requests.cpp | 7 +- firmware/usart.cpp | 40 +-- firmware/usart.h | 36 ++- 8 files changed, 360 insertions(+), 348 deletions(-) diff --git a/firmware/B15F.elf b/firmware/B15F.elf index baaa71ed62a9b086bf2421a6daa22aa5debae1fa..36bfda57904dcfd16d92adcbe2a664d9f1ee5ac9 100755 GIT binary patch delta 4701 zcmbW53sh9c8OLYt?s9h{?k-RjdB{VB6qF?>R1Fx#+EXoxuWDndkE9x;K1yq>ISsv# zQZZ9V{QMZWip*}6Xi`r#B6J*DQgHkr#aA{x7PimZj zaoy4P` z!NLq<6&u5GFs5KcB;KP&!WqbB-?t`aXH!GpaQNx^Z(2W3v)MIkVj5!X+3ecv(wAtC zu8YT)W!k#;KPT4ZU?O)lFMJ+KDx!%4F`LjyeWwYd{>B+p!cMG-zzEkaTm)uI9 zF*L^Twx+=jMNM3!_oZ`2qKYW3{yu7V+n(qNQ&sE5BeH~8U!GEWi*BgVL-l)c0ZX?p)5F#Lgndhtq#lz> z?HKaIwPQ$?IjvhgdW-+^c%9PpDlL!7dS8kBNN=S^9_u1`OOHV%@;2EZ!!jSMSd)}n zKzH9~ZK0c8-%BZXJ&~fCPq2nnKcRWnY6SUH%>IY29{xyO$ykxGd-}>EU8_d;ZvHn7 zRnC{8=SieP!=Iun1-P=FK>tHIz*lXgo$AaKA^#!&F@Kvs=wwnkvq}S074})n!mY!N8|cf8UC}2{Vy5gE(u3DI?tNRyN3G$t9j-5*u21Jlx+UDM z(=1h5-q2bJ))V2D>hF~0ow4VWJHG&vEg!0)O3NqLuU@DwU&uS;?e+$}ZQf(vL*D1S zJaO3DF&WwwU&VeFvqWqE6zxpO8F+^1ucJol>EGYeAg3*>p68v{bCa|aqQA5nX?)K) zyyi0Gtojl3RQq!1zR7Q1cl&dw`ucGzub-}aeEkfrRbD^Q5$~S~QU?zGZSe!;&2klW zi`b9)sCWr=z1V|V5-*~z5YMAtAf7{=C7wm?vi~`#zH8%Yv0Tyn9qoO)hAvP@-I_IY zp+f3)vxd%7NKL^EVSc=VYLaCLZoh}R{U4#+V84#dx8={CGh=phe{9V-!5iCLaeosP zNE}PZnj{VK?;hn5$W(k64d{rEs9E5$7(!M-77P9&xDMY}i#1*jjz!^5D*C?>!R6r9 zE<)1L&&NLr9(53MpG9RqB@%hpNl2Ea@CztJjU{9$H-rJL_?-iXE42Pj@Jzd*-^=w- z_`@eK$lD{m;)fyzECzpwJ)NfM zmw^jWiZ$LHp_dx*irN!1g}QX zlXPW-{`v_1mYF5YXcq*RV9d>nAdnw{38~=~WLDw_?=~HyUn>1dw~~a%!5uhO1rYHh z{3F;r;WJ?Ue>iTW-UaX^IJ*jci4PctK!13MD2|-jKy(DhgO9*r5(e?{Ibib^Ed~$7 z@;-Gz4}aI5f{|3;2H!!Mi+&#BJ!qR9`Xjgz{8vnRv8I0% zd;~WoziIgR4)9@2C|c`33+AVS`&W{v4}zBv0bSvyrl9v*5RK40PJF^6p)ugq&@TaV z2g%@daHw+uxDL*LuJtbh8(T!lGH{d?{=cLtyocEt_kfjDK*7A?$H50pA$&Tb{~Gu% z&p14($ccJzJI<(X{}?z?Fe3aKILVIn$729r!6^u)m=s=sJPV9PDChhP`jvR1=6iY- ztUKgMI1DyVcof_lW!QHkI_CZ)a1+1(^@}DCf*)YU#c;qUv@~MCS}^}>27mZDehj<{ zry>u`^{c?1q^V9qu@+a z#01<4H=0l8?WN6SGh^wP?VEP*T(PP0@lD^|$+qQx&AoQ%>in;+oWEk#%q`ou>|D5u z{UJY{{VV^K=GO}r(dIF;_F7oegQd(>c$%Frj1d~**kECnAmBr#DBZ^YR`W5NUo=^G zD~@e0%An`ikBc&G@pyInSx-?M>nw5$M-th^q72(#(s4Jik-|8ZG}lc(VAJPj+R6)& h?TT#cTz6FMR6@GOvZv;z$FG`!_djN?KYYLW^KVM32P*&o delta 4576 zcmbW54^S1y9mjW%gL}Z^{Zr8@PyPf!k@ytF*eFJ^rqL*WG-+nqrh*CuLj*F3x?n>QzmpW8O?5W&d<;+co`Zin}A8S_$>1O-1`hMrpFVvQ%I#xoQ9eeO@ zX$o8oY7Vtme#ckg+o3h0uhItJp2^xBI&1H>nZwaDM+SZnDzsx!huWtY>PK0(XS}~V zXlrt)pDEY69cqU1Dc+ALpWt1tT*mtsiiUSk`3UddDj(o|T=_fRXOs(g$J=_l8+3C{ zTB7aLd#h;mpwZh5nc)nV8NJQuy`bxDrVWE|I#FFNRbQ>q443kwglo6y6!x~%>`SF3 zSLy?=1RUyjv7G3Y`b6)?x~wnQ9ZU||)l}w|$J{fg^#7Q%wqLCNKkYnY^=;iZ&!Nez zoAt44bVI;cKb4k_#um02j&g#}h|YnycFU8dTlK^CzFz;Y@-&*tLh__kE{}PX|OY6}( z=q_Gfcn%Fa?+Xpq<4G(n(e&!8MN&I8my${?GIO$Ixb-Ei@R<%$WA|{0=?=Y!owz}A zs0^(gtsgChO;^0O8s?BnSc1eJQ_`RQkiJpeS-2pW5722~}n8GXb_4L*J`pqEB_sQ+F-1*bw3g`35hUr9kRP`RsUOAlduUYmhx}q47 zy8duP;aVD|e4GZx>4{I2&nEoC%a^!wgNMYnyOX3inGLx!%)7muc|DmHei1w^ zzL$u*S!KnZaei^8c3;7*w0HO>=_2Gy^G0{je632WHE;Embcs$zg;vs~IvHniC0(SG zQIRBRu}((HlO$K;ChBTDhIW+Nnyx!T$t0a5#dj!sK4-heOo^VI^KedX+p#f$aZ;DN z?cr&Ms5H~V2C^pm|Hl9J*B^;Y!PmhBf%ue|2cF|5Ga1lN@@I%}riquo$CnK?h#6=kf_F?3lgODt9LM!;L9gE#!2Huo@CNWFX!#Iu1HVMy>d;FO-0X+oFbqsIC!DY-a06$+cPuG; z7rb9aSxkKmTr%pwaA?RfpO@rz1S`n&uV9aV4{`_nUI?m?k~mW^3v7*W3D_Dz0eAp4 z%{KK*z*EukP2L)zUk?svXgJgiJ_ud@AV5Dk2!T_oGX+uP4-pHrg9#$$53k{S;9_JX z1k;#BMQ{w(5)Pyg1@M3;Y@iDmK;YoK25-gl&8QOU*mM+cCeu zG}r?^jQ&J4p20q_h}eZf{R>==i)|k4>nR$7z#8Fg@Bv&NKQ|XtVhEWGgXt!Z2fu_< zv%};puy|6iNpr#0^%h0&<6IwE=l1noT?IjhWfRs#OlSZ{N#RYl8+;CJG(+fH4Yo$` zo8VIjYB}ujJ#iL%05_+fU&dVUF$5|+!fmVb2>2lS{NX8=5G}vG#CRguI-Uj&Ez;F- zG>1c3;C$$>fQYZZ0Q@}|6#OLkF1OF?$`vXg2-k>`YVZx5sYlK60XP@FCuFh{gegVchr!wo%epi$T5#onWiOlfYa2m?RANA{6F>n~_3s@f3qMAS0sY&qnA!59a^o z=MO*DJHRV&DssR)fLFoRi>wvww|ev@1PO=;HuZ=ug88k+AAa=?fsKpSUYx{_ z;T{p+3)8^7q#{E(V4sEO$KuoA0_wU7%W@BwK_S+X;zIC;ZOdlANaJhE)|FLmDO*!h zy}7M>&KSzB=RU=rnwt_or*dQEPnH%vx@F5!RyFsSLny9&uDragwk_?UZ2xpzaaO?)r(g>F)LT7SCnpCUsYDSlnu`>cI*08WgCg!fl0P_!FlG&b4jN? zEG;if%JHy*ytHWkzbO6exx5FY5f5w5%b+&)$GlAGu`z5QFGKoZBJ(WFpi%7G3p1&g hmExVtb}r0}Ig*Yo=wL?|rcJnj;*=sv@$gjf=RZB#ycPfe diff --git a/firmware/B15F.hex b/firmware/B15F.hex index caa2078..70a3efa 100644 --- a/firmware/B15F.hex +++ b/firmware/B15F.hex @@ -1,296 +1,309 @@ -:100000000C9453000C947D000C947D000C947D00A6 -:100010000C947D000C947D000C947D000C947D006C -:100020000C947D000C947D000C947D000C947D005C -:100030000C947D000C947D000C947D000C947D004C -:100040000C947D000C947D000C947D000C947D003C -:100050000C9470080C947D000C949A080C947D000C -:100060000C947D000C947D000C947D000C947D001C -:100070000C947D000C947D000C947D000C947D000C -:100080000C947D000C947D000C947D00B600B900AA -:10009000BC00A200BF00C200C500C800CB00A00089 -:1000A000B300CE00E00811241FBECFEFD0E4DEBFC6 -:1000B000CDBF11E0A0E0B1E0E2E3F2E100E00BBF70 -:1000C00002C007900D92AE32B107D9F722E0AEE23E -:1000D000B1E001C01D92AF30B207E1F710E0C3E517 -:1000E000D0E004C02197FE010E940E09C235D1075D -:1000F000C9F70E94C4080C9417090C940000CF9310 -:100100009EE088E10FB6F894A895809360000FBE3A -:1001100090936000A89581E791E00E94D104C82FD8 -:10012000682F86E092E00E9494018C2F90E0FC0101 -:100130003197EC30F10530F4EA5BFF4F0C940E0977 -:100140000E94DF0781E791E00E94B6030FB6F894A2 -:10015000A895809160008861809360001092600093 -:100160000FBECF9108950E94F507ECCF0E9426079D -:10017000E9CF0E943F07E6CF0E946607E3CF0E94C7 -:100180007B07E0CF0E949107DDCF0E94A707DACF5F -:100190000E94B807D7CF0E94C907D4CF0E940B088E -:1001A000D1CF8CE092E00E940F0160E089E092E004 -:1001B0000E9452016FEF89E092E00E94730160E0BB -:1001C00086E092E00E9452016FEF86E092E00E948A -:1001D00073016FEF83E092E00E9473018CEF91E076 -:1001E0000E944A026FE770E081E791E00E944203BB -:1001F00081E791E00E94B603789484B7877F84BF3B -:10020000109260000FB6F894A89580916000886104 -:1002100080936000109260000FBE0895089584B12D -:10022000806B84B926988AB18C618AB980E58CBDCF -:1002300081E08DBD8BB1837E8BB95A9A5B9A5C9AB3 -:1002400008958BB1837E8BB98BB160FD10C090E0B7 -:10025000892B8BB98BB161FD10C090E0892B8BB9D4 -:100260008BB162FD10C090E0892B8BB9089594E0AA -:10027000892B8BB98BB161FFF0CF98E0892B8BB9BB -:100280008BB162FFF0CF90E1892B8BB908956EBDE1 -:100290000DB407FEFDCF8EB50895FC017183608318 -:1002A000428308951F93CF93DF93EC01162F6A8149 -:1002B000888199810E94210160E4888199810E944E -:1002C000470160E0888199810E944701612F888100 -:1002D00099810E94470167E088819981DF91CF91E0 -:1002E0001F910C9421011F93CF93DF93EC01162FE4 -:1002F0006A81888199810E94210160E488819981C5 -:100300000E94470161E0888199810E944701612F25 -:10031000888199810E94470167E088819981DF91F6 -:10032000CF911F910C9421011F93CF93DF93EC0188 -:10033000162F6A81888199810E94210160E4888159 -:1003400099810E94470162E1888199810E94470159 -:10035000612F888199810E94470167E08881998196 -:10036000DF91CF911F910C9421011F93CF93DF93C5 -:10037000EC01162F6A81888199810E94210160E435 -:10038000888199810E94470163E1888199810E9457 -:100390004701612F888199810E94470167E0888128 -:1003A0009981DF91CF911F910C9421011F93CF93DD -:1003B000DF93EC016A81888199810E94210161E4C7 -:1003C000888199810E94470162E1888199810E9418 -:1003D000470160E0888199810E944701182F67E0FA -:1003E000888199810E942101812FDF91CF911F91F6 -:1003F00008951F93CF93DF93EC016A8188819981DF -:100400000E94210161E4888199810E94470163E192 -:10041000888199810E94470160E0888199810E94CA -:100420004701182F67E0888199810E942101812F5F -:10043000DF91CF911F910895FC0171836083428306 -:1004400008950F931F93CF93DF93EC018B016A8183 -:10045000888199810E942101B8010024660F771FCD -:10046000001C660F771F001C672F702D88819981F3 -:100470000E944701602F660F660F888199810E9454 -:10048000470167E088819981DF91CF911F910F919A -:100490000C94210110927C0087E880937A000895E3 -:1004A00080917C00807E682B60937C0080917A0034 -:1004B000806480937A0083EA91E00197F1F700C0AD -:1004C000000080917A0086FDFCCF809178009091A9 -:1004D000790008950F931F93CF93DF9361E089E034 -:1004E00092E00E949401C1E0D0E001E010E02FEF23 -:1004F00084E39CE0215080409040E1F700C0000080 -:10050000B8010C2E01C0660F0A94EAF789E092E068 -:100510000E9494012196C930D10549F7DF91CF910E -:100520001F910F9108950F931F93CF93DF9361E075 -:1005300086E092E00E949401C1E0D0E001E010E08A -:100540002FEF84E39CE0215080409040E1F700C011 -:100550000000B8010C2E01C0660F0A94EAF786E08D -:1005600092E00E9494012196C930D10549F7DF91AC -:10057000CF911F910F910895CF93DF93C0E0D0E00A -:10058000BE0180E092E00E94210287E893E101979A -:10059000F1F700C000002196C11594E0D90781F75A -:1005A0002FE78AE196E0215080409040E1F700C0BB -:1005B000000060E070E080E092E0DF91CF910C9469 -:1005C0002102CF93DF93C0E0D0E0BE018DEF91E038 -:1005D0000E94210287E893E10197F1F700C0000033 -:1005E0002196C11594E0D90781F72FE78AE196E0BB -:1005F000215080409040E1F700C0000060E070E0D2 -:100600008DEF91E0DF91CF910C9421020FB6F89419 -:10061000A8958091600088618093600010926000CE -:100620000FBE60E08CEF91E00E945002BC0180E0C0 -:1006300092E00E94210261E08CEF91E00E94500262 -:10064000BC018DEF91E00E94210289E092E00E94BE -:10065000F901682F89E092E00E94940183E092E022 -:100660000E94F901682F86E092E00E949401D9CFA0 -:100670000E946A020E9493020E94BC020E94E10250 -:100680000E94060322E02093C00028ED2093C100C1 -:1006900026E02093C2001092C50024E12093C400FC -:1006A00070930E0260930D0286519F4FFC011082E1 -:1006B00008958091C6008FE792E00197F1F700C09E -:1006C00000008091C00087FDF4CF0895DC01A9519E -:1006D000BF4F3C912091C600FC01E30FF11DE9538F -:1006E000FF4F20832C912F5F2C932C91FC01E95319 -:1006F000FF4FE081F0E0E050FF4F8081281708F4C1 -:1007000008951C92E0910D02F0910E0209940F934E -:100710001F93CF93DF93EC018C0108511F4FF80119 -:10072000608189E092E00E949401F8019081319605 -:100730008081981740F0C651DF4F1882DF91CF912A -:100740001F910F9108958091C00085FFFCCFF801A3 -:10075000808191E0980F9083C80FD11D898180938B -:10076000C600DF91CF911F910F91089589519F4F3E -:10077000FC01108208959C01FC01E651FF4F90811D -:100780009111FDCFF901E851FF4F10820895CF92EA -:10079000DF92EF92FF920F931F93CF93DF93EC01C1 -:1007A000C851DF4F2881211109C0DF91CF911F91DE -:1007B0000F91FF90EF90DF90CF9008958C0188818A -:1007C000780199EEE90EF11CF70180831882680127 -:1007D000FAEECF0ED11C81E0F6018083688189E0BA -:1007E00092E00E9494019881F7018081981778F433 -:1007F0009091C00095FFFCCF888191E0980F98837D -:10080000E801C80FD11D89818093C600CECFF601C3 -:100810001082CBCFFC01E851FF4F208131E0320F35 -:100820003083FC01E20FF11D61830895FC01E85162 -:10083000FF4F208131E0320F3083DC01A20FB11D68 -:1008400011966C93208131E0320F3083FC01E20F6E -:10085000F11D718308950F931F93CF93DF938C0144 -:10086000FC01E851FF4F808191E0980F9083D801FF -:10087000A80FB11D11964C939FEF940F442361F084 -:10088000DB013D91208141E0420F4083E801C20F2E -:10089000D11D39839150A8F7DF91CF911F910F910E -:1008A0000895EF92FF920F931F93CF93DF937C01F4 -:1008B000EC01C851DF4F888191E0980F9883F701D0 -:1008C000E80FF11D41835FEF540F442309F467C023 -:1008D000FB0120E041E9BF013191888191E0980F4F -:1008E00098838701080F111DD80111963C93DB01F5 -:1008F0008C912827822F842720FD282F30E03595E2 -:100900002795842F822720FD282F30E035952795C5 -:10091000842F822720FD282F30E035952795842FBE -:10092000822720FD282F30E035952795842F8227B8 -:1009300020FD282F30E035952795942F922720FD14 -:10094000292F30E035952795942F922720FD292FC8 -:1009500030E035952795842F822720FD282F269576 -:10096000515008F0B8CF888191E0980F9883F70133 -:10097000E80FF11D2183F701E951FF4F808191E0DC -:10098000980F9083D701A80FB11DA953BF4F8C9129 -:10099000DF91CF911F910F91FF90EF90089520E08C -:1009A000E2CFFC01E951FF4F208131E0320F30836B -:1009B000820F911DFC01E953FF4F80810895FC01D6 -:1009C000E951FF4F208131E0320F3083DC01A20F6B -:1009D000B11DA953BF4F2C91308141E0430F40839B -:1009E000830F911DFC01E953FF4F3081822F90E06E -:1009F000932B0895CF93DF93DC01EC01CB53DF4FB2 -:100A0000888199818230910509F467C0B0F400971C -:100A100009F440C0019759F48C91FD01E80FF11DD4 -:100A2000EF57FF4F608382E090E0998388838C9139 -:100A30008F5F8C93DF91CF9108958330910509F4F6 -:100A4000D3C00497A1F78091C6008FE792E0019789 -:100A5000F1F700C000008091C00087FDF4CFFD01D8 -:100A6000EC53FF4F8081882309F435C19EEFFD01CF -:100A7000E851FF4F808121E0280F2083FD01E80F1E -:100A8000F11D9183198218828C918F5F8C93DF9175 -:100A9000CF910895613408F420C18091C6008FE79A -:100AA00092E00197F1F700C000008091C00087FD3F -:100AB000F4CFFD01E851FF4F808191E0980F9083C2 -:100AC000FD01E80FF11D8EEF8183198218828C9150 -:100AD0008F5F8C93DF91CF9108958C91FD01E80F8A -:100AE000F11DEF57FF4F6083FD01EC53FF4F8081F5 -:100AF00068276083808180FF04C0908181E9892715 -:100B00008083808190E0959587958083808180FFA8 -:100B100004C0908181E989278083808190E0959548 -:100B200087958083808180FF04C0908181E9892737 -:100B30008083808190E0959587958083808180FF78 -:100B400004C0908181E989278083808190E0959518 -:100B500087958083808180FF04C0908181E9892707 -:100B60008083808190E0959587958083808180FF48 -:100B700004C0908181E989278083808190E09595E8 -:100B800087958083808180FF04C0908181E98927D7 -:100B90008083808190E0959587958083808180FF18 -:100BA00004C0908181E989278083808190E09595B8 -:100BB000879580839C91FD01EF57FF4F80819817A7 -:100BC00009F498C09C918081981708F430CF8091E7 -:100BD000C6008FE792E00197F1F700C00000809116 -:100BE000C00087FDF4CF65CF8C91FD01E80FF11DAA -:100BF000EF57FF4F6083FD01EC53FF4F8081682763 -:100C00006083808180FF04C0908181E9892780838F -:100C1000808190E0959587958083808180FF04C0D6 -:100C2000908181E989278083808190E095958795DF -:100C30008083808180FF04C0908181E9892780833F -:100C4000808190E0959587958083808180FF04C0A6 -:100C5000908181E989278083808190E095958795AF -:100C60008083808180FF04C0908181E9892780830F -:100C7000808190E0959587958083808180FF04C076 -:100C8000908181E989278083808190E0959587957F -:100C90008083808180FF04C0908181E989278083DF -:100CA000808190E0959587958083808180FF04C046 -:100CB000908181E989278083808190E0959587954F -:100CC000808384E090E0998388838C918F5F8C93FC -:100CD000DF91CF9108959FEFCACEFD01EF57FF4FEF -:100CE0006083ED5BFF4F10821C9281E090E099835E -:100CF00088839DCE83E090E09983888398CECF92BD -:100D0000DF92FF920F931F93CF93DF93FC01E95182 -:100D1000FF4F9C0128513F4F6901D1E9640F711DBC -:100D2000AEEFFA2E208131E0320F3083AC01420F5A -:100D3000511D9A0129533F4FD9011C91103809F4D4 -:100D400073C0113408F010E0C0E020E0308141E0D1 -:100D5000430F4083AC01430F511DDA01A953BF4F2C -:100D60000C91202720FD2D2730E035952795422F27 -:100D700020FF02C04D2F4227242F30E035952795C4 -:100D8000422F20FF02C04D2F422750E05595479536 -:100D9000242F40FF02C02D2F242730E035952795C2 -:100DA000422F20FF02C04D2F422750E05595479516 -:100DB000242F40FF02C02D2F242730E035952795A2 -:100DC000422F20FF02C04D2F422750E055954795F6 -:100DD000242F40FF02C02D2F24272695C11780F114 -:100DE000CF5F1C1708F0B2CF3091C600AFE7B2E07A -:100DF0001197F1F700C000003091C00037FDF4CF2B -:100E0000211112C0F601208131E0320F3083FC0144 -:100E1000E20FF11D2FEF2183DF91CF911F910F91F1 -:100E2000FF90DF90CF900895D6012C9131E0320FE2 -:100E30003C93AC01420F511DDA011196FC9272CF26 -:100E4000AB014C0F511DDA010C93CACFCF9381E750 -:100E500091E00E94BB0381E791E00E94D104C82F7A -:100E60006FEF81E791E00E940A046C2F81E791E027 -:100E70000E940A0481E791E0CF910C94C70381E7B7 -:100E800091E00E94BB0363E081E791E00E940A04C5 -:100E90004CE062E271E081E791E00E942B0449E0BE -:100EA00069E171E081E791E00E942B044CE06DE084 -:100EB00071E081E791E00E942B046FEF81E791E000 -:100EC0000E940A0481E791E00C94C70381E791E056 -:100ED0000E94BB0381E791E00E94DF04BC01660F22 -:100EE000771F680F791F81E791E00E94160481E760 -:100EF00091E00C94C70381E791E00E94BB0381E776 -:100F000091E00E94D104682F89E092E00E94940150 -:100F10006FEF81E791E00E940A0481E791E00C9471 -:100F2000C70381E791E00E94BB0381E791E00E9443 -:100F3000D104682F86E092E00E9494016FEF81E770 -:100F400091E00E940A0481E791E00C94C70381E7D5 -:100F500091E00E94BB0389E092E00E94F901682FB2 -:100F600081E791E00E940A0481E791E00C94C703B5 -:100F700081E791E00E94BB0386E092E00E94F901C4 -:100F8000682F81E791E00E940A0481E791E00C94C8 -:100F9000C70381E791E00E94BB0381E791E00E94D3 -:100FA000DF04BC0180E092E00E9421026FEF81E744 -:100FB00091E00E940A0481E791E00C94C70381E765 -:100FC00091E00E94BB0381E791E00E94DF04BC0135 -:100FD0008DEF91E00E9421026FEF81E791E00E9486 -:100FE0000A0481E791E00C94C70381E791E00E9435 -:100FF000BB0381E791E00E94D104682F8CEF91E060 -:101000000E945002BC0181E791E00E94160481E732 -:1010100091E00C94C7038F929F92AF92BF92CF92B0 -:10102000DF92EF92FF920F931F93CF93DF9381E7AD -:1010300091E00E94D104882E81E791E00E94D104C2 -:10104000982E81E791E00E94DF04EC0181E791E0B6 -:101050000E94DF045C0181E791E00E94DF04A89E0A -:101060006001A99ED00CB89ED00C11246FEF86E0D1 -:1010700092E00E949401CC15DD050CF5BE0180E0E4 -:1010800092E00E942102A895682D8CEF91E00E94C9 -:1010900050027C01692D8CEF91E00E9450028C017E -:1010A000B70181E791E00E941604B80181E791E061 -:1010B0000E941604CA0DDB1DCC15DD05FCF26FEF96 -:1010C00081E791E0DF91CF911F910F91FF90EF9019 -:1010D000DF90CF90BF90AF909F908F900C940A04B8 -:1010E0001F920F920FB60F9211240BB60F922F93EF -:1010F0003F934F935F936F937F938F939F93AF93A0 -:10110000BF93EF93FF9381E791E00E946603FF9105 -:10111000EF91BF91AF919F918F917F916F915F916F -:101120004F913F912F910F900BBE0F900FBE0F90DC -:101130001F9018951F920F920FB60F9211240BB6A5 -:101140000F922F933F934F935F936F937F938F9360 -:101150009F93AF93BF93EF93FF9381E791E00E943A -:101160008703FF91EF91BF91AF919F918F917F91F5 -:101170006F915F914F913F912F910F900BBE0F9008 -:101180000FBE0F901F9018950E94D1006FEF89E05D -:1011900092E00E9494012FE78AE196E0215080407E -:1011A0009040E1F700C0000060E089E092E00E941A -:1011B00094018FE493EC0197F1F700C00000F9CFA0 -:1011C0008CE092E00E940E0142E06CE072E089E067 -:1011D00092E00E944D0143E06CE072E086E092E014 -:1011E0000E944D0145E06CE072E083E092E00E94D5 -:1011F0004D0140E06CE072E080E092E00E941C0251 -:1012000041E06CE072E08DEF91E00E941C021092D0 -:1012100071011092B7011092B6010895EE0FFF1FF1 -:101220000024001C0BBE0790F691E02D0994F89461 -:02123000FFCFEE -:1012320001020103000202010103030209626F615C -:101242007264696E666F2E680031353A33323A3213 -:0E1252003500417072202032203230313900D8 +:100000000C945F000C9489000C9489000C94890076 +:100010000C9489000C9489000C9489000C9489003C +:100020000C9489000C9489000C9489000C9489002C +:100030000C9489000C9489000C9489000C9489001C +:100040000C9489000C9489000C9489000C9489000C +:100050000C9484080C9489000C94AE080C948900CC +:100060000C9489000C9489000C9489000C948900EC +:100070000C9489000C9489000C9489000C948900DC +:100080000C9489000C9489000C948900FD000001F7 +:100090000301E900060109010C010F011201E7004B +:1000A000FA00150142093F093C091A0939093609C4 +:1000B000330930092D0918092A094509480911246D +:1000C0001FBECFEFD0E4DEBFCDBF11E0A0E0B1E0B6 +:1000D000E2E0F3E100E00BBF02C007900D92AE3208 +:1000E000B107D9F722E0AEE2B1E001C01D92AB3218 +:1000F000B207E1F710E0CFE5D0E004C02197FE01A0 +:100100000E947609CE35D107C9F70E94D8080C9411 +:100110007F090C9400008AE292E00E94190160E0DD +:1001200087E292E00E945C016FEF87E292E00E941A +:100130007D0160E084E292E00E945C016FEF84E266 +:1001400092E00E947D016FEF81E292E00E947D01CA +:100150008AE192E00E9454028FE291E00E944C03F7 +:100160008FE291E00E946C03789484B7877F84BF0C +:10017000109260000FB6F894A89580916000886195 +:1001800080936000109260000FBE0895CF9398E0B6 +:1001900088E10FB6F894A895809360000FBE909305 +:1001A0006000A8958FE291E00E94D504C82F682FC7 +:1001B00084E292E00E949E018C2F90E0FC01319736 +:1001C000EC30F10530F4EA5BFF4F0C9476090E94A5 +:1001D000E3078FE291E00E946C030FB6F894A895B4 +:1001E00080916000886180936000109260000FBE73 +:1001F000CF9108950E94F907ECCF0E942A07E9CF1A +:100200000E944307E6CF0E946A07E3CF0E947F0760 +:10021000E0CF0E949507DDCF0E94AB07DACF0E94A6 +:10022000BC07D7CF0E94CD07D4CF0E940F08D1CFF3 +:10023000089584B1806B84B926988AB18C618AB99B +:1002400080E58CBD81E08DBD8BB1837E8BB95A9AE0 +:100250005B9A5C9A08958BB1837E8BB98BB160FDFC +:1002600010C090E0892B8BB98BB161FD10C090E07C +:10027000892B8BB98BB162FD10C090E0892B8BB9B3 +:10028000089594E0892B8BB98BB161FFF0CF98E092 +:10029000892B8BB98BB162FFF0CF90E1892B8BB9A1 +:1002A00008956EBD0DB407FEFDCF8EB50895FC0117 +:1002B00071836083428308951F93CF93DF93EC0192 +:1002C000162F6A81888199810E942B0160E48881C0 +:1002D00099810E94510160E0888199810E945101B9 +:1002E000612F888199810E94510167E088819981FD +:1002F000DF91CF911F910C942B011F93CF93DF932C +:10030000EC01162F6A81888199810E942B0160E49B +:10031000888199810E94510161E0888199810E94C0 +:100320005101612F888199810E94510167E0888184 +:100330009981DF91CF911F910C942B011F93CF9343 +:10034000DF93EC01162F6A81888199810E942B012D +:1003500060E4888199810E94510162E188819981DC +:100360000E945101612F888199810E94510167E0AB +:1003700088819981DF91CF911F910C942B011F935C +:10038000CF93DF93EC01162F6A81888199810E94B7 +:100390002B0160E4888199810E94510163E1888189 +:1003A00099810E945101612F888199810E94510198 +:1003B00067E088819981DF91CF911F910C942B0187 +:1003C0001F93CF93DF93EC016A81888199810E940A +:1003D0002B0161E4888199810E94510162E1888149 +:1003E00099810E94510160E0888199810E945101A8 +:1003F000182F67E0888199810E942B01812FDF915E +:10040000CF911F9108951F93CF93DF93EC016A81E1 +:10041000888199810E942B0161E4888199810E94E1 +:10042000510163E1888199810E94510160E08881D6 +:1004300099810E945101182F67E0888199810E945B +:100440002B01812FDF91CF911F910895FC017183C2 +:100450006083428308950F931F93CF93DF93EC0142 +:100460008B016A81888199810E942B01B801002447 +:10047000660F771F001C660F771F001C672F702DFB +:10048000888199810E945101602F660F660F8881D3 +:1004900099810E94510167E088819981DF91CF9114 +:1004A0001F910F910C942B0110927C0087E8809390 +:1004B0007A00089580917C00807E682B60937C0098 +:1004C00080917A00806480937A0083EA91E00197BA +:1004D000F1F700C0000080917A0086FDFCCF80918A +:1004E00078009091790008950F931F93CF93DF9335 +:1004F00061E087E292E00E949E01C1E0D0E001E06D +:1005000010E02FEF84E39CE0215080409040E1F721 +:1005100000C00000B8010C2E01C0660F0A94EAF773 +:1005200087E292E00E949E012196C930D10549F7E9 +:10053000DF91CF911F910F9108950F931F93CF9348 +:10054000DF9361E084E292E00E949E01C1E0D0E08E +:1005500001E010E02FEF84E39CE0215080409040C8 +:10056000E1F700C00000B8010C2E01C0660F0A942C +:10057000EAF784E292E00E949E012196C930D105FB +:1005800049F7DF91CF911F910F910895CF93DF939A +:10059000C0E0D0E0BE018EE192E00E942B0287E82D +:1005A00093E10197F1F700C000002196C11594E096 +:1005B000D90781F72FE78AE196E0215080409040EB +:1005C000E1F700C0000060E070E08EE192E0DF91B2 +:1005D000CF910C942B02CF93DF93C0E0D0E0BE010B +:1005E0008BE192E00E942B0287E893E10197F1F7FB +:1005F00000C000002196C11594E0D90781F72FE7CC +:100600008AE196E0215080409040E1F700C0000070 +:1006100060E070E08BE192E0DF91CF910C942B02CF +:100620000FB6F894A895809160008861809360006F +:10063000109260000FBE60E08AE192E00E945A02D0 +:10064000BC018EE192E00E942B0261E08AE192E01F +:100650000E945A02BC018BE192E00E942B0287E2C9 +:1006600092E00E940302682F87E292E00E949E01BE +:1006700081E292E00E940302682F84E292E00E94ED +:100680009E01D9CF0E9474020E949D020E94C60260 +:100690000E94EB020E94100322E02093C00028ED8C +:1006A0002093C10026E02093C2001092C50024E1EF +:1006B0002093C40086519F4FFC01108208958091C1 +:1006C000C6008FE792E00197F1F700C0000080912B +:1006D000C00087FDF4CF089589519F4FFC0110821F +:1006E00008959C01FC01E651FF4F90819111FDCFCF +:1006F000F901E851FF4F10820895DC01A951BF4F65 +:100700002C9131E0320F3C933091C600FC01E20F96 +:10071000F11DE953FF4F30832C91FC01E953FF4F4A +:10072000E081F0E0E050FF4F8081281720F01C921C +:1007300081E080932E0108950F931F93CF93DF9351 +:10074000EC018C0108511F4FF801608187E292E0B3 +:100750000E949E01F801908131968081981740F0A7 +:10076000C651DF4F1882DF91CF911F910F910895ED +:100770008091C00085FFFCCFF801808191E0980F47 +:100780009083C80FD11D89818093C600DF91CF91DE +:100790001F910F910895CF92DF92EF92FF920F93E6 +:1007A0001F93CF93DF93EC01C851DF4F28812111B4 +:1007B00009C0DF91CF911F910F91FF90EF90DF90D3 +:1007C000CF9008958C018881780199EEE90EF11C93 +:1007D000F701808318826801FAEECF0ED11C81E008 +:1007E000F6018083688187E292E00E949E019881F1 +:1007F000F7018081981778F49091C00095FFFCCFA5 +:10080000888191E0980F9883E801C80FD11D8981F4 +:100810008093C600CECFF6011082CBCFFC01E85109 +:10082000FF4F208131E0320F3083FC01E20FF11DD8 +:1008300061830895FC01E851FF4F208131E0320FC0 +:100840003083DC01A20FB11D11966C93208131E041 +:10085000320F3083FC01E20FF11D718308950F9375 +:100860001F93CF93DF938C01FC01E851FF4F8081F0 +:1008700091E0980F9083D801A80FB11D11964C9369 +:100880009FEF940F442361F0DB013D91208141E013 +:10089000420F4083E801C20FD11D39839150A8F760 +:1008A000DF91CF911F910F910895EF92FF920F93D7 +:1008B0001F93CF93DF937C01EC01C851DF4F8881F8 +:1008C00091E0980F9883F701E80FF11D41835FEFE6 +:1008D000540F442309F467C0FB0120E041E9BF0144 +:1008E0003191888191E0980F98838701080F111D3D +:1008F000D80111963C93DB018C912827822F842705 +:1009000020FD282F30E035952795842F822720FD64 +:10091000282F30E035952795842F822720FD282F1A +:1009200030E035952795842F822720FD282F30E051 +:1009300035952795842F822720FD282F30E0359587 +:100940002795942F922720FD292F30E03595279564 +:10095000942F922720FD292F30E035952795842F5D +:10096000822720FD282F2695515008F0B8CF888186 +:1009700091E0980F9883F701E80FF11D2183F701AB +:10098000E951FF4F808191E0980F9083D701A80F24 +:10099000B11DA953BF4F8C91DF91CF911F910F9142 +:1009A000FF90EF90089520E0E2CFFC01E951FF4F66 +:1009B000208131E0320F3083820F911DFC01E95319 +:1009C000FF4F80810895FC01E951FF4F208131E004 +:1009D000320F3083DC01A20FB11DA953BF4F2C9100 +:1009E000308141E0430F4083830F911DFC01E953A7 +:1009F000FF4F3081822F90E0932B0895CF93DF93A8 +:100A0000DC01EC01CB53DF4F888199818230910565 +:100A100009F467C0B0F4009709F440C0019759F495 +:100A20008C91FD01E80FF11DEF57FF4F608382E0CD +:100A300090E0998388838C918F5F8C93DF91CF9125 +:100A400008958330910509F4D3C00497A1F78091EC +:100A5000C6008FE792E00197F1F700C00000809197 +:100A6000C00087FDF4CFFD01EC53FF4F8081882348 +:100A700009F435C19EEFFD01E851FF4F808121E06F +:100A8000280F2083FD01E80FF11D91831982188240 +:100A90008C918F5F8C93DF91CF910895613408F42E +:100AA00020C18091C6008FE792E00197F1F700C066 +:100AB00000008091C00087FDF4CFFD01E851FF4F99 +:100AC000808191E0980F9083FD01E80FF11D8EEF7A +:100AD0008183198218828C918F5F8C93DF91CF91E3 +:100AE00008958C91FD01E80FF11DEF57FF4F6083D2 +:100AF000FD01EC53FF4F808168276083808180FF78 +:100B000004C0908181E989278083808190E0959558 +:100B100087958083808180FF04C0908181E9892747 +:100B20008083808190E0959587958083808180FF88 +:100B300004C0908181E989278083808190E0959528 +:100B400087958083808180FF04C0908181E9892717 +:100B50008083808190E0959587958083808180FF58 +:100B600004C0908181E989278083808190E09595F8 +:100B700087958083808180FF04C0908181E98927E7 +:100B80008083808190E0959587958083808180FF28 +:100B900004C0908181E989278083808190E09595C8 +:100BA00087958083808180FF04C0908181E98927B7 +:100BB0008083808190E09595879580839C91FD014D +:100BC000EF57FF4F8081981709F498C09C9180815E +:100BD000981708F430CF8091C6008FE792E0019714 +:100BE000F1F700C000008091C00087FDF4CF65CF11 +:100BF0008C91FD01E80FF11DEF57FF4F6083FD0160 +:100C0000EC53FF4F808168276083808180FF04C0A0 +:100C1000908181E989278083808190E095958795EF +:100C20008083808180FF04C0908181E9892780834F +:100C3000808190E0959587958083808180FF04C0B6 +:100C4000908181E989278083808190E095958795BF +:100C50008083808180FF04C0908181E9892780831F +:100C6000808190E0959587958083808180FF04C086 +:100C7000908181E989278083808190E0959587958F +:100C80008083808180FF04C0908181E989278083EF +:100C9000808190E0959587958083808180FF04C056 +:100CA000908181E989278083808190E0959587955F +:100CB0008083808180FF04C0908181E989278083BF +:100CC000808190E095958795808384E090E099837A +:100CD00088838C918F5F8C93DF91CF9108959FEFE4 +:100CE000CACEFD01EF57FF4F6083ED5BFF4F1082CF +:100CF0001C9281E090E0998388839DCE83E090E010 +:100D00009983888398CECF92DF92FF920F931F939F +:100D1000CF93DF93FC01E951FF4F9C0128513F4FD6 +:100D20006901D1E9640F711DAEEFFA2E208131E027 +:100D3000320F3083AC01420F511D9A0129533F4FAE +:100D4000D9011C91103809F473C0113408F010E077 +:100D5000C0E020E0308141E0430F4083AC01430F0D +:100D6000511DDA01A953BF4F0C91202720FD2D27DB +:100D700030E035952795422F20FF02C04D2F4227A6 +:100D8000242F30E035952795422F20FF02C04D2FAC +:100D9000422750E055954795242F40FF02C02D2F44 +:100DA000242730E035952795422F20FF02C04D2F94 +:100DB000422750E055954795242F40FF02C02D2F24 +:100DC000242730E035952795422F20FF02C04D2F74 +:100DD000422750E055954795242F40FF02C02D2F04 +:100DE00024272695C11780F1CF5F1C1708F0B2CFDA +:100DF0003091C600AFE7B2E01197F1F700C00000F4 +:100E00003091C00037FDF4CF211112C0F6012081CE +:100E100031E0320F3083FC01E20FF11D2FEF21830F +:100E2000DF91CF911F910F91FF90DF90CF900895A8 +:100E3000D6012C9131E0320F3C93AC01420F511D91 +:100E4000DA011196FC9272CFAB014C0F511DDA0101 +:100E50000C93CACFCF938FE291E00E9471038FE28F +:100E600091E00E94D504C82F6FEF8FE291E00E94BD +:100E70000E046C2F8FE291E00E940E048FE291E04D +:100E8000CF910C94CB038FE291E00E94710363E059 +:100E90008FE291E00E940E044CE062E271E08FE28A +:100EA00091E00E942F0449E069E171E08FE291E056 +:100EB0000E942F044CE06DE071E08FE291E00E940F +:100EC0002F046FEF8FE291E00E940E048FE291E019 +:100ED0000C94CB038FE291E00E9471038FE291E0CA +:100EE0000E94E304BC01660F771F680F791F8FE231 +:100EF00091E00E941A048FE291E00C94CB038FE200 +:100F000091E00E9471038FE291E00E94D504682F66 +:100F100087E292E00E949E016FEF8FE291E00E94D3 +:100F20000E048FE291E00C94CB038FE291E00E94DB +:100F300071038FE291E00E94D504682F84E292E071 +:100F40000E949E016FEF8FE291E00E940E048FE2FB +:100F500091E00C94CB038FE291E00E94710387E251 +:100F600092E00E940302682F8FE291E00E940E043B +:100F70008FE291E00C94CB038FE291E00E94710329 +:100F800084E292E00E940302682F8FE291E00E94C7 +:100F90000E048FE291E00C94CB038FE291E00E946B +:100FA00071038FE291E00E94E304BC018EE192E0C4 +:100FB0000E942B026FEF8FE291E00E940E048FE2FD +:100FC00091E00C94CB038FE291E00E9471038FE2D9 +:100FD00091E00E94E304BC018BE192E00E942B02AD +:100FE0006FEF8FE291E00E940E048FE291E00C948B +:100FF000CB038FE291E00E9471038FE291E00E94A7 +:10100000D504682F8AE192E00E945A02BC018FE267 +:1010100091E00E941A048FE291E00C94CB038F922E +:101020009F92AF92BF92CF92DF92EF92FF920F9377 +:101030001F93CF93DF938FE291E00E94D504882E17 +:101040008FE291E00E94D504982E8FE291E00E94F9 +:10105000E304EC018FE291E00E94E3045C018FE283 +:1010600091E00E94E304A89E6001A99ED00CB89E66 +:10107000D00C11246FEF84E292E00E949E01CC1507 +:10108000DD054CF5BE018EE192E00E942B02A89591 +:10109000682D8AE192E00E945A027C01692D8AE162 +:1010A00092E00E945A028C018FE291E00E9471034B +:1010B000B7018FE291E00E941A04B8018FE291E03B +:1010C0000E941A048FE291E00E94CB03CA0DDB1D3F +:1010D000CC15DD05BCF28FE291E00E9471036FEF49 +:1010E0008FE291E00E940E048FE291E0DF91CF91B8 +:1010F0001F910F91FF90EF90DF90CF90BF90AF9036 +:101100009F908F900C94CB031F920F920FB60F926B +:1011100011240BB60F922F933F934F935F936F93CE +:101120007F938F939F93AF93BF93EF93FF938FE240 +:1011300091E00E947D03FF91EF91BF91AF919F914C +:101140008F917F916F915F914F913F912F910F9070 +:101150000BBE0F900FBE0F901F9018951F920F920D +:101160000FB60F9211240BB60F922F933F934F930C +:101170005F936F937F938F939F93AF93BF93EF93FF +:10118000FF938FE291E00E949C03FF91EF91BF914A +:10119000AF919F918F917F916F915F914F913F910F +:1011A0002F910F900BBE0F900FBE0F901F901895B0 +:1011B0000E948B006FEF87E292E00E949E012FE772 +:1011C0008AE196E0215080409040E1F700C00000A5 +:1011D00060E087E292E00E949E0118E1D8E004C03E +:1011E00026E02A95F1F700C080912E018823C1F3F3 +:1011F00010922E010FB6F894A895109360000FBEC0 +:10120000D0936000A8958FE291E00E94D504C82F8A +:10121000682F84E292E00E949E018C2F90E0FC01F6 +:101220003197EC30F10530F4EE5AFF4F0C9476090B +:101230000E94E3078FE291E00E946C030FB6F894DE +:10124000A895809160008861809360001092600092 +:101250000FBEC6CF0E94F907EDCF0E94CD07EACF9F +:101260000E94BC07E7CF0E94AB07E4CF0E9495071E +:10127000E1CF0E947F07DECF0E946A07DBCF0E948A +:101280004307D8CF0E942A07D5CF0E940F08D2CF9C +:101290008AE292E00E94180142E06AE272E087E28C +:1012A00092E00E94570143E06AE272E084E292E039 +:1012B0000E94570145E06AE272E081E292E00E94FA +:1012C000570140E06AE272E08EE192E00E9426025D +:1012D00041E06AE272E08BE192E00E942602109205 +:1012E0002F011092F5011092F4010895EE0FFF1FE7 +:1012F0000024001C0BBE0790F691E02D0994F89491 +:02130000FFCF1D +:1013020001020103000202010103030209626F618B +:101312007264696E666F2E680031353A35393A3338 +:0E132200390041707220203220323031390003 :00000001FF diff --git a/firmware/global_vars.cpp b/firmware/global_vars.cpp index 0622545..2cd6483 100644 --- a/firmware/global_vars.cpp +++ b/firmware/global_vars.cpp @@ -8,10 +8,4 @@ volatile TLC5615 dac0(*((SPI*) &spi), SPIADR::AA0); volatile TLC5615 dac1(*((SPI*) &spi), SPIADR::AA1); volatile ADU adu; volatile USART usart; - - -volatile uint8_t receive_buffer[32]; -volatile uint8_t receive_pos; -volatile uint8_t send_buffer[32]; -volatile uint8_t send_pos; -volatile uint8_t send_len; +volatile bool nextRequest = false; diff --git a/firmware/global_vars.h b/firmware/global_vars.h index 94511ec..84929c5 100644 --- a/firmware/global_vars.h +++ b/firmware/global_vars.h @@ -14,5 +14,6 @@ extern volatile TLC5615 dac0; extern volatile TLC5615 dac1; extern volatile ADU adu; extern volatile USART usart; +extern volatile bool nextRequest; #endif // GLOBAL_VARS_H diff --git a/firmware/main.cpp b/firmware/main.cpp index ae7dfca..e20e0e2 100644 --- a/firmware/main.cpp +++ b/firmware/main.cpp @@ -7,9 +7,7 @@ #include "requests.h" -#define WDT_TIMEOUT WDTO_1S - -void handleRequest(void); +#define WDT_TIMEOUT WDTO_15MS void initAll() { @@ -22,7 +20,7 @@ void initAll() ((MCP23S17*) &sw)->setDirB(0xFF); // alle Eingang ((ADU*) &adu)->init(); - usart.init(&handleRequest); + usart.init(); usart.initRX(); // aktiviere Interrupts @@ -112,7 +110,12 @@ int main() while(1) { - _delay_ms(10); + if(nextRequest) + { + nextRequest = false; + handleRequest(); + } + _delay_us(1); } return 0; diff --git a/firmware/requests.cpp b/firmware/requests.cpp index 53c1bf9..e3a2960 100644 --- a/firmware/requests.cpp +++ b/firmware/requests.cpp @@ -114,9 +114,12 @@ void rqAdcDacStroke() uint16_t val_a = ((ADU*) &adu)->getValue(channel_a); uint16_t val_b = ((ADU*) &adu)->getValue(channel_b); + + usart.initTX(); usart.writeInt(val_a); usart.writeInt(val_b); - + usart.flush(); + /*union doubleword { uint16_t word[2]; @@ -138,5 +141,7 @@ void rqAdcDacStroke() } while(ret != USART::MSG_OK);*/ } + usart.initTX(); usart.writeByte(USART::MSG_OK); + usart.flush(); } diff --git a/firmware/usart.cpp b/firmware/usart.cpp index 2bf4765..9057a92 100644 --- a/firmware/usart.cpp +++ b/firmware/usart.cpp @@ -1,8 +1,6 @@ #include "usart.h" -handler_t USART::receive_handler = nullptr; - -void USART::init(handler_t handler) volatile +void USART::init() volatile { UCSR0A = _BV(U2X0); @@ -15,7 +13,6 @@ void USART::init(handler_t handler) volatile UBRR0H = (((F_CPU / (8UL * BAUDRATE))-1) >> 8) & 0xFF; UBRR0L = ((F_CPU / (8UL * BAUDRATE))-1) & 0xFF; - receive_handler = handler; send_active = false; } @@ -33,15 +30,27 @@ void USART::clearInputBuffer() volatile return; } + +void USART::initRX(void) volatile +{ + receive_pos = 0; +} + +void USART::initTX(void) volatile +{ + while(send_active); + + send_pos = 0; +} + void USART::handleRX(void) volatile { - receive_buffer[receive_pos] = UDR0; - receive_pos++; + receive_buffer[receive_pos++] = UDR0; - if(receive_pos >= rq_len[receive_buffer[0]]) // last byte + if(receive_pos >= rq_len[receive_buffer[0]]) // last byte of request { receive_pos = 0; - receive_handler(); + nextRequest = true; } } @@ -59,18 +68,6 @@ void USART::handleTX(void) volatile } } -void USART::initRX(void) volatile -{ - receive_pos = 0; -} - -void USART::initTX(void) volatile -{ - while(send_active); - - send_pos = 0; -} - void USART::flush(void) volatile { if(send_pos == 0) @@ -83,6 +80,7 @@ void USART::flush(void) volatile handleTX(); } + void USART::writeByte(uint8_t b) volatile { send_buffer[send_pos++] = b; @@ -137,6 +135,8 @@ uint16_t USART::readInt() volatile return v; } + + void USART::nextByte(uint8_t byte) volatile { switch(seq) diff --git a/firmware/usart.h b/firmware/usart.h index f3f970f..e490c89 100644 --- a/firmware/usart.h +++ b/firmware/usart.h @@ -11,8 +11,6 @@ class USART; #include "requests.h" -typedef void (*handler_t)(void); - enum BlockSequence { IDLE = 0, @@ -25,53 +23,51 @@ enum BlockSequence class USART { public: - - void init(handler_t handler) volatile; - void clearInputBuffer(void) volatile; + // Steuerung + void init(void) volatile; + void clearInputBuffer(void) volatile; + void initRX(void) volatile; + void initTX(void) volatile; + void handleRX(void) volatile; + void handleTX(void) volatile; + void flush(void) volatile; + // Sendefunktionen void writeByte(uint8_t) volatile; void writeInt(uint16_t) volatile; void writeStr(const char*, uint8_t) volatile; + // Empfangsfunktionen uint8_t readByte(void) volatile; uint16_t readInt(void) volatile; - - // NEU - void handleRX(void) volatile; - void handleTX(void) volatile; - - void initRX(void) volatile; - void initTX(void) volatile; - void flush(void) volatile; + // Blockgedöns void nextByte(uint8_t byte) volatile; uint8_t writeBlock(uint8_t*, uint8_t) volatile; void readBlock(uint8_t*, uint8_t) volatile; - - constexpr static uint8_t MSG_OK = 0xFF; - constexpr static uint8_t MSG_FAIL = 0xFE; - uint8_t block_pos = 0; + // constants + constexpr static uint8_t MSG_OK = 0xFF; + constexpr static uint8_t MSG_FAIL = 0xFE; constexpr static uint32_t BAUDRATE = 115200; // 38400 constexpr static uint8_t CRC7_POLY = 0x91; constexpr static uint8_t MAX_BLOCK_SIZE = 64; constexpr static uint8_t BLOCK_END = 0x80; - volatile uint8_t send_buffer[128]; private: - static handler_t receive_handler; uint8_t block_buffer[MAX_BLOCK_SIZE + 3]; // don't store BLOCK_END byte uint8_t crc; BlockSequence seq = BlockSequence::IDLE; - volatile uint8_t receive_buffer[32]; + volatile uint8_t receive_buffer[128]; volatile uint8_t receive_pos; + volatile uint8_t send_buffer[128]; volatile uint8_t send_pos; volatile uint8_t send_len; volatile bool send_active;