From 2e88b9c9806ba44b0ec58449e2c91cba9ebb60b9 Mon Sep 17 00:00:00 2001
From: Tristan Krause <tristan.krause@stud.htwk-leipzig.de>
Date: Wed, 29 May 2019 10:13:36 +0200
Subject: [PATCH] remote set and get register by address

---
 control/examples/register/Makefile            |   30 +
 control/examples/register/main.cpp            |   35 +
 control/src/drv/b15f.cpp                      |   40 +
 control/src/drv/b15f.h                        |   24 +-
 docs/atmegaiom1284p.h                         | 1219 +++++++++++++++++
 docs/html/annotated.html                      |    2 +-
 docs/html/b15f_8cpp_source.html               |   28 +-
 docs/html/b15f_8h_source.html                 |   32 +-
 docs/html/classB15F-members.html              |   24 +-
 docs/html/classB15F.html                      |   95 +-
 docs/html/classDot-members.html               |    2 +-
 docs/html/classDot.html                       |    2 +-
 docs/html/classDriverException-members.html   |    2 +-
 docs/html/classDriverException.html           |    2 +-
 docs/html/classPlottyFile-members.html        |    2 +-
 docs/html/classPlottyFile.html                |    2 +-
 docs/html/classTimeoutException-members.html  |    2 +-
 docs/html/classTimeoutException.html          |    2 +-
 docs/html/classUSART-members.html             |    2 +-
 docs/html/classUSART.html                     |    2 +-
 docs/html/classUSARTException-members.html    |    2 +-
 docs/html/classUSARTException.html            |    2 +-
 docs/html/classView-members.html              |    2 +-
 docs/html/classView.html                      |    2 +-
 docs/html/classViewInfo-members.html          |    2 +-
 docs/html/classViewInfo.html                  |    2 +-
 docs/html/classViewMonitor-members.html       |    2 +-
 docs/html/classViewMonitor.html               |    2 +-
 docs/html/classViewPromt-members.html         |    2 +-
 docs/html/classViewPromt.html                 |    2 +-
 docs/html/classViewSelection-members.html     |    2 +-
 docs/html/classViewSelection.html             |    2 +-
 docs/html/classes.html                        |    2 +-
 docs/html/cli_8cpp_source.html                |    6 +-
 .../dir_1788f8309b1a812dcb800a185471cf6c.html |    2 +-
 .../dir_587c94d866dbb2f408f78cf41f9b2f8d.html |    2 +-
 docs/html/dot_8cpp_source.html                |    2 +-
 docs/html/dot_8h_source.html                  |    2 +-
 docs/html/driverexception_8h_source.html      |    2 +-
 docs/html/files.html                          |    2 +-
 docs/html/functions.html                      |    8 +-
 docs/html/functions_func.html                 |    8 +-
 docs/html/functions_vars.html                 |    2 +-
 docs/html/hierarchy.html                      |    2 +-
 docs/html/index.html                          |    2 +-
 docs/html/plottyfile_8cpp_source.html         |    2 +-
 docs/html/plottyfile_8h_source.html           |    2 +-
 docs/html/search/all_6.js                     |    1 +
 docs/html/search/all_b.js                     |    1 +
 docs/html/search/functions_5.js               |    1 +
 docs/html/search/functions_9.js               |    1 +
 docs/html/timeoutexception_8h_source.html     |    2 +-
 docs/html/ui_8cpp_source.html                 |    8 +-
 docs/html/ui_8h_source.html                   |    2 +-
 docs/html/usart_8cpp_source.html              |    2 +-
 docs/html/usart_8h_source.html                |    2 +-
 docs/html/usartexception_8h_source.html       |    2 +-
 docs/html/view_8cpp_source.html               |    4 +-
 docs/html/view_8h_source.html                 |    2 +-
 docs/html/view__info_8cpp_source.html         |    2 +-
 docs/html/view__info_8h_source.html           |    2 +-
 docs/html/view__monitor_8cpp_source.html      |    8 +-
 docs/html/view__monitor_8h_source.html        |    2 +-
 docs/html/view__promt_8cpp_source.html        |    2 +-
 docs/html/view__promt_8h_source.html          |    2 +-
 docs/html/view__selection_8cpp_source.html    |    2 +-
 docs/html/view__selection_8h_source.html      |    2 +-
 firmware/requests.cpp                         |   29 +
 firmware/requests.h                           |   14 +-
 69 files changed, 1595 insertions(+), 117 deletions(-)
 create mode 100644 control/examples/register/Makefile
 create mode 100644 control/examples/register/main.cpp
 create mode 100644 docs/atmegaiom1284p.h

diff --git a/control/examples/register/Makefile b/control/examples/register/Makefile
new file mode 100644
index 0000000..8000d6e
--- /dev/null
+++ b/control/examples/register/Makefile
@@ -0,0 +1,30 @@
+# Name: Makefile
+# Project: B15F (board15 Famulus Edition)
+# Author: Tristan Krause
+# Creation Date: 2019-05-15
+
+# Environment
+COMPILER_PATH = g++
+
+# Options
+CFLAGS   = -std=c++17 -O3 -Wall -Wextra
+LDFLAGS  = -lb15fdrv
+OBJECTS  = main.o
+OUT      = main.elf
+
+COMPILE = $(COMPILER_PATH) $(CFLAGS)
+
+main: $(OBJECTS)
+	$(COMPILE) $(OBJECTS) -o $(OUT) $(LDFLAGS)
+
+help:
+	@echo "This Makefile has the following targets:"
+	@echo "make main .... to compile"
+	@echo "make clean ... to delete objects and executables"
+	
+clean:
+	@echo "Cleaning..."
+	rm -f $(OBJECTS) $(OUT) *.bin gnuplotscript.gp
+
+.cpp.o:
+	$(COMPILE) -c $< -o $@
diff --git a/control/examples/register/main.cpp b/control/examples/register/main.cpp
new file mode 100644
index 0000000..27a15ba
--- /dev/null
+++ b/control/examples/register/main.cpp
@@ -0,0 +1,35 @@
+#include <iostream>
+#include <cmath>
+#include <b15f/b15f.h>
+#include <b15f/plottyfile.h>
+
+const char PLOT_FILE[] = "plot.bin";
+
+constexpr uint8_t SFR_OFFSET = 0x20;
+constexpr uint8_t SFR_DDRB = 0x04;
+constexpr uint8_t SFR_WDTCSR = 0x60;
+constexpr uint8_t SFR_PORTB = 0x05;
+
+/*
+ * Dieses Beispiel erzeugt einen 300ms langen Impuls an PB0.
+ * 
+ */
+int main()
+{
+	uint8_t DDRB, PORTB;
+	B15F& drv = B15F::getInstance();
+    
+    DDRB = drv.getRegister(SFR_DDRB + SFR_OFFSET);    
+    DDRB |= (1<<0);
+    drv.setRegister(SFR_DDRB + SFR_OFFSET, DDRB);
+    
+    PORTB = drv.getRegister(SFR_PORTB + SFR_OFFSET);
+    PORTB |= (1<<0);
+    drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB);
+    
+    drv.delay_ms(300);
+    
+    PORTB = drv.getRegister(SFR_PORTB + SFR_OFFSET);
+    PORTB &= ~(1<<0);
+    drv.setRegister(SFR_PORTB + SFR_OFFSET, PORTB);
+}
diff --git a/control/src/drv/b15f.cpp b/control/src/drv/b15f.cpp
index 56cb2ed..0c1f736 100644
--- a/control/src/drv/b15f.cpp
+++ b/control/src/drv/b15f.cpp
@@ -330,6 +330,46 @@ bool B15F::pwmSetValue(uint8_t value)
     return aw == MSG_OK;
 }
 
+bool B15F::setRegister(uint8_t adr, uint8_t val)
+{
+    usart.clearInputBuffer();
+
+    uint8_t rq[] =
+    {
+        RQ_SET_REG,
+        adr,
+        val
+    };
+
+    int n_sent = usart.write_timeout(&rq[0], 0, sizeof(rq), 1000);
+    if(n_sent != sizeof(rq))
+        abort("Sent failed");
+
+    uint8_t byte = usart.readByte();
+    delay_us(10);
+    return byte == val;
+}
+
+uint8_t B15F::getRegister(uint8_t adr)
+{
+    usart.clearInputBuffer();
+
+    uint8_t rq[] =
+    {
+        RQ_GET_REG,
+        adr
+    };
+
+    int n_sent = usart.write_timeout(&rq[0], 0, sizeof(rq), 1000);
+    if(n_sent != sizeof(rq))
+        abort("Sent failed");
+
+    uint8_t aw = usart.readByte();
+    delay_us(10);
+    return aw;
+}
+
+
 void B15F::delay_ms(uint16_t ms)
 {
     std::this_thread::sleep_for(std::chrono::milliseconds(ms));
diff --git a/control/src/drv/b15f.h b/control/src/drv/b15f.h
index 1b011ea..bedca64 100644
--- a/control/src/drv/b15f.h
+++ b/control/src/drv/b15f.h
@@ -210,6 +210,22 @@ public:
      */
     bool pwmSetValue(uint8_t value);
 
+    /**
+     * Setzt direkt den Wert eines MCU Registers.
+     * *Wichtig:* bei einer falschen Adresse kann das Board 15 ernsthaften Schaden nehmen!
+     * \param adr Speicheradresse des Registers
+     * \param val Neuer Wert für das Register
+     * \throws DriverException
+     */
+    bool setRegister(uint8_t adr, uint8_t val);
+
+    /**
+     * Liefert den Wert eines MCU Registers.
+     * \param adr Speicheradresse des Registers
+     * \throws DriverException
+     */
+    uint8_t getRegister(uint8_t adr);
+
     /*************************/
 
 
@@ -248,9 +264,11 @@ private:
     constexpr static uint8_t RQ_AA0  = 10;
     constexpr static uint8_t RQ_AA1  = 11;
     constexpr static uint8_t RQ_ADC  = 12;
-    constexpr static uint8_t RQ_ADC_DAC_STROKE  = 13;
-    constexpr static uint8_t RQ_PWM_SET_FREQ    = 14;
-    constexpr static uint8_t RQ_PWM_SET_VALUE   = 15;
+    constexpr static uint8_t RQ_ADC_DAC_STROKE = 13;
+    constexpr static uint8_t RQ_PWM_SET_FREQ   = 14;
+    constexpr static uint8_t RQ_PWM_SET_VALUE  = 15;
+    constexpr static uint8_t RQ_SET_REG        = 16;
+    constexpr static uint8_t RQ_GET_REG        = 17;
 };
 
 #endif // B15F_H
