diff --git a/drv/b15f.cpp b/drv/b15f.cpp index a11139d..2071a06 100644 --- a/drv/b15f.cpp +++ b/drv/b15f.cpp @@ -35,17 +35,26 @@ void B15F::init() // Verbindungstest muss dreimal erfolgreich sein std::cout << PRE << "Teste Verbindung... " << std::flush; for(uint8_t i = 0; i < 3; i++) - { if(!testConnection()) - { throw DriverException("Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?"); - } - } std::cout << "OK" << std::endl; - std::cout << "int: " << testIntConv() << std::endl; - std::cout << "int: " << testIntConv() << std::endl; - std::cout << "int: " << testIntConv() << std::endl; + + std::cout << PRE << "Teste Integer Konvertierung... " << std::flush; + for(uint8_t i = 0; i < 3; i++) + if(!testIntConv()) + throw DriverException("Konvertierung fehlgeschlagen."); + std::cout << "OK" << std::endl; + + while(1) + { + for(uint16_t i = 0; i < 1024; ) + { + i = analogeEingabe(0); + analogeAusgabe0(i); + delay(0); + } + } } @@ -86,6 +95,65 @@ bool B15F::testIntConv() return aw == dummy * 3; } + + +bool B15F::digitaleAusgabe0(uint8_t port) +{ + writeByte(RQ_BA0); + writeByte(port); + + uint8_t aw = readByte(); + return aw == MSG_OK; +} + +bool B15F::digitaleAusgabe1(uint8_t port) +{ + writeByte(RQ_BA1); + writeByte(port); + + uint8_t aw = readByte(); + return aw == MSG_OK; +} + +uint8_t B15F::digitaleEingabe0() +{ + writeByte(RQ_BE0); + return readByte(); +} + +uint8_t B15F::digitaleEingabe1() +{ + writeByte(RQ_BE1); + return readByte(); +} + +bool B15F::analogeAusgabe0(uint16_t value) +{ + writeByte(RQ_AA0); + writeInt(value); + + uint8_t aw = readByte(); + return aw == MSG_OK; +} + +bool B15F::analogeAusgabe1(uint16_t value) +{ + writeByte(RQ_AA1); + writeInt(value); + + uint8_t aw = readByte(); + return aw == MSG_OK; +} + +uint16_t B15F::analogeEingabe(uint8_t channel) +{ + writeByte(RQ_ADC); + writeByte(channel); + return readInt(); +} + + + void B15F::writeByte(uint8_t b) { if(write(usart, &b, 1) != 1) @@ -109,13 +177,6 @@ uint8_t B15F::readByte() int n = read(usart, &b, 1); if (n > 0) return static_cast(b); - /*else if(n < -1) - { - std::string msg = "Fehler bei der seriellen Verbindung. (Code: "; - msg += std::to_string(n); - msg += ")"; - throw DriverException(msg); - }*/ end = std::chrono::steady_clock::now(); elapsed = std::chrono::duration_cast(end - start).count(); diff --git a/drv/b15f.h b/drv/b15f.h index 7c71e0b..cac39ff 100644 --- a/drv/b15f.h +++ b/drv/b15f.h @@ -19,18 +19,30 @@ class B15F private: B15F(void); // privater Konstruktor public: + // Grundfunktionen void init(void); void discard(void); bool testConnection(void); bool testIntConv(void); + // Board Befehle + inline bool digitaleAusgabe0(uint8_t); + inline bool digitaleAusgabe1(uint8_t); + inline uint8_t digitaleEingabe0(void); + inline uint8_t digitaleEingabe1(void); + inline bool analogeAusgabe0(uint16_t); + inline bool analogeAusgabe1(uint16_t); + inline uint16_t analogeEingabe(uint8_t); + + // Serielle Verbindung inline void writeByte(uint8_t); inline void writeInt(uint16_t); inline uint8_t readByte(void); inline uint16_t readInt(void); - void delay(uint16_t); + void delay(uint16_t); + static B15F& getInstance(void); private: @@ -40,17 +52,24 @@ private: static B15F* instance; -// CONSTANTS + // CONSTANTS const std::string PRE = "[B15F] "; const std::string SERIAL_DEVICE = "/dev/ttyUSB0"; constexpr static uint8_t MSG_OK = 0xFF; constexpr static uint8_t MSG_FAIL = 0xFE; -// REQUESTS + // 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; + constexpr static uint8_t RQ_BA0 = 5; + constexpr static uint8_t RQ_BA1 = 6; + constexpr static uint8_t RQ_BE0 = 7; + constexpr static uint8_t RQ_BE1 = 8; + constexpr static uint8_t RQ_AA0 = 9; + constexpr static uint8_t RQ_AA1 = 10; + constexpr static uint8_t RQ_ADC = 11; }; #endif // B15F_h diff --git a/drv/b15f.o b/drv/b15f.o index 1d44b6d..3e4a43e 100644 Binary files a/drv/b15f.o and b/drv/b15f.o differ diff --git a/main b/main index 064be73..275fed1 100755 Binary files a/main and b/main differ