From c108303ba303765ae0c412bf5effcf2f9245c292 Mon Sep 17 00:00:00 2001
From: Tristan Krause <tristan.krause@stud.htwk-leipzig.de>
Date: Tue, 26 Mar 2019 11:35:20 +0100
Subject: [PATCH] echo befehl funktioniert

---
 Makefile              |   1 -
 drv/.b15f.cpp.swp     | Bin 1024 -> 0 bytes
 drv/b15f.cpp          |  41 ++++++++++++++++++++++++++++++++++++++++-
 drv/b15f.h            |  25 +++++++++++++++++++++++++
 drv/b15f.o            | Bin 3824 -> 13096 bytes
 drv/driverexception.h |  32 ++++++++++++++++++++++++++++++++
 main                  | Bin 13496 -> 20368 bytes
 main.cpp              |   2 +-
 main.o                | Bin 2800 -> 2800 bytes
 9 files changed, 98 insertions(+), 3 deletions(-)
 delete mode 100644 drv/.b15f.cpp.swp
 create mode 100644 drv/driverexception.h

diff --git a/Makefile b/Makefile
index 4eaeee4..d84f459 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,6 @@ CFLAGS  = -std=c++14 -O3
 LDFLAGS = 
 OBJECTS = main.o drv/b15f.o
 
-
 COMPILE = $(COMPILER_PATH) $(CFLAGS)
 
 B15F: $(OBJECTS)
