From 95015a030e727a86c53487b52c2fd335ad25cfab Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Tue, 26 Mar 2019 15:02:41 +0100 Subject: [PATCH] int test geht --- drv/b15f.cpp | 69 +++++++++++++++++++++++++++++---------------------- drv/b15f.h | 12 ++++++--- drv/b15f.o | Bin 17576 -> 18536 bytes main | Bin 20128 -> 24376 bytes 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/drv/b15f.cpp b/drv/b15f.cpp index fc4ef28..a11139d 100644 --- a/drv/b15f.cpp +++ b/drv/b15f.cpp @@ -6,10 +6,10 @@ B15F::B15F() { } -void B15F::init(void) +void B15F::init() { - std::cout << PRE << "Stelle Verbindung mit Adapter her... "; + std::cout << PRE << "Stelle Verbindung mit Adapter her... " << std::flush; int code = system(std::string("stty 38400 -F " + SERIAL_DEVICE).c_str()); if(code) { @@ -29,9 +29,11 @@ void B15F::init(void) std::cout << "OK" << std::endl; + // verwerfe Daten, die µC noch hat + discard(); // Verbindungstest muss dreimal erfolgreich sein - std::cout << PRE << "Teste Verbindung... "; + std::cout << PRE << "Teste Verbindung... " << std::flush; for(uint8_t i = 0; i < 3; i++) { if(!testConnection()) @@ -40,21 +42,30 @@ void B15F::init(void) } } std::cout << "OK" << std::endl; + + std::cout << "int: " << testIntConv() << std::endl; + std::cout << "int: " << testIntConv() << std::endl; + std::cout << "int: " << testIntConv() << std::endl; - writeByte(0xFF); - writeByte(0x01); - writeByte(0x02); - std::cout << readByte() << std::endl; - std::cout << readByte() << std::endl; } -bool B15F::testConnection(void) +void B15F::discard(void) +{ + for(uint8_t i = 0; i < 8; i++) + { + writeByte(RQ_DISC); // sende discard Befehl (verwerfe input) + delay(1); + tcflush(usart, TCIFLUSH); // leere Puffer + } +} + +bool B15F::testConnection() { // erzeuge zufälliges Byte - srand (time(NULL)); + srand(time(NULL)); uint8_t dummy = rand() % 256; - writeByte(0); // echo / dummy command for testing + writeByte(RQ_TEST); writeByte(dummy); uint8_t aw = readByte(); @@ -63,25 +74,28 @@ bool B15F::testConnection(void) return aw == MSG_OK && mirror == dummy; } +bool B15F::testIntConv() +{ + srand(time(NULL)); + uint16_t dummy = rand() % (0xFFFF / 3); + + writeByte(RQ_INT); + writeInt(dummy); + + uint16_t aw = readInt(); + return aw == dummy * 3; +} + void B15F::writeByte(uint8_t b) { if(write(usart, &b, 1) != 1) - throw DriverException("Fehler beim Senden."); + throw DriverException("Fehler beim Senden. (byte)"); } void B15F::writeInt(uint16_t v) { - // static_cast(static_cast(&x)); - writeByte((v >> 8) & 0xFF); - writeByte((v >> 0) & 0xFF); -} - -void B15F::writeLong(uint32_t v) -{ - writeByte((v >> 24) & 0xFF); - writeByte((v >> 16) & 0xFF); - writeByte((v >> 8) & 0xFF); - writeByte((v >> 0) & 0xFF); + if(write(usart, reinterpret_cast(&v), 2) != 2) + throw DriverException("Fehler beim Senden. (int)"); } uint8_t B15F::readByte() @@ -113,15 +127,10 @@ uint8_t B15F::readByte() uint16_t B15F::readInt() { - return readByte() << 8 | readByte(); + return readByte() | readByte() << 8; } -uint32_t B15F::readLong() -{ - return readByte() << 24 | readByte() << 16 | readByte() << 8 | readByte(); -} - -void B15F::sleep(uint16_t ms) +void B15F::delay(uint16_t ms) { std::this_thread::sleep_for(std::chrono::milliseconds(ms)); } diff --git a/drv/b15f.h b/drv/b15f.h index 2294934..7c71e0b 100644 --- a/drv/b15f.h +++ b/drv/b15f.h @@ -20,16 +20,16 @@ private: B15F(void); // privater Konstruktor public: void init(void); + void discard(void); bool testConnection(void); + bool testIntConv(void); inline void writeByte(uint8_t); inline void writeInt(uint16_t); - inline void writeLong(uint32_t); inline uint8_t readByte(void); inline uint16_t readInt(void); - inline uint32_t readLong(void); - void sleep(uint16_t); + void delay(uint16_t); static B15F& getInstance(void); @@ -45,6 +45,12 @@ private: const std::string SERIAL_DEVICE = "/dev/ttyUSB0"; constexpr static uint8_t MSG_OK = 0xFF; constexpr static uint8_t MSG_FAIL = 0xFE; + +// REQUESTS + 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; }; #endif // B15F_h diff --git a/drv/b15f.o b/drv/b15f.o index 54c9087ccfd7ed3d2ba1e836d646371bba4a95ee..1d44b6dace3e308358cc44007a10397eebb2deb2 100644 GIT binary patch literal 18536 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 literal 17576 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%0D9I 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 literal 20128 zcmcg!4SZD9mB0BIh1$iC#kfMs7s{fBadEWqLMPEaDeiW zt;#1k3##ylq^HOrgo=!Eh4W+{vYC`d}O6q?`E z+bP~Nm$T#OP7`L5%6xx^d}QZ`4PGI*MwI8|mr>ytNo6}M=!&*2u3XU7KEEp(>)kSc zOZDRUiz|J}xNjk^H|ZzYhSh6%Nu)-&f~QXhPZ*_t{+2JU|N83qr4QF!96q+_zTaN_ ziDx#G>;nABc4N$scrnKSv&8nMnP={pQcLlC;d20|_6^+)A-0|&+86&+5!KO1HQunf7zj4 zw>!u`dP?z^8@}dH?yC-ZjyvF04)(n2 zpuZc27+*hy{rUVx^H4r}mO9`xTji_oFJRAX z=4K=3LjVD0^U#P$DVxC*zruMh?BD_OV^VJqUvv@8iHn)0ZS0Q6w4@$N=$gi~#@1C@ zdn6Ir7)|PtMC+>Bu6Qic8fxo`m}&V_u3p`uS4ZPXtu2&{R5r$VS*aN^?^m&Ds6MLJrYBDRHve@ZtrR)(xQ_Ny)zNttaU|V8}&{tl1Ri8 z%_~tH$_Z(quC91Eq(`*KmT;s;kH%v>TVS!K#glp>66%K1WF(ehsiisAe=Qr5jtdR=-x?vRG?g*|JFM;@T=BvG%UNSpl-blZ(T!J{Di3UAZu@ z5X}&3-wKb!!`Cm0#W!c_+702>#uj~vwHnBMG52O55Ljqhi7G{78}pgc5~2!SoQR;Z znfsgqa7wQntNU&6EH*Dd76eFPhppgBW5J@8pQ+KCK_ZN@Ke zE^drz+7fA6S9~MYz zs-vqn*@^mNd~FPewImI%0MpjSHb-Oa+L}nRw>v_KVRPIi6QNi;i-ltGWLG58!}KVU z(f9RG_{z{W0Nwd>Xemp5tw-y)xtu}LkoWx~W&h?$N46$@I3 z)pjBO=K?YzgBAgs$V$MU!6xxsE;gB`79y{UuhFL#-wnu_3|V!1EWguLxeB zcNdoYh3sMQ6y$zF?gK{7GVuzrZ;*J8*kAc`@LdA0&cTO-9yJH=6nt|Ie*Ap1+;us) zQf}fKa_~_h-;;y;#Xh7&Jl~}Kl9%O^&(FmlwGo9aLJ#3$OUCh$1q!FMSDDCT=FiI( z`~nL;YQZnG;D!YkTQi<|+=9=y$e*&{J`3&@^&&fkYj~=Bp3`>FZ;}6&PvIQdPI+Y5 zZNbg{Zl>(D;ON$wFl@m^*WqbDvEZ4lC{ji&xOJcRvIUoILyAT%I0i^27#4g|24(EH z1;+r$gi{uLN(Mzl_>=rF)q>V#x6%)q;y5$MI$h{&A@Ube#n+v)~&n_}Lb`(}K^i;5`<6rUl<(!R5OU zO764Z=UC)#x8SrEmtn|)D-s0VVZmov@Ld*swgvx|1s78WPu*?7=UC+TT5vIy@YG=o zUSW~{i3Oi$!PWk^O4I>Y)j0}Nw-4)uV0!?ABc6t4dN=34Pdp9D^e)anOgs(6^bqGCAfAR`x{vc; zCZ2{tx`*?35l=%gy@B&zAfAR`x|#EzBc6s{x`y*N5>G=e?dN=gcp7SHh4X(;JPon5 zm-B7JyNPF>i+`q3h|?ye~x(S z+UXI_KTSM!>GUw?_YqHBIlY_n-zT0P1?gR!e;9nn5O^M_9~xJ|{c7rv;XyZ22dj3% z+v?!5=OMU{8s0bw!vG8eFkXR@z%cKu)IS05g9Er4YJYWL*$og=2hY5bld7FO^*~8_ zA(V6sLH<4|Pwfx+pecX3DSwlcFXZxpw;NN>U#F&CSNnf+yt%b$&~*fTLmix&PwSADGp*D5>*l35(bKW*y|MmN+ z7FizopC`e=s^>t~s`EZTe)XvjiqzC`^(o^rwcw!o{0Dj&6y7QnP9cR(`udjL2Qygj z0=0kH0%U+n*fRyyz8aj-jY=9Ss&LRnZYv;j`pB?%_CqD=L*nbx9gr}2buU$z-NV?v z73�)Sz6mJW!>kChj#b<~veXm3O2XO4PvyMcuccJ+f(mu5UfqaDk#8YAB;Yt)?2h zNUb^8Fcc1I!mVK{`eAQL%Z&wG3=Tz_l>dLnShK>F2Q=h52!|Yo7Xbv?VXJjc%lJ2-_1k~r*?u?Np$^>Sf1(hR84PYC z@zn29hf+nx3B(6#iwBmfsUv|CWUIdz<$+!*Y+iBh)ZMTKc2^rEsMf&JzzJi4S!bQ< zJh<$OAIJEiiP`uux5U*40OoHcGEifv1K*u+oNBTCZO^tVVNKs>s+nioVYH*?iQZah zxPoWsDxVvCk|y-Ve|e>H&wqaIS2JskH{T^=4;i0%kJlc}k)-B07a5F3Ds8ap_n2e% z(Y!};RUE4;Kc74e$-45{6e|mi84p7RB=&VRJE9a#F*kutQ+`K)fR(p&G@ zb0RqJrG50+F&?L~`%e{kw$H+2gQUv_mhz;!+x7C<#(kOeQ9Ndh_n^3=|E3bwn0lu7 zqV&~pq~|gAHL-| z&z`#SxwqGqdyEIITIZ*?kke?q7z2M%Z!_d9dSgOw-_7NoF|ORRy$40tRUh|k--t-C z?-=U&5}*I7c4BnE$&a5Y+x0c7>45870O0Vi6G6K+4Lr!(brpKqwp-wWAkkny8?Fq`eRwUD~uwDs2RJ}ft}oLb^9xxZ4bkFeK%2y zeic>mJdv!WiD%6T)8->Y2QUe?tBcGj(X;(A6tCWTfF{pt)(5W*t`A-p)b>-Z?@~<% z>d_cymSPHcf)-NfM1FP2h-cfoG-^}F#zs6(98bRmrYZGX<3{9Y94Lmn&wLHz&z|EO zm^vY3=D3IE(bQ{(%F8H1hDXL_SdJ+cGG>MEeN^892(F)A-CCK1CSX@XBqk~M0yBnxHRP)zxylG2A#+GFt!j@-| zFC9nK&CHWBnc0WPdKNVK}6)#*tng5h=;SgmWta_dvOsPX~rg0}` zkMuONiO?AhA2Lu?AL7LvGd|$9K10x#1auUTS&^Wr?t`ql%She+OnHha@M>1zToQNy z0!P1n^qa;g(oIz--r<)0AS?MtjNSB>jH+Ll0(WHvUL=95G6Fv|1#ZX+e4hjsLm+(# zDwwXKAKEdPC2lk2d#Q;{Uwn?_CqP~uz|&pre+J8l{pylqc&48uVff$}3{JmAB7@8R z4LOa~NH9JP^yqWx$Em0v($Ay#$-BM@V8VT?!nTwt!^+@xXu%}?by9Z6AMk|4x&STf zF`tm0@lVKmA!JV7MSR{NX?Nxc={7cJ(uXna881U|c7pp24HZnyQ!TUHCo}6y<2w*` zp69-a%$E82P6*RHSLfMtbNN&wZYyXa%C?kIVLm@s{zd&S+V%T{{$L+GdiQW$wO&5e zbNAD;MyQR-Faci5*My$!C#X{W2P!PHpV`hke@{(E)5cws6h2_EI+4?cH+R}N7v-q~ ztysZ`X=6P)Y`$q@EpRz)VD7L@8_%NN7-pAHdFV6`qcKcdyct_2dMFxq&9FwNDKml$(+!y=}pTsM$> z|A8{TGfN%cpH+r+qdL$~VnK$`aXww5FuprUO;iUyi@gt?F?^{%3R7Y7HR+QmN~{wg zKhH^iw<&M@gj@F76ZBlWCjA`HtO;T_qz=Z*c$xig!7=d?TMLw6e>~`VdLmW(1h!_L zZC{3_roqjq-O0w(AC1rd4u)^rxEQLX zi`T#_UO9rq{!mRF4!qEmI%yPfqoJ=B@0GARNYRt_SX1gqQ|hpB4;4u0!1X0Zckz8Y z8sy%iuNv=D%HXmeQH#`2oJ@Mnc!s;;m~p?Y^6)?H2OCrWNn66E!8wmi;9KqaPk^=r zQ>PnKCz|HHNiPG`r%o3cAAcJPx4*3`fmh^w+mw2*DRrVQbu2hG{g-P0{sMK$tG!21 zu@YG^EQ~Du=bim<1L=bVqIgGL$XddkI5bQ8z%uJu`Z@i4m&Z(z)=80oIeXFvly3+4g=C4rL6)Rb*R3d7} zYqJ7n!Lqgpl(yik6yAM({}^IpcSAD{i+7k4>}#Q%?8lDfP2un6g(hloK}JkW66Cx zXdhO(FM}%BPQMSj0dyVm_kebR_JQ_+?grfndK~m+qFC?xNk5+Nv>~K0-6X8w#x<;9 zi??9rl!+xn1rxo5(@VKsu<;@xLnObvd6q)*8;*>PZGcV8?Oow6yWBH*b4ee&Y{t?H z7nRSJ`Rfqb@z&T_2>~LI-fQtU1pHFM>fGMV?h;;}4t6ha-YP5I-s^zl6&$;Rqa1!|xCAcM2F*&KN9iZ-3#n(7+g_jo@zzbSwrn)1o|$>O!I5#^xsO znTcQd1qSg<(?8~SeC0^@BJVq(#ovU3m%F`p7A|*}4HhkTD|ZwJ-4(aF>fQeS2@UR= z!q_CYA4t%xKmwA>-6ai^xy`M}s>08mR3HLP|9$v-5ZKEwwD@XM_dk&CJ4yFo@p5;? z9j>6;f7^thySjhkEIh)#m0;9=cFlVX>|!>~w~XQ+FMO`OIS1z8>) zoLGaLn}+yPGy6?!?))o?WAd!g?=iJVyjfIS+Kmp(1GfJ>$nxo+go2dA^u+52aSmbX z=X{TFEY{YXmv&;6#Cf+!$I#`xthcHC|L#|QSDmZzCDGo81wA3?1aa7VmY^31x>(Q^ zf?g?ThoGATy-m=21bs-*J%Sz-^d&(L3wlD(2{fr8oF(W5f-V+xg`igo+9BvBL2ncE z9zh=xbdR711${}-!-Ad=bb{z$XXSP@)2t8uE5GNE8Sq8YB}&EGHY{R#m5cESk$?We zi+ed6xFt~S^HX^}`@CCPDVmv=Ea9_{!9 zCdaKEpU7l?w&NvCjsrV>29x8>j!$B8T-x!;nfb|%PhrEN-`er1Ov%%JMfl#-pBMKq zIp5j!c-g3!2km%i<{p6^pT@iuR>X`KF?4S0B2S1E;R!D1Rco#yb|#basU1Iy)qGO1 zLOfoCSuNi!1(@2`=Nq7 z{p4)k5Yxx?w+jWH+dr3aJ>&aT3-CNck;M z0u(lY&NidA-9!b{Dy;`KXKg6 zhR!z)l>VVJ%6#=zI6l4~&UcUx0;m2d*Wq$Kd!4{XM7c17hpi5Jz65+0CMCJfm+Q-K zJIMdD1O6Wl_+#kL)LtXvc_$w~uRF;9$pN2?3g+|MTnD@g3+ie3K3MK2gd5nWAW!`& zcl=)Npy!(o_{$FXX$O2d{E+WH$weHO)@A7i;IlB^<-SVReG~U*R!+vg1Dxii%zzgO zbNGBUgQ?E%{Jn$x1l}&viY&c|<0yBI ziA6-xQV00~;AE%Vm-2T$$n&6s{4)+X9r`JvEGv1}LB5pF16D~h9^p9pxv(G89S^+% zZx$Oqde1{)yMvyGfaj~%lMeE~0!|+R=7#ryE4d)}$=FEJc$e$93L!HKcs}{1z-8aF zsiRvCzHm}OeMbBT2YNR zym}}Wj?}YoLQm?w9S~>PYgC%vO&54#ktA+f;Bv~wu6SFhOKaETiKG_l-NM50?w+oQ z9%=Voym-mt{6bm>Y|%oAL};rPiRp>0tRoTXj%e+@-Q8P}#lrDRQ8rOcTd^j%s$Q#K zT}QXPG+b}h>Qw=%b!(Vb_vzKaRgJYsqbg@Ix7z`JPb}lID^{#%smJZ7;PR$=XvJ+H zaj~nWhTj-5FN8pY{lsdy`$~r)x!#_K+URUYHrD<8QzClym9G zX0s0$P_)J?a3iKY8q<1{k#_S&%(!BC`v)rNET9%g4UsV2CnI~!dq?7ejXj%rtH+MP z3*#ydkMLV-=!_rjI+?9X!ld!H-)d^IH*)wrE5{3Tx%%3Zajg^gnCNn#7z$PVI#a#Q z>aOx7A{{>GD}eIGRE|=*g643~D@QWV%`RJ2=*pAGlGD`!0o;RXlw)?2xH6TM#pNbh zAAZlxyi1i$7u|N{xE8D2+!-=&BigPjj=zwGTV%M)m8-F}ahyheF)UY(t~v@#3^9J4 zELRM7=;LV_A?_Uc=2$Ihlw{gK>20|MlHTo4sV4{bt{| zd!Kgs00ynFCg%#HO)h(5E~i#B(CA8^UHZdbQnk7jcC@yPZ%kC@uU_x86;7Aw@W{Z_ zXI{=Dhm2E;K1%Zh-Tup|kk*E4wC0>GE&}EVkUjQ`yVT)rCZK$NIWU~;<&Oq3;cuU8 zv$srb%K1E-r%I03hwVTkd8Z7+lQl3Tm=P#dV8 zFlncZMd<*#hxu@(AMxQT=zKl2QE(e$y}q{IDE|8nob>yM>kK73nXi3o4Ejupi>^Ec zr`>eKZeuj0B_drR${=DrT{`oT!n{l z%?$EAwxsg>NF;Mv87E5HYitoR`Q`g=Nfo471Gcrc5CCV*uM0yYEw@S2yGeVf1B)Zx zxU^rsKbKUl>s=xnwga}X8XTQz$^642BIyoMAhvP5?lQl8KX4^*dbc3+%lGk;%5yV_ z@Ibz{hU>u4nUu^g-`h*tCWNK^QclwAkxpk^l9%uIB^?#{$$qj^+Am;sBO+8qnO~j* zNIEJEmgUR*vi{pd{^dfUJTH(`p8HXL%9ESle2;7XA4H@=zNe5>o)1zQ1<@QPgWnYX z$V93ig<-KtlXQcun3;@s17?u)Zm`z;@|;3aX|KqZv0vim`{r!<@;#uW56FUY%9Z-Q zkyE}r_mC9ZPFu*W|F=bcSxxy~RMMfG4wqvNdn_k^&s?)ONq5>xAMgJsbMnjc7D?&< z+pz}eH;Fxq2$`4>lP|^ueN+kxno}M23UD|6sBcq{@5kl;_aytNnVRi?(vIIE!Gk}U zU!L<+f6~k$<(%@_O%mx7=Sh7czgIX$_HUVAw&M=u zv6e5-mxg?1fjv16lldh*1L@ZMnfGRXGryDn%vAUenMs$dzan0=mx=uRdoL*rs#xL_ zoi553;+a&LKlhl0Y^7kOnZ9Et@n2QiFV6MP0lE->vfi>@G`^(mJfry8AYN2&$QgjL WTq#TMobu%#t~Vvl$;ptzvi||gi*Q>2