diff --git a/docs/atmegaiom1284p.h b/docs/atmegaiom1284p.h
new file mode 100644
index 0000000..905029d
--- /dev/null
+++ b/docs/atmegaiom1284p.h
@@ -0,0 +1,1219 @@
+/* Copyright (c) 2007 Atmel Corporation
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE. 
+*/
+
+/* $Id: iom1284p.h 2225 2011-03-02 16:27:26Z arcanum $ */
+
+/* avr/iom1284p.h - definitions for ATmega1284P. */
+
+/* This file should only be included from <avr/io.h>, never directly. */
+
+#ifndef _AVR_IO_H_
+#  error "Include <avr/io.h> instead of this file."
+#endif
+
+#ifndef _AVR_IOXXX_H_
+#  define _AVR_IOXXX_H_ "iom1284p.h"
+#else
+#  error "Attempt to include more than one <avr/ioXXX.h> file."
+#endif 
+
+
+#ifndef _AVR_IOM1284P_H_
+#define _AVR_IOM1284P_H_ 1
+
+
+/* Registers and associated bit numbers */
+
+#define PINA _SFR_IO8(0x00)
+#define PINA0 0
+#define PINA1 1
+#define PINA2 2
+#define PINA3 3
+#define PINA4 4
+#define PINA5 5
+#define PINA6 6
+#define PINA7 7
+
+#define DDRA _SFR_IO8(0x01)
+#define DDA0 0
+#define DDA1 1
+#define DDA2 2
+#define DDA3 3
+#define DDA4 4
+#define DDA5 5
+#define DDA6 6
+#define DDA7 7
+
+#define PORTA _SFR_IO8(0x02)
+#define PORTA0 0
+#define PORTA1 1
+#define PORTA2 2
+#define PORTA3 3
+#define PORTA4 4
+#define PORTA5 5
+#define PORTA6 6
+#define PORTA7 7
+
+#define PINB _SFR_IO8(0x03)
+#define PINB0 0
+#define PINB1 1
+#define PINB2 2
+#define PINB3 3
+#define PINB4 4
+#define PINB5 5
+#define PINB6 6
+#define PINB7 7
+
+#define DDRB _SFR_IO8(0x04)
+#define DDB0 0
+#define DDB1 1
+#define DDB2 2
+#define DDB3 3
+#define DDB4 4
+#define DDB5 5
+#define DDB6 6
+#define DDB7 7
+
+#define PORTB _SFR_IO8(0x05)
+#define PORTB0 0
+#define PORTB1 1
+#define PORTB2 2
+#define PORTB3 3
+#define PORTB4 4
+#define PORTB5 5
+#define PORTB6 6
+#define PORTB7 7
+
+#define PINC _SFR_IO8(0x06)
+#define PINC0 0
+#define PINC1 1
+#define PINC2 2
+#define PINC3 3
+#define PINC4 4
+#define PINC5 5
+#define PINC6 6
+#define PINC7 7
+
+#define DDRC _SFR_IO8(0x07)
+#define DDC0 0
+#define DDC1 1
+#define DDC2 2
+#define DDC3 3
+#define DDC4 4
+#define DDC5 5
+#define DDC6 6
+#define DDC7 7
+
+#define PORTC _SFR_IO8(0x08)
+#define PORTC0 0
+#define PORTC1 1
+#define PORTC2 2
+#define PORTC3 3
+#define PORTC4 4
+#define PORTC5 5
+#define PORTC6 6
+#define PORTC7 7
+
+#define PIND _SFR_IO8(0x09)
+#define PIND0 0
+#define PIND1 1
+#define PIND2 2
+#define PIND3 3
+#define PIND4 4
+#define PIND5 5
+#define PIND6 6
+#define PIND7 7
+
+#define DDRD _SFR_IO8(0x0A)
+#define DDD0 0
+#define DDD1 1
+#define DDD2 2
+#define DDD3 3
+#define DDD4 4
+#define DDD5 5
+#define DDD6 6
+#define DDD7 7
+
+#define PORTD _SFR_IO8(0x0B)
+#define PORTD0 0
+#define PORTD1 1
+#define PORTD2 2
+#define PORTD3 3
+#define PORTD4 4
+#define PORTD5 5
+#define PORTD6 6
+#define PORTD7 7
+
+#define TIFR0 _SFR_IO8(0x15)
+#define TOV0 0
+#define OCF0A 1
+#define OCF0B 2
+
+#define TIFR1 _SFR_IO8(0x16)
+#define TOV1 0
+#define OCF1A 1
+#define OCF1B 2
+#define ICF1 5
+
+#define TIFR2 _SFR_IO8(0x17)
+#define TOV2 0
+#define OCF2A 1
+#define OCF2B 2
+
+#define TIFR3 _SFR_IO8(0x18)
+#define TOV3 0
+#define OCF3A 1
+#define OCF3B 2
+#define ICF3 5
+
+#define PCIFR _SFR_IO8(0x1B)
+#define PCIF0 0
+#define PCIF1 1
+#define PCIF2 2
+#define PCIF3 3
+
+#define EIFR _SFR_IO8(0x1C)
+#define INTF0 0
+#define INTF1 1
+#define INTF2 2
+
+#define EIMSK _SFR_IO8(0x1D)
+#define INT0 0
+#define INT1 1
+#define INT2 2
+
+#define GPIOR0 _SFR_IO8(0x1E)
+#define GPIOR00 0
+#define GPIOR01 1
+#define GPIOR02 2
+#define GPIOR03 3
+#define GPIOR04 4
+#define GPIOR05 5
+#define GPIOR06 6
+#define GPIOR07 7
+
+#define EECR _SFR_IO8(0x1F)
+#define EERE 0
+#define EEPE 1
+#define EEMPE 2
+#define EERIE 3
+#define EEPM0 4
+#define EEPM1 5
+
+#define EEDR _SFR_IO8(0x20)
+#define EEDR0 0
+#define EEDR1 1
+#define EEDR2 2
+#define EEDR3 3
+#define EEDR4 4
+#define EEDR5 5
+#define EEDR6 6
+#define EEDR7 7
+
+#define EEAR _SFR_IO16(0x21)
+
+#define EEARL _SFR_IO8(0x21)
+#define EEAR0 0
+#define EEAR1 1
+#define EEAR2 2
+#define EEAR3 3
+#define EEAR4 4
+#define EEAR5 5
+#define EEAR6 6
+#define EEAR7 7
+
+#define EEARH _SFR_IO8(0x22)
+#define EEAR8 0
+#define EEAR9 1
+#define EEAR10 2
+#define EEAR11 3
+
+#define GTCCR _SFR_IO8(0x23)
+#define PSRSYNC 0
+#define PSRASY 1
+#define TSM 7
+
+#define TCCR0A _SFR_IO8(0x24)
+#define WGM00 0
+#define WGM01 1
+#define COM0B0 4
+#define COM0B1 5
+#define COM0A0 6
+#define COM0A1 7
+
+#define TCCR0B _SFR_IO8(0x25)
+#define CS00 0
+#define CS01 1
+#define CS02 2
+#define WGM02 3
+#define FOC0B 6
+#define FOC0A 7
+
+#define TCNT0 _SFR_IO8(0x26)
+#define TCNT0_0 0
+#define TCNT0_1 1
+#define TCNT0_2 2
+#define TCNT0_3 3
+#define TCNT0_4 4
+#define TCNT0_5 5
+#define TCNT0_6 6
+#define TCNT0_7 7
+
+#define OCR0A _SFR_IO8(0x27)
+#define OCR0A_0 0
+#define OCR0A_1 1
+#define OCR0A_2 2
+#define OCR0A_3 3
+#define OCR0A_4 4
+#define OCR0A_5 5
+#define OCR0A_6 6
+#define OCR0A_7 7
+
+#define OCR0B _SFR_IO8(0x28)
+#define OCR0B_0 0
+#define OCR0B_1 1
+#define OCR0B_2 2
+#define OCR0B_3 3
+#define OCR0B_4 4
+#define OCR0B_5 5
+#define OCR0B_6 6
+#define OCR0B_7 7
+
+#define GPIOR1 _SFR_IO8(0x2A)
+#define GPIOR10 0
+#define GPIOR11 1
+#define GPIOR12 2
+#define GPIOR13 3
+#define GPIOR14 4
+#define GPIOR15 5
+#define GPIOR16 6
+#define GPIOR17 7
+
+#define GPIOR2 _SFR_IO8(0x2B)
+#define GPIOR20 0
+#define GPIOR21 1
+#define GPIOR22 2
+#define GPIOR23 3
+#define GPIOR24 4
+#define GPIOR25 5
+#define GPIOR26 6
+#define GPIOR27 7
+
+#define SPCR _SFR_IO8(0x2C)
+#define SPR0 0
+#define SPR1 1
+#define CPHA 2
+#define CPOL 3
+#define MSTR 4
+#define DORD 5
+#define SPE 6
+#define SPIE 7
+
+#define SPSR _SFR_IO8(0x2D)
+#define SPI2X 0
+#define WCOL 6
+#define SPIF 7
+
+#define SPDR _SFR_IO8(0x2E)
+#define SPDR0 0
+#define SPDR1 1
+#define SPDR2 2
+#define SPDR3 3
+#define SPDR4 4
+#define SPDR5 5
+#define SPDR6 6
+#define SPDR7 7
+
+#define ACSR _SFR_IO8(0x30)
+#define ACIS0 0
+#define ACIS1 1
+#define ACIC 2
+#define ACIE 3
+#define ACI 4
+#define ACO 5
+#define ACBG 6
+#define ACD 7
+
+#define OCDR _SFR_IO8(0x31)
+#define OCDR0 0
+#define OCDR1 1
+#define OCDR2 2
+#define OCDR3 3
+#define OCDR4 4
+#define OCDR5 5
+#define OCDR6 6
+#define OCDR7 7
+
+#define SMCR _SFR_IO8(0x33)
+#define SE 0
+#define SM0 1
+#define SM1 2
+#define SM2 3
+
+#define MCUSR _SFR_IO8(0x34)
+#define PORF 0
+#define EXTRF 1
+#define BORF 2
+#define WDRF 3
+#define JTRF 4
+
+#define MCUCR _SFR_IO8(0x35)
+#define IVCE 0
+#define IVSEL 1
+#define PUD 4
+#define BODSE 5
+#define BODS 6
+#define JTD 7
+
+#define SPMCSR _SFR_IO8(0x37)
+#define SPMEN 0
+#define PGERS 1
+#define PGWRT 2
+#define BLBSET 3
+#define RWWSRE 4
+#define SIGRD 5
+#define RWWSB 6
+#define SPMIE 7
+
+#define RAMPZ _SFR_IO8(0x3B)
+#define RAMPZ0 0
+
+#define WDTCSR _SFR_MEM8(0x60)
+#define WDP0 0
+#define WDP1 1
+#define WDP2 2
+#define WDE 3
+#define WDCE 4
+#define WDP3 5
+#define WDIE 6
+#define WDIF 7
+
+#define CLKPR _SFR_MEM8(0x61)
+#define CLKPS0 0
+#define CLKPS1 1
+#define CLKPS2 2
+#define CLKPS3 3
+#define CLKPCE 7
+
+#define PRR0 _SFR_MEM8(0x64)
+#define PRADC 0
+#define PRUSART0 1
+#define PRSPI 2
+#define PRTIM1 3
+#define PRUSART1 4
+#define PRTIM0 5
+#define PRTIM2 6
+#define PRTWI 7
+
+#define __AVR_HAVE_PRR0	((1<<PRADC)|(1<<PRSPI)|(1<<PRTIM1)|(1<<PRUSART0)|(1<<PRUSART1)|(1<<PRTIM0)|(1<<PRTIM2)|(1<<PRTWI))
+#define __AVR_HAVE_PRR0_PRADC
+#define __AVR_HAVE_PRR0_PRSPI
+#define __AVR_HAVE_PRR0_PRTIM1
+#define __AVR_HAVE_PRR0_PRUSART0
+#define __AVR_HAVE_PRR0_PRUSART1
+#define __AVR_HAVE_PRR0_PRTIM0
+#define __AVR_HAVE_PRR0_PRTIM2
+#define __AVR_HAVE_PRR0_PRTWI
+
+#define PRR1 _SFR_MEM8(0x65)
+#define PRTIM3 0
+
+#define __AVR_HAVE_PRR1	(1<<PRTIM3)
+#define __AVR_HAVE_PRR1_PRTIM3
+
+#define OSCCAL _SFR_MEM8(0x66)
+#define CAL0 0
+#define CAL1 1
+#define CAL2 2
+#define CAL3 3
+#define CAL4 4
+#define CAL5 5
+#define CAL6 6
+#define CAL7 7
+
+#define PCICR _SFR_MEM8(0x68)
+#define PCIE0 0
+#define PCIE1 1
+#define PCIE2 2
+#define PCIE3 3
+
+#define EICRA _SFR_MEM8(0x69)
+#define ISC00 0
+#define ISC01 1
+#define ISC10 2
+#define ISC11 3
+#define ISC20 4
+#define ISC21 5
+
+#define PCMSK0 _SFR_MEM8(0x6B)
+#define PCINT0 0
+#define PCINT1 1
+#define PCINT2 2
+#define PCINT3 3
+#define PCINT4 4
+#define PCINT5 5
+#define PCINT6 6
+#define PCINT7 7
+
+#define PCMSK1 _SFR_MEM8(0x6C)
+#define PCINT8 0
+#define PCINT9 1
+#define PCINT10 2
+#define PCINT11 3
+#define PCINT12 4
+#define PCINT13 5
+#define PCINT14 6
+#define PCINT15 7
+
+#define PCMSK2 _SFR_MEM8(0x6D)
+#define PCINT16 0
+#define PCINT17 1
+#define PCINT18 2
+#define PCINT19 3
+#define PCINT20 4
+#define PCINT21 5
+#define PCINT22 6
+#define PCINT23 7
+
+#define TIMSK0 _SFR_MEM8(0x6E)
+#define TOIE0 0
+#define OCIE0A 1
+#define OCIE0B 2
+
+#define TIMSK1 _SFR_MEM8(0x6F)
+#define TOIE1 0
+#define OCIE1A 1
+#define OCIE1B 2
+#define ICIE1 5
+
+#define TIMSK2 _SFR_MEM8(0x70)
+#define TOIE2 0
+#define OCIE2A 1
+#define OCIE2B 2
+
+#define TIMSK3 _SFR_MEM8(0x71)
+#define TOIE3 0
+#define OCIE3A 1
+#define OCIE3B 2
+#define ICIE3 5
+
+#define PCMSK3 _SFR_MEM8(0x73)
+#define PCINT24 0
+#define PCINT25 1
+#define PCINT26 2
+#define PCINT27 3
+#define PCINT28 4
+#define PCINT29 5
+#define PCINT30 6
+#define PCINT31 7
+
+#ifndef __ASSEMBLER__
+#define ADC     _SFR_MEM16(0x78)
+#endif
+#define ADCW    _SFR_MEM16(0x78)
+
+#define ADCL _SFR_MEM8(0x78)
+#define ADCL0 0
+#define ADCL1 1
+#define ADCL2 2
+#define ADCL3 3
+#define ADCL4 4
+#define ADCL5 5
+#define ADCL6 6
+#define ADCL7 7
+
+#define ADCH _SFR_MEM8(0x79)
+#define ADCH0 0
+#define ADCH1 1
+#define ADCH2 2
+#define ADCH3 3
+#define ADCH4 4
+#define ADCH5 5
+#define ADCH6 6
+#define ADCH7 7
+
+#define ADCSRA _SFR_MEM8(0x7A)
+#define ADPS0 0
+#define ADPS1 1
+#define ADPS2 2
+#define ADIE 3
+#define ADIF 4
+#define ADATE 5
+#define ADSC 6
+#define ADEN 7
+
+#define ADCSRB _SFR_MEM8(0x7B)
+#define ADTS0 0
+#define ADTS1 1
+#define ADTS2 2
+#define ACME 6
+
+#define ADMUX _SFR_MEM8(0x7C)
+#define MUX0 0
+#define MUX1 1
+#define MUX2 2
+#define MUX3 3
+#define MUX4 4
+#define ADLAR 5
+#define REFS0 6
+#define REFS1 7
+
+#define DIDR0 _SFR_MEM8(0x7E)
+#define ADC0D 0
+#define ADC1D 1
+#define ADC2D 2
+#define ADC3D 3
+#define ADC4D 4
+#define ADC5D 5
+#define ADC6D 6
+#define ADC7D 7
+
+#define DIDR1 _SFR_MEM8(0x7F)
+#define AIN0D 0
+#define AIN1D 1
+
+#define TCCR1A _SFR_MEM8(0x80)
+#define WGM10 0
+#define WGM11 1
+#define COM1B0 4
+#define COM1B1 5
+#define COM1A0 6
+#define COM1A1 7
+
+#define TCCR1B _SFR_MEM8(0x81)
+#define CS10 0
+#define CS11 1
+#define CS12 2
+#define WGM12 3
+#define WGM13 4
+#define ICES1 6
+#define ICNC1 7
+
+#define TCCR1C _SFR_MEM8(0x82)
+#define FOC1B 6
+#define FOC1A 7
+
+#define TCNT1 _SFR_MEM16(0x84)
+
+#define TCNT1L _SFR_MEM8(0x84)
+#define TCNT1L0 0
+#define TCNT1L1 1
+#define TCNT1L2 2
+#define TCNT1L3 3
+#define TCNT1L4 4
+#define TCNT1L5 5
+#define TCNT1L6 6
+#define TCNT1L7 7
+
+#define TCNT1H _SFR_MEM8(0x85)
+#define TCNT1H0 0
+#define TCNT1H1 1
+#define TCNT1H2 2
+#define TCNT1H3 3
+#define TCNT1H4 4
+#define TCNT1H5 5
+#define TCNT1H6 6
+#define TCNT1H7 7
+
+#define ICR1 _SFR_MEM16(0x86)
+
+#define ICR1L _SFR_MEM8(0x86)
+#define ICR1L0 0
+#define ICR1L1 1
+#define ICR1L2 2
+#define ICR1L3 3
+#define ICR1L4 4
+#define ICR1L5 5
+#define ICR1L6 6
+#define ICR1L7 7
+
+#define ICR1H _SFR_MEM8(0x87)
+#define ICR1H0 0
+#define ICR1H1 1
+#define ICR1H2 2
+#define ICR1H3 3
+#define ICR1H4 4
+#define ICR1H5 5
+#define ICR1H6 6
+#define ICR1H7 7
+
+#define OCR1A _SFR_MEM16(0x88)
+
+#define OCR1AL _SFR_MEM8(0x88)
+#define OCR1AL0 0
+#define OCR1AL1 1
+#define OCR1AL2 2
+#define OCR1AL3 3
+#define OCR1AL4 4
+#define OCR1AL5 5
+#define OCR1AL6 6
+#define OCR1AL7 7
+
+#define OCR1AH _SFR_MEM8(0x89)
+#define OCR1AH0 0
+#define OCR1AH1 1
+#define OCR1AH2 2
+#define OCR1AH3 3
+#define OCR1AH4 4
+#define OCR1AH5 5
+#define OCR1AH6 6
+#define OCR1AH7 7
+
+#define OCR1B _SFR_MEM16(0x8A)
+
+#define OCR1BL _SFR_MEM8(0x8A)
+#define OCR1AL0 0
+#define OCR1AL1 1
+#define OCR1AL2 2
+#define OCR1AL3 3
+#define OCR1AL4 4
+#define OCR1AL5 5
+#define OCR1AL6 6
+#define OCR1AL7 7
+
+#define OCR1BH _SFR_MEM8(0x8B)
+#define OCR1AH0 0
+#define OCR1AH1 1
+#define OCR1AH2 2
+#define OCR1AH3 3
+#define OCR1AH4 4
+#define OCR1AH5 5
+#define OCR1AH6 6
+#define OCR1AH7 7
+
+#define TCCR3A _SFR_MEM8(0x90)
+#define WGM30 0
+#define WGM31 1
+#define COM3B0 4
+#define COM3B1 5
+#define COM3A0 6
+#define COM3A1 7
+
+#define TCCR3B _SFR_MEM8(0x91)
+#define CS30 0
+#define CS31 1
+#define CS32 2
+#define WGM32 3
+#define WGM33 4
+#define ICES3 6
+#define ICNC3 7
+
+#define TCCR3C _SFR_MEM8(0x92)
+#define FOC3B 6
+#define FOC3A 7
+
+#define TCNT3 _SFR_MEM16(0x94)
+
+#define TCNT3L _SFR_MEM8(0x94)
+#define TCNT3L0 0
+#define TCNT3L1 1
+#define TCNT3L2 2
+#define TCNT3L3 3
+#define TCNT3L4 4
+#define TCNT3L5 5
+#define TCNT3L6 6
+#define TCNT3L7 7
+
+#define TCNT3H _SFR_MEM8(0x95)
+#define TCNT3H0 0
+#define TCNT3H1 1
+#define TCNT3H2 2
+#define TCNT3H3 3
+#define TCNT3H4 4
+#define TCNT3H5 5
+#define TCNT3H6 6
+#define TCNT3H7 7
+
+#define ICR3 _SFR_MEM16(0x96)
+
+#define ICR3L _SFR_MEM8(0x96)
+#define ICR3L0 0
+#define ICR3L1 1
+#define ICR3L2 2
+#define ICR3L3 3
+#define ICR3L4 4
+#define ICR3L5 5
+#define ICR3L6 6
+#define ICR3L7 7
+
+#define ICR3H _SFR_MEM8(0x97)
+#define ICR3H0 0
+#define ICR3H1 1
+#define ICR3H2 2
+#define ICR3H3 3
+#define ICR3H4 4
+#define ICR3H5 5
+#define ICR3H6 6
+#define ICR3H7 7
+
+#define OCR3A _SFR_MEM16(0x98)
+
+#define OCR3AL _SFR_MEM8(0x98)
+#define OCR3AL0 0
+#define OCR3AL1 1
+#define OCR3AL2 2
+#define OCR3AL3 3
+#define OCR3AL4 4
+#define OCR3AL5 5
+#define OCR3AL6 6
+#define OCR3AL7 7
+
+#define OCR3AH _SFR_MEM8(0x99)
+#define OCR3AH0 0
+#define OCR3AH1 1
+#define OCR3AH2 2
+#define OCR3AH3 3
+#define OCR3AH4 4
+#define OCR3AH5 5
+#define OCR3AH6 6
+#define OCR3AH7 7
+
+#define OCR3B _SFR_MEM16(0x9A)
+
+#define OCR3BL _SFR_MEM8(0x9A)
+#define OCR3AL0 0
+#define OCR3AL1 1
+#define OCR3AL2 2
+#define OCR3AL3 3
+#define OCR3AL4 4
+#define OCR3AL5 5
+#define OCR3AL6 6
+#define OCR3AL7 7
+
+#define OCR3BH _SFR_MEM8(0x9B)
+#define OCR3AH0 0
+#define OCR3AH1 1
+#define OCR3AH2 2
+#define OCR3AH3 3
+#define OCR3AH4 4
+#define OCR3AH5 5
+#define OCR3AH6 6
+#define OCR3AH7 7
+
+#define TCCR2A _SFR_MEM8(0xB0)
+#define WGM20 0
+#define WGM21 1
+#define COM2B0 4
+#define COM2B1 5
+#define COM2A0 6
+#define COM2A1 7
+
+#define TCCR2B _SFR_MEM8(0xB1)
+#define CS20 0
+#define CS21 1
+#define CS22 2
+#define WGM22 3
+#define FOC2B 6
+#define FOC2A 7
+
+#define TCNT2 _SFR_MEM8(0xB2)
+#define TCNT2_0 0
+#define TCNT2_1 1
+#define TCNT2_2 2
+#define TCNT2_3 3
+#define TCNT2_4 4
+#define TCNT2_5 5
+#define TCNT2_6 6
+#define TCNT2_7 7
+
+#define OCR2A _SFR_MEM8(0xB3)
+#define OCR2_0 0
+#define OCR2_1 1
+#define OCR2_2 2
+#define OCR2_3 3
+#define OCR2_4 4
+#define OCR2_5 5
+#define OCR2_6 6
+#define OCR2_7 7
+
+#define OCR2B _SFR_MEM8(0xB4)
+#define OCR2_0 0
+#define OCR2_1 1
+#define OCR2_2 2
+#define OCR2_3 3
+#define OCR2_4 4
+#define OCR2_5 5
+#define OCR2_6 6
+#define OCR2_7 7
+
+#define ASSR _SFR_MEM8(0xB6)
+#define TCR2BUB 0
+#define TCR2AUB 1
+#define OCR2BUB 2
+#define OCR2AUB 3
+#define TCN2UB 4
+#define AS2 5
+#define EXCLK 6
+
+#define TWBR _SFR_MEM8(0xB8)
+#define TWBR0 0
+#define TWBR1 1
+#define TWBR2 2
+#define TWBR3 3
+#define TWBR4 4
+#define TWBR5 5
+#define TWBR6 6
+#define TWBR7 7
+
+#define TWSR _SFR_MEM8(0xB9)
+#define TWPS0 0
+#define TWPS1 1
+#define TWS3 3
+#define TWS4 4
+#define TWS5 5
+#define TWS6 6
+#define TWS7 7
+
+#define TWAR _SFR_MEM8(0xBA)
+#define TWGCE 0
+#define TWA0 1
+#define TWA1 2
+#define TWA2 3
+#define TWA3 4
+#define TWA4 5
+#define TWA5 6
+#define TWA6 7
+
+#define TWDR _SFR_MEM8(0xBB)
+#define TWD0 0
+#define TWD1 1
+#define TWD2 2
+#define TWD3 3
+#define TWD4 4
+#define TWD5 5
+#define TWD6 6
+#define TWD7 7
+
+#define TWCR _SFR_MEM8(0xBC)
+#define TWIE 0
+#define TWEN 2
+#define TWWC 3
+#define TWSTO 4
+#define TWSTA 5
+#define TWEA 6
+#define TWINT 7
+
+#define TWAMR _SFR_MEM8(0xBD)
+#define TWAM0 1
+#define TWAM1 2
+#define TWAM2 3
+#define TWAM3 4
+#define TWAM4 5
+#define TWAM5 6
+#define TWAM6 7
+
+#define UCSR0A _SFR_MEM8(0xC0)
+#define MPCM0 0
+#define U2X0 1
+#define UPE0 2
+#define DOR0 3
+#define FE0 4
+#define UDRE0 5
+#define TXC0 6
+#define RXC0 7
+
+#define UCSR0B _SFR_MEM8(0xC1)
+#define TXB80 0
+#define RXB80 1
+#define UCSZ02 2
+#define TXEN0 3
+#define RXEN0 4
+#define UDRIE0 5
+#define TXCIE0 6
+#define RXCIE0 7
+
+#define UCSR0C _SFR_MEM8(0xC2)
+#define UCPOL0 0
+#define UCSZ00 1
+#define UCSZ01 2
+#define USBS0 3
+#define UPM00 4
+#define UPM01 5
+#define UMSEL00 6
+#define UMSEL01 7
+
+#define UBRR0 _SFR_MEM16(0xC4)
+
+#define UBRR0L _SFR_MEM8(0xC4)
+#define UBRR0_0 0
+#define UBRR0_1 1
+#define UBRR0_2 2
+#define UBRR0_3 3
+#define UBRR0_4 4
+#define UBRR0_5 5
+#define UBRR0_6 6
+#define UBRR0_7 7
+
+#define UBRR0H _SFR_MEM8(0xC5)
+#define UBRR0_8 0
+#define UBRR0_9 1
+#define UBRR0_10 2
+#define UBRR0_11 3
+
+#define UDR0 _SFR_MEM8(0xC6)
+#define UDR0_0 0
+#define UDR0_1 1
+#define UDR0_2 2
+#define UDR0_3 3
+#define UDR0_4 4
+#define UDR0_5 5
+#define UDR0_6 6
+#define UDR0_7 7
+
+#define UCSR1A _SFR_MEM8(0xC8)
+#define MPCM1 0
+#define U2X1 1
+#define UPE1 2
+#define DOR1 3
+#define FE1 4
+#define UDRE1 5
+#define TXC1 6
+#define RXC1 7
+
+#define UCSR1B _SFR_MEM8(0xC9)
+#define TXB81 0
+#define RXB81 1
+#define UCSZ12 2
+#define TXEN1 3
+#define RXEN1 4
+#define UDRIE1 5
+#define TXCIE1 6
+#define RXCIE1 7
+
+#define UCSR1C _SFR_MEM8(0xCA)
+#define UCPOL1 0
+#define UCSZ10 1
+#define UCSZ11 2
+#define USBS1 3
+#define UPM10 4
+#define UPM11 5
+#define UMSEL10 6
+#define UMSEL11 7
+
+#define UBRR1 _SFR_MEM16(0xCC)
+
+#define UBRR1L _SFR_MEM8(0xCC)
+#define UBRR1_0 0
+#define UBRR1_1 1
+#define UBRR1_2 2
+#define UBRR1_3 3
+#define UBRR1_4 4
+#define UBRR1_5 5
+#define UBRR1_6 6
+#define UBRR1_7 7
+
+#define UBRR1H _SFR_MEM8(0xCD)
+#define UBRR1_8 0
+#define UBRR1_9 1
+#define UBRR1_10 2
+#define UBRR1_11 3
+
+#define UDR1 _SFR_MEM8(0xCE)
+#define UDR1_0 0
+#define UDR1_1 1
+#define UDR1_2 2
+#define UDR1_3 3
+#define UDR1_4 4
+#define UDR1_5 5
+#define UDR1_6 6
+#define UDR1_7 7
+
+
+/* Interrupt Vectors */
+/* Interrupt Vector 0 is the reset vector. */
+
+#define INT0_vect_num     1
+#define INT0_vect         _VECTOR(1)  /* External Interrupt Request 0 */
+
+#define INT1_vect_num     2
+#define INT1_vect         _VECTOR(2)  /* External Interrupt Request 1 */
+
+#define INT2_vect_num     3
+#define INT2_vect         _VECTOR(3)  /* External Interrupt Request 2 */
+
+#define PCINT0_vect_num   4
+#define PCINT0_vect       _VECTOR(4)  /* Pin Change Interrupt Request 0 */
+
+#define PCINT1_vect_num   5
+#define PCINT1_vect       _VECTOR(5)  /* Pin Change Interrupt Request 1 */
+
+#define PCINT2_vect_num   6
+#define PCINT2_vect       _VECTOR(6)  /* Pin Change Interrupt Request 2 */
+
+#define PCINT3_vect_num   7
+#define PCINT3_vect       _VECTOR(7)  /* Pin Change Interrupt Request 3 */
+
+#define WDT_vect_num      8
+#define WDT_vect          _VECTOR(8)  /* Watchdog Time-out Interrupt */
+
+#define TIMER2_COMPA_vect_num  9
+#define TIMER2_COMPA_vect _VECTOR(9)  /* Timer/Counter2 Compare Match A */
+
+#define TIMER2_COMPB_vect_num  10
+#define TIMER2_COMPB_vect _VECTOR(10)  /* Timer/Counter2 Compare Match B */
+
+#define TIMER2_OVF_vect_num  11
+#define TIMER2_OVF_vect   _VECTOR(11)  /* Timer/Counter2 Overflow */
+
+#define TIMER1_CAPT_vect_num  12
+#define TIMER1_CAPT_vect  _VECTOR(12)  /* Timer/Counter1 Capture Event */
+
+#define TIMER1_COMPA_vect_num  13
+#define TIMER1_COMPA_vect _VECTOR(13)  /* Timer/Counter1 Compare Match A */
+
+#define TIMER1_COMPB_vect_num  14
+#define TIMER1_COMPB_vect _VECTOR(14)  /* Timer/Counter1 Compare Match B */
+
+#define TIMER1_OVF_vect_num  15
+#define TIMER1_OVF_vect   _VECTOR(15)  /* Timer/Counter1 Overflow */
+
+#define TIMER0_COMPA_vect_num  16
+#define TIMER0_COMPA_vect _VECTOR(16)  /* Timer/Counter0 Compare Match A */
+
+#define TIMER0_COMPB_vect_num  17
+#define TIMER0_COMPB_vect _VECTOR(17)  /* Timer/Counter0 Compare Match B */
+
+#define TIMER0_OVF_vect_num  18
+#define TIMER0_OVF_vect   _VECTOR(18)  /* Timer/Counter0 Overflow */
+
+#define SPI_STC_vect_num  19
+#define SPI_STC_vect      _VECTOR(19)  /* SPI Serial Transfer Complete */
+
+#define USART0_RX_vect_num  20
+#define USART0_RX_vect    _VECTOR(20)  /* USART0, Rx Complete */
+
+#define USART0_UDRE_vect_num  21
+#define USART0_UDRE_vect  _VECTOR(21)  /* USART0 Data register Empty */
+
+#define USART0_TX_vect_num  22
+#define USART0_TX_vect    _VECTOR(22)  /* USART0, Tx Complete */
+
+#define ANALOG_COMP_vect_num  23
+#define ANALOG_COMP_vect  _VECTOR(23)  /* Analog Comparator */
+
+#define ADC_vect_num      24
+#define ADC_vect          _VECTOR(24)  /* ADC Conversion Complete */
+
+#define EE_READY_vect_num 25
+#define EE_READY_vect     _VECTOR(25)  /* EEPROM Ready */
+
+#define TWI_vect_num      26
+#define TWI_vect          _VECTOR(26)  /* 2-wire Serial Interface */
+
+#define SPM_READY_vect_num  27
+#define SPM_READY_vect    _VECTOR(27)  /* Store Program Memory Read */
+
+#define USART1_RX_vect_num  28
+#define USART1_RX_vect    _VECTOR(28)  /* USART1 RX complete */
+
+#define USART1_UDRE_vect_num  29
+#define USART1_UDRE_vect  _VECTOR(29)  /* USART1 Data Register Empty */
+
+#define USART1_TX_vect_num  30
+#define USART1_TX_vect    _VECTOR(30)  /* USART1 TX complete */
+
+#define TIMER3_CAPT_vect_num  31
+#define TIMER3_CAPT_vect  _VECTOR(31)  /* Timer/Counter3 Capture Event */
+
+#define TIMER3_COMPA_vect_num  32
+#define TIMER3_COMPA_vect _VECTOR(32)  /* Timer/Counter3 Compare Match A */
+
+#define TIMER3_COMPB_vect_num  33
+#define TIMER3_COMPB_vect _VECTOR(33)  /* Timer/Counter3 Compare Match B */
+
+#define TIMER3_OVF_vect_num  34
+#define TIMER3_OVF_vect   _VECTOR(34)  /* Timer/Counter3 Overflow */
+
+#define _VECTORS_SIZE (35 * 4)
+
+
+/* Constants */
+#define SPM_PAGESIZE 256
+#define RAMSTART     (0x100)
+#define RAMEND       0x40FF    /* Last On-Chip SRAM Location */
+#define XRAMSIZE     0
+#define XRAMEND      RAMEND
+#define E2END        0xFFF
+#define E2PAGESIZE   8
+#define FLASHEND     0x1FFFF
+
+
+/* Fuses */
+#define FUSE_MEMORY_SIZE 3
+
+/* Low Fuse Byte */
+#define FUSE_CKSEL0 (unsigned char)~_BV(0)  /* Select Clock Source */
+#define FUSE_CKSEL1 (unsigned char)~_BV(1)  /* Select Clock Source */
+#define FUSE_CKSEL2 (unsigned char)~_BV(2)  /* Select Clock Source */
+#define FUSE_CKSEL3 (unsigned char)~_BV(3)  /* Select Clock Source */
+#define FUSE_SUT0   (unsigned char)~_BV(4)  /* Select start-up time */
+#define FUSE_SUT1   (unsigned char)~_BV(5)  /* Select start-up time */
+#define FUSE_CKOUT  (unsigned char)~_BV(6)  /* Clock output */
+#define FUSE_CKDIV8 (unsigned char)~_BV(7)  /* Divide clock by 8 */
+#define LFUSE_DEFAULT (FUSE_CKSEL0 & FUSE_CKSEL2 & FUSE_CKSEL3 & FUSE_SUT0 & FUSE_SUT1 & FUSE_CKDIV8)
+
+/* High Fuse Byte */
+#define FUSE_BOOTRST (unsigned char)~_BV(0)  /* Select Reset Vector */
+#define FUSE_BOOTSZ0 (unsigned char)~_BV(1)  /* Select Boot Size */
+#define FUSE_BOOTSZ1 (unsigned char)~_BV(2)  /* Select Boot Size */
+#define FUSE_EESAVE  (unsigned char)~_BV(3)  /* EEPROM memory is preserved through chip erase */
+#define FUSE_WDTON   (unsigned char)~_BV(4)  /* Watchdog timer always on */
+#define FUSE_SPIEN   (unsigned char)~_BV(5)  /* Enable Serial programming and Data Downloading */
+#define FUSE_JTAGEN  (unsigned char)~_BV(6)  /* Enable JTAG */
+#define FUSE_OCDEN   (unsigned char)~_BV(7)  /* Enable OCD */
+#define HFUSE_DEFAULT (FUSE_BOOTSZ0 & FUSE_SPIEN & FUSE_JTAGEN)
+
+/* Extended Fuse Byte */
+#define FUSE_BODLEVEL0 (unsigned char)~_BV(0)  /* Brown-out Detector trigger level */
+#define FUSE_BODLEVEL1 (unsigned char)~_BV(1)  /* Brown-out Detector trigger level */
+#define FUSE_BODLEVEL2 (unsigned char)~_BV(2)  /* Brown-out Detector trigger level */
+#define EFUSE_DEFAULT (0xFF)
+
+
+/* Lock Bits */
+#define __LOCK_BITS_EXIST
+#define __BOOT_LOCK_BITS_0_EXIST
+#define __BOOT_LOCK_BITS_1_EXIST 
+
+
+/* Signature */
+#define SIGNATURE_0 0x1E
+#define SIGNATURE_1 0x97
+#define SIGNATURE_2 0x05
+
+#define SLEEP_MODE_IDLE (0x00<<1)
+#define SLEEP_MODE_ADC (0x01<<1)
+#define SLEEP_MODE_PWR_DOWN (0x02<<1)
+#define SLEEP_MODE_PWR_SAVE (0x03<<1)
+#define SLEEP_MODE_STANDBY (0x06<<1)
+#define SLEEP_MODE_EXT_STANDBY (0x07<<1)
+
+#endif  /* _AVR_IOM1284P_H_ */
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
index 709b184..bbbef16 100644
--- a/docs/html/annotated.html
+++ b/docs/html/annotated.html
@@ -85,7 +85,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/b15f_8cpp_source.html b/docs/html/b15f_8cpp_source.html
index dd5733f..a76179c 100644
--- a/docs/html/b15f_8cpp_source.html
+++ b/docs/html/b15f_8cpp_source.html
@@ -70,48 +70,50 @@ $(function() {
 <div class="title">b15f.cpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;b15f.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<a class="code" href="classB15F.html">B15F</a>* B15F::instance = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;errorhandler_t B15F::errorhandler = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;B15F::B15F()</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;{</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    init();</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;}</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="keywordtype">void</span> B15F::init()</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;{</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160; </div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    std::string device = <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">exec</a>(<span class="stringliteral">&quot;bash -c &#39;ls /dev/ttyUSB*&#39;&quot;</span>);</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    <span class="keywordflow">while</span>(device.find(<span class="charliteral">&#39; &#39;</span>) != std::string::npos || device.find(<span class="charliteral">&#39;\n&#39;</span>) != std::string::npos || device.find(<span class="charliteral">&#39;\t&#39;</span>) != std::string::npos)</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;        device.pop_back();</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordflow">if</span>(device.length() == 0)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Adapter nicht gefunden&quot;</span>);</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Verwende Adapter: &quot;</span> &lt;&lt; device &lt;&lt; std::endl;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Stelle Verbindung mit Adapter her... &quot;</span> &lt;&lt; std::flush;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    usart.<a class="code" href="classUSART.html#aac63918a8b97ae63ee607cfa39e6d88d">setBaudrate</a>(<a class="code" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">BAUDRATE</a>);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    usart.<a class="code" href="classUSART.html#a5f7e2abda2ec4a68a5fdb8ee2f8a940a">openDevice</a>(device);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    std::cout &lt;&lt; <span class="stringliteral">&quot;OK&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Teste Verbindung... &quot;</span> &lt;&lt; std::flush;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    uint8_t tries = 3;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keywordflow">while</span>(tries--)</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="comment">// verwerfe Daten, die µC noch hat</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        <span class="comment">//discard();</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">if</span>(!<a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>())</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="keywordflow">if</span>(!<a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">testIntConv</a>())</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    }</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">if</span>(tries == 0)</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    std::cout &lt;&lt; <span class="stringliteral">&quot;OK&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// Gib board info aus</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    std::vector&lt;std::string&gt; info = <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">getBoardInfo</a>();</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;AVR Firmware Version: &quot;</span> &lt;&lt; info[0] &lt;&lt; <span class="stringliteral">&quot; um &quot;</span> &lt;&lt; info[1] &lt;&lt; <span class="stringliteral">&quot; Uhr (&quot;</span> &lt;&lt; info[2] &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">   57</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a>()</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    uint8_t tries = <a class="code" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordflow">while</span>(tries--)</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    {</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(<a class="code" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a>);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">discard</a>();</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <span class="keywordflow">if</span>(<a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>())</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    }</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Verbindung kann nicht repariert werden&quot;</span>);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">   72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">B15F::discard</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        usart.<a class="code" href="classUSART.html#a756d268a8762c316f91ca3238972b0c1">clearOutputBuffer</a>();</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 16; i++)</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        {</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;            usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_DISC);   <span class="comment">// sende discard Befehl (verwerfe input)</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(4);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        }</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">catch</span>(std::exception&amp; ex)</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(ex);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;}</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">   90</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">B15F::testConnection</a>()</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;{</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="comment">// erzeuge zufälliges Byte</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    srand(time(NULL));</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    uint8_t dummy = rand() % 256;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_TEST);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(dummy);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    uint8_t mirror = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a> &amp;&amp; mirror == dummy;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">  105</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">B15F::testIntConv</a>()</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    srand(time(NULL));</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    uint16_t dummy = rand() % (0xFFFF / 3);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_INT);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(dummy);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    uint16_t aw = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">return</span> aw == dummy * 3;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;}</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">  118</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">B15F::getBoardInfo</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    std::vector&lt;std::string&gt; info;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_INFO);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160; </div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    uint8_t n = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">while</span>(n--)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        uint8_t len = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        std::string str;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <span class="keywordflow">while</span>(len--)</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        {</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;            str += static_cast&lt;char&gt;(usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>());</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        }</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        info.push_back(str);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    }</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">if</span>(aw != <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Board Info fehlerhalft: code &quot;</span> + std::to_string((<span class="keywordtype">int</span>) aw));</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordflow">return</span> info;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">  145</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">B15F::activateSelfTestMode</a>()</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_ST);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;}</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classB15F.html#a13797edea1c50278988373acbd110064">  153</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">B15F::digitalWrite0</a>(uint8_t port)</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;{</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BA0);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(port);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160; </div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">  163</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">B15F::digitalWrite1</a>(uint8_t port)</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;{</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BA1);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(port);</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">  173</a></span>&#160;uint8_t <a class="code" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">B15F::digitalRead0</a>()</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;{</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BE0);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160; </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">  182</a></span>&#160;uint8_t <a class="code" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">B15F::digitalRead1</a>()</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BE1);</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;}</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160; </div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">  191</a></span>&#160;uint8_t <a class="code" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">B15F::readDipSwitch</a>()</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_DSW);</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;}</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">  200</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">B15F::analogWrite0</a>(uint16_t value)</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;{</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_AA0);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(value);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;}</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">  210</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">B15F::analogWrite1</a>(uint16_t value)</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_AA1);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(value);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;}</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">  220</a></span>&#160;uint16_t <a class="code" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">B15F::analogRead</a>(uint8_t channel)</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;{</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">if</span>(channel &gt; 7)</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC channel: &quot;</span> + std::to_string(channel));</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    {</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        RQ_ADC,</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        channel</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    };</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160; </div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160; </div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    uint16_t adc = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keywordflow">if</span>(adc &gt; 1023)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (1)&quot;</span>);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="keywordflow">return</span> adc;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160; </div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">  243</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">B15F::analogSequence</a>(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t* buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="comment">// check pointers</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    buffer_a += offset_a;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    buffer_b += offset_b;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160; </div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160; </div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_ADC_DAC_STROKE);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(channel_a);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(channel_b);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(start);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(static_cast&lt;uint16_t&gt;(delta));</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(count);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160; </div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">for</span>(uint16_t i = 0; i &lt; count; i++)</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    {</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="keywordflow">if</span>(buffer_a)</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        {</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            buffer_a[i] = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160; </div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            <span class="keywordflow">if</span>(buffer_a[i] &gt; 1023) <span class="comment">// check for broken usart connection</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;                <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (2)&quot;</span>);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        {</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;            usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        }</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160; </div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keywordflow">if</span>(buffer_b)</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;            buffer_b[i] = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160; </div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;            <span class="keywordflow">if</span>(buffer_b[i] &gt; 1023) <span class="comment">// check for broken usart connection</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;                <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (3)&quot;</span>);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        }</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;            usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        }</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    }</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">if</span>(aw != <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sequenz unterbrochen&quot;</span>);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160; </div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;}</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">  292</a></span>&#160;uint8_t <a class="code" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">B15F::pwmSetFrequency</a>(uint32_t freq)</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160; </div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    {</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        RQ_PWM_SET_FREQ,</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt;  0) &amp; 0xFF),</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt;  8) &amp; 0xFF),</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt; 16) &amp; 0xFF),</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt; 24) &amp; 0xFF)</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    };</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160; </div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;}</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160; </div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">  314</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">B15F::pwmSetValue</a>(uint8_t value)</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;{</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160; </div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    {</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        RQ_PWM_SET_VALUE,</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        value</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    };</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160; </div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;}</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">  333</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a>(uint16_t ms)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;{</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    std::this_thread::sleep_for(std::chrono::milliseconds(ms));</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;}</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160; </div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">  338</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a>(uint16_t us)</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;{</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    std::this_thread::sleep_for(std::chrono::microseconds(us));</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;}</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160; </div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">  343</a></span>&#160;<a class="code" href="classB15F.html">B15F</a>&amp; <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;{</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordflow">if</span>(!instance)</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        instance = <span class="keyword">new</span> <a class="code" href="classB15F.html">B15F</a>();</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    <span class="keywordflow">return</span> *instance;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;}</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160; </div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment">// https://stackoverflow.com/a/478960</span></div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">  352</a></span>&#160;std::string <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a>(std::string cmd)</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    std::array&lt;char, 128&gt; buffer;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    std::string result;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    std::unique_ptr&lt;FILE, decltype(&amp;pclose)&gt; pipe(popen(cmd.c_str(), <span class="stringliteral">&quot;r&quot;</span>), pclose);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    <span class="keywordflow">if</span> (!pipe)</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    {</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;popen() failed!&quot;</span>);</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    }</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keywordflow">while</span> (fgets(buffer.data(), buffer.size(), pipe.get()) != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    {</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;        result += buffer.data();</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    }</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;}</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160; </div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">  368</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a>(std::string msg)</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;{</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <a class="code" href="classDriverException.html">DriverException</a> ex(msg);</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(ex);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;}</div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="classB15F.html#ac962a6a49bddd0e261a8c7d3aded23f8">  373</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a>(std::exception&amp; ex)</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keywordflow">if</span>(errorhandler)</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        errorhandler(ex);</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    {</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;NOTICE: B15F::errorhandler not set&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        std::cout &lt;&lt; ex.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classDriverException.html">DriverException</a>(ex.what());</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    }</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;}</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160; </div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">  385</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a>(errorhandler_t func)</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;{</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    errorhandler = func;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="aclassB15F_html_a1a7ac52984ed7ecac008a3e4060eee3a"><div class="ttname"><a href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a></div><div class="ttdeci">static std::string exec(std::string cmd)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00352">b15f.cpp:352</a></div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;b15f.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<a class="code" href="classB15F.html">B15F</a>* B15F::instance = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;errorhandler_t B15F::errorhandler = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;B15F::B15F()</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;{</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    init();</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;}</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160; </div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="keywordtype">void</span> B15F::init()</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;{</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160; </div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    std::string device = <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">exec</a>(<span class="stringliteral">&quot;bash -c &#39;ls /dev/ttyUSB*&#39;&quot;</span>);</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    <span class="keywordflow">while</span>(device.find(<span class="charliteral">&#39; &#39;</span>) != std::string::npos || device.find(<span class="charliteral">&#39;\n&#39;</span>) != std::string::npos || device.find(<span class="charliteral">&#39;\t&#39;</span>) != std::string::npos)</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;        device.pop_back();</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordflow">if</span>(device.length() == 0)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Adapter nicht gefunden&quot;</span>);</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Verwende Adapter: &quot;</span> &lt;&lt; device &lt;&lt; std::endl;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Stelle Verbindung mit Adapter her... &quot;</span> &lt;&lt; std::flush;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    usart.<a class="code" href="classUSART.html#aac63918a8b97ae63ee607cfa39e6d88d">setBaudrate</a>(<a class="code" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">BAUDRATE</a>);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    usart.<a class="code" href="classUSART.html#a5f7e2abda2ec4a68a5fdb8ee2f8a940a">openDevice</a>(device);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    std::cout &lt;&lt; <span class="stringliteral">&quot;OK&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;Teste Verbindung... &quot;</span> &lt;&lt; std::flush;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    uint8_t tries = 3;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keywordflow">while</span>(tries--)</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="comment">// verwerfe Daten, die µC noch hat</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        <span class="comment">//discard();</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">if</span>(!<a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>())</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="keywordflow">if</span>(!<a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">testIntConv</a>())</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;            <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    }</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">if</span>(tries == 0)</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?&quot;</span>);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    std::cout &lt;&lt; <span class="stringliteral">&quot;OK&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// Gib board info aus</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    std::vector&lt;std::string&gt; info = <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">getBoardInfo</a>();</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    std::cout &lt;&lt; <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> &lt;&lt; <span class="stringliteral">&quot;AVR Firmware Version: &quot;</span> &lt;&lt; info[0] &lt;&lt; <span class="stringliteral">&quot; um &quot;</span> &lt;&lt; info[1] &lt;&lt; <span class="stringliteral">&quot; Uhr (&quot;</span> &lt;&lt; info[2] &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">   57</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a>()</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    uint8_t tries = <a class="code" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keywordflow">while</span>(tries--)</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    {</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(<a class="code" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a>);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">discard</a>();</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <span class="keywordflow">if</span>(<a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>())</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;            <span class="keywordflow">return</span>;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    }</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Verbindung kann nicht repariert werden&quot;</span>);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">   72</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">B15F::discard</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;{</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    {</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        usart.<a class="code" href="classUSART.html#a756d268a8762c316f91ca3238972b0c1">clearOutputBuffer</a>();</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <span class="keywordflow">for</span>(uint8_t i = 0; i &lt; 16; i++)</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        {</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;            usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_DISC);   <span class="comment">// sende discard Befehl (verwerfe input)</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(4);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        }</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">catch</span>(std::exception&amp; ex)</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(ex);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;}</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">   90</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">B15F::testConnection</a>()</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;{</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="comment">// erzeuge zufälliges Byte</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    srand(time(NULL));</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    uint8_t dummy = rand() % 256;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_TEST);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(dummy);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    uint8_t mirror = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a> &amp;&amp; mirror == dummy;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">  105</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">B15F::testIntConv</a>()</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;{</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    srand(time(NULL));</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    uint16_t dummy = rand() % (0xFFFF / 3);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_INT);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(dummy);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    uint16_t aw = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">return</span> aw == dummy * 3;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;}</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">  118</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">B15F::getBoardInfo</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;{</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    std::vector&lt;std::string&gt; info;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_INFO);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160; </div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    uint8_t n = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">while</span>(n--)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        uint8_t len = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        std::string str;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <span class="keywordflow">while</span>(len--)</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        {</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;            str += static_cast&lt;char&gt;(usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>());</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        }</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        info.push_back(str);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    }</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">if</span>(aw != <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Board Info fehlerhalft: code &quot;</span> + std::to_string((<span class="keywordtype">int</span>) aw));</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordflow">return</span> info;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">  145</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">B15F::activateSelfTestMode</a>()</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;{</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_ST);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;}</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classB15F.html#a13797edea1c50278988373acbd110064">  153</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">B15F::digitalWrite0</a>(uint8_t port)</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;{</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BA0);</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(port);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160; </div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">  163</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">B15F::digitalWrite1</a>(uint8_t port)</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;{</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BA1);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(port);</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">  173</a></span>&#160;uint8_t <a class="code" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">B15F::digitalRead0</a>()</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;{</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BE0);</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160; </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">  182</a></span>&#160;uint8_t <a class="code" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">B15F::digitalRead1</a>()</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_BE1);</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;}</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160; </div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">  191</a></span>&#160;uint8_t <a class="code" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">B15F::readDipSwitch</a>()</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_DSW);</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;}</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">  200</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">B15F::analogWrite0</a>(uint16_t value)</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;{</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_AA0);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(value);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;}</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">  210</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">B15F::analogWrite1</a>(uint16_t value)</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_AA1);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(value);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;}</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">  220</a></span>&#160;uint16_t <a class="code" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">B15F::analogRead</a>(uint8_t channel)</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;{</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">if</span>(channel &gt; 7)</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC channel: &quot;</span> + std::to_string(channel));</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    {</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        RQ_ADC,</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        channel</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    };</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160; </div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160; </div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    uint16_t adc = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keywordflow">if</span>(adc &gt; 1023)</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (1)&quot;</span>);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="keywordflow">return</span> adc;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;}</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160; </div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">  243</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">B15F::analogSequence</a>(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t* buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;{</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="comment">// check pointers</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    buffer_a += offset_a;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    buffer_b += offset_b;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160; </div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160; </div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(RQ_ADC_DAC_STROKE);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(channel_a);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    usart.<a class="code" href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">writeByte</a>(channel_b);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(start);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(static_cast&lt;uint16_t&gt;(delta));</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    usart.<a class="code" href="classUSART.html#a78b30d9aa863f38745e982860392599a">writeInt</a>(count);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160; </div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">for</span>(uint16_t i = 0; i &lt; count; i++)</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    {</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="keywordflow">if</span>(buffer_a)</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        {</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            buffer_a[i] = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160; </div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            <span class="keywordflow">if</span>(buffer_a[i] &gt; 1023) <span class="comment">// check for broken usart connection</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;                <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (2)&quot;</span>);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        {</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;            usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        }</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160; </div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="keywordflow">if</span>(buffer_b)</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;            buffer_b[i] = usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160; </div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;            <span class="keywordflow">if</span>(buffer_b[i] &gt; 1023) <span class="comment">// check for broken usart connection</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;                <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Bad ADC data detected (3)&quot;</span>);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        }</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;            usart.<a class="code" href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">readInt</a>();</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;        }</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    }</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160; </div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">if</span>(aw != <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sequenz unterbrochen&quot;</span>);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160; </div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;}</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">  292</a></span>&#160;uint8_t <a class="code" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">B15F::pwmSetFrequency</a>(uint32_t freq)</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160; </div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    {</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        RQ_PWM_SET_FREQ,</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt;  0) &amp; 0xFF),</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt;  8) &amp; 0xFF),</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt; 16) &amp; 0xFF),</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        static_cast&lt;uint8_t&gt;((freq &gt;&gt; 24) &amp; 0xFF)</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    };</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160; </div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordflow">return</span> byte;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;}</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160; </div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">  314</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">B15F::pwmSetValue</a>(uint8_t value)</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;{</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160; </div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    {</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        RQ_PWM_SET_VALUE,</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        value</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    };</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160; </div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">return</span> aw == <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a>;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;}</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">  333</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">B15F::setRegister</a>(uint8_t adr, uint8_t val)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;{</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160; </div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    {</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;        RQ_SET_REG,</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;        adr,</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        val</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    };</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160; </div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    uint8_t <span class="keywordtype">byte</span> = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <span class="keywordflow">return</span> <span class="keywordtype">byte</span> == val;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;}</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160; </div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">  353</a></span>&#160;uint8_t <a class="code" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">B15F::getRegister</a>(uint8_t adr)</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;{</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    usart.<a class="code" href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">clearInputBuffer</a>();</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160; </div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    uint8_t rq[] =</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    {</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;        RQ_GET_REG,</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        adr</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    };</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160; </div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    <span class="keywordtype">int</span> n_sent = usart.write_timeout(&amp;rq[0], 0, <span class="keyword">sizeof</span>(rq), 1000);</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="keywordflow">if</span>(n_sent != <span class="keyword">sizeof</span>(rq))</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(<span class="stringliteral">&quot;Sent failed&quot;</span>);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160; </div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    uint8_t aw = usart.<a class="code" href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">readByte</a>();</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(10);</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="keywordflow">return</span> aw;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;}</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160; </div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160; </div><div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">  373</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a>(uint16_t ms)</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    std::this_thread::sleep_for(std::chrono::milliseconds(ms));</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160; </div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">  378</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a>(uint16_t us)</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;{</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    std::this_thread::sleep_for(std::chrono::microseconds(us));</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;}</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160; </div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">  383</a></span>&#160;<a class="code" href="classB15F.html">B15F</a>&amp; <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;{</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keywordflow">if</span>(!instance)</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        instance = <span class="keyword">new</span> <a class="code" href="classB15F.html">B15F</a>();</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160; </div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    <span class="keywordflow">return</span> *instance;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;}</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160; </div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment">// https://stackoverflow.com/a/478960</span></div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">  392</a></span>&#160;std::string <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a>(std::string cmd)</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;{</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    std::array&lt;char, 128&gt; buffer;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    std::string result;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    std::unique_ptr&lt;FILE, decltype(&amp;pclose)&gt; pipe(popen(cmd.c_str(), <span class="stringliteral">&quot;r&quot;</span>), pclose);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="keywordflow">if</span> (!pipe)</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    {</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;popen() failed!&quot;</span>);</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    }</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    <span class="keywordflow">while</span> (fgets(buffer.data(), buffer.size(), pipe.get()) != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    {</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        result += buffer.data();</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    }</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;}</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160; </div><div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">  408</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a>(std::string msg)</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;{</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <a class="code" href="classDriverException.html">DriverException</a> ex(msg);</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(ex);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;}</div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="classB15F.html#ac962a6a49bddd0e261a8c7d3aded23f8">  413</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a>(std::exception&amp; ex)</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;{</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <span class="keywordflow">if</span>(errorhandler)</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;        errorhandler(ex);</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    {</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;NOTICE: B15F::errorhandler not set&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        std::cout &lt;&lt; ex.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classDriverException.html">DriverException</a>(ex.what());</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    }</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;}</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160; </div><div class="line"><a name="l00425"></a><span class="lineno"><a class="line" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">  425</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a>(errorhandler_t func)</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;{</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    errorhandler = func;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclassB15F_html_a1a7ac52984ed7ecac008a3e4060eee3a"><div class="ttname"><a href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a></div><div class="ttdeci">static std::string exec(std::string cmd)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00392">b15f.cpp:392</a></div></div>
+<div class="ttc" id="aclassB15F_html_a43b477a9e2e5b1b2142958fa5e1a78b3"><div class="ttname"><a href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">B15F::getRegister</a></div><div class="ttdeci">uint8_t getRegister(uint8_t adr)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00353">b15f.cpp:353</a></div></div>
 <div class="ttc" id="aclassUSART_html_a8f54b98b26bfe084359a5604bda82562"><div class="ttname"><a href="classUSART.html#a8f54b98b26bfe084359a5604bda82562">USART::readByte</a></div><div class="ttdeci">uint8_t readByte(void)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00216">usart.cpp:216</a></div></div>
-<div class="ttc" id="aclassB15F_html_adcaac8ae8db3c28eccb499fbd720361f"><div class="ttname"><a href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a></div><div class="ttdeci">void delay_us(uint16_t us)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00338">b15f.cpp:338</a></div></div>
+<div class="ttc" id="aclassB15F_html_adcaac8ae8db3c28eccb499fbd720361f"><div class="ttname"><a href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a></div><div class="ttdeci">void delay_us(uint16_t us)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00378">b15f.cpp:378</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0df6d423deeb2fd610968bd1c72060e"><div class="ttname"><a href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">B15F::digitalRead0</a></div><div class="ttdeci">uint8_t digitalRead0(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00173">b15f.cpp:173</a></div></div>
 <div class="ttc" id="aclassB15F_html_ac6f6532bb9550a0632c28b98c157d0a1"><div class="ttname"><a href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">B15F::pwmSetFrequency</a></div><div class="ttdeci">uint8_t pwmSetFrequency(uint32_t freq)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00292">b15f.cpp:292</a></div></div>
 <div class="ttc" id="aclassB15F_html_ab82a324426c3063318c6cafb3089ae02"><div class="ttname"><a href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">B15F::analogSequence</a></div><div class="ttdeci">void analogSequence(uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00243">b15f.cpp:243</a></div></div>
 <div class="ttc" id="aclassB15F_html_af01983594f2af98ab2b1e514aa036a5d"><div class="ttname"><a href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">B15F::testConnection</a></div><div class="ttdeci">bool testConnection(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00090">b15f.cpp:90</a></div></div>
 <div class="ttc" id="aclassB15F_html_a6f858f21ea81d491b5031b3644a2239a"><div class="ttname"><a href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">B15F::readDipSwitch</a></div><div class="ttdeci">uint8_t readDipSwitch(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00191">b15f.cpp:191</a></div></div>
-<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
-<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00343">b15f.cpp:343</a></div></div>
+<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00373">b15f.cpp:373</a></div></div>
+<div class="ttc" id="aclassB15F_html_a2735424cf98bd0e2892b5a9b6eb24582"><div class="ttname"><a href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">B15F::setRegister</a></div><div class="ttdeci">bool setRegister(uint8_t adr, uint8_t val)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
+<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00383">b15f.cpp:383</a></div></div>
 <div class="ttc" id="aclassB15F_html"><div class="ttname"><a href="classB15F.html">B15F</a></div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00026">b15f.h:26</a></div></div>
-<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00368">b15f.cpp:368</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00408">b15f.cpp:408</a></div></div>
 <div class="ttc" id="aclassUSART_html_a28a2b4c5ed66b2c3a81196f76884f156"><div class="ttname"><a href="classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156">USART::clearInputBuffer</a></div><div class="ttdeci">void clearInputBuffer(void)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00039">usart.cpp:39</a></div></div>
 <div class="ttc" id="aclassUSART_html_a756d268a8762c316f91ca3238972b0c1"><div class="ttname"><a href="classUSART.html#a756d268a8762c316f91ca3238972b0c1">USART::clearOutputBuffer</a></div><div class="ttdeci">void clearOutputBuffer(void)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00046">usart.cpp:46</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0bd1f69751e2dc3c462db9213fc4627"><div class="ttname"><a href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">B15F::analogRead</a></div><div class="ttdeci">uint16_t analogRead(uint8_t channel)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00220">b15f.cpp:220</a></div></div>
 <div class="ttc" id="aclassB15F_html_a13797edea1c50278988373acbd110064"><div class="ttname"><a href="classB15F.html#a13797edea1c50278988373acbd110064">B15F::digitalWrite0</a></div><div class="ttdeci">bool digitalWrite0(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00153">b15f.cpp:153</a></div></div>
-<div class="ttc" id="aclassB15F_html_a3b0fc1f85954b2d9c145af4a3af5b1ec"><div class="ttname"><a href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">B15F::PRE</a></div><div class="ttdeci">const std::string PRE</div><div class="ttdoc">B15F stdout prefix.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00215">b15f.h:215</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3b0fc1f85954b2d9c145af4a3af5b1ec"><div class="ttname"><a href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">B15F::PRE</a></div><div class="ttdeci">const std::string PRE</div><div class="ttdoc">B15F stdout prefix.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00231">b15f.h:231</a></div></div>
 <div class="ttc" id="aclassUSART_html_aac63918a8b97ae63ee607cfa39e6d88d"><div class="ttname"><a href="classUSART.html#aac63918a8b97ae63ee607cfa39e6d88d">USART::setBaudrate</a></div><div class="ttdeci">void setBaudrate(uint32_t baudrate)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00322">usart.cpp:322</a></div></div>
 <div class="ttc" id="aclassB15F_html_ad9bf80ee2485fb5aac9926c6ef0731f1"><div class="ttname"><a href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">B15F::activateSelfTestMode</a></div><div class="ttdeci">bool activateSelfTestMode(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00145">b15f.cpp:145</a></div></div>
 <div class="ttc" id="aclassB15F_html_a4f01677e73d6d172a2c1cae9427a591b"><div class="ttname"><a href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">B15F::getBoardInfo</a></div><div class="ttdeci">std::vector&lt; std::string &gt; getBoardInfo(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00118">b15f.cpp:118</a></div></div>
-<div class="ttc" id="aclassB15F_html_a040951746fbfd632e12bd1ad14578816"><div class="ttname"><a href="classB15F.html#a040951746fbfd632e12bd1ad14578816">B15F::RECONNECT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t RECONNECT_TIMEOUT</div><div class="ttdoc">Time in ms after which a reconnect attempt aborts.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00218">b15f.h:218</a></div></div>
+<div class="ttc" id="aclassB15F_html_a040951746fbfd632e12bd1ad14578816"><div class="ttname"><a href="classB15F.html#a040951746fbfd632e12bd1ad14578816">B15F::RECONNECT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t RECONNECT_TIMEOUT</div><div class="ttdoc">Time in ms after which a reconnect attempt aborts.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00234">b15f.h:234</a></div></div>
 <div class="ttc" id="aclassB15F_html_a7f1becceac744f5cd2ad529748fd836f"><div class="ttname"><a href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">B15F::analogWrite1</a></div><div class="ttdeci">bool analogWrite1(uint16_t port)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00210">b15f.cpp:210</a></div></div>
 <div class="ttc" id="aclassUSART_html_a60eadbe9956bab8144ee96d89eacd9f5"><div class="ttname"><a href="classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5">USART::writeByte</a></div><div class="ttdeci">void writeByte(uint8_t b)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00067">usart.cpp:67</a></div></div>
 <div class="ttc" id="aclassB15F_html_aa225e7fc813849634063e071ef25db1b"><div class="ttname"><a href="classB15F.html#aa225e7fc813849634063e071ef25db1b">B15F::digitalWrite1</a></div><div class="ttdeci">bool digitalWrite1(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00163">b15f.cpp:163</a></div></div>
 <div class="ttc" id="aclassB15F_html_af9aad3c0db5d5a8b37219d713e1977ee"><div class="ttname"><a href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">B15F::pwmSetValue</a></div><div class="ttdeci">bool pwmSetValue(uint8_t value)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00314">b15f.cpp:314</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae4740cd473f40a1a4121dfa66b25e1d5"><div class="ttname"><a href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">B15F::discard</a></div><div class="ttdeci">void discard(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00072">b15f.cpp:72</a></div></div>
-<div class="ttc" id="aclassB15F_html_ab01299858f74a6cec598688562e0ad02"><div class="ttname"><a href="classB15F.html#ab01299858f74a6cec598688562e0ad02">B15F::MSG_OK</a></div><div class="ttdeci">constexpr static uint8_t MSG_OK</div><div class="ttdoc">Value to acknowledge a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00216">b15f.h:216</a></div></div>
+<div class="ttc" id="aclassB15F_html_ab01299858f74a6cec598688562e0ad02"><div class="ttname"><a href="classB15F.html#ab01299858f74a6cec598688562e0ad02">B15F::MSG_OK</a></div><div class="ttdeci">constexpr static uint8_t MSG_OK</div><div class="ttdoc">Value to acknowledge a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00232">b15f.h:232</a></div></div>
 <div class="ttc" id="aclassUSART_html_a5f7e2abda2ec4a68a5fdb8ee2f8a940a"><div class="ttname"><a href="classUSART.html#a5f7e2abda2ec4a68a5fdb8ee2f8a940a">USART::openDevice</a></div><div class="ttdeci">void openDevice(std::string device)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00003">usart.cpp:3</a></div></div>
 <div class="ttc" id="aclassUSART_html_a1534c229db71a375e556cf1e7d0b8119"><div class="ttname"><a href="classUSART.html#a1534c229db71a375e556cf1e7d0b8119">USART::readInt</a></div><div class="ttdeci">uint16_t readInt(void)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00235">usart.cpp:235</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc76b612dd4faeee0ac02a66b65af5f2"><div class="ttname"><a href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">B15F::digitalRead1</a></div><div class="ttdeci">uint8_t digitalRead1(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00182">b15f.cpp:182</a></div></div>
 <div class="ttc" id="aclassB15F_html_a52557b375443c180a044e7d4e80a1ae7"><div class="ttname"><a href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a></div><div class="ttdeci">void reconnect(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00057">b15f.cpp:57</a></div></div>
-<div class="ttc" id="aclassB15F_html_a7d548d6861cfc69753161bf9cda14f87"><div class="ttname"><a href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">B15F::BAUDRATE</a></div><div class="ttdeci">constexpr static uint32_t BAUDRATE</div><div class="ttdoc">USART baudrate for communication with the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00221">b15f.h:221</a></div></div>
-<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00385">b15f.cpp:385</a></div></div>
+<div class="ttc" id="aclassB15F_html_a7d548d6861cfc69753161bf9cda14f87"><div class="ttname"><a href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">B15F::BAUDRATE</a></div><div class="ttdeci">constexpr static uint32_t BAUDRATE</div><div class="ttdoc">USART baudrate for communication with the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00237">b15f.h:237</a></div></div>
+<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00425">b15f.cpp:425</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc55fd590c7fa5c942d100cb60c4b0d3"><div class="ttname"><a href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">B15F::analogWrite0</a></div><div class="ttdeci">bool analogWrite0(uint16_t port)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00200">b15f.cpp:200</a></div></div>
-<div class="ttc" id="aclassB15F_html_a6c4895bdbcd71ff6743becf97985c2dc"><div class="ttname"><a href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">B15F::RECONNECT_TRIES</a></div><div class="ttdeci">constexpr static uint8_t RECONNECT_TRIES</div><div class="ttdoc">Maximum count of reconnect attempts after which the driver stops.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00220">b15f.h:220</a></div></div>
+<div class="ttc" id="aclassB15F_html_a6c4895bdbcd71ff6743becf97985c2dc"><div class="ttname"><a href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">B15F::RECONNECT_TRIES</a></div><div class="ttdeci">constexpr static uint8_t RECONNECT_TRIES</div><div class="ttdoc">Maximum count of reconnect attempts after which the driver stops.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00236">b15f.h:236</a></div></div>
 <div class="ttc" id="aclassUSART_html_a78b30d9aa863f38745e982860392599a"><div class="ttname"><a href="classUSART.html#a78b30d9aa863f38745e982860392599a">USART::writeInt</a></div><div class="ttdeci">void writeInt(uint16_t d)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00081">usart.cpp:81</a></div></div>
 <div class="ttc" id="aclassB15F_html_a7b8a0e2a9156f7dcb05d097f23666a78"><div class="ttname"><a href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">B15F::testIntConv</a></div><div class="ttdeci">bool testIntConv(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00105">b15f.cpp:105</a></div></div>
 <div class="ttc" id="aclassDriverException_html"><div class="ttname"><a href="classDriverException.html">DriverException</a></div><div class="ttdef"><b>Definition:</b> <a href="driverexception_8h_source.html#l00010">driverexception.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/b15f_8h_source.html b/docs/html/b15f_8h_source.html
index 346c23c..1bad799 100644
--- a/docs/html/b15f_8h_source.html
+++ b/docs/html/b15f_8h_source.html
@@ -70,42 +70,44 @@ $(function() {
 <div class="title">b15f.h</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef B15F_H</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define B15F_H</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;bits/stdc++.h&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;sys/ioctl.h&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;termios.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;usart.h&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;driverexception.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;timeoutexception.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">typedef</span> std::function&lt;void(std::exception&amp;)&gt; errorhandler_t;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classB15F.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classB15F.html">B15F</a></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="comment">// privater Konstruktor</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <a class="code" href="classB15F.html">B15F</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">    /*************************************</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">     * Grundfunktionen des B15F Treibers *</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">     *************************************/</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">reconnect</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">discard</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">testIntConv</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    std::vector&lt;std::string&gt; <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">getBoardInfo</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(uint16_t ms);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(uint16_t us);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keyword">static</span> <a class="code" href="classB15F.html">B15F</a>&amp; <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">getInstance</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keyword">static</span> std::string <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">exec</a>(std::string cmd);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(std::string msg);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160; </div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(std::exception&amp; ex);</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">setAbortHandler</a>(errorhandler_t func);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">    /*************************************/</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">    /*************************</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment">     * Steuerbefehle für B15 *</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">     *************************/</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">activateSelfTestMode</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160; </div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">digitalWrite0</a>(uint8_t);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">digitalWrite1</a>(uint8_t);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    uint8_t <a class="code" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">digitalRead0</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    uint8_t <a class="code" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">digitalRead1</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    uint8_t <a class="code" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">readDipSwitch</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">analogWrite0</a>(uint16_t port);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160; </div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">analogWrite1</a>(uint16_t port);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    uint16_t <a class="code" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">analogRead</a>(uint8_t channel);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">analogSequence</a>(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t* buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count);</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    uint8_t <a class="code" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">pwmSetFrequency</a>(uint32_t freq);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">pwmSetValue</a>(uint8_t value);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160; </div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment">    /*************************/</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">  215</a></span>&#160; </div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">  216</a></span>&#160;    <span class="comment">// CONSTANTS</span></div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">  217</a></span>&#160;    <span class="keyword">const</span> std::string <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> = <span class="stringliteral">&quot;[B15F] &quot;</span>; </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">  218</a></span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a> = 0xFF; </div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">  219</a></span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">MSG_FAIL</a> = 0xFE; </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">  220</a></span>&#160;    constexpr <span class="keyword">static</span> uint16_t <a class="code" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a> = 64; </div><div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">  221</a></span>&#160;    constexpr <span class="keyword">static</span> uint16_t <a class="code" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">WDT_TIMEOUT</a> = 15; </div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a> = 3; </div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    constexpr <span class="keyword">static</span> uint32_t <a class="code" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">BAUDRATE</a> = 57600; </div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160; </div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160; </div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <span class="keywordtype">void</span> init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160; </div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <a class="code" href="classUSART.html">USART</a> usart;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keyword">static</span> <a class="code" href="classB15F.html">B15F</a>* instance;</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keyword">static</span> errorhandler_t errorhandler;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160; </div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="comment">// REQUESTS</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_DISC = 0;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_TEST = 1;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_INFO = 2;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_INT  = 3;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ST   = 4;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BA0  = 5;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BA1  = 6;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BE0  = 7;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BE1  = 8;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_DSW  = 9;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_AA0  = 10;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_AA1  = 11;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ADC  = 12;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ADC_DAC_STROKE  = 13;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_PWM_SET_FREQ    = 14;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_PWM_SET_VALUE   = 15;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;};</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160; </div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<span class="preprocessor">#endif // B15F_H</span></div></div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="aclassB15F_html_a1a7ac52984ed7ecac008a3e4060eee3a"><div class="ttname"><a href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a></div><div class="ttdeci">static std::string exec(std::string cmd)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00352">b15f.cpp:352</a></div></div>
-<div class="ttc" id="aclassB15F_html_a77d1ecf24b406c9204665d3b09c36f1e"><div class="ttname"><a href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">B15F::MSG_FAIL</a></div><div class="ttdeci">constexpr static uint8_t MSG_FAIL</div><div class="ttdoc">Value to reject a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00217">b15f.h:217</a></div></div>
-<div class="ttc" id="aclassB15F_html_adcaac8ae8db3c28eccb499fbd720361f"><div class="ttname"><a href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a></div><div class="ttdeci">void delay_us(uint16_t us)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00338">b15f.cpp:338</a></div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef B15F_H</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define B15F_H</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;bits/stdc++.h&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;sys/ioctl.h&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;termios.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;usart.h&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;driverexception.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;timeoutexception.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">typedef</span> std::function&lt;void(std::exception&amp;)&gt; errorhandler_t;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classB15F.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classB15F.html">B15F</a></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="comment">// privater Konstruktor</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <a class="code" href="classB15F.html">B15F</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">    /*************************************</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">     * Grundfunktionen des B15F Treibers *</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">     *************************************/</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">reconnect</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">discard</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">testIntConv</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    std::vector&lt;std::string&gt; <a class="code" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">getBoardInfo</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(uint16_t ms);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">delay_us</a>(uint16_t us);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keyword">static</span> <a class="code" href="classB15F.html">B15F</a>&amp; <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">getInstance</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keyword">static</span> std::string <a class="code" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">exec</a>(std::string cmd);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(std::string msg);</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160; </div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">abort</a>(std::exception&amp; ex);</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">setAbortHandler</a>(errorhandler_t func);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">    /*************************************/</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment">    /*************************</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment">     * Steuerbefehle für B15 *</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment">     *************************/</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">activateSelfTestMode</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160; </div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">digitalWrite0</a>(uint8_t);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">digitalWrite1</a>(uint8_t);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    uint8_t <a class="code" href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">digitalRead0</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    uint8_t <a class="code" href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">digitalRead1</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    uint8_t <a class="code" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">readDipSwitch</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">analogWrite0</a>(uint16_t port);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160; </div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">analogWrite1</a>(uint16_t port);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    uint16_t <a class="code" href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">analogRead</a>(uint8_t channel);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">analogSequence</a>(uint8_t channel_a, uint16_t* buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t* buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count);</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    uint8_t <a class="code" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">pwmSetFrequency</a>(uint32_t freq);</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">pwmSetValue</a>(uint8_t value);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160; </div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordtype">bool</span> <a class="code" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">setRegister</a>(uint8_t adr, uint8_t val);</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    uint8_t <a class="code" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">getRegister</a>(uint8_t adr);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160; </div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment">    /*************************/</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160; </div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">  231</a></span>&#160; </div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">  232</a></span>&#160;    <span class="comment">// CONSTANTS</span></div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">  233</a></span>&#160;    <span class="keyword">const</span> std::string <a class="code" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a> = <span class="stringliteral">&quot;[B15F] &quot;</span>; </div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">  234</a></span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a> = 0xFF; </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">  235</a></span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">MSG_FAIL</a> = 0xFE; </div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">  236</a></span>&#160;    constexpr <span class="keyword">static</span> uint16_t <a class="code" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a> = 64; </div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">  237</a></span>&#160;    constexpr <span class="keyword">static</span> uint16_t <a class="code" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">WDT_TIMEOUT</a> = 15; </div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    constexpr <span class="keyword">static</span> uint8_t  <a class="code" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a> = 3; </div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    constexpr <span class="keyword">static</span> uint32_t <a class="code" href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">BAUDRATE</a> = 57600; </div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160; </div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordtype">void</span> init(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160; </div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    <a class="code" href="classUSART.html">USART</a> usart;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keyword">static</span> <a class="code" href="classB15F.html">B15F</a>* instance;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keyword">static</span> errorhandler_t errorhandler;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160; </div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="comment">// REQUESTS</span></div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_DISC = 0;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_TEST = 1;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_INFO = 2;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_INT  = 3;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ST   = 4;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BA0  = 5;</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BA1  = 6;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BE0  = 7;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_BE1  = 8;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_DSW  = 9;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_AA0  = 10;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_AA1  = 11;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ADC  = 12;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_ADC_DAC_STROKE = 13;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_PWM_SET_FREQ   = 14;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_PWM_SET_VALUE  = 15;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_SET_REG        = 16;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    constexpr <span class="keyword">static</span> uint8_t RQ_GET_REG        = 17;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;};</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="preprocessor">#endif // B15F_H</span></div></div><!-- fragment --></div><!-- contents -->
+<div class="ttc" id="aclassB15F_html_a1a7ac52984ed7ecac008a3e4060eee3a"><div class="ttname"><a href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">B15F::exec</a></div><div class="ttdeci">static std::string exec(std::string cmd)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00392">b15f.cpp:392</a></div></div>
+<div class="ttc" id="aclassB15F_html_a77d1ecf24b406c9204665d3b09c36f1e"><div class="ttname"><a href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">B15F::MSG_FAIL</a></div><div class="ttdeci">constexpr static uint8_t MSG_FAIL</div><div class="ttdoc">Value to reject a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00233">b15f.h:233</a></div></div>
+<div class="ttc" id="aclassB15F_html_a43b477a9e2e5b1b2142958fa5e1a78b3"><div class="ttname"><a href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">B15F::getRegister</a></div><div class="ttdeci">uint8_t getRegister(uint8_t adr)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00353">b15f.cpp:353</a></div></div>
+<div class="ttc" id="aclassB15F_html_adcaac8ae8db3c28eccb499fbd720361f"><div class="ttname"><a href="classB15F.html#adcaac8ae8db3c28eccb499fbd720361f">B15F::delay_us</a></div><div class="ttdeci">void delay_us(uint16_t us)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00378">b15f.cpp:378</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0df6d423deeb2fd610968bd1c72060e"><div class="ttname"><a href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">B15F::digitalRead0</a></div><div class="ttdeci">uint8_t digitalRead0(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00173">b15f.cpp:173</a></div></div>
 <div class="ttc" id="aclassB15F_html_ac6f6532bb9550a0632c28b98c157d0a1"><div class="ttname"><a href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">B15F::pwmSetFrequency</a></div><div class="ttdeci">uint8_t pwmSetFrequency(uint32_t freq)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00292">b15f.cpp:292</a></div></div>
 <div class="ttc" id="aclassB15F_html_ab82a324426c3063318c6cafb3089ae02"><div class="ttname"><a href="classB15F.html#ab82a324426c3063318c6cafb3089ae02">B15F::analogSequence</a></div><div class="ttdeci">void analogSequence(uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b, uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00243">b15f.cpp:243</a></div></div>
 <div class="ttc" id="aclassB15F_html_af01983594f2af98ab2b1e514aa036a5d"><div class="ttname"><a href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">B15F::testConnection</a></div><div class="ttdeci">bool testConnection(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00090">b15f.cpp:90</a></div></div>
 <div class="ttc" id="aclassB15F_html_a6f858f21ea81d491b5031b3644a2239a"><div class="ttname"><a href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">B15F::readDipSwitch</a></div><div class="ttdeci">uint8_t readDipSwitch(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00191">b15f.cpp:191</a></div></div>
-<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
-<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00343">b15f.cpp:343</a></div></div>
+<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00373">b15f.cpp:373</a></div></div>
+<div class="ttc" id="aclassB15F_html_a2735424cf98bd0e2892b5a9b6eb24582"><div class="ttname"><a href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">B15F::setRegister</a></div><div class="ttdeci">bool setRegister(uint8_t adr, uint8_t val)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
+<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00383">b15f.cpp:383</a></div></div>
 <div class="ttc" id="aclassB15F_html"><div class="ttname"><a href="classB15F.html">B15F</a></div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00026">b15f.h:26</a></div></div>
-<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00368">b15f.cpp:368</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00408">b15f.cpp:408</a></div></div>
 <div class="ttc" id="aclassUSART_html"><div class="ttname"><a href="classUSART.html">USART</a></div><div class="ttdef"><b>Definition:</b> <a href="usart_8h_source.html#l00018">usart.h:18</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0bd1f69751e2dc3c462db9213fc4627"><div class="ttname"><a href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">B15F::analogRead</a></div><div class="ttdeci">uint16_t analogRead(uint8_t channel)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00220">b15f.cpp:220</a></div></div>
 <div class="ttc" id="aclassB15F_html_a13797edea1c50278988373acbd110064"><div class="ttname"><a href="classB15F.html#a13797edea1c50278988373acbd110064">B15F::digitalWrite0</a></div><div class="ttdeci">bool digitalWrite0(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00153">b15f.cpp:153</a></div></div>
-<div class="ttc" id="aclassB15F_html_a3b0fc1f85954b2d9c145af4a3af5b1ec"><div class="ttname"><a href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">B15F::PRE</a></div><div class="ttdeci">const std::string PRE</div><div class="ttdoc">B15F stdout prefix.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00215">b15f.h:215</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3b0fc1f85954b2d9c145af4a3af5b1ec"><div class="ttname"><a href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">B15F::PRE</a></div><div class="ttdeci">const std::string PRE</div><div class="ttdoc">B15F stdout prefix.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00231">b15f.h:231</a></div></div>
 <div class="ttc" id="aclassB15F_html_ad9bf80ee2485fb5aac9926c6ef0731f1"><div class="ttname"><a href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">B15F::activateSelfTestMode</a></div><div class="ttdeci">bool activateSelfTestMode(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00145">b15f.cpp:145</a></div></div>
 <div class="ttc" id="aclassB15F_html_a4f01677e73d6d172a2c1cae9427a591b"><div class="ttname"><a href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">B15F::getBoardInfo</a></div><div class="ttdeci">std::vector&lt; std::string &gt; getBoardInfo(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00118">b15f.cpp:118</a></div></div>
-<div class="ttc" id="aclassB15F_html_a040951746fbfd632e12bd1ad14578816"><div class="ttname"><a href="classB15F.html#a040951746fbfd632e12bd1ad14578816">B15F::RECONNECT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t RECONNECT_TIMEOUT</div><div class="ttdoc">Time in ms after which a reconnect attempt aborts.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00218">b15f.h:218</a></div></div>
+<div class="ttc" id="aclassB15F_html_a040951746fbfd632e12bd1ad14578816"><div class="ttname"><a href="classB15F.html#a040951746fbfd632e12bd1ad14578816">B15F::RECONNECT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t RECONNECT_TIMEOUT</div><div class="ttdoc">Time in ms after which a reconnect attempt aborts.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00234">b15f.h:234</a></div></div>
 <div class="ttc" id="aclassB15F_html_a7f1becceac744f5cd2ad529748fd836f"><div class="ttname"><a href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">B15F::analogWrite1</a></div><div class="ttdeci">bool analogWrite1(uint16_t port)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00210">b15f.cpp:210</a></div></div>
 <div class="ttc" id="aclassB15F_html_aa225e7fc813849634063e071ef25db1b"><div class="ttname"><a href="classB15F.html#aa225e7fc813849634063e071ef25db1b">B15F::digitalWrite1</a></div><div class="ttdeci">bool digitalWrite1(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00163">b15f.cpp:163</a></div></div>
 <div class="ttc" id="aclassB15F_html_af9aad3c0db5d5a8b37219d713e1977ee"><div class="ttname"><a href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">B15F::pwmSetValue</a></div><div class="ttdeci">bool pwmSetValue(uint8_t value)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00314">b15f.cpp:314</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae4740cd473f40a1a4121dfa66b25e1d5"><div class="ttname"><a href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">B15F::discard</a></div><div class="ttdeci">void discard(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00072">b15f.cpp:72</a></div></div>
-<div class="ttc" id="aclassB15F_html_ab01299858f74a6cec598688562e0ad02"><div class="ttname"><a href="classB15F.html#ab01299858f74a6cec598688562e0ad02">B15F::MSG_OK</a></div><div class="ttdeci">constexpr static uint8_t MSG_OK</div><div class="ttdoc">Value to acknowledge a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00216">b15f.h:216</a></div></div>
+<div class="ttc" id="aclassB15F_html_ab01299858f74a6cec598688562e0ad02"><div class="ttname"><a href="classB15F.html#ab01299858f74a6cec598688562e0ad02">B15F::MSG_OK</a></div><div class="ttdeci">constexpr static uint8_t MSG_OK</div><div class="ttdoc">Value to acknowledge a received command.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00232">b15f.h:232</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc76b612dd4faeee0ac02a66b65af5f2"><div class="ttname"><a href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">B15F::digitalRead1</a></div><div class="ttdeci">uint8_t digitalRead1(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00182">b15f.cpp:182</a></div></div>
-<div class="ttc" id="aclassB15F_html_a158d13bc84aed6430cdede1396384e06"><div class="ttname"><a href="classB15F.html#a158d13bc84aed6430cdede1396384e06">B15F::WDT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t WDT_TIMEOUT</div><div class="ttdoc">Time in ms after which the watch dog timer resets the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00219">b15f.h:219</a></div></div>
+<div class="ttc" id="aclassB15F_html_a158d13bc84aed6430cdede1396384e06"><div class="ttname"><a href="classB15F.html#a158d13bc84aed6430cdede1396384e06">B15F::WDT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t WDT_TIMEOUT</div><div class="ttdoc">Time in ms after which the watch dog timer resets the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00235">b15f.h:235</a></div></div>
 <div class="ttc" id="aclassB15F_html_a52557b375443c180a044e7d4e80a1ae7"><div class="ttname"><a href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a></div><div class="ttdeci">void reconnect(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00057">b15f.cpp:57</a></div></div>
-<div class="ttc" id="aclassB15F_html_a7d548d6861cfc69753161bf9cda14f87"><div class="ttname"><a href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">B15F::BAUDRATE</a></div><div class="ttdeci">constexpr static uint32_t BAUDRATE</div><div class="ttdoc">USART baudrate for communication with the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00221">b15f.h:221</a></div></div>
-<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00385">b15f.cpp:385</a></div></div>
+<div class="ttc" id="aclassB15F_html_a7d548d6861cfc69753161bf9cda14f87"><div class="ttname"><a href="classB15F.html#a7d548d6861cfc69753161bf9cda14f87">B15F::BAUDRATE</a></div><div class="ttdeci">constexpr static uint32_t BAUDRATE</div><div class="ttdoc">USART baudrate for communication with the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00237">b15f.h:237</a></div></div>
+<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00425">b15f.cpp:425</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc55fd590c7fa5c942d100cb60c4b0d3"><div class="ttname"><a href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">B15F::analogWrite0</a></div><div class="ttdeci">bool analogWrite0(uint16_t port)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00200">b15f.cpp:200</a></div></div>
-<div class="ttc" id="aclassB15F_html_a6c4895bdbcd71ff6743becf97985c2dc"><div class="ttname"><a href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">B15F::RECONNECT_TRIES</a></div><div class="ttdeci">constexpr static uint8_t RECONNECT_TRIES</div><div class="ttdoc">Maximum count of reconnect attempts after which the driver stops.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00220">b15f.h:220</a></div></div>
+<div class="ttc" id="aclassB15F_html_a6c4895bdbcd71ff6743becf97985c2dc"><div class="ttname"><a href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">B15F::RECONNECT_TRIES</a></div><div class="ttdeci">constexpr static uint8_t RECONNECT_TRIES</div><div class="ttdoc">Maximum count of reconnect attempts after which the driver stops.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00236">b15f.h:236</a></div></div>
 <div class="ttc" id="aclassB15F_html_a7b8a0e2a9156f7dcb05d097f23666a78"><div class="ttname"><a href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">B15F::testIntConv</a></div><div class="ttdeci">bool testIntConv(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00105">b15f.cpp:105</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classB15F-members.html b/docs/html/classB15F-members.html
index 119895f..e12f994 100644
--- a/docs/html/classB15F-members.html
+++ b/docs/html/classB15F-members.html
@@ -87,23 +87,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a">exec</a>(std::string cmd)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a4f01677e73d6d172a2c1cae9427a591b">getBoardInfo</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">getInstance</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">MSG_FAIL</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">pwmSetFrequency</a>(uint32_t freq)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">pwmSetValue</a>(uint8_t value)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">readDipSwitch</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">reconnect</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">setAbortHandler</a>(errorhandler_t func)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">getRegister</a>(uint8_t adr)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#a77d1ecf24b406c9204665d3b09c36f1e">MSG_FAIL</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#ab01299858f74a6cec598688562e0ad02">MSG_OK</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#a3b0fc1f85954b2d9c145af4a3af5b1ec">PRE</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#ac6f6532bb9550a0632c28b98c157d0a1">pwmSetFrequency</a>(uint32_t freq)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">pwmSetValue</a>(uint8_t value)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">readDipSwitch</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">reconnect</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a040951746fbfd632e12bd1ad14578816">RECONNECT_TIMEOUT</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#a6c4895bdbcd71ff6743becf97985c2dc">RECONNECT_TRIES</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">setAbortHandler</a>(errorhandler_t func)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">setRegister</a>(uint8_t adr, uint8_t val)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classB15F.html#af01983594f2af98ab2b1e514aa036a5d">testConnection</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78">testIntConv</a>(void)</td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">WDT_TIMEOUT</a></td><td class="entry"><a class="el" href="classB15F.html">B15F</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classB15F.html b/docs/html/classB15F.html
index f22425d..68e4f0d 100644
--- a/docs/html/classB15F.html
+++ b/docs/html/classB15F.html
@@ -115,6 +115,10 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:ac6f6532bb9550a0632c28b98c157d0a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af9aad3c0db5d5a8b37219d713e1977ee"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classB15F.html#af9aad3c0db5d5a8b37219d713e1977ee">pwmSetValue</a> (uint8_t value)</td></tr>
 <tr class="separator:af9aad3c0db5d5a8b37219d713e1977ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2735424cf98bd0e2892b5a9b6eb24582"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">setRegister</a> (uint8_t adr, uint8_t val)</td></tr>
+<tr class="separator:a2735424cf98bd0e2892b5a9b6eb24582"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43b477a9e2e5b1b2142958fa5e1a78b3"><td class="memItemLeft" align="right" valign="top">uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">getRegister</a> (uint8_t adr)</td></tr>
+<tr class="separator:a43b477a9e2e5b1b2142958fa5e1a78b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
 Static Public Member Functions</h2></td></tr>
@@ -198,7 +202,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00373">373</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00413">413</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -232,7 +236,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00368">368</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00408">408</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -472,7 +476,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00333">333</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00373">373</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -498,7 +502,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00338">338</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00378">378</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -676,7 +680,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00352">352</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00392">392</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -736,7 +740,39 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00343">343</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00383">383</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a43b477a9e2e5b1b2142958fa5e1a78b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43b477a9e2e5b1b2142958fa5e1a78b3">&#9670;&nbsp;</a></span>getRegister()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">uint8_t B15F::getRegister </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>adr</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Liefert den Wert eines MCU Registers. </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">adr</td><td>Speicheradresse des Registers </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="exception"><dt>Exceptions</dt><dd>
+  <table class="exception">
+    <tr><td class="paramname"><a class="el" href="classDriverException.html">DriverException</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00353">353</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -888,7 +924,50 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
   </dd>
 </dl>
 
-<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00385">385</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00425">425</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a2735424cf98bd0e2892b5a9b6eb24582"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2735424cf98bd0e2892b5a9b6eb24582">&#9670;&nbsp;</a></span>setRegister()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">bool B15F::setRegister </td>
+          <td>(</td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>adr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t&#160;</td>
+          <td class="paramname"><em>val</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Setzt direkt den Wert eines MCU Registers. <em>Wichtig:</em> bei einer falschen Adresse kann das Board 15 ernsthaften Schaden nehmen! </p><dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">adr</td><td>Speicheradresse des Registers </td></tr>
+    <tr><td class="paramname">val</td><td>Neuer Wert für das Register </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="exception"><dt>Exceptions</dt><dd>
+  <table class="exception">
+    <tr><td class="paramname"><a class="el" href="classDriverException.html">DriverException</a></td><td></td></tr>
+  </table>
+  </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="b15f_8cpp_source.html#l00333">333</a> of file <a class="el" href="b15f_8cpp_source.html">b15f.cpp</a>.</p>
 
 </div>
 </div>
@@ -951,7 +1030,7 @@ constexpr static uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classDot-members.html b/docs/html/classDot-members.html
index fafd43d..eecb9f4 100644
--- a/docs/html/classDot-members.html
+++ b/docs/html/classDot-members.html
@@ -76,7 +76,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classDot.html b/docs/html/classDot.html
index b05a9bc..4a766ca 100644
--- a/docs/html/classDot.html
+++ b/docs/html/classDot.html
@@ -196,7 +196,7 @@ Public Member Functions</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classDriverException-members.html b/docs/html/classDriverException-members.html
index 5f85cd6..a2ee492 100644
--- a/docs/html/classDriverException-members.html
+++ b/docs/html/classDriverException-members.html
@@ -77,7 +77,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classDriverException.html b/docs/html/classDriverException.html
index 95ed51e..ae8c97a 100644
--- a/docs/html/classDriverException.html
+++ b/docs/html/classDriverException.html
@@ -109,7 +109,7 @@ std::string&#160;</td><td class="memItemRight" valign="bottom"><b>msg_</b></td><
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classPlottyFile-members.html b/docs/html/classPlottyFile-members.html
index b38eece..131dda0 100644
--- a/docs/html/classPlottyFile-members.html
+++ b/docs/html/classPlottyFile-members.html
@@ -100,7 +100,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classPlottyFile.html b/docs/html/classPlottyFile.html
index de9db48..881cffc 100644
--- a/docs/html/classPlottyFile.html
+++ b/docs/html/classPlottyFile.html
@@ -811,7 +811,7 @@ Public Member Functions</h2></td></tr>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classTimeoutException-members.html b/docs/html/classTimeoutException-members.html
index 8c3285a..2519544 100644
--- a/docs/html/classTimeoutException-members.html
+++ b/docs/html/classTimeoutException-members.html
@@ -78,7 +78,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classTimeoutException.html b/docs/html/classTimeoutException.html
index 6aa40b1..ce3c55b 100644
--- a/docs/html/classTimeoutException.html
+++ b/docs/html/classTimeoutException.html
@@ -112,7 +112,7 @@ int&#160;</td><td class="memItemRight" valign="bottom"><b>m_timeout</b></td></tr
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classUSART-members.html b/docs/html/classUSART-members.html
index 8d603c6..aab4287 100644
--- a/docs/html/classUSART-members.html
+++ b/docs/html/classUSART-members.html
@@ -94,7 +94,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classUSART.html b/docs/html/classUSART.html
index aa16cc1..24d0a7e 100644
--- a/docs/html/classUSART.html
+++ b/docs/html/classUSART.html
@@ -531,7 +531,7 @@ constexpr static uint8_t&#160;</td><td class="memItemRight" valign="bottom"><b>B
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classUSARTException-members.html b/docs/html/classUSARTException-members.html
index fb0f7cc..131e02f 100644
--- a/docs/html/classUSARTException-members.html
+++ b/docs/html/classUSARTException-members.html
@@ -77,7 +77,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classUSARTException.html b/docs/html/classUSARTException.html
index 96d050d..d85d089 100644
--- a/docs/html/classUSARTException.html
+++ b/docs/html/classUSARTException.html
@@ -109,7 +109,7 @@ std::string&#160;</td><td class="memItemRight" valign="bottom"><b>msg</b></td></
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classView-members.html b/docs/html/classView-members.html
index 0816e70..b4be838 100644
--- a/docs/html/classView-members.html
+++ b/docs/html/classView-members.html
@@ -89,7 +89,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classView.html b/docs/html/classView.html
index ba64d4a..d63c251 100644
--- a/docs/html/classView.html
+++ b/docs/html/classView.html
@@ -157,7 +157,7 @@ constexpr static int&#160;</td><td class="memItemRight" valign="bottom"><b>KEY_E
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewInfo-members.html b/docs/html/classViewInfo-members.html
index 11fecf3..744892f 100644
--- a/docs/html/classViewInfo-members.html
+++ b/docs/html/classViewInfo-members.html
@@ -99,7 +99,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewInfo.html b/docs/html/classViewInfo.html
index 090a6da..ee1b6e0 100644
--- a/docs/html/classViewInfo.html
+++ b/docs/html/classViewInfo.html
@@ -185,7 +185,7 @@ static std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valig
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewMonitor-members.html b/docs/html/classViewMonitor-members.html
index f8b0248..017648b 100644
--- a/docs/html/classViewMonitor-members.html
+++ b/docs/html/classViewMonitor-members.html
@@ -103,7 +103,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewMonitor.html b/docs/html/classViewMonitor.html
index 7566433..ea10ac1 100644
--- a/docs/html/classViewMonitor.html
+++ b/docs/html/classViewMonitor.html
@@ -197,7 +197,7 @@ constexpr static int&#160;</td><td class="memItemRight" valign="bottom"><b>KEY_E
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewPromt-members.html b/docs/html/classViewPromt-members.html
index 0620da4..da76ef6 100644
--- a/docs/html/classViewPromt-members.html
+++ b/docs/html/classViewPromt-members.html
@@ -105,7 +105,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewPromt.html b/docs/html/classViewPromt.html
index e4f148d..da8106e 100644
--- a/docs/html/classViewPromt.html
+++ b/docs/html/classViewPromt.html
@@ -205,7 +205,7 @@ static std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valig
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewSelection-members.html b/docs/html/classViewSelection-members.html
index 7eb9d49..ea0d8c3 100644
--- a/docs/html/classViewSelection-members.html
+++ b/docs/html/classViewSelection-members.html
@@ -94,7 +94,7 @@ $(function() {
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classViewSelection.html b/docs/html/classViewSelection.html
index 3983a76..59de0b0 100644
--- a/docs/html/classViewSelection.html
+++ b/docs/html/classViewSelection.html
@@ -172,7 +172,7 @@ static std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valig
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/classes.html b/docs/html/classes.html
index 54bd780..18d3b60 100644
--- a/docs/html/classes.html
+++ b/docs/html/classes.html
@@ -105,7 +105,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/cli_8cpp_source.html b/docs/html/cli_8cpp_source.html
index 941591f..dcdc53f 100644
--- a/docs/html/cli_8cpp_source.html
+++ b/docs/html/cli_8cpp_source.html
@@ -68,11 +68,11 @@ $(function() {
 <div class="contents">
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#define B15F_CLI_DEBUG</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;ncurses.h&gt;</span> <span class="comment">// sudo apt-get install libncurses5-dev</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;signal.h&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;sys/ioctl.h&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;signal.h&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;future&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &quot;drv/b15f.h&quot;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;ui/ui.h&quot;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;ui/view_selection.h&quot;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;ui/view_info.h&quot;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;ui/view_monitor.h&quot;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;ui/view_promt.h&quot;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">volatile</span> <span class="keywordtype">int</span> win_changed_cooldown = 0;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">volatile</span> <span class="keywordtype">bool</span> t_refresh_active = <span class="keyword">false</span>;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keywordtype">void</span> signal_handler(<span class="keywordtype">int</span> signal)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">if</span>(signal == SIGWINCH)</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    {</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;        win_changed_cooldown = 10; <span class="comment">// 100ms</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;        <span class="keywordflow">if</span> (!t_refresh_active)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        {</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;            <span class="keywordflow">if</span>(t_refresh.joinable())</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;                t_refresh.join();</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;            t_refresh_active = <span class="keyword">true</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;            t_refresh = std::thread([]()</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;            {</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;                <span class="keywordflow">while</span>(win_changed_cooldown--)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                    std::this_thread::sleep_for(std::chrono::milliseconds(10));</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;                t_refresh_active = <span class="keyword">false</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                <span class="keywordflow">if</span>(win_stack.size())</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                    win_stack.back()-&gt;repaint();</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;            });</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        }</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    }</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(signal == SIGINT)</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    {</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        cleanup();</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;SIGINT - Abbruch.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        exit(EXIT_FAILURE);</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    }</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;}</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keywordtype">void</span> abort_handler(std::exception&amp; ex)</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Fehler&quot;</span>);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    std::string msg(ex.what());</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    msg += <span class="stringliteral">&quot;\n\nBeende in 5 Sekunden.&quot;</span>;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    view-&gt;setText(msg.c_str());</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    std::this_thread::sleep_for(std::chrono::milliseconds(5000));</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    cleanup();</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    std::cerr &lt;&lt; std::endl &lt;&lt; <span class="stringliteral">&quot;*** EXCEPTION ***&quot;</span> &lt;&lt; std::endl &lt;&lt; ex.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    exit(EXIT_FAILURE);</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;}</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="keywordtype">void</span> init()</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="comment">// init b15 driver</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="preprocessor">#ifndef B15F_CLI_DEBUG</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    std::cout &lt;&lt; std::endl &lt;&lt; <span class="stringliteral">&quot;Starte in 3s ...&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    sleep(3);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <a class="code" href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a>(&amp;abort_handler);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="comment">// init all ncurses stuff</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    initscr();</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    start_color();</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    curs_set(0); <span class="comment">// 0: invisible, 1: normal, 2: very visible</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    clear();</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    noecho();</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    cbreak();  <span class="comment">// Line buffering disabled. pass on everything</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    mousemask(ALL_MOUSE_EVENTS, NULL);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="comment">// connect signals to handler</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    signal(SIGWINCH, signal_handler);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    signal(SIGINT, signal_handler);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="comment">// set view context</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    View::setWinContext(newwin(25, 85, 0, 0));</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;}</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="keywordtype">int</span> main()</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    init();</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordtype">int</span> exit_code = EXIT_SUCCESS;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    show_main(0);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    cleanup();</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">return</span> exit_code;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="aclassViewInfo_html"><div class="ttname"><a href="classViewInfo.html">ViewInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="view__info_8h_source.html#l00008">view_info.h:8</a></div></div>
-<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00343">b15f.cpp:343</a></div></div>
-<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00385">b15f.cpp:385</a></div></div>
+<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00383">b15f.cpp:383</a></div></div>
+<div class="ttc" id="aclassB15F_html_a55b0cd1ea582bda53d6979442640f8e9"><div class="ttname"><a href="classB15F.html#a55b0cd1ea582bda53d6979442640f8e9">B15F::setAbortHandler</a></div><div class="ttdeci">static void setAbortHandler(errorhandler_t func)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00425">b15f.cpp:425</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html b/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html
index bd969af..e501dfc 100644
--- a/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html
+++ b/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html
@@ -73,7 +73,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html b/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html
index 9d8eb0a..021c216 100644
--- a/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html
+++ b/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html
@@ -73,7 +73,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/dot_8cpp_source.html b/docs/html/dot_8cpp_source.html
index dd83450..6c6b61a 100644
--- a/docs/html/dot_8cpp_source.html
+++ b/docs/html/dot_8cpp_source.html
@@ -77,7 +77,7 @@ $(function() {
 <div class="ttc" id="aclassDot_html_ad975f119c0627a928790b3cd5ca6da05"><div class="ttname"><a href="classDot.html#ad975f119c0627a928790b3cd5ca6da05">Dot::Dot</a></div><div class="ttdeci">Dot(uint16_t x, uint16_t y, uint8_t curve)</div><div class="ttdef"><b>Definition:</b> <a href="dot_8cpp_source.html#l00003">dot.cpp:3</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/dot_8h_source.html b/docs/html/dot_8h_source.html
index 9c0bd19..773473b 100644
--- a/docs/html/dot_8h_source.html
+++ b/docs/html/dot_8h_source.html
@@ -78,7 +78,7 @@ $(function() {
 <div class="ttc" id="aclassDot_html_ad975f119c0627a928790b3cd5ca6da05"><div class="ttname"><a href="classDot.html#ad975f119c0627a928790b3cd5ca6da05">Dot::Dot</a></div><div class="ttdeci">Dot(uint16_t x, uint16_t y, uint8_t curve)</div><div class="ttdef"><b>Definition:</b> <a href="dot_8cpp_source.html#l00003">dot.cpp:3</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/driverexception_8h_source.html b/docs/html/driverexception_8h_source.html
index 015c2ad..b83ab80 100644
--- a/docs/html/driverexception_8h_source.html
+++ b/docs/html/driverexception_8h_source.html
@@ -74,7 +74,7 @@ $(function() {
 <div class="ttc" id="aclassDriverException_html"><div class="ttname"><a href="classDriverException.html">DriverException</a></div><div class="ttdef"><b>Definition:</b> <a href="driverexception_8h_source.html#l00010">driverexception.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/files.html b/docs/html/files.html
index e880b89..4d38804 100644
--- a/docs/html/files.html
+++ b/docs/html/files.html
@@ -99,7 +99,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/functions.html b/docs/html/functions.html
index 26bae8d..ccd1c21 100644
--- a/docs/html/functions.html
+++ b/docs/html/functions.html
@@ -191,6 +191,9 @@ $(function() {
 <li>getRefY()
 : <a class="el" href="classPlottyFile.html#ae6650c61a3b1a610ce716253418bd7f2">PlottyFile</a>
 </li>
+<li>getRegister()
+: <a class="el" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">B15F</a>
+</li>
 <li>getTimeout()
 : <a class="el" href="classUSART.html#a19cf777956a038878fc2d2b58c3d2b41">USART</a>
 </li>
@@ -301,6 +304,9 @@ $(function() {
 <li>setRefY()
 : <a class="el" href="classPlottyFile.html#a3a371228ddcc007e97eebe7cc04dffc2">PlottyFile</a>
 </li>
+<li>setRegister()
+: <a class="el" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">B15F</a>
+</li>
 <li>setTimeout()
 : <a class="el" href="classUSART.html#ad7fe866cebe920784d2b17602824c7ff">USART</a>
 </li>
@@ -349,7 +355,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
index 1c2fd52..89acf80 100644
--- a/docs/html/functions_func.html
+++ b/docs/html/functions_func.html
@@ -184,6 +184,9 @@ $(function() {
 <li>getRefY()
 : <a class="el" href="classPlottyFile.html#ae6650c61a3b1a610ce716253418bd7f2">PlottyFile</a>
 </li>
+<li>getRegister()
+: <a class="el" href="classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3">B15F</a>
+</li>
 <li>getTimeout()
 : <a class="el" href="classUSART.html#a19cf777956a038878fc2d2b58c3d2b41">USART</a>
 </li>
@@ -275,6 +278,9 @@ $(function() {
 <li>setRefY()
 : <a class="el" href="classPlottyFile.html#a3a371228ddcc007e97eebe7cc04dffc2">PlottyFile</a>
 </li>
+<li>setRegister()
+: <a class="el" href="classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582">B15F</a>
+</li>
 <li>setTimeout()
 : <a class="el" href="classUSART.html#ad7fe866cebe920784d2b17602824c7ff">USART</a>
 </li>
@@ -320,7 +326,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
index 3172ad7..a041bb7 100644
--- a/docs/html/functions_vars.html
+++ b/docs/html/functions_vars.html
@@ -88,7 +88,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
index bf24851..506d51b 100644
--- a/docs/html/hierarchy.html
+++ b/docs/html/hierarchy.html
@@ -86,7 +86,7 @@ $(function() {
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/index.html b/docs/html/index.html
index 50426bf..63f9619 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -72,7 +72,7 @@ Dort befindet sich auch eine Übersicht der verfügbaren Befehle. </p>
 </div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/plottyfile_8cpp_source.html b/docs/html/plottyfile_8cpp_source.html
index abd1e0b..1427215 100644
--- a/docs/html/plottyfile_8cpp_source.html
+++ b/docs/html/plottyfile_8cpp_source.html
@@ -101,7 +101,7 @@ $(function() {
 <div class="ttc" id="aclassPlottyFile_html_af952ac5e2c40896acaf6a86063874fe3"><div class="ttname"><a href="classPlottyFile.html#af952ac5e2c40896acaf6a86063874fe3">PlottyFile::getUnitX</a></div><div class="ttdeci">std::string getUnitX(void) const</div><div class="ttdef"><b>Definition:</b> <a href="plottyfile_8cpp_source.html#l00105">plottyfile.cpp:105</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/plottyfile_8h_source.html b/docs/html/plottyfile_8h_source.html
index dd26e80..1021496 100644
--- a/docs/html/plottyfile_8h_source.html
+++ b/docs/html/plottyfile_8h_source.html
@@ -102,7 +102,7 @@ $(function() {
 <div class="ttc" id="aclassPlottyFile_html_af952ac5e2c40896acaf6a86063874fe3"><div class="ttname"><a href="classPlottyFile.html#af952ac5e2c40896acaf6a86063874fe3">PlottyFile::getUnitX</a></div><div class="ttdeci">std::string getUnitX(void) const</div><div class="ttdef"><b>Definition:</b> <a href="plottyfile_8cpp_source.html#l00105">plottyfile.cpp:105</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js
index c269a53..9518d98 100644
--- a/docs/html/search/all_6.js
+++ b/docs/html/search/all_6.js
@@ -13,6 +13,7 @@ var searchData=
   ['getquadrant',['getQuadrant',['../classPlottyFile.html#a54e94e80061a27614f2d4d63697d3376',1,'PlottyFile']]],
   ['getrefx',['getRefX',['../classPlottyFile.html#a7dd84b9f0826f3220fc6b5a4f1ce9890',1,'PlottyFile']]],
   ['getrefy',['getRefY',['../classPlottyFile.html#ae6650c61a3b1a610ce716253418bd7f2',1,'PlottyFile']]],
+  ['getregister',['getRegister',['../classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3',1,'B15F']]],
   ['gettimeout',['getTimeout',['../classUSART.html#a19cf777956a038878fc2d2b58c3d2b41',1,'USART']]],
   ['getunitpara',['getUnitPara',['../classPlottyFile.html#abcda4139adf8c5ab8a93b13b84ac097c',1,'PlottyFile']]],
   ['getunitx',['getUnitX',['../classPlottyFile.html#af952ac5e2c40896acaf6a86063874fe3',1,'PlottyFile']]],
diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js
index 588c06f..552513c 100644
--- a/docs/html/search/all_b.js
+++ b/docs/html/search/all_b.js
@@ -11,6 +11,7 @@ var searchData=
   ['setquadrant',['setQuadrant',['../classPlottyFile.html#a1953ee0d9a87b7353c16139584e9c2ae',1,'PlottyFile']]],
   ['setrefx',['setRefX',['../classPlottyFile.html#a80c2c2e97a454566f9c1f2c51e1d7f3e',1,'PlottyFile']]],
   ['setrefy',['setRefY',['../classPlottyFile.html#a3a371228ddcc007e97eebe7cc04dffc2',1,'PlottyFile']]],
+  ['setregister',['setRegister',['../classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582',1,'B15F']]],
   ['settimeout',['setTimeout',['../classUSART.html#ad7fe866cebe920784d2b17602824c7ff',1,'USART']]],
   ['setunitpara',['setUnitPara',['../classPlottyFile.html#abbac84109a1e0958a4ca5c270fac0986',1,'PlottyFile']]],
   ['setunitx',['setUnitX',['../classPlottyFile.html#ab8d35a841ca9c325fca671cf34e03527',1,'PlottyFile']]],
diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js
index c269a53..9518d98 100644
--- a/docs/html/search/functions_5.js
+++ b/docs/html/search/functions_5.js
@@ -13,6 +13,7 @@ var searchData=
   ['getquadrant',['getQuadrant',['../classPlottyFile.html#a54e94e80061a27614f2d4d63697d3376',1,'PlottyFile']]],
   ['getrefx',['getRefX',['../classPlottyFile.html#a7dd84b9f0826f3220fc6b5a4f1ce9890',1,'PlottyFile']]],
   ['getrefy',['getRefY',['../classPlottyFile.html#ae6650c61a3b1a610ce716253418bd7f2',1,'PlottyFile']]],
+  ['getregister',['getRegister',['../classB15F.html#a43b477a9e2e5b1b2142958fa5e1a78b3',1,'B15F']]],
   ['gettimeout',['getTimeout',['../classUSART.html#a19cf777956a038878fc2d2b58c3d2b41',1,'USART']]],
   ['getunitpara',['getUnitPara',['../classPlottyFile.html#abcda4139adf8c5ab8a93b13b84ac097c',1,'PlottyFile']]],
   ['getunitx',['getUnitX',['../classPlottyFile.html#af952ac5e2c40896acaf6a86063874fe3',1,'PlottyFile']]],
diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js
index 588c06f..552513c 100644
--- a/docs/html/search/functions_9.js
+++ b/docs/html/search/functions_9.js
@@ -11,6 +11,7 @@ var searchData=
   ['setquadrant',['setQuadrant',['../classPlottyFile.html#a1953ee0d9a87b7353c16139584e9c2ae',1,'PlottyFile']]],
   ['setrefx',['setRefX',['../classPlottyFile.html#a80c2c2e97a454566f9c1f2c51e1d7f3e',1,'PlottyFile']]],
   ['setrefy',['setRefY',['../classPlottyFile.html#a3a371228ddcc007e97eebe7cc04dffc2',1,'PlottyFile']]],
+  ['setregister',['setRegister',['../classB15F.html#a2735424cf98bd0e2892b5a9b6eb24582',1,'B15F']]],
   ['settimeout',['setTimeout',['../classUSART.html#ad7fe866cebe920784d2b17602824c7ff',1,'USART']]],
   ['setunitpara',['setUnitPara',['../classPlottyFile.html#abbac84109a1e0958a4ca5c270fac0986',1,'PlottyFile']]],
   ['setunitx',['setUnitX',['../classPlottyFile.html#ab8d35a841ca9c325fca671cf34e03527',1,'PlottyFile']]],
diff --git a/docs/html/timeoutexception_8h_source.html b/docs/html/timeoutexception_8h_source.html
index 9351c47..0bfd0e2 100644
--- a/docs/html/timeoutexception_8h_source.html
+++ b/docs/html/timeoutexception_8h_source.html
@@ -74,7 +74,7 @@ $(function() {
 <div class="ttc" id="aclassTimeoutException_html"><div class="ttname"><a href="classTimeoutException.html">TimeoutException</a></div><div class="ttdef"><b>Definition:</b> <a href="timeoutexception_8h_source.html#l00010">timeoutexception.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/ui_8cpp_source.html b/docs/html/ui_8cpp_source.html
index 2012b32..b82ff5f 100644
--- a/docs/html/ui_8cpp_source.html
+++ b/docs/html/ui_8cpp_source.html
@@ -73,8 +73,8 @@ $(function() {
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;ui.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#include &quot;../drv/b15f.h&quot;</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;std::vector&lt;View*&gt; win_stack;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;std::thread t_refresh;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="keywordtype">void</span> show_main(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;{</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;    <a class="code" href="classViewSelection.html">ViewSelection</a>* view = <span class="keyword">new</span> <a class="code" href="classViewSelection.html">ViewSelection</a>();</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;B15F - Command Line Interface&quot;</span>);</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Monitor - Eingaben beobachten ]&quot;</span>, &amp;show_monitor);</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Digitale Ausgabe BE0 ]&quot;</span>, &amp;show_digital_output0);</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Digitale Ausgabe BE1 ]&quot;</span>, &amp;show_digital_output1);</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Analoge  Ausgabe AA0 ]&quot;</span>, &amp;show_analog_output0);</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Analoge  Ausgabe AA1 ]&quot;</span>, &amp;show_analog_output1);</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Selbsttest des B15 ]&quot;</span>, &amp;show_selftest_info);</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Informationen ]&quot;</span>, &amp;show_info);</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;&quot;</span>, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    view-&gt;addChoice(<span class="stringliteral">&quot;[ Beenden ]&quot;</span>, &amp;finish);</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    input(0);</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;}</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keywordtype">void</span> input(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    call_t nextCall;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="keywordtype">int</span> key;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keywordflow">do</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    {</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        key = wgetch(View::getWinContext());</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;        win_stack.back()-&gt;repaint();</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;        nextCall = win_stack.back()-&gt;keypress(key);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        <span class="keywordflow">if</span>(key == -1)</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;            view_back(key);</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">if</span>(nextCall)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            nextCall(key);</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    }</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keywordflow">while</span>(win_stack.size());</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160; </div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="keywordtype">void</span> view_back(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">if</span>(win_stack.size())</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    {</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        <span class="keyword">delete</span> win_stack.back();</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;        win_stack.pop_back();</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    }</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keywordflow">if</span>(win_stack.size())</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        win_stack.back()-&gt;repaint();</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;}</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keywordtype">void</span> finish(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;{</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    cleanup();</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    exit(EXIT_SUCCESS);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;}</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="keywordtype">void</span> cleanup()</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">if</span>(t_refresh.joinable())</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        t_refresh.join();</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    clrtoeol();</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    refresh();</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    endwin();</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;}</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keywordtype">void</span> show_info(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;{</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Info&quot;</span>);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;Informationen zu Board 15 Famulus Edition\nEs war einmal...&quot;</span>);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    input(0);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;}</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160; </div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keywordtype">void</span> show_monitor(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;{</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <a class="code" href="classViewMonitor.html">ViewMonitor</a>* view = <span class="keyword">new</span> <a class="code" href="classViewMonitor.html">ViewMonitor</a>();</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Monitor&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;\nErfasse Messwerte...&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    input(0);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="keywordtype">void</span> show_invalid_port_input(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Falsche Eingabe&quot;</span>);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;Bitte geben Sie einen Wert aus dem Intervall [0, FF] an.&quot;</span>);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Schliessen ]&quot;</span>);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    input(0);</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;}</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keywordtype">void</span> show_invalid_dac_input(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;{</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Falsche Eingabe&quot;</span>);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;Bitte geben Sie einen Wert aus dem Intervall [0, 1023] an.&quot;</span>);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Schliessen ]&quot;</span>);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    input(0);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;}</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keywordtype">void</span> write_digital_output0(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;{</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    {</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <span class="keywordtype">int</span> d = std::stoi(static_cast&lt;ViewPromt*&gt;(win_stack.back())-&gt;getInput(), 0, 16);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="keywordflow">if</span>(d &gt; 255 || 0 &gt; d)</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;            <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;bad value&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        uint8_t port = static_cast&lt;uint8_t&gt;(d);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160; </div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        drv.<a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">digitalWrite0</a>(port);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        view_back(0);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    }</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordflow">catch</span>(std::invalid_argument&amp; ex)</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    {</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        show_invalid_port_input(0);</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    }</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;}</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="keywordtype">void</span> write_digital_output1(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;{</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    {</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="keywordtype">int</span> d = std::stoi(static_cast&lt;ViewPromt*&gt;(win_stack.back())-&gt;getInput(), 0, 16);</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <span class="keywordflow">if</span>(d &gt; 255 || 0 &gt; d)</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;bad value&quot;</span>);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        uint8_t port = static_cast&lt;uint8_t&gt;(d);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160; </div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        drv.<a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">digitalWrite1</a>(port);</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        view_back(0);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    }</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">catch</span>(std::invalid_argument&amp; ex)</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    {</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        show_invalid_port_input(0);</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    }</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;}</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="keywordtype">void</span> write_analog_output0(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;{</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    {</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        uint16_t port = std::stoi(static_cast&lt;ViewPromt*&gt;(win_stack.back())-&gt;getInput());</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">if</span>(port &gt; 1023)</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;bad value&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        drv.<a class="code" href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">analogWrite0</a>(port);</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        view_back(0);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">catch</span>(std::invalid_argument&amp; ex)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        show_invalid_dac_input(0);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;}</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="keywordtype">void</span> write_analog_output1(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;{</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    {</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        uint16_t port = std::stoi(static_cast&lt;ViewPromt*&gt;(win_stack.back())-&gt;getInput());</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="keywordflow">if</span>(port &gt; 1023)</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;            <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;bad value&quot;</span>);</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160; </div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        drv.<a class="code" href="classB15F.html#a7f1becceac744f5cd2ad529748fd836f">analogWrite1</a>(port);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        view_back(0);</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    }</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="keywordflow">catch</span>(std::invalid_argument&amp; ex)</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    {</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        show_invalid_dac_input(0);</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;}</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="keywordtype">void</span> show_digital_output0(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;{</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <a class="code" href="classViewPromt.html">ViewPromt</a>* view = <span class="keyword">new</span> <a class="code" href="classViewPromt.html">ViewPromt</a>();</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Digitale Ausgabe BE0&quot;</span>);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    view-&gt;setMessage(<span class="stringliteral">&quot;\nAusgabe Port-Wert (hex): 0x&quot;</span>);</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    view-&gt;setCancel(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    view-&gt;setConfirm(<span class="stringliteral">&quot;[ OK ]&quot;</span>, &amp;write_digital_output0);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160; </div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    input(0);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;}</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="keywordtype">void</span> show_digital_output1(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;{</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <a class="code" href="classViewPromt.html">ViewPromt</a>* view = <span class="keyword">new</span> <a class="code" href="classViewPromt.html">ViewPromt</a>();</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Digitale Ausgabe BE1&quot;</span>);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    view-&gt;setMessage(<span class="stringliteral">&quot;\nAusgabe Port-Wert (hex): 0x&quot;</span>);</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    view-&gt;setCancel(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    view-&gt;setConfirm(<span class="stringliteral">&quot;[ OK ]&quot;</span>, &amp;write_digital_output1);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    input(0);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;}</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="keywordtype">void</span> show_analog_output0(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;{</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <a class="code" href="classViewPromt.html">ViewPromt</a>* view = <span class="keyword">new</span> <a class="code" href="classViewPromt.html">ViewPromt</a>();</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Analoge Ausgabe AA0&quot;</span>);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    view-&gt;setMessage(<span class="stringliteral">&quot;\nAusgabe 10-Bit-Wert (0...1023): &quot;</span>);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    view-&gt;setCancel(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    view-&gt;setConfirm(<span class="stringliteral">&quot;[ OK ]&quot;</span>, &amp;write_analog_output0);</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160; </div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    input(0);</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;}</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160; </div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="keywordtype">void</span> show_analog_output1(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <a class="code" href="classViewPromt.html">ViewPromt</a>* view = <span class="keyword">new</span> <a class="code" href="classViewPromt.html">ViewPromt</a>();</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Analoge Ausgabe AA1&quot;</span>);</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    view-&gt;setMessage(<span class="stringliteral">&quot;\nAusgabe 10-Bit-Wert (0...1023): &quot;</span>);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    view-&gt;setCancel(<span class="stringliteral">&quot;[ Zurueck ]&quot;</span>, <span class="keyword">true</span>);</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    view-&gt;setConfirm(<span class="stringliteral">&quot;[ OK ]&quot;</span>, &amp;write_analog_output1);</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    input(0);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;}</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160; </div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keywordtype">void</span> start_selftest(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;{</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    drv.<a class="code" href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">activateSelfTestMode</a>();</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160; </div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Selbsttest aktiv&quot;</span>);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;Das B15 befindet sich jetzt im Selbsttestmodus.\n \nSelbsttest:\nZu Beginn geht der Reihe nach jede LED von BA0 bis BA1 an.\nDanach leuchten die LEDs an AA0 und AA1 kurz auf.\nZum Schluss spiegelt in einer Endlosschleife:\n* BA0 Port BE0\n* BA1 die DIP-Schalter S7\n* AA0 ADC0\n* AA1 ADC1&quot;</span>);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Selbsttest Beenden ]&quot;</span>);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    view-&gt;setCall(&amp;stop_selftest);</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160; </div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    input(0);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;}</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160; </div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="keywordtype">void</span> stop_selftest(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;{</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <a class="code" href="classB15F.html">B15F</a>&amp; drv = <a class="code" href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a>();</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    drv.<a class="code" href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">discard</a>();</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    drv.<a class="code" href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">delay_ms</a>(<a class="code" href="classB15F.html#a158d13bc84aed6430cdede1396384e06">B15F::WDT_TIMEOUT</a>);</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    drv.<a class="code" href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">reconnect</a>();</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    drv.<a class="code" href="classB15F.html#a13797edea1c50278988373acbd110064">digitalWrite0</a>(0);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    drv.<a class="code" href="classB15F.html#aa225e7fc813849634063e071ef25db1b">digitalWrite1</a>(0);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="keywordtype">void</span> show_selftest_info(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;{</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <a class="code" href="classViewInfo.html">ViewInfo</a>* view = <span class="keyword">new</span> <a class="code" href="classViewInfo.html">ViewInfo</a>();</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    view-&gt;setTitle(<span class="stringliteral">&quot;Selbsttest&quot;</span>);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    view-&gt;setText(<span class="stringliteral">&quot;Bitte entfernen Sie jetzt alle Draehte von den Anschlussklemmen und bestaetigen\nmit Enter.&quot;</span>);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    view-&gt;setLabelClose(<span class="stringliteral">&quot;[ Weiter ]&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    view-&gt;setCall(&amp;start_selftest);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    view-&gt;repaint();</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160; </div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    win_stack.push_back(view);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    input(0);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
 <div class="ttc" id="aclassViewMonitor_html"><div class="ttname"><a href="classViewMonitor.html">ViewMonitor</a></div><div class="ttdef"><b>Definition:</b> <a href="view__monitor_8h_source.html#l00013">view_monitor.h:13</a></div></div>
 <div class="ttc" id="aclassViewInfo_html"><div class="ttname"><a href="classViewInfo.html">ViewInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="view__info_8h_source.html#l00008">view_info.h:8</a></div></div>
-<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
-<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00343">b15f.cpp:343</a></div></div>
+<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00373">b15f.cpp:373</a></div></div>
+<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00383">b15f.cpp:383</a></div></div>
 <div class="ttc" id="aclassB15F_html"><div class="ttname"><a href="classB15F.html">B15F</a></div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00026">b15f.h:26</a></div></div>
 <div class="ttc" id="aclassB15F_html_a13797edea1c50278988373acbd110064"><div class="ttname"><a href="classB15F.html#a13797edea1c50278988373acbd110064">B15F::digitalWrite0</a></div><div class="ttdeci">bool digitalWrite0(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00153">b15f.cpp:153</a></div></div>
 <div class="ttc" id="aclassB15F_html_ad9bf80ee2485fb5aac9926c6ef0731f1"><div class="ttname"><a href="classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1">B15F::activateSelfTestMode</a></div><div class="ttdeci">bool activateSelfTestMode(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00145">b15f.cpp:145</a></div></div>
@@ -83,12 +83,12 @@ $(function() {
 <div class="ttc" id="aclassViewPromt_html"><div class="ttname"><a href="classViewPromt.html">ViewPromt</a></div><div class="ttdef"><b>Definition:</b> <a href="view__promt_8h_source.html#l00010">view_promt.h:10</a></div></div>
 <div class="ttc" id="aclassB15F_html_aa225e7fc813849634063e071ef25db1b"><div class="ttname"><a href="classB15F.html#aa225e7fc813849634063e071ef25db1b">B15F::digitalWrite1</a></div><div class="ttdeci">bool digitalWrite1(uint8_t)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00163">b15f.cpp:163</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae4740cd473f40a1a4121dfa66b25e1d5"><div class="ttname"><a href="classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5">B15F::discard</a></div><div class="ttdeci">void discard(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00072">b15f.cpp:72</a></div></div>
-<div class="ttc" id="aclassB15F_html_a158d13bc84aed6430cdede1396384e06"><div class="ttname"><a href="classB15F.html#a158d13bc84aed6430cdede1396384e06">B15F::WDT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t WDT_TIMEOUT</div><div class="ttdoc">Time in ms after which the watch dog timer resets the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00219">b15f.h:219</a></div></div>
+<div class="ttc" id="aclassB15F_html_a158d13bc84aed6430cdede1396384e06"><div class="ttname"><a href="classB15F.html#a158d13bc84aed6430cdede1396384e06">B15F::WDT_TIMEOUT</a></div><div class="ttdeci">constexpr static uint16_t WDT_TIMEOUT</div><div class="ttdoc">Time in ms after which the watch dog timer resets the MCU.</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00235">b15f.h:235</a></div></div>
 <div class="ttc" id="aclassB15F_html_a52557b375443c180a044e7d4e80a1ae7"><div class="ttname"><a href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a></div><div class="ttdeci">void reconnect(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00057">b15f.cpp:57</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc55fd590c7fa5c942d100cb60c4b0d3"><div class="ttname"><a href="classB15F.html#afc55fd590c7fa5c942d100cb60c4b0d3">B15F::analogWrite0</a></div><div class="ttdeci">bool analogWrite0(uint16_t port)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00200">b15f.cpp:200</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/ui_8h_source.html b/docs/html/ui_8h_source.html
index 545b5cb..e3da44c 100644
--- a/docs/html/ui_8h_source.html
+++ b/docs/html/ui_8h_source.html
@@ -73,7 +73,7 @@ $(function() {
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#ifndef UI_H</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define UI_H</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160; </div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &quot;view_selection.h&quot;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;view_info.h&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;view_monitor.h&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &quot;view_promt.h&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160; </div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="keywordtype">void</span> show_main(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="keywordtype">void</span> input(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="keywordtype">void</span> view_back(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="keywordtype">void</span> finish(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keywordtype">void</span> cleanup();</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keywordtype">void</span> show_info(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keywordtype">void</span> show_monitor(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="keywordtype">void</span> show_invalid_port_input(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keywordtype">void</span> show_invalid_dac_input(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keywordtype">void</span> write_digital_output0(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keywordtype">void</span> write_digital_output1(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keywordtype">void</span> write_analog_output0(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keywordtype">void</span> write_analog_output1(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keywordtype">void</span> show_digital_output0(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keywordtype">void</span> show_digital_output1(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keywordtype">void</span> show_analog_output0(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keywordtype">void</span> show_analog_output1(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">// selftest group</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keywordtype">void</span> show_selftest_info(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keywordtype">void</span> start_selftest(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keywordtype">void</span> stop_selftest(<span class="keywordtype">int</span>);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">extern</span> std::vector&lt;View*&gt; win_stack;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">extern</span> std::thread t_refresh;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#endif // UI_H</span></div></div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/usart_8cpp_source.html b/docs/html/usart_8cpp_source.html
index 70b7d23..3c613ee 100644
--- a/docs/html/usart_8cpp_source.html
+++ b/docs/html/usart_8cpp_source.html
@@ -90,7 +90,7 @@ $(function() {
 <div class="ttc" id="aclassUSART_html_a78b30d9aa863f38745e982860392599a"><div class="ttname"><a href="classUSART.html#a78b30d9aa863f38745e982860392599a">USART::writeInt</a></div><div class="ttdeci">void writeInt(uint16_t d)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00081">usart.cpp:81</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/usart_8h_source.html b/docs/html/usart_8h_source.html
index 25eac7a..fb279ff 100644
--- a/docs/html/usart_8h_source.html
+++ b/docs/html/usart_8h_source.html
@@ -89,7 +89,7 @@ $(function() {
 <div class="ttc" id="aclassUSART_html_a78b30d9aa863f38745e982860392599a"><div class="ttname"><a href="classUSART.html#a78b30d9aa863f38745e982860392599a">USART::writeInt</a></div><div class="ttdeci">void writeInt(uint16_t d)</div><div class="ttdef"><b>Definition:</b> <a href="usart_8cpp_source.html#l00081">usart.cpp:81</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/usartexception_8h_source.html b/docs/html/usartexception_8h_source.html
index d037b79..ce6e187 100644
--- a/docs/html/usartexception_8h_source.html
+++ b/docs/html/usartexception_8h_source.html
@@ -74,7 +74,7 @@ $(function() {
 <div class="ttc" id="aclassUSARTException_html"><div class="ttname"><a href="classUSARTException.html">USARTException</a></div><div class="ttdef"><b>Definition:</b> <a href="usartexception_8h_source.html#l00011">usartexception.h:11</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view_8cpp_source.html b/docs/html/view_8cpp_source.html
index 030d2a5..ce0f029 100644
--- a/docs/html/view_8cpp_source.html
+++ b/docs/html/view_8cpp_source.html
@@ -71,10 +71,10 @@ $(function() {
 </div><!--header-->
 <div class="contents">
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;view.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;WINDOW* View::win = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160; </div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;View::View()</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;{</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;    <span class="keywordflow">if</span>(!win)</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    {</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;        <a class="code" href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a>(<span class="stringliteral">&quot;View::win not initialized, missing context&quot;</span>);</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    }</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;    getmaxyx(win, height, width); <span class="comment">// init width and height</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;    keypad(win, TRUE);</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;}</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;View::~View()</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;{</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;}</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keywordtype">void</span> View::setWinContext(WINDOW* win)</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    View::win = win;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;}</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;WINDOW* View::getWinContext()</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <span class="keywordflow">return</span> win;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;}</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment">// from: https://stackoverflow.com/a/37454181</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;std::vector&lt;std::string&gt; View::str_split(<span class="keyword">const</span> std::string&amp; str, <span class="keyword">const</span> std::string delim)</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;{</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    std::vector&lt;std::string&gt; tokens;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordtype">size_t</span> prev = 0, pos = 0;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keywordflow">do</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;        pos = str.find(delim, prev);</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        <span class="keywordflow">if</span> (pos == std::string::npos) pos = str.length();</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        std::string token = str.substr(prev, pos-prev);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">if</span> (!token.empty()) tokens.push_back(token);</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;        prev = pos + delim.length();</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    }</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keywordflow">while</span> (pos &lt; str.length() &amp;&amp; prev &lt; str.length());</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keywordflow">return</span> tokens;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;}</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keywordtype">void</span> View::setTitle(std::string title)</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    this-&gt;title = title;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;}</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keywordtype">void</span> View::repaint()</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">// get screen size</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keyword">struct </span>winsize size;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">if</span> (ioctl(0, TIOCGWINSZ, (<span class="keywordtype">char</span> *) &amp;size) &lt; 0)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;TIOCGWINSZ error&quot;</span>);</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    start_x = floor((size.ws_col - width) / 2.);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    start_y = floor((size.ws_row - height) / 2.);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    curs_set(0); <span class="comment">// hide cursor</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    mvwin(win, start_y, start_x);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    clear();</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    wclear(win);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="comment">// generic draw</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    box(win, 0, 0);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordtype">int</span> offset_x = (width - title.length()) / 2;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    mvwprintw(win, 1, offset_x, <span class="stringliteral">&quot;%s&quot;</span>, title.c_str());</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="comment">// specific draw</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    draw();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    refresh();</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    wrefresh(win);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
-<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00368">b15f.cpp:368</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00408">b15f.cpp:408</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view_8h_source.html b/docs/html/view_8h_source.html
index 8978a3e..34219aa 100644
--- a/docs/html/view_8h_source.html
+++ b/docs/html/view_8h_source.html
@@ -74,7 +74,7 @@ $(function() {
 <div class="ttc" id="aclassView_html"><div class="ttname"><a href="classView.html">View</a></div><div class="ttdef"><b>Definition:</b> <a href="view_8h_source.html#l00019">view.h:19</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__info_8cpp_source.html b/docs/html/view__info_8cpp_source.html
index c9d1a98..fc91695 100644
--- a/docs/html/view__info_8cpp_source.html
+++ b/docs/html/view__info_8cpp_source.html
@@ -73,7 +73,7 @@ $(function() {
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;view_info.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;ViewInfo::ViewInfo()</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;{</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;    calls.push_back(<span class="keyword">nullptr</span>);</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;}</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="keywordtype">void</span> ViewInfo::setText(std::string text)</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;{</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    this-&gt;text = text;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;}</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="keywordtype">void</span> ViewInfo::setLabelClose(std::string label)</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    this-&gt;label_close = label;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;}</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="keywordtype">void</span> ViewInfo::setCall(call_t call)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    calls[0] = call;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;}</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keywordtype">void</span> ViewInfo::draw()</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;{</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <span class="keywordtype">int</span> li = 0;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <span class="keywordflow">for</span>(std::string line : str_split(text, <span class="stringliteral">&quot;\n&quot;</span>))</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;        mvwprintw(win, text_offset_y + li++, text_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, line.c_str());</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    close_offset_x = (width - label_close.length()) / 2;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    close_offset_y = height - 2;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    wattron(win, A_REVERSE);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    mvwprintw(win, close_offset_y, close_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, label_close.c_str());</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    wattroff(win, A_REVERSE);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;}</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;call_t ViewInfo::keypress(<span class="keywordtype">int</span>&amp; key)</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keywordflow">switch</span>(key)</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    {</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keywordflow">case</span> KEY_MOUSE:</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    {</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;        <span class="comment">// http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        MEVENT event;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        <span class="keywordflow">if</span>(getmouse(&amp;event) == OK &amp;&amp; event.bstate &amp; (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        {</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;            <span class="keywordtype">size_t</span> column = start_x + close_offset_x;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;            <span class="keywordtype">size_t</span> row = start_y + close_offset_y;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;            <span class="keywordtype">size_t</span> mouse_x = <span class="keyword">event</span>.x, mouse_y = <span class="keyword">event</span>.y;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;            <span class="keywordflow">if</span>(mouse_y == row &amp;&amp; mouse_x &gt;= column &amp;&amp; mouse_x &lt; column + label_close.length())</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                key = -1; <span class="comment">// do return from view</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;        }</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    }</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">case</span> KEY_ENT:</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        key = -1; <span class="comment">// do return from view</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">return</span> calls[0];</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__info_8h_source.html b/docs/html/view__info_8h_source.html
index 4aaf34e..253009d 100644
--- a/docs/html/view__info_8h_source.html
+++ b/docs/html/view__info_8h_source.html
@@ -75,7 +75,7 @@ $(function() {
 <div class="ttc" id="aclassView_html"><div class="ttname"><a href="classView.html">View</a></div><div class="ttdef"><b>Definition:</b> <a href="view_8h_source.html#l00019">view.h:19</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__monitor_8cpp_source.html b/docs/html/view__monitor_8cpp_source.html
index fa3a723..09f6315 100644
--- a/docs/html/view__monitor_8cpp_source.html
+++ b/docs/html/view__monitor_8cpp_source.html
@@ -74,17 +74,17 @@ $(function() {
 <div class="ttc" id="aclassViewMonitor_html"><div class="ttname"><a href="classViewMonitor.html">ViewMonitor</a></div><div class="ttdef"><b>Definition:</b> <a href="view__monitor_8h_source.html#l00013">view_monitor.h:13</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0df6d423deeb2fd610968bd1c72060e"><div class="ttname"><a href="classB15F.html#ae0df6d423deeb2fd610968bd1c72060e">B15F::digitalRead0</a></div><div class="ttdeci">uint8_t digitalRead0(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00173">b15f.cpp:173</a></div></div>
 <div class="ttc" id="aclassB15F_html_a6f858f21ea81d491b5031b3644a2239a"><div class="ttname"><a href="classB15F.html#a6f858f21ea81d491b5031b3644a2239a">B15F::readDipSwitch</a></div><div class="ttdeci">uint8_t readDipSwitch(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00191">b15f.cpp:191</a></div></div>
-<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00333">b15f.cpp:333</a></div></div>
-<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00343">b15f.cpp:343</a></div></div>
+<div class="ttc" id="aclassB15F_html_aaffce20afb9f06bc4b7556c70ce76416"><div class="ttname"><a href="classB15F.html#aaffce20afb9f06bc4b7556c70ce76416">B15F::delay_ms</a></div><div class="ttdeci">void delay_ms(uint16_t ms)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00373">b15f.cpp:373</a></div></div>
+<div class="ttc" id="aclassB15F_html_a8b4533d232c55ef2aa967e39e2d23380"><div class="ttname"><a href="classB15F.html#a8b4533d232c55ef2aa967e39e2d23380">B15F::getInstance</a></div><div class="ttdeci">static B15F &amp; getInstance(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00383">b15f.cpp:383</a></div></div>
 <div class="ttc" id="aclassB15F_html"><div class="ttname"><a href="classB15F.html">B15F</a></div><div class="ttdef"><b>Definition:</b> <a href="b15f_8h_source.html#l00026">b15f.h:26</a></div></div>
-<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00368">b15f.cpp:368</a></div></div>
+<div class="ttc" id="aclassB15F_html_a3f09a418f9e3be5d1d750e4515c96f1e"><div class="ttname"><a href="classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e">B15F::abort</a></div><div class="ttdeci">static void abort(std::string msg)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00408">b15f.cpp:408</a></div></div>
 <div class="ttc" id="aclassB15F_html_ae0bd1f69751e2dc3c462db9213fc4627"><div class="ttname"><a href="classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627">B15F::analogRead</a></div><div class="ttdeci">uint16_t analogRead(uint8_t channel)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00220">b15f.cpp:220</a></div></div>
 <div class="ttc" id="aclassB15F_html_afc76b612dd4faeee0ac02a66b65af5f2"><div class="ttname"><a href="classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2">B15F::digitalRead1</a></div><div class="ttdeci">uint8_t digitalRead1(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00182">b15f.cpp:182</a></div></div>
 <div class="ttc" id="aclassB15F_html_a52557b375443c180a044e7d4e80a1ae7"><div class="ttname"><a href="classB15F.html#a52557b375443c180a044e7d4e80a1ae7">B15F::reconnect</a></div><div class="ttdeci">void reconnect(void)</div><div class="ttdef"><b>Definition:</b> <a href="b15f_8cpp_source.html#l00057">b15f.cpp:57</a></div></div>
 <div class="ttc" id="aclassDriverException_html"><div class="ttname"><a href="classDriverException.html">DriverException</a></div><div class="ttdef"><b>Definition:</b> <a href="driverexception_8h_source.html#l00010">driverexception.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__monitor_8h_source.html b/docs/html/view__monitor_8h_source.html
index c050394..b311d44 100644
--- a/docs/html/view__monitor_8h_source.html
+++ b/docs/html/view__monitor_8h_source.html
@@ -75,7 +75,7 @@ $(function() {
 <div class="ttc" id="aclassViewInfo_html"><div class="ttname"><a href="classViewInfo.html">ViewInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="view__info_8h_source.html#l00008">view_info.h:8</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__promt_8cpp_source.html b/docs/html/view__promt_8cpp_source.html
index 0e91d6e..cb9f31c 100644
--- a/docs/html/view__promt_8cpp_source.html
+++ b/docs/html/view__promt_8cpp_source.html
@@ -73,7 +73,7 @@ $(function() {
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;view_promt.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="keywordtype">void</span> ViewPromt::draw()</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;{</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;    curs_set(1); <span class="comment">// show cursor</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;    <span class="keywordtype">int</span> li = text_offset_y;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;    <span class="keywordtype">int</span> ci = 0;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;    <span class="keywordflow">for</span>(std::string line : str_split(message + input, <span class="stringliteral">&quot;\n&quot;</span>))</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;    {</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;        mvwprintw(win, ++li, text_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, line.c_str());</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;        ci = line.length() + text_offset_x;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    }</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;    button_offset_x = (width - label_cancel.length() - sep.length() - label_confirm.length()) / 2;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;    button_offset_y = height - text_offset_y;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="keywordflow">if</span>(selection == 0)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    {</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;        wattron(win, A_REVERSE);</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, label_cancel.c_str());</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;        wattroff(win, A_REVERSE);</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length(), <span class="stringliteral">&quot;%s&quot;</span>, sep.c_str());</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length() + sep.length(), <span class="stringliteral">&quot;%s&quot;</span>, label_confirm.c_str());</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    }</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <span class="keywordflow">else</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    {</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, label_cancel.c_str());</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length(), <span class="stringliteral">&quot;%s&quot;</span>, sep.c_str());</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;        wattron(win, A_REVERSE);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;        mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length() + sep.length(), <span class="stringliteral">&quot;%s&quot;</span>, label_confirm.c_str());</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;        wattroff(win, A_REVERSE);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    }</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    wmove(win, li, ci);</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;}</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keywordtype">void</span> ViewPromt::setMessage(std::string message)</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    this-&gt;message = message;</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;}</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keywordtype">void</span> ViewPromt::setConfirm(std::string name, std::function&lt;<span class="keywordtype">void</span>(<span class="keywordtype">int</span>)&gt; call)</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;{</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    label_confirm = name;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    call_confirm = call;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keywordtype">void</span> ViewPromt::setCancel(std::string name, <span class="keywordtype">bool</span> cancelable)</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    label_cancel = name;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    this-&gt;cancelable = cancelable;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;}</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;std::string ViewPromt::getInput()</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;{</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">return</span> input;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;}</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;std::function&lt;void(<span class="keywordtype">int</span>)&gt; ViewPromt::keypress(<span class="keywordtype">int</span>&amp; key)</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    std::function&lt;void(<span class="keywordtype">int</span>)&gt; ret = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">switch</span>(key)</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    {</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">case</span> KEY_BACKSPACE:</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        <span class="keywordflow">if</span>(input.length())</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;            input.pop_back();</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">case</span> KEY_LEFT:</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordflow">case</span> KEY_RIGHT:</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        selection = (selection + 1 ) % 2;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">case</span> KEY_MOUSE:</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    {</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        <span class="comment">// http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        MEVENT event;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <span class="keywordtype">bool</span> hit = <span class="keyword">false</span>;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        <span class="keywordflow">if</span>(getmouse(&amp;event) == OK &amp;&amp; <span class="keyword">event</span>.bstate &amp; (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;            <span class="keywordtype">size_t</span> column_start = start_x + button_offset_x;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;            <span class="keywordtype">size_t</span> row_start = start_y + button_offset_y;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;            <span class="keywordtype">size_t</span> mouse_x = <span class="keyword">event</span>.x, mouse_y = <span class="keyword">event</span>.y;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;            <span class="keywordflow">if</span>(mouse_y == row_start)</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;            {</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                <span class="keywordflow">if</span>(cancelable &amp;&amp; mouse_x &gt;= column_start &amp;&amp; mouse_x &lt; column_start + label_cancel.length())</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                {</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                    <span class="keywordflow">if</span>(selection == 0 || event.bstate &amp; BUTTON1_DOUBLE_CLICKED)</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;                        hit = <span class="keyword">true</span>;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;                    selection = 0;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                }</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                <span class="keywordflow">if</span>(mouse_x &gt;= column_start + label_cancel.length() + sep.length() &amp;&amp; mouse_x &lt; column_start + label_cancel.length() + sep.length()  + label_confirm.length())</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                {</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                    <span class="keywordflow">if</span>(selection == 1 || event.bstate &amp; BUTTON1_DOUBLE_CLICKED)</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                        hit = <span class="keyword">true</span>;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                    selection = 1;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;                }</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;            }</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        }</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        <span class="keywordflow">if</span>(!hit)</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160; </div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        <span class="comment">// fall through to next case</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        [[fallthrough]];</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">case</span> KEY_ENT:</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        <span class="keywordflow">if</span>(selection == 0) <span class="comment">// exit</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;            key = -1; <span class="comment">// do return from view</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;            ret = call_confirm;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    }</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordflow">if</span>(key &gt;= <span class="charliteral">&#39; &#39;</span> &amp;&amp; key &lt;= <span class="charliteral">&#39;~&#39;</span>)</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        input += (char) key;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keywordflow">if</span>(key != KEY_ENT)</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        repaint();</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__promt_8h_source.html b/docs/html/view__promt_8h_source.html
index 6acbb7b..3ffc2fc 100644
--- a/docs/html/view__promt_8h_source.html
+++ b/docs/html/view__promt_8h_source.html
@@ -75,7 +75,7 @@ $(function() {
 <div class="ttc" id="aclassViewPromt_html"><div class="ttname"><a href="classViewPromt.html">ViewPromt</a></div><div class="ttdef"><b>Definition:</b> <a href="view__promt_8h_source.html#l00010">view_promt.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__selection_8cpp_source.html b/docs/html/view__selection_8cpp_source.html
index d78a6f9..324fa41 100644
--- a/docs/html/view__selection_8cpp_source.html
+++ b/docs/html/view__selection_8cpp_source.html
@@ -73,7 +73,7 @@ $(function() {
 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="preprocessor">#include &quot;view_selection.h&quot;</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160; </div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="keywordtype">void</span> ViewSelection::draw()</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;{</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;    <span class="comment">//curs_set(0); // hide cursor</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; choices.size(); i++)</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;    {</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;        <span class="keywordflow">if</span>(selection == i)</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;            wattron(win, A_REVERSE);</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;        mvwprintw(win, i + choice_offset_y, choice_offset_x, <span class="stringliteral">&quot;%s&quot;</span>, choices[i].c_str());</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;        <span class="keywordflow">if</span>(selection == i)</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;            wattroff(win, A_REVERSE);</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;    }</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;}</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keywordtype">void</span> ViewSelection::addChoice(std::string name, call_t call)</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    choices.push_back(name);</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    calls.push_back(call);</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;}</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;call_t ViewSelection::keypress(<span class="keywordtype">int</span>&amp; key)</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;{</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    call_t ret = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    <span class="keywordflow">switch</span>(key)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    {</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">case</span> KEY_UP:</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;        <span class="keywordflow">do</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;            selection = (selection - 1 + choices.size()) % choices.size();</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;        <span class="keywordflow">while</span>(!choices[selection].length() &amp;&amp; choices.size());</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordflow">case</span> <span class="charliteral">&#39;\t&#39;</span>:</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keywordflow">case</span> KEY_DOWN:</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        <span class="keywordflow">do</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;            selection = (selection + 1) % choices.size();</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        <span class="keywordflow">while</span>(!choices[selection].length() &amp;&amp; choices.size());</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keywordflow">case</span> KEY_MOUSE:</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    {</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;        <span class="comment">// http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;        MEVENT event;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;        <span class="keywordtype">bool</span> hit = <span class="keyword">false</span>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;        <span class="keywordflow">if</span>(getmouse(&amp;event) == OK &amp;&amp; <span class="keyword">event</span>.bstate &amp; (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;        {</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;            <span class="keywordtype">size_t</span> column_start = start_x + choice_offset_x;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;            <span class="keywordtype">size_t</span> row_start = start_y + choice_offset_y;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;            <span class="keywordtype">size_t</span> mouse_x = <span class="keyword">event</span>.x, mouse_y = <span class="keyword">event</span>.y;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;            <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = 0; i &lt; choices.size(); i++)</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;                <span class="keywordflow">if</span>(choices[i].length() &amp;&amp; mouse_y == row_start + i &amp;&amp; mouse_x &gt;= column_start &amp;&amp; mouse_x &lt; column_start + choices[i].length())</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                {</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;                    <span class="keywordflow">if</span>(selection == i || event.bstate &amp; BUTTON1_DOUBLE_CLICKED)</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;                        hit = <span class="keyword">true</span>;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;                    selection = i;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;                }</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        }</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <span class="keywordflow">if</span>(!hit)</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;        <span class="comment">// fall through to next case</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        [[fallthrough]];</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    }</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">case</span> KEY_ENT:</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        <span class="keywordflow">if</span>(selection == choices.size() - 1) <span class="comment">// exit</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;            key = -1; <span class="comment">// do return from view</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;            ret = calls[selection];</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">default</span>:</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        <span class="keywordflow">break</span>;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    }</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    repaint();</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;}</div></div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/docs/html/view__selection_8h_source.html b/docs/html/view__selection_8h_source.html
index 19bac8c..e284347 100644
--- a/docs/html/view__selection_8h_source.html
+++ b/docs/html/view__selection_8h_source.html
@@ -75,7 +75,7 @@ $(function() {
 <div class="ttc" id="aclassViewSelection_html"><div class="ttname"><a href="classViewSelection.html">ViewSelection</a></div><div class="ttdef"><b>Definition:</b> <a href="view__selection_8h_source.html#l00010">view_selection.h:10</a></div></div>
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated on Tue May 28 2019 12:31:39 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
+Generated on Wed May 29 2019 09:52:09 for B15F by &#160;<a href="http://www.doxygen.org/index.html">
 <img class="footer" src="doxygen.png" alt="doxygen"/>
 </a> 1.8.16
 </small></address>
diff --git a/firmware/requests.cpp b/firmware/requests.cpp
index 55f5cf6..bd3c014 100644
--- a/firmware/requests.cpp
+++ b/firmware/requests.cpp
@@ -70,6 +70,14 @@ void handleRequest()
 		case RQ_PWM_SET_VALUE:
 			rqPwmSetValue();
 			break;
+			
+		case RQ_SET_REG:
+			rqSetRegister();
+			break;
+			
+		case RQ_GET_REG:
+			rqGetRegister();
+			break;
 
 		default:
 			break;
@@ -244,3 +252,24 @@ void rqPwmSetValue()
 	usart.writeByte(USART::MSG_OK);
 	usart.flush();
 }
+
+void rqSetRegister()
+{
+	usart.initTX();
+	uint16_t reg = usart.readByte();
+	uint16_t val = usart.readByte();
+    
+    (*(volatile uint8_t *) reg) = val;
+	usart.writeByte((*(volatile uint8_t *) reg));    
+	usart.flush();
+}
+
+void rqGetRegister()
+{
+	usart.initTX();
+	uint16_t reg = usart.readByte();
+    
+	usart.writeByte((*(volatile uint8_t *) reg));
+	usart.flush();
+}
+
diff --git a/firmware/requests.h b/firmware/requests.h
index 418b003..336f8f5 100644
--- a/firmware/requests.h
+++ b/firmware/requests.h
@@ -20,9 +20,11 @@ constexpr static uint8_t RQ_DSW  = 9;
 constexpr static uint8_t RQ_AA0  = 10;
 constexpr static uint8_t RQ_AA1  = 11;
 constexpr static uint8_t RQ_ADC  = 12;
-constexpr static uint8_t RQ_ADC_DAC_STROKE  = 13;
-constexpr static uint8_t RQ_PWM_SET_FREQ    = 14;
-constexpr static uint8_t RQ_PWM_SET_VALUE   = 15;
+constexpr static uint8_t RQ_ADC_DAC_STROKE = 13;
+constexpr static uint8_t RQ_PWM_SET_FREQ   = 14;
+constexpr static uint8_t RQ_PWM_SET_VALUE  = 15;
+constexpr static uint8_t RQ_SET_REG        = 16;
+constexpr static uint8_t RQ_GET_REG        = 17;
 
 uint8_t const rq_len[] = {
 	/* RQ_DISC */ 1,
@@ -40,7 +42,9 @@ uint8_t const rq_len[] = {
 	/* RQ_ADC  */ 2,
 	/* RQ_ADC_DAC_STROKE */ 9,
 	/* RQ_PWM_SET_FREQ */ 5,
-	/* RQ_PWM_SET_VALUE */ 2
+	/* RQ_PWM_SET_VALUE */ 2,
+	/* RQ_SET_REG */ 3,
+	/* RQ_GET_REG */ 2
 };
 
 /**
@@ -65,5 +69,7 @@ void rqAnalogRead(void);
 void rqAdcDacStroke(void);
 void rqPwmSetFreq(void);
 void rqPwmSetValue(void);
+void rqSetRegister(void);
+void rqGetRegister(void);
 
 #endif // REQUESTS_H