diff --git a/drv/.b15f.cpp.swp b/drv/.b15f.cpp.swp
deleted file mode 100644
index f73c26c4a67e4d0f0c45d206a35b41fb22e39c9b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1024
zcmYc?$V<%2S1{7E)H7y40?DEb3~7nEr8%X=NTS%8i7AN|*kw>f^)vEwQ}v;y>bvA;
wm*%GCm89xB8JfE3x&(#krxcaxCmEWi=_MBwplTiEjfTKz2v8mZq3A{c0Gg^7-v9sr

diff --git a/drv/b15f.cpp b/drv/b15f.cpp
index cadbe43..a6ace00 100644
--- a/drv/b15f.cpp
+++ b/drv/b15f.cpp
@@ -8,9 +8,48 @@ B15F::B15F()
 
 void B15F::init(void)
 {
-	std::cout << "moint: " << std::endl;
+	int code = system(std::string("stty 38400 -F " + SERIAL_DEVICE).c_str());
+	if(code)
+	{
+		throw DriverException("Konnte serielle Verbindung nicht initialisieren. Ist der Adapter angeschlossen?");
+	}
+	
+	usart.open(SERIAL_DEVICE.c_str());
+	
+	if(!testConnection())
+	{
+		throw DriverException("Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?");
+	}
 }
 
+bool B15F::testConnection(void)
+{
+	srand (time(NULL));
+	uint8_t dummy = rand() % 256;
+	writeByte(0); // echo / dummy command for testing
+	writeByte(dummy);
+	
+	uint8_t aw = readByte();
+	uint8_t mirror = readByte();
+	
+	return aw == MSG_OK && mirror == dummy;
+}
+
+void B15F::writeByte(uint8_t b)
+{
+	usart.put(b);
+}
+
+uint8_t B15F::readByte()
+{
+	char b;
+	while(1)
+	{
+		if (usart.get(b))
+			return static_cast<uint8_t>(b);
+	}
+}
+	
 B15F& B15F::getInstance(void)
 {
 	if(!instance)
diff --git a/drv/b15f.h b/drv/b15f.h
index 82df289..bd50299 100644
--- a/drv/b15f.h
+++ b/drv/b15f.h
@@ -2,6 +2,20 @@
 #define B15F_h
 
 #include <iostream>
+#include <bits/stdc++.h>
+#include <string>
+#include <fstream>
+#include <cstdlib>
+#include <cstdint>
+
+/*#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <termios.h>*/
+
+#include "driverexception.h"
+
 
 class B15F
 {
@@ -9,10 +23,21 @@ private:
 	B15F(void); // privater Konstruktor
 public:
 	void init(void);
+	bool testConnection(void);
+	void writeByte(uint8_t);
+	uint8_t readByte(void);
+	
 	static B15F& getInstance(void);
 
 private:
+	std::fstream usart; 
+
 	static B15F* instance;
+
+// CONSTANTS
+	const std::string SERIAL_DEVICE = "/dev/ttyUSB0";
+	constexpr static uint8_t MSG_OK = 0xFF;
+	constexpr static uint8_t MSG_FAIL = 0xFE;
 };
 
 #endif // B15F_h
diff --git a/drv/b15f.o b/drv/b15f.o
index 66aeb6e252dc85faa03a6349f09b13bcdd3eeb19..b886f7c70c229a0605ee9b613c1439c9d5d1fffa 100644
GIT binary patch
literal 13096
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
J>e^o~|9{UQ`7;0j

literal 3824
zcmb`JO>7%Q6vxMLKSF4ewB@q}Vv0cJqbqNdw4n&(Hg)Q#AuVwtRjJfry<XQAu{YWs
z(*&wgspJq<g-CEfDndmSM>ugnJ(Q0iA#v)R1J@up1oetk-hXypyxrKGc+%{=`OW*9
z+1ar_$WM%QrBZ?=CEgIN5mO<uJuN+_)tuNPc5B;httoMDwQnFNDpudXhnf}(*N34L
zuD_1%_I7%#K`UI_s=MotMx)$X;o9e2>zG;kO-)^Se?+MLeRsl9<Efp_6_$Vb1NIe;
zUs(R#gi9BqP<K#i;aV<Rc=fLOiRSO$?Yp!7=Xcs{h0`wmptjswt*jKT{?+|G792%c
zj*7babN4FJ2(i4rTK8)Wbu^=gybidTyn0<GH!qg_b(xWmex4j1J(@W%Q))I;Gjqfm
zw6X^e9ck*Jec2wdvO_OMIP!VKxTfBl5~+p$)V>|tyH}{re&SD=xwPrQvPSPRJ#0=G
z{bTgUdi$?-bxrp4cE9y74H3T#PVy2S)4lyOz1^B$!kEOu<5X||dE%V}Ten60eZSp&
zT5vTF&Zfzuouq}{{Y_J85kFzA>9oLU+AL|Yxn3NKt{B&ABlZfl6y;@)_}Nd3*rAW5
zNsFDaQA<sW-qyfquj#&1ojW$!1Ekx0fjQ#)WBb7G{v7e$v3=$puXf-~!*OOH`fO0Y
zM2#6Z3+CJLuR8F19XJk1yEr?|nWpIn#OlDuh-1AsjkP|zq(4b*SM2=o`#j$vPPqfW
z)Pa8r&YNp;qx-Uhy(rnk70aEU7xLu9>Ep*Hqzs!SIWFbw<j`?@cx<HB2$j=ty}XdK
zMKv)ZWsNSHniAH;XqMRIsiGQo)#AK2?&e3zzPwl~dyTw{DIH<-Q2yQ4z>W=u5J!)T
zYRL7QYNLqLV`Ihqw46S6d?GJ(V*9X^ey9S^sY@!!3)Hw<RJQF_oj|I<si~0i=ckAb
zmYlHWvh_HH$;y23usn0BI4I{(O3@#jZ>p%qqCZ@jYlhXRuJ~f?LHTC18p^m)C<;;4
zz`rO<PFcE6s9LMD?F*h7=M4jIT&(MaYNY0e<Pmy9;}mPuY(p`@PiQX7p)adWqdeyc
zDcuD}I?7w1EsyR)yidGheBJ-tk7OSp2{`Ud=FbC?;3j*F8gtwykfi-!gg5b-4t&;d
z#DAO`$49LYaGZJOmjOwT7vCB48-OIR-%E}8EkF|3<F|tOZ9o#(KTVDKkANgedpE+`
z{t43Ap6@5vBNiHjZ#;~jp~m)mFiC>%d4L*o)C@tK3^nG@k`776=lcNhVZ-*Yg`}v(
zZ{rLg3F2(kTJ#t)Iyf3j!6?l6PQ!f*VSZDOgt%gQ@OWNfg^P9Nl&Duh)K^&xygA3B
zgGpCG*-?(LN?|B8u>Rv(umT^}h-X{2ur{I)aRSwxHwd4cbb`QH6qf7P>t2KMG<@Y*
zCnskPlCArWvGl645;%2FSQi4H{QnR6nu6?V6DVgG-`m(%G(I=nXNch)CjSwfAqM$1
z>NcK;5f^;Vh?R>&(!0&eIfLLN@WVUfdT_QOFHnOCpKmb8UgH;yTF)fL{eYNB|BNww
zsO73P&d=B;1*Y3jTuj(M88^B9De{5;p_nh!=S==&K7+Ln>?+iBehgxgHHQ4Zil>tK
z9hzvj|7T6&72^m$Ag+h^e~}peWhK}7w#m=-WTJ(~+~fXimw(L|a319Ep~im9mxv)%
zmRek@CjZNENV>rr{YNntH~oYS<FJkGEyEJ8Uwmf#dH*;J*U#fGNNKlzVGiDcF~s_@
z&+O0ZN19}AxEwGrYhDb#al}aaBTe$%5fW$3<@-%y9}+`-ceL|gF!g_nU@=Mh{|h(6
B<S_sM

diff --git a/drv/driverexception.h b/drv/driverexception.h
new file mode 100644
index 0000000..8352fd4
--- /dev/null
+++ b/drv/driverexception.h
@@ -0,0 +1,32 @@
+#ifndef DRIVEREXCEPTION_H
+#define DRIVEREXCEPTION_H
+
+#include <exception>
+
+// SOURCE: https://stackoverflow.com/a/8152888
+
+class DriverException: public std::exception
+{
+public:
+	explicit DriverException(const char* message) : msg_(message)
+	{
+      	}
+
+	explicit DriverException(const std::string& message) : msg_(message)
+	{
+	}
+
+    	virtual ~DriverException() throw ()
+	{
+	}
+
+	virtual const char* what() const throw ()
+	{
+		return msg_.c_str();
+	}
+
+protected:
+	std::string msg_;
+};
+
+#endif
diff --git a/main b/main
index 2ab378baab3c4d42130b3922571cf8ba4658993b..e128c81e1bab68060c737aff2445a404cad507ef 100755
GIT binary patch
literal 20368
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
VE@QO!RxbZND@}>BY#D5<@_%3ulJfun

literal 13496
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
IMV<Qp0x>6prvLx|

diff --git a/main.cpp b/main.cpp
index 572f019..1a09eaf 100644
--- a/main.cpp
+++ b/main.cpp
@@ -5,5 +5,5 @@ int main()
 {
 	B15F& drv = B15F::getInstance();
 	drv.init();
-	std::cout << "heelol" << std::endl;
+	std::cout << "Schluss." << std::endl;
 }
diff --git a/main.o b/main.o
index edd7a31e2b043a2ee4e8bcdbfae22d922245a1ee..1045739d7d7620c0e9671f6c6cbf23d9e7601d31 100644
GIT binary patch
delta 31
ncmew$`ayJp14nRjMowvQvED=v4MvWQh4a}NIX4S(+-Cv+x^xPE

delta 31
ncmew$`ayJp14l+`YEFI*1H(iQ4Mw(&h4a}N**6Pv+-Cv+uoDU4