diff --git a/docs/html/annotated.html b/docs/html/annotated.html
new file mode 100644
index 0000000..2691b30
--- /dev/null
+++ b/docs/html/annotated.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+B15F: Class List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+
+
+
diff --git a/docs/html/b15f_8cpp_source.html b/docs/html/b15f_8cpp_source.html
new file mode 100644
index 0000000..a5975dc
--- /dev/null
+++ b/docs/html/b15f_8cpp_source.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+B15F: drv/b15f.cpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
3 B15F *B15F::instance =
nullptr ;
4 errorhandler_t B15F::errorhandler =
nullptr ;
14 instance =
new B15F ();
31 abort (
"Verbindung kann nicht repariert werden" );
44 for (uint8_t i = 0; i < 16; i++)
46 usart.
transmit (&rq[0], 0,
sizeof (rq));
51 catch (std::exception &ex)
61 uint8_t dummy = rand() % 256;
68 usart.
transmit (&rq[0], 0,
sizeof (rq));
71 usart.
receive (&aw[0], 0,
sizeof (aw));
73 return aw[0] ==
MSG_OK && aw[1] == dummy;
79 uint16_t dummy = rand() % (0xFFFF / 3);
84 static_cast<uint8_t >(dummy & 0xFF),
85 static_cast<uint8_t >(dummy >> 8)
87 usart.
transmit (&rq[0], 0,
sizeof (rq));
90 usart.
receive (reinterpret_cast<uint8_t *>(&aw), 0,
sizeof (aw));
92 return aw == dummy * 3;
98 std::vector<std::string> info;
104 usart.
transmit (&rq[0], 0,
sizeof (rq));
107 usart.
receive (&n, 0,
sizeof (n));
111 usart.
receive (&len, 0,
sizeof (len));
115 usart.
receive (reinterpret_cast<uint8_t *>(&str[0]), 0, len);
117 info.push_back(std::string(str));
121 usart.
receive (&aw, 0,
sizeof (aw));
123 abort (
"Board Info fehlerhalft: code " + std::to_string((
int ) aw));
130 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
135 std::this_thread::sleep_for(std::chrono::microseconds(us));
140 b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
141 b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
142 b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
148 std::array<char, 128> buffer;
150 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(),
"r" ), pclose);
153 throw std::runtime_error(
"popen() failed!" );
155 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr )
157 result += buffer.data();
174 std::cerr <<
"NOTICE: B15F::errorhandler not set" << std::endl;
175 std::cout << ex.what() << std::endl;
199 usart.
transmit (&rq[0], 0,
sizeof (rq));
202 usart.
receive (&aw, 0,
sizeof (aw));
213 usart.
transmit (&rq[0], 0,
sizeof (rq));
216 usart.
receive (&aw, 0,
sizeof (aw));
227 usart.
transmit (&rq[0], 0,
sizeof (rq));
230 usart.
receive (&aw, 0,
sizeof (aw));
241 usart.
transmit (&rq[0], 0,
sizeof (rq));
244 usart.
receive (&aw, 0,
sizeof (aw));
255 usart.
transmit (&rq[0], 0,
sizeof (rq));
258 usart.
receive (&aw, 0,
sizeof (aw));
269 usart.
transmit (&rq[0], 0,
sizeof (rq));
272 usart.
receive (&aw, 0,
sizeof (aw));
284 static_cast<uint8_t >(value & 0xFF),
285 static_cast<uint8_t >(value >> 8)
287 usart.
transmit (&rq[0], 0,
sizeof (rq));
290 usart.
receive (&aw, 0,
sizeof (aw));
299 static_cast<uint8_t >(value & 0xFF),
300 static_cast<uint8_t >(value >> 8)
302 usart.
transmit (&rq[0], 0,
sizeof (rq));
305 usart.
receive (&aw, 0,
sizeof (aw));
313 abort (
"Bad ADC channel: " + std::to_string(channel));
321 usart.
transmit (&rq[0], 0,
sizeof (rq));
324 usart.
receive (reinterpret_cast<uint8_t *>(&aw), 0,
sizeof (aw));
327 abort (
"Bad ADC data detected (1)" );
332 B15F::analogSequence (uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b,
333 uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)
336 buffer_a += offset_a;
337 buffer_b += offset_b;
346 static_cast<uint8_t >(start & 0xFF),
347 static_cast<uint8_t >(start >> 8),
348 static_cast<uint8_t >(delta & 0xFF),
349 static_cast<uint8_t >(delta >> 8),
350 static_cast<uint8_t >(count & 0xFF),
351 static_cast<uint8_t >(count >> 8)
354 usart.
transmit (&rq[0], 0,
sizeof (rq));
356 for (uint16_t i = 0; i < count; i++)
360 usart.
receive (reinterpret_cast<uint8_t *>(&buffer_a[i]), 0, 2);
362 if (buffer_a[i] > 1023)
363 abort (
"Bad ADC data detected (2)" );
372 usart.
receive (reinterpret_cast<uint8_t *>(&buffer_b[i]), 0, 2);
374 if (buffer_b[i] > 1023)
375 abort (
"Bad ADC data detected (3)" );
384 usart.
receive (&aw, 0,
sizeof (aw));
386 abort (
"Sequenz unterbrochen" );
396 static_cast<uint8_t>((freq >> 0) & 0xFF),
397 static_cast<uint8_t>((freq >> 8) & 0xFF),
398 static_cast<uint8_t>((freq >> 16) & 0xFF),
399 static_cast<uint8_t>((freq >> 24) & 0xFF)
402 usart.
transmit (&rq[0], 0,
sizeof (rq));
405 usart.
receive (&aw, 0,
sizeof (aw));
419 usart.
transmit (&rq[0], 0,
sizeof (rq));
422 usart.
receive (&aw, 0,
sizeof (aw));
433 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) & 0xFF),
434 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) >> 8),
438 usart.
transmit (&rq[0], 0,
sizeof (rq));
441 usart.
receive (&aw, 0,
sizeof (aw));
452 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) & 0xFF),
453 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) >> 8)
456 usart.
transmit (&rq[0], 0,
sizeof (rq));
459 usart.
receive (&aw, 0,
sizeof (aw));
470 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) & 0xFF),
471 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) >> 8),
472 static_cast<uint8_t >(val & 0xFF),
473 static_cast<uint8_t >(val >> 8)
476 usart.
transmit (&rq[0], 0,
sizeof (rq));
479 usart.
receive (reinterpret_cast<uint8_t *>(&aw), 0,
sizeof (aw));
490 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) & 0xFF),
491 static_cast<uint8_t >(reinterpret_cast<size_t>(adr) >> 8)
494 usart.
transmit (&rq[0], 0,
sizeof (rq));
497 usart.
receive (reinterpret_cast<uint8_t *>(&aw), 0,
sizeof (aw));
503 return setMem8 (reinterpret_cast<volatile uint16_t*>(adr), val);
508 return getMem8 (reinterpret_cast<volatile uint16_t*>(adr));
527 std::string device =
exec (
"bash -c 'ls /dev/ttyUSB*'" );
528 while (device.find(
' ' ) != std::string::npos || device.find(
'\n' ) != std::string::npos ||
529 device.find(
'\t' ) != std::string::npos)
532 if (device.length() == 0)
533 abort (
"Adapter nicht gefunden" );
535 std::cout <<
PRE <<
"Verwende Adapter: " << device << std::endl;
538 std::cout <<
PRE <<
"Stelle Verbindung mit Adapter her... " << std::flush;
541 std::cout <<
"OK" << std::endl;
544 std::cout <<
PRE <<
"Teste Verbindung... " << std::flush;
560 abort (
"Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?" );
561 std::cout <<
"OK" << std::endl;
566 std::cout <<
PRE <<
"AVR Firmware Version: " << info[0] <<
" um " << info[1] <<
" Uhr (" << info[2] <<
")"
+static std::string exec(std::string cmd)
+uint16_t getMem16(volatile uint16_t *adr)
+void delay_us(uint16_t us)
+uint8_t digitalRead0(void)
+uint8_t pwmSetFrequency(uint32_t freq)
+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)
+bool testConnection(void)
+uint8_t readDipSwitch(void)
+uint8_t getRegister(volatile uint8_t *adr)
+void delay_ms(uint16_t ms)
+static B15F & getInstance(void)
+
+void transmit(uint8_t *buffer, uint16_t offset, uint8_t len)
+static void abort(std::string msg)
+void receive(uint8_t *buffer, uint16_t offset, uint8_t len)
+void clearInputBuffer(void)
+void clearOutputBuffer(void)
+uint16_t analogRead(uint8_t channel)
+bool digitalWrite0(uint8_t)
+const std::string PRE
B15F stdout prefix.
+
+void setBaudrate(uint32_t baudrate)
+bool activateSelfTestMode(void)
+std::vector< std::string > getBoardInfo(void)
+constexpr static uint16_t RECONNECT_TIMEOUT
Time in ms after which a reconnect attempt aborts.
+bool analogWrite1(uint16_t port)
+bool setMem16(volatile uint16_t *adr, uint16_t val)
+bool digitalWrite1(uint8_t)
+bool pwmSetValue(uint8_t value)
+
+bool setRegister(volatile uint8_t *adr, uint8_t val)
+constexpr static uint8_t MSG_OK
Value to acknowledge a received command.
+void openDevice(std::string device)
+uint8_t digitalRead1(void)
+bool setMem8(volatile uint16_t *adr, uint8_t val)
+
+constexpr static uint32_t BAUDRATE
USART baudrate for communication with the MCU.
+static void setAbortHandler(errorhandler_t func)
+
+uint8_t getMem8(volatile uint16_t *adr)
+bool analogWrite0(uint16_t port)
+constexpr static uint8_t RECONNECT_TRIES
Maximum count of reconnect attempts after which the driver stops.
+
+
+
+
+
+
diff --git a/docs/html/b15f_8h_source.html b/docs/html/b15f_8h_source.html
new file mode 100644
index 0000000..e9abdb8
--- /dev/null
+++ b/docs/html/b15f_8h_source.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+B15F: drv/b15f.h Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
5 #include <bits/stdc++.h> 15 #include <sys/ioctl.h> 20 #include "driverexception.h" 21 #include "timeoutexception.h" 24 #define _AVR_IO_H_ 1 // Erzwinge die Inklusion 25 #include "/usr/lib/avr/include/avr/sfr_defs.h" 26 #include "/usr/lib/avr/include/avr/iom1284p.h" 28 typedef std::function<void(std::exception&)> errorhandler_t;
100 static std::string
exec (std::string cmd);
106 static void abort (std::string msg);
112 static void abort (std::exception& ex);
206 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);
234 bool setMem8 (
volatile uint16_t* adr, uint8_t val);
243 uint8_t
getMem8 (
volatile uint16_t* adr);
254 bool setMem16 (
volatile uint16_t* adr, uint16_t val);
263 uint16_t
getMem16 (
volatile uint16_t* adr);
274 bool setRegister (
volatile uint8_t* adr, uint8_t val);
289 const std::string
PRE =
"[B15F] " ;
295 constexpr
static uint32_t
BAUDRATE = 57600;
311 static B15F * instance;
312 static errorhandler_t errorhandler;
+static std::string exec(std::string cmd)
+constexpr static uint8_t MSG_FAIL
Value to reject a received command.
+uint16_t getMem16(volatile uint16_t *adr)
+void delay_us(uint16_t us)
+uint8_t digitalRead0(void)
+uint8_t pwmSetFrequency(uint32_t freq)
+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)
+bool testConnection(void)
+uint8_t readDipSwitch(void)
+uint8_t getRegister(volatile uint8_t *adr)
+void delay_ms(uint16_t ms)
+static B15F & getInstance(void)
+
+static void abort(std::string msg)
+
+uint16_t analogRead(uint8_t channel)
+bool digitalWrite0(uint8_t)
+const std::string PRE
B15F stdout prefix.
+
+bool activateSelfTestMode(void)
+std::vector< std::string > getBoardInfo(void)
+constexpr static uint16_t RECONNECT_TIMEOUT
Time in ms after which a reconnect attempt aborts.
+bool analogWrite1(uint16_t port)
+bool setMem16(volatile uint16_t *adr, uint16_t val)
+bool digitalWrite1(uint8_t)
+bool pwmSetValue(uint8_t value)
+
+bool setRegister(volatile uint8_t *adr, uint8_t val)
+constexpr static uint8_t MSG_OK
Value to acknowledge a received command.
+uint8_t digitalRead1(void)
+bool setMem8(volatile uint16_t *adr, uint8_t val)
+constexpr static uint16_t WDT_TIMEOUT
Time in ms after which the watch dog timer resets the MCU.
+
+constexpr static uint32_t BAUDRATE
USART baudrate for communication with the MCU.
+static void setAbortHandler(errorhandler_t func)
+uint8_t getMem8(volatile uint16_t *adr)
+bool analogWrite0(uint16_t port)
+constexpr static uint8_t RECONNECT_TRIES
Maximum count of reconnect attempts after which the driver stops.
+
+
+
+
+
diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png
new file mode 100644
index 0000000..224b29a
Binary files /dev/null and b/docs/html/bc_s.png differ
diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
Binary files /dev/null and b/docs/html/bdwn.png differ
diff --git a/docs/html/classB15F-members.html b/docs/html/classB15F-members.html
new file mode 100644
index 0000000..6ed2de5
--- /dev/null
+++ b/docs/html/classB15F-members.html
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for B15F , including all inherited members.
+
+ abort (std::string msg)B15F static
+ abort (std::exception &ex)B15F static
+ activateSelfTestMode (void)B15F
+ analogRead (uint8_t channel)B15F
+ 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)B15F
+ analogWrite0 (uint16_t port)B15F
+ analogWrite1 (uint16_t port)B15F
+ BAUDRATE B15F static
+ delay_ms (uint16_t ms)B15F
+ delay_us (uint16_t us)B15F
+ digitalRead0 (void)B15F
+ digitalRead1 (void)B15F
+ digitalWrite0 (uint8_t)B15F
+ digitalWrite1 (uint8_t)B15F
+ discard (void)B15F
+ exec (std::string cmd)B15F static
+ getBoardInfo (void)B15F
+ getInstance (void)B15F static
+ getMem16 (volatile uint16_t *adr)B15F
+ getMem8 (volatile uint16_t *adr)B15F
+ getRegister (volatile uint8_t *adr)B15F
+ MSG_FAIL B15F static
+ MSG_OK B15F static
+ PRE B15F
+ pwmSetFrequency (uint32_t freq)B15F
+ pwmSetValue (uint8_t value)B15F
+ readDipSwitch (void)B15F
+ reconnect (void)B15F
+ RECONNECT_TIMEOUT B15F static
+ RECONNECT_TRIES B15F static
+ reverse (uint8_t &b)B15F
+ setAbortHandler (errorhandler_t func)B15F static
+ setMem16 (volatile uint16_t *adr, uint16_t val)B15F
+ setMem8 (volatile uint16_t *adr, uint8_t val)B15F
+ setRegister (volatile uint8_t *adr, uint8_t val)B15F
+ testConnection (void)B15F
+ testIntConv (void)B15F
+ WDT_TIMEOUT B15F static
+
+
+
+
+
diff --git a/docs/html/classB15F.html b/docs/html/classB15F.html
new file mode 100644
index 0000000..668e644
--- /dev/null
+++ b/docs/html/classB15F.html
@@ -0,0 +1,1230 @@
+
+
+
+
+
+
+
+B15F: B15F Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <b15f.h >
+
+
+void reconnect (void)
+
+void discard (void)
+
+bool testConnection (void)
+
+bool testIntConv (void)
+
+std::vector< std::string > getBoardInfo (void)
+
+void delay_ms (uint16_t ms)
+
+void delay_us (uint16_t us)
+
+void reverse (uint8_t &b)
+
+bool activateSelfTestMode (void)
+
+bool digitalWrite0 (uint8_t)
+
+bool digitalWrite1 (uint8_t)
+
+uint8_t digitalRead0 (void)
+
+uint8_t digitalRead1 (void)
+
+uint8_t readDipSwitch (void)
+
+bool analogWrite0 (uint16_t port)
+
+bool analogWrite1 (uint16_t port)
+
+uint16_t analogRead (uint8_t channel)
+
+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)
+
+uint8_t pwmSetFrequency (uint32_t freq)
+
+bool pwmSetValue (uint8_t value)
+
+bool setMem8 (volatile uint16_t *adr, uint8_t val)
+
+uint8_t getMem8 (volatile uint16_t *adr)
+
+bool setMem16 (volatile uint16_t *adr, uint16_t val)
+
+uint16_t getMem16 (volatile uint16_t *adr)
+
+bool setRegister (volatile uint8_t *adr, uint8_t val)
+
+uint8_t getRegister (volatile uint8_t *adr)
+
+
+
+
+const std::string PRE = "[B15F] "
+ B15F stdout prefix.
+
+
+
+
+constexpr static uint8_t MSG_OK = 0xFF
+ Value to acknowledge a received command.
+
+
+constexpr static uint8_t MSG_FAIL = 0xFE
+ Value to reject a received command.
+
+
+constexpr static uint16_t RECONNECT_TIMEOUT = 64
+ Time in ms after which a reconnect attempt aborts.
+
+
+constexpr static uint16_t WDT_TIMEOUT = 15
+ Time in ms after which the watch dog timer resets the MCU.
+
+
+constexpr static uint8_t RECONNECT_TRIES = 3
+ Maximum count of reconnect attempts after which the driver stops.
+
+
+constexpr static uint32_t BAUDRATE = 57600
+ USART baudrate for communication with the MCU.
+
+
+
+
main driver class
+
+
Definition at line 33 of file b15f.h .
+
+
+
◆ abort() [1/2]
+
+
+
+
+
+
+
+
+ void B15F::abort
+ (
+ std::exception &
+ ex )
+
+
+
+
+
+static
+
+
+
+
Multithread sicherer Abbruch des B15F-Treibers
Parameters
+
+ ex Exception als Abbruchursache
+
+
+
+
+
Definition at line 167 of file b15f.cpp .
+
+
+
+
+
◆ abort() [2/2]
+
+
+
+
+
+
+
+
+ void B15F::abort
+ (
+ std::string
+ msg )
+
+
+
+
+
+static
+
+
+
+
Multithread sicherer Abbruch des B15F-Treibers
Parameters
+
+ msg Beschreibung der Abbruchursache
+
+
+
+
+
Definition at line 161 of file b15f.cpp .
+
+
+
+
+
◆ activateSelfTestMode()
+
+
+
+
+
+ bool B15F::activateSelfTestMode
+ (
+ void
+ )
+
+
+
+
+
Versetzt das Board in den Selbsttest-Modus WICHTIG: Es darf dabei nichts an den Klemmen angeschlossen sein!
Exceptions
+
+
+
+
+
Definition at line 191 of file b15f.cpp .
+
+
+
+
+
◆ analogRead()
+
+
+
+
+
+ uint16_t B15F::analogRead
+ (
+ uint8_t
+ channel )
+
+
+
+
+
Liest den Wert des Analog-Digital-Converters (ADC / ADU)
Parameters
+
+ channel Kanalwahl von 0 - 7
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 307 of file b15f.cpp .
+
+
+
+
+
◆ analogSequence()
+
+
+
+
+
+ void B15F::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
+
+
+
+ )
+
+
+
+
+
DAC 0 wird auf den Startwert gesetzt und dann schrittweise um Delta inkrementiert. Für jeden eingestelleten DAC-Wert werden zwei ADCs (channel_a und channel_b) angesprochen und die Werte übermittelt. Die Werte werden in buffer_a für Kanal a und buffer_b für Kanal b gespeichert.
Parameters
+
+ channel_a Auswahl des ADC a, von 0 - 7
+ buffer_a Speichertort für Werte des Kanals a
+ offset_a Anzahl an Werten des Kanals a, die im Speicher übersprungen werden sollen
+ channel_b Auswahl des ADC b, von 0 - 7
+ buffer_b Speichertort für Werte des Kanals b
+ offset_b Anzahl an Werten des Kanals b, die im Speicher übersprungen werden
+ start Startwert des DACs
+ delta Schrittweite, mit welcher der DAC inkrementiert wird
+ count Anzahl an Inkrementierungen
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 330 of file b15f.cpp .
+
+
+
+
+
◆ analogWrite0()
+
+
+
+
+
+ bool B15F::analogWrite0
+ (
+ uint16_t
+ port )
+
+
+
+
+
Setzt den Wert des Digital-Analog-Converters (DAC / DAU) 0
Parameters
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 277 of file b15f.cpp .
+
+
+
+
+
◆ analogWrite1()
+
+
+
+
+
+ bool B15F::analogWrite1
+ (
+ uint16_t
+ port )
+
+
+
+
+
Setzt den Wert des Digital-Analog-Converters (DAC / DAU) 1
Parameters
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 292 of file b15f.cpp .
+
+
+
+
+
◆ delay_ms()
+
+
+
+
+
+ void B15F::delay_ms
+ (
+ uint16_t
+ ms )
+
+
+
+
+
Lässt den Treiber für eine angegebene Zeit pausieren
Parameters
+
+ ms Verzögerung in Millisekunden
+
+
+
+
+
Definition at line 127 of file b15f.cpp .
+
+
+
+
+
◆ delay_us()
+
+
+
+
+
+ void B15F::delay_us
+ (
+ uint16_t
+ us )
+
+
+
+
+
Lässt den Treiber für eine angegebene Zeit pausieren
Parameters
+
+ us Verzögerung in Microsekunden
+
+
+
+
+
Definition at line 132 of file b15f.cpp .
+
+
+
+
+
◆ digitalRead0()
+
+
+
+
+
+ uint8_t B15F::digitalRead0
+ (
+ void
+ )
+
+
+
+
+
Liest den Wert des digitalen Eingabeports 0
Returns Wert für gesamten Port
+
Exceptions
+
+
+
+
+
Definition at line 232 of file b15f.cpp .
+
+
+
+
+
◆ digitalRead1()
+
+
+
+
+
+ uint8_t B15F::digitalRead1
+ (
+ void
+ )
+
+
+
+
+
Liest den Wert des digitalen Eingabeports 1
Returns Wert für gesamten Port
+
Exceptions
+
+
+
+
+
Definition at line 246 of file b15f.cpp .
+
+
+
+
+
◆ digitalWrite0()
+
+
+
+
+
+ bool B15F::digitalWrite0
+ (
+ uint8_t
+ port )
+
+
+
+
+
Setzt den Wert des digitalen Ausgabeports 0
Parameters
+
+ port Wert für gesamten Port
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 204 of file b15f.cpp .
+
+
+
+
+
◆ digitalWrite1()
+
+
+
+
+
+ bool B15F::digitalWrite1
+ (
+ uint8_t
+ port )
+
+
+
+
+
Setzt den Wert des digitalen Ausgabeports 1
Parameters
+
+ port Wert für gesamten Port
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 218 of file b15f.cpp .
+
+
+
+
+
◆ discard()
+
+
+
+
+
+ void B15F::discard
+ (
+ void
+ )
+
+
+
+
+
Verwirft Daten im USART Puffer auf dieser Maschine und B15
Exceptions
+
+
+
+
+
Definition at line 33 of file b15f.cpp .
+
+
+
+
+
◆ exec()
+
+
+
+
+
+
+
+
+ std::string B15F::exec
+ (
+ std::string
+ cmd )
+
+
+
+
+
+static
+
+
+
+
Führt ein Befehl auf dieser Maschine aus und liefert stdout zurück
Parameters
+
+
+
+
+
Definition at line 145 of file b15f.cpp .
+
+
+
+
+
◆ getBoardInfo()
+
+
+
+
+
+ std::vector< std::string > B15F::getBoardInfo
+ (
+ void
+ )
+
+
+
+
+
Liefert Informationen zur aktuellen Firmware des B15
Exceptions
+
+
+
+
+
Definition at line 95 of file b15f.cpp .
+
+
+
+
+
◆ getInstance()
+
+
+
+
+
+
+
+
+ B15F & B15F::getInstance
+ (
+ void
+ )
+
+
+
+
+
+static
+
+
+
+
Liefert eine Referenz zur aktuellen Treiber-Instanz, die Verbindung wird gegebenenfalls automatisch hergestellt.
Exceptions
+
+
+
+
+
Definition at line 10 of file b15f.cpp .
+
+
+
+
+
◆ getMem16()
+
+
+
+
+
+ uint16_t B15F::getMem16
+ (
+ volatile uint16_t *
+ adr )
+
+
+
+
+
Liefert den Wert einer MCU Speicherzelle der Größe 16 Bit. Diese kann ein Register oder RAM-Daten sein.
Parameters
+
+
+
+
Returns Wert der Speicherzelle
+
Exceptions
+
+
+
+
+
Definition at line 481 of file b15f.cpp .
+
+
+
+
+
◆ getMem8()
+
+
+
+
+
+ uint8_t B15F::getMem8
+ (
+ volatile uint16_t *
+ adr )
+
+
+
+
+
Liefert den Wert einer MCU Speicherzelle der Größe 8 Bit. Diese kann ein Register oder RAM-Daten sein.
Parameters
+
+
+
+
Returns Wert der Speicherzelle
+
Exceptions
+
+
+
+
+
Definition at line 443 of file b15f.cpp .
+
+
+
+
+
◆ getRegister()
+
+
+
+
+
+ uint8_t B15F::getRegister
+ (
+ volatile uint8_t *
+ adr )
+
+
+
+
+
Liefert den Wert eines 8-Bit MCU Registers. Diese Funktion arbeitet analog zu getMem8() , jedoch mit einer 8-Bit Adresse.
Parameters
+
+
+
+
Returns Wert des Registers
+
Exceptions
+
+
+
+
+
Definition at line 504 of file b15f.cpp .
+
+
+
+
+
◆ pwmSetFrequency()
+
+
+
+
+
+ uint8_t B15F::pwmSetFrequency
+ (
+ uint32_t
+ freq )
+
+
+
+
+
Setzt die Register so, dass näherungsweise die gewünschte Frequenz erzeugt wird. Ist freq == 0 wird PWM deaktiviert. Standardfrequenz: 31300 (empfohlen, da dann TOP == 255)
Parameters
+
+
+
+
Returns Top Wert des PWM Value für die gesetzte Frequenz
+
Exceptions
+
+
+
+
+
Definition at line 387 of file b15f.cpp .
+
+
+
+
+
◆ pwmSetValue()
+
+
+
+
+
+ bool B15F::pwmSetValue
+ (
+ uint8_t
+ value )
+
+
+
+
+
Setzt den PWM Wert.
Parameters
+
+ value PWM Wert [0..0xFF]
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 407 of file b15f.cpp .
+
+
+
+
+
◆ readDipSwitch()
+
+
+
+
+
+ uint8_t B15F::readDipSwitch
+ (
+ void
+ )
+
+
+
+
+
Liest den Wert des digitalen Eingabeports, an dem der DIP-switch angeschlossen ist (S7)
Returns Wert für gesamten Port
+
Exceptions
+
+
+
+
+
Definition at line 260 of file b15f.cpp .
+
+
+
+
+
◆ reconnect()
+
+
+
+
+
+ void B15F::reconnect
+ (
+ void
+ )
+
+
+
+
+
Versucht die Verbindung zum B15 wiederherzustellen
Exceptions
+
+
+
+
+
Definition at line 18 of file b15f.cpp .
+
+
+
+
+
◆ reverse()
+
+
+
+
+
+ void B15F::reverse
+ (
+ uint8_t &
+ b )
+
+
+
+
+
Invertiert das Bitmuster eines Bytes z.B.: 10100001 --> 10000101
Parameters
+
+ b Byte, das invertiert wird
+
+
+
+
+
Definition at line 137 of file b15f.cpp .
+
+
+
+
+
◆ setAbortHandler()
+
+
+
+
+
+
+
+
+ void B15F::setAbortHandler
+ (
+ errorhandler_t
+ func )
+
+
+
+
+
+static
+
+
+
+
Setzt eine Fehlerbehandlungsroutine für den Treiberabbruch (abort)
Parameters
+
+ func Funktion, die Exception als Parameter bekommt
+
+
+
+
+
Definition at line 179 of file b15f.cpp .
+
+
+
+
+
◆ setMem16()
+
+
+
+
+
+ bool B15F::setMem16
+ (
+ volatile uint16_t *
+ adr ,
+
+
+
+
+ uint16_t
+ val
+
+
+
+ )
+
+
+
+
+
Setzt direkt den Wert einer MCU Speicherzelle der Größe 16 Bit. Diese kann ein Register oder RAM-Daten sein. Wichtig: bei einer falschen Adresse kann das Board 15 ernsthaften Schaden nehmen!
Parameters
+
+ adr Speicheradresse
+ val Neuer Wert für die Zelle
+
+
+
+
Returns true, falls Vorgang erfolgreich
+
Exceptions
+
+
+
+
+
Definition at line 461 of file b15f.cpp .
+
+
+
+
+
◆ setMem8()
+
+
+
+
+
+ bool B15F::setMem8
+ (
+ volatile uint16_t *
+ adr ,
+
+
+
+
+ uint8_t
+ val
+
+
+
+ )
+
+
+
+
+
Setzt direkt den Wert einer MCU Speicherzelle der Größe 8 Bit. Diese kann ein Register oder RAM-Daten sein. Wichtig: bei einer falschen Adresse kann das Board 15 ernsthaften Schaden nehmen!
Parameters
+
+ adr Speicheradresse
+ val Neuer Wert für die Zelle
+
+
+
+
Returns true, falls Vorgang erfolgreich
+
Exceptions
+
+
+
+
+
Definition at line 424 of file b15f.cpp .
+
+
+
+
+
◆ setRegister()
+
+
+
+
+
+ bool B15F::setRegister
+ (
+ volatile uint8_t *
+ adr ,
+
+
+
+
+ uint8_t
+ val
+
+
+
+ )
+
+
+
+
+
Setzt direkt den Wert eines 8-Bit MCU Registers. Diese Funktion arbeitet analog zu setMem8() , jedoch mit einer 8-Bit Adresse. Wichtig: bei einer falschen Adresse kann das Board 15 ernsthaften Schaden nehmen!
Parameters
+
+ adr Speicheradresse
+ val Neuer Wert für das Register
+
+
+
+
Returns true, falls Vorgang erfolgreich
+
Exceptions
+
+
+
+
+
Definition at line 499 of file b15f.cpp .
+
+
+
+
+
◆ testConnection()
+
+
+
+
+
+ bool B15F::testConnection
+ (
+ void
+ )
+
+
+
+
+
Testet die USART Verbindung auf Funktion
Exceptions
+
+
+
+
+
Definition at line 56 of file b15f.cpp .
+
+
+
+
+
◆ testIntConv()
+
+
+
+
+
+ bool B15F::testIntConv
+ (
+ void
+ )
+
+
+
+
+
Testet die Integer Konvertierung der USART Verbindung
Exceptions
+
+
+
+
+
Definition at line 75 of file b15f.cpp .
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classDot-members.html b/docs/html/classDot-members.html
new file mode 100644
index 0000000..f5a30a8
--- /dev/null
+++ b/docs/html/classDot-members.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for Dot , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classDot.html b/docs/html/classDot.html
new file mode 100644
index 0000000..5599dbe
--- /dev/null
+++ b/docs/html/classDot.html
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+B15F: Dot Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <dot.h >
+
+
+ Dot (uint16_t x, uint16_t y, uint8_t curve)
+
+uint16_t getX (void) const
+
+uint16_t getY (void) const
+
+uint8_t getCurve (void) const
+
+
+
+
Immutable dot class with x and y coordinate and curve index. Dots with the same curve index get the same color by plotty.
+
+
Definition at line 12 of file dot.h .
+
+
+
◆ Dot()
+
+
+
+
+
+ Dot::Dot
+ (
+ uint16_t
+ x ,
+
+
+
+
+ uint16_t
+ y ,
+
+
+
+
+ uint8_t
+ curve
+
+
+
+ )
+
+
+
+
+
Constructor with x and y coordinate and curve index.
+
+
Definition at line 3 of file dot.cpp .
+
+
+
+
+
+
◆ getCurve()
+
+
+
+
+
+ uint8_t Dot::getCurve
+ (
+ void
+ )
+ const
+
+
+
+
Returns the curve index.
+
+
Definition at line 19 of file dot.cpp .
+
+
+
+
+
◆ getX()
+
+
+
+
+
+ uint16_t Dot::getX
+ (
+ void
+ )
+ const
+
+
+
+
Returns the x coordinate.
+
+
Definition at line 9 of file dot.cpp .
+
+
+
+
+
◆ getY()
+
+
+
+
+
+ uint16_t Dot::getY
+ (
+ void
+ )
+ const
+
+
+
+
Returns the y coordinate.
+
+
Definition at line 14 of file dot.cpp .
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classDriverException-members.html b/docs/html/classDriverException-members.html
new file mode 100644
index 0000000..bab0a2b
--- /dev/null
+++ b/docs/html/classDriverException-members.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for DriverException , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classDriverException.html b/docs/html/classDriverException.html
new file mode 100644
index 0000000..e07842c
--- /dev/null
+++ b/docs/html/classDriverException.html
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+B15F: DriverException Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <driverexception.h >
+
+
+
+
+
+
+
+
+
+
+ DriverException (const char *message)
+
+
+ DriverException (const std::string &message)
+
+
+virtual const char * what () const throw ()
+
+
+
+
+std::string msg_
+
+
+
+
Exception driver problems, for instance incompatible firmware version.
+
+
Definition at line 10 of file driverexception.h .
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/html/classDriverException.png b/docs/html/classDriverException.png
new file mode 100644
index 0000000..5b60bc7
Binary files /dev/null and b/docs/html/classDriverException.png differ
diff --git a/docs/html/classPlottyFile-members.html b/docs/html/classPlottyFile-members.html
new file mode 100644
index 0000000..ded9b93
--- /dev/null
+++ b/docs/html/classPlottyFile-members.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for PlottyFile , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classPlottyFile.html b/docs/html/classPlottyFile.html
new file mode 100644
index 0000000..9a24386
--- /dev/null
+++ b/docs/html/classPlottyFile.html
@@ -0,0 +1,819 @@
+
+
+
+
+
+
+
+B15F: PlottyFile Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <plottyfile.h >
+
+
+
Wrapper class for convenient plot file creation, needed to display graphs using plotty.
+
+
Definition at line 20 of file plottyfile.h .
+
+
+
◆ addDot() [1/2]
+
+
+
+
+
+ void PlottyFile::addDot
+ (
+ Dot &
+ dot )
+
+
+
+
+
Adds a dot to the plotty file.
Parameters
+
+
+
+
+
Definition at line 3 of file plottyfile.cpp .
+
+
+
+
+
◆ addDot() [2/2]
+
+
+
+
+
+ void PlottyFile::addDot
+ (
+ Dot
+ dot )
+
+
+
+
+
Adds a dot by reference to the plotty file.
Parameters
+
+
+
+
+
Definition at line 8 of file plottyfile.cpp .
+
+
+
+
+
◆ getDescPara()
+
+
+
+
+
+ std::string PlottyFile::getDescPara
+ (
+ void
+ )
+ const
+
+
+
+
Returns description of parameter
+
+
Definition at line 130 of file plottyfile.cpp .
+
+
+
+
+
◆ getDescX()
+
+
+
+
+
+ std::string PlottyFile::getDescX
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getDescY()
+
+
+
+
+
+ std::string PlottyFile::getDescY
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getFunctionType()
+
+
+
+
+
+ FunctionType PlottyFile::getFunctionType
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getParaFirstCurve()
+
+
+
+
+
+ uint16_t PlottyFile::getParaFirstCurve
+ (
+ void
+ )
+ const
+
+
+
+
Returns initial parameter value
+
+
Definition at line 95 of file plottyfile.cpp .
+
+
+
+
+
◆ getParaStepWidth()
+
+
+
+
+
+ uint16_t PlottyFile::getParaStepWidth
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getQuadrant()
+
+
+
+
+
+ uint8_t PlottyFile::getQuadrant
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getRefX()
+
+
+
+
+
+ uint16_t PlottyFile::getRefX
+ (
+ void
+ )
+ const
+
+
+
+
Returns x reference (max) value
+
+
Definition at line 85 of file plottyfile.cpp .
+
+
+
+
+
◆ getRefY()
+
+
+
+
+
+ uint16_t PlottyFile::getRefY
+ (
+ void
+ )
+ const
+
+
+
+
Returns y reference (max) value
+
+
Definition at line 90 of file plottyfile.cpp .
+
+
+
+
+
◆ getUnitPara()
+
+
+
+
+
+ std::string PlottyFile::getUnitPara
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getUnitX()
+
+
+
+
+
+ std::string PlottyFile::getUnitX
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ getUnitY()
+
+
+
+
+
+ std::string PlottyFile::getUnitY
+ (
+ void
+ )
+ const
+
+
+
+
+
+
◆ setDescPara()
+
+
+
+
+
+ void PlottyFile::setDescPara
+ (
+ std::string
+ desc_para )
+
+
+
+
+
Sets the description of the parameter.
Parameters
+
+ para_first description
+
+
+
+
+
Definition at line 70 of file plottyfile.cpp .
+
+
+
+
+
◆ setDescX()
+
+
+
+
+
+ void PlottyFile::setDescX
+ (
+ std::string
+ desc_x )
+
+
+
+
+
Sets the description of the x axis.
Parameters
+
+ para_first description
+
+
+
+
+
Definition at line 50 of file plottyfile.cpp .
+
+
+
+
+
◆ setDescY()
+
+
+
+
+
+ void PlottyFile::setDescY
+ (
+ std::string
+ desc_y )
+
+
+
+
+
Sets the description of the y axis.
Parameters
+
+ para_first description
+
+
+
+
+
Definition at line 60 of file plottyfile.cpp .
+
+
+
+
+
◆ setFunctionType()
+
+
+
+
+
+ void PlottyFile::setFunctionType
+ (
+ FunctionType
+ function_type )
+
+
+
+
+
Sets the FunctionType of this plotty file.
Parameters
+
+ function_type enum value
+
+
+
+
+
Definition at line 13 of file plottyfile.cpp .
+
+
+
+
+
◆ setParaFirstCurve()
+
+
+
+
+
+ void PlottyFile::setParaFirstCurve
+ (
+ uint16_t
+ para_first )
+
+
+
+
+
Sets initial value of the parameter. Gets used together with the stepwith to label the curves.
Parameters
+
+ para_first initial parameter value
+
+
+
+
+
Definition at line 35 of file plottyfile.cpp .
+
+
+
+
+
◆ setParaStepWidth()
+
+
+
+
+
+ void PlottyFile::setParaStepWidth
+ (
+ uint16_t
+ para_stepwidth )
+
+
+
+
+
Sets the stepwith the parameter got increased with each curve.
Parameters
+
+ para_first parameter stepwith
+
+
+
+
+
Definition at line 40 of file plottyfile.cpp .
+
+
+
+
+
◆ setQuadrant()
+
+
+
+
+
+ void PlottyFile::setQuadrant
+ (
+ uint8_t
+ quadrant )
+
+
+
+
+
Sets the quadrant of this plot.
Parameters
+
+ quadrant quadrant number (1..4)
+
+
+
+
+
Definition at line 18 of file plottyfile.cpp .
+
+
+
+
+
◆ setRefX()
+
+
+
+
+
+ void PlottyFile::setRefX
+ (
+ uint16_t
+ ref_x )
+
+
+
+
+
Sets reference (max) value of the x axis
Parameters
+
+
+
+
+
Definition at line 25 of file plottyfile.cpp .
+
+
+
+
+
◆ setRefY()
+
+
+
+
+
+ void PlottyFile::setRefY
+ (
+ uint16_t
+ ref_y )
+
+
+
+
+
Sets reference (max) value of the y axis
Parameters
+
+
+
+
+
Definition at line 30 of file plottyfile.cpp .
+
+
+
+
+
◆ setUnitPara()
+
+
+
+
+
+ void PlottyFile::setUnitPara
+ (
+ std::string
+ unit_para )
+
+
+
+
+
Sets the unit of the parameter.
Parameters
+
+
+
+
+
Definition at line 65 of file plottyfile.cpp .
+
+
+
+
+
◆ setUnitX()
+
+
+
+
+
+ void PlottyFile::setUnitX
+ (
+ std::string
+ unit_x )
+
+
+
+
+
Sets the unit of the x axis.
Parameters
+
+
+
+
+
Definition at line 45 of file plottyfile.cpp .
+
+
+
+
+
◆ setUnitY()
+
+
+
+
+
+ void PlottyFile::setUnitY
+ (
+ std::string
+ unit_y )
+
+
+
+
+
Sets the unit of the y axis.
Parameters
+
+
+
+
+
Definition at line 55 of file plottyfile.cpp .
+
+
+
+
+
◆ startPlotty()
+
+
+
+
+
+ void PlottyFile::startPlotty
+ (
+ std::string
+ filename )
+
+
+
+
+
Starts plotty with a plot file.
Parameters
+
+
+
+
+
Definition at line 196 of file plottyfile.cpp .
+
+
+
+
+
◆ writeToFile()
+
+
+
+
+
+ void PlottyFile::writeToFile
+ (
+ std::string
+ filename )
+
+
+
+
+
Saves the PlottyFile in a binary format, ready to open with plotty.
Parameters
+
+ filename desired plot path
+
+
+
+
+
Definition at line 147 of file plottyfile.cpp .
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classTimeoutException-members.html b/docs/html/classTimeoutException-members.html
new file mode 100644
index 0000000..cbd10bb
--- /dev/null
+++ b/docs/html/classTimeoutException-members.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for TimeoutException , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classTimeoutException.html b/docs/html/classTimeoutException.html
new file mode 100644
index 0000000..4f9fbc5
--- /dev/null
+++ b/docs/html/classTimeoutException.html
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+B15F: TimeoutException Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <timeoutexception.h >
+
+
+
+
+
+
+
+
+
+
+std::string msg
+ failure description
+
+
+
+
Exception for USART related timeouts.
+
+
Definition at line 9 of file timeoutexception.h .
+
+
+
◆ TimeoutException() [1/2]
+
+
+
+
+
+
+
+
+ TimeoutException::TimeoutException
+ (
+ const char *
+ message )
+
+
+
+
+
+inline explicit
+
+
+
+
+
+
◆ TimeoutException() [2/2]
+
+
+
+
+
+
+
+
+ TimeoutException::TimeoutException
+ (
+ const std::string &
+ message )
+
+
+
+
+
+inline explicit
+
+
+
+
+
+
◆ ~TimeoutException()
+
+
+
+
+
+
+
+
+ virtual TimeoutException::~TimeoutException
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
◆ what()
+
+
+
+
+
+
+
+
+ virtual const char* TimeoutException::what
+ (
+ )
+ const
+
+
+ throw (
+
+
+ )
+
+
+
+
+inline virtual
+
+
+
+
Get failure description
Returns error message as c-string
+
+
Definition at line 37 of file timeoutexception.h .
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/html/classTimeoutException.png b/docs/html/classTimeoutException.png
new file mode 100644
index 0000000..d6f464d
Binary files /dev/null and b/docs/html/classTimeoutException.png differ
diff --git a/docs/html/classUSART-members.html b/docs/html/classUSART-members.html
new file mode 100644
index 0000000..23ac216
--- /dev/null
+++ b/docs/html/classUSART-members.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for USART , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classUSART.html b/docs/html/classUSART.html
new file mode 100644
index 0000000..7cd032b
--- /dev/null
+++ b/docs/html/classUSART.html
@@ -0,0 +1,531 @@
+
+
+
+
+
+
+
+B15F: USART Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <usart.h >
+
+
+
C++ Wrapper class for termios usart library.
+
+
Definition at line 16 of file usart.h .
+
+
+
◆ USART()
+
+
+
+
+
+
+
+
+ USART::USART
+ (
+ )
+
+
+
+
+
+explicit default
+
+
+
+
Standard-Konstruktor
+
+
+
+
+
◆ ~USART()
+
+
+
+
+
+
+
+
+ USART::~USART
+ (
+ void
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
+
+
◆ clearInputBuffer()
+
+
+
+
+
+ void USART::clearInputBuffer
+ (
+ void
+ )
+
+
+
+
+
Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gelesen wurden
Exceptions
+
+
+
+
+
Definition at line 54 of file usart.cpp .
+
+
+
+
+
◆ clearOutputBuffer()
+
+
+
+
+
+ void USART::clearOutputBuffer
+ (
+ void
+ )
+
+
+
+
+
Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden
Exceptions
+
+
+
+
+
Definition at line 61 of file usart.cpp .
+
+
+
+
+
◆ closeDevice()
+
+
+
+
+
+ void USART::closeDevice
+ (
+ void
+ )
+
+
+
+
+
Schließt die USART Schnittstelle
Exceptions
+
+
+
+
+
Definition at line 43 of file usart.cpp .
+
+
+
+
+
◆ drop()
+
+
+
+
+
+ void USART::drop
+ (
+ uint8_t
+ len )
+
+
+
+
+
Receives n bytes but discards them
Parameters
+
+ len count of bytes to receive
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 114 of file usart.cpp .
+
+
+
+
+
◆ flushOutputBuffer()
+
+
+
+
+
+ void USART::flushOutputBuffer
+ (
+ void
+ )
+
+
+
+
+
Schreibt Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden
Exceptions
+
+
+
+
+
Definition at line 68 of file usart.cpp .
+
+
+
+
+
◆ getBaudrate()
+
+
+
+
+
+ uint32_t USART::getBaudrate
+ (
+ void
+ )
+
+
+
+
+
Liefert die eingestellte Baudrate Änderungen werden erst nach einem open() wirksam
+
+
Definition at line 121 of file usart.cpp .
+
+
+
+
+
◆ getTimeout()
+
+
+
+
+
+ uint8_t USART::getTimeout
+ (
+ void
+ )
+
+
+
+
+
Liefert den eingestellten Timeout (in Dezisekunden) Änderungen werden erst nach einem open() wirksam
+
+
Definition at line 126 of file usart.cpp .
+
+
+
+
+
◆ openDevice()
+
+
+
+
+
+ void USART::openDevice
+ (
+ std::string
+ device )
+
+
+
+
+
Öffnet die USART Schnittstelle
Parameters
+
+ device Linux-Gerätepfad
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 9 of file usart.cpp .
+
+
+
+
+
◆ receive()
+
+
+
+
+
+ void USART::receive
+ (
+ uint8_t *
+ buffer ,
+
+
+
+
+ uint16_t
+ offset ,
+
+
+
+
+ uint8_t
+ len
+
+
+
+ )
+
+
+
+
+
Receives n bytes from USART and writes them into the buffer
Parameters
+
+ buffer target buffer
+ offset in buffer (mostly 0)
+ len count of bytes to receive
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 84 of file usart.cpp .
+
+
+
+
+
◆ setBaudrate()
+
+
+
+
+
+ void USART::setBaudrate
+ (
+ uint32_t
+ baudrate )
+
+
+
+
+
+
+
◆ setTimeout()
+
+
+
+
+
+ void USART::setTimeout
+ (
+ uint8_t
+ timeout )
+
+
+
+
+
Setzt den Timeout (in Dezisekunden) Änderungen werden erst nach openDevice() wirksam
+
+
Definition at line 136 of file usart.cpp .
+
+
+
+
+
◆ transmit()
+
+
+
+
+
+ void USART::transmit
+ (
+ uint8_t *
+ buffer ,
+
+
+
+
+ uint16_t
+ offset ,
+
+
+
+
+ uint8_t
+ len
+
+
+
+ )
+
+
+
+
+
Sends n bytes from the buffer over USART
Parameters
+
+ buffer target buffer
+ offset in buffer (mostly 0)
+ len count of bytes to send
+
+
+
+
Exceptions
+
+
+
+
+
Definition at line 75 of file usart.cpp .
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classUSARTException-members.html b/docs/html/classUSARTException-members.html
new file mode 100644
index 0000000..319ec23
--- /dev/null
+++ b/docs/html/classUSARTException-members.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for USARTException , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classUSARTException.html b/docs/html/classUSARTException.html
new file mode 100644
index 0000000..89036d2
--- /dev/null
+++ b/docs/html/classUSARTException.html
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+B15F: USARTException Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <usartexception.h >
+
+
+
+
+
+
+
+
+
+
+std::string msg
+ failure description
+
+
+
+
Exception for USART problems, for instance buffer overflow.
+
+
Definition at line 9 of file usartexception.h .
+
+
+
◆ USARTException() [1/2]
+
+
+
+
+
+
+
+
+ USARTException::USARTException
+ (
+ const char *
+ message )
+
+
+
+
+
+inline explicit
+
+
+
+
+
+
◆ USARTException() [2/2]
+
+
+
+
+
+
+
+
+ USARTException::USARTException
+ (
+ const std::string &
+ message )
+
+
+
+
+
+inline explicit
+
+
+
+
+
+
◆ ~USARTException()
+
+
+
+
+
+
+
+
+ virtual USARTException::~USARTException
+ (
+ )
+
+
+
+
+
+virtual default
+
+
+
+
+
+
+
◆ what()
+
+
+
+
+
+
+
+
+ virtual const char* USARTException::what
+ (
+ )
+ const
+
+
+ throw (
+
+
+ )
+
+
+
+
+inline virtual
+
+
+
+
Get failure description
Returns error message as c-string
+
+
Definition at line 37 of file usartexception.h .
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/docs/html/classUSARTException.png b/docs/html/classUSARTException.png
new file mode 100644
index 0000000..0c9d8a0
Binary files /dev/null and b/docs/html/classUSARTException.png differ
diff --git a/docs/html/classView-members.html b/docs/html/classView-members.html
new file mode 100644
index 0000000..97893dd
--- /dev/null
+++ b/docs/html/classView-members.html
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for View , including all inherited members.
+
+ calls (defined in View )View protected
+ draw (void)=0 (defined in View )View pure virtual
+ getWinContext (void) (defined in View )View static
+ height (defined in View )View protected
+ KEY_ENT (defined in View )View protected static
+ keypress (int &key)=0 (defined in View )View pure virtual
+ repaint (void) (defined in View )View virtual
+ setTitle (std::string title) (defined in View )View virtual
+ setWinContext (WINDOW *win) (defined in View )View static
+ start_x (defined in View )View protected
+ start_y (defined in View )View protected
+ str_split (const std::string &str, const std::string delim) (defined in View )View static
+ title (defined in View )View protected
+ View (void) (defined in View )View
+ width (defined in View )View protected
+ win (defined in View )View protected static
+ ~View (void) (defined in View )View virtual
+
+
+
+
+
diff --git a/docs/html/classView.html b/docs/html/classView.html
new file mode 100644
index 0000000..cce9df2
--- /dev/null
+++ b/docs/html/classView.html
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+B15F: View Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <view.h >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+virtual void setTitle (std::string title)
+
+
+virtual void repaint (void)
+
+
+virtual void draw (void)=0
+
+
+virtual call_t keypress (int &key)=0
+
+
+
+
+static void setWinContext (WINDOW *win)
+
+
+static WINDOW * getWinContext (void)
+
+
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
+
+
+
+
+int width
+
+
+int height
+
+
+int start_x = 0
+
+
+int start_y = 0
+
+
+std::string title
+
+
+std::vector< call_t > calls
+
+
+
+
+static WINDOW * win = nullptr
+
+
+constexpr static int KEY_ENT = 10
+
+
+
+
Base class for multiple views with the ncurses user interface.
+
+
Definition at line 19 of file view.h .
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classView.png b/docs/html/classView.png
new file mode 100644
index 0000000..bcf3f8e
Binary files /dev/null and b/docs/html/classView.png differ
diff --git a/docs/html/classViewInfo-members.html b/docs/html/classViewInfo-members.html
new file mode 100644
index 0000000..ad42b19
--- /dev/null
+++ b/docs/html/classViewInfo-members.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for ViewInfo , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classViewInfo.html b/docs/html/classViewInfo.html
new file mode 100644
index 0000000..7016221
--- /dev/null
+++ b/docs/html/classViewInfo.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+B15F: ViewInfo Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <view_info.h >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+virtual void setText (std::string text)
+
+
+virtual void setLabelClose (std::string label)
+
+
+virtual void setCall (call_t call)
+
+
+virtual void draw (void) override
+
+
+virtual call_t keypress (int &key) override
+
+
+
+virtual void setTitle (std::string title)
+
+
+virtual void repaint (void)
+
+
+
+
+std::string text
+
+
+std::string label_close
+
+
+int close_offset_x = 0
+
+
+int close_offset_y = 0
+
+
+
+int width
+
+
+int height
+
+
+int start_x = 0
+
+
+int start_y = 0
+
+
+std::string title
+
+
+std::vector< call_t > calls
+
+
+
+
+constexpr static int text_offset_x = 2
+
+
+constexpr static int text_offset_y = 3
+
+
+
+static WINDOW * win = nullptr
+
+
+constexpr static int KEY_ENT = 10
+
+
+
+
+
+static void setWinContext (WINDOW *win)
+
+
+static WINDOW * getWinContext (void)
+
+
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
+
+
+
+
View for simple text message output.
+
+
Definition at line 8 of file view_info.h .
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classViewInfo.png b/docs/html/classViewInfo.png
new file mode 100644
index 0000000..aad65ce
Binary files /dev/null and b/docs/html/classViewInfo.png differ
diff --git a/docs/html/classViewMonitor-members.html b/docs/html/classViewMonitor-members.html
new file mode 100644
index 0000000..860d56d
--- /dev/null
+++ b/docs/html/classViewMonitor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for ViewMonitor , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classViewMonitor.html b/docs/html/classViewMonitor.html
new file mode 100644
index 0000000..5f04ee9
--- /dev/null
+++ b/docs/html/classViewMonitor.html
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+B15F: ViewMonitor Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <view_monitor.h >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+virtual call_t keypress (int &key) override
+
+
+
+virtual void setText (std::string text)
+
+
+virtual void setLabelClose (std::string label)
+
+
+virtual void setCall (call_t call)
+
+
+virtual void draw (void) override
+
+
+
+virtual void setTitle (std::string title)
+
+
+virtual void repaint (void)
+
+
+
+
+virtual void worker (void)
+
+
+
+
+volatile bool run_worker = true
+
+
+std::thread t_worker
+
+
+
+std::string text
+
+
+std::string label_close
+
+
+int close_offset_x = 0
+
+
+int close_offset_y = 0
+
+
+
+int width
+
+
+int height
+
+
+int start_x = 0
+
+
+int start_y = 0
+
+
+std::string title
+
+
+std::vector< call_t > calls
+
+
+
+
+
+static void setWinContext (WINDOW *win)
+
+
+static WINDOW * getWinContext (void)
+
+
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
+
+
+
+constexpr static int text_offset_x = 2
+
+
+constexpr static int text_offset_y = 3
+
+
+
+static WINDOW * win = nullptr
+
+
+constexpr static int KEY_ENT = 10
+
+
+
+
View to display all B15 inputs.
+
+
Definition at line 13 of file view_monitor.h .
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classViewMonitor.png b/docs/html/classViewMonitor.png
new file mode 100644
index 0000000..08ea716
Binary files /dev/null and b/docs/html/classViewMonitor.png differ
diff --git a/docs/html/classViewPromt-members.html b/docs/html/classViewPromt-members.html
new file mode 100644
index 0000000..b95ad6d
--- /dev/null
+++ b/docs/html/classViewPromt-members.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for ViewPromt , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classViewPromt.html b/docs/html/classViewPromt.html
new file mode 100644
index 0000000..ca71666
--- /dev/null
+++ b/docs/html/classViewPromt.html
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+B15F: ViewPromt Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <view_promt.h >
+
+
+
+
+
+
+
+
+
+
+
+
+
+virtual void draw (void) override
+
+
+virtual void setMessage (std::string message)
+
+
+virtual void setConfirm (std::string name, call_t call)
+
+
+virtual void setCancel (std::string name, bool cancelable)
+
+
+virtual std::string getInput (void)
+
+
+virtual call_t keypress (int &key) override
+
+
+
+virtual void setTitle (std::string title)
+
+
+virtual void repaint (void)
+
+
+
+
+size_t selection = 1
+
+
+std::string input
+
+
+std::string message = "Input"
+
+
+std::string label_confirm = "[ OK ]"
+
+
+std::string sep = " "
+
+
+std::string label_cancel = "[ Cancel ]"
+
+
+call_t call_confirm = nullptr
+
+
+bool cancelable = true
+
+
+int button_offset_x = 0
+
+
+int button_offset_y = 0
+
+
+
+int width
+
+
+int height
+
+
+int start_x = 0
+
+
+int start_y = 0
+
+
+std::string title
+
+
+std::vector< call_t > calls
+
+
+
+
+constexpr static int text_offset_x = 2
+
+
+constexpr static int text_offset_y = 2
+
+
+
+static WINDOW * win = nullptr
+
+
+constexpr static int KEY_ENT = 10
+
+
+
+
+
+static void setWinContext (WINDOW *win)
+
+
+static WINDOW * getWinContext (void)
+
+
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
+
+
+
+
View for basic user text input.
+
+
Definition at line 10 of file view_promt.h .
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classViewPromt.png b/docs/html/classViewPromt.png
new file mode 100644
index 0000000..525a1d7
Binary files /dev/null and b/docs/html/classViewPromt.png differ
diff --git a/docs/html/classViewSelection-members.html b/docs/html/classViewSelection-members.html
new file mode 100644
index 0000000..9f1f0a0
--- /dev/null
+++ b/docs/html/classViewSelection-members.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+B15F: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for ViewSelection , including all inherited members.
+
+
+
+
+
diff --git a/docs/html/classViewSelection.html b/docs/html/classViewSelection.html
new file mode 100644
index 0000000..8baa922
--- /dev/null
+++ b/docs/html/classViewSelection.html
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+B15F: ViewSelection Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <view_selection.h >
+
+
+
+
+
+
+
+
+
+
+
+
+
+virtual void draw (void) override
+
+
+virtual void addChoice (std::string name, call_t call)
+
+
+virtual call_t keypress (int &key) override
+
+
+
+virtual void setTitle (std::string title)
+
+
+virtual void repaint (void)
+
+
+
+
+size_t selection = 0
+
+
+std::vector< std::string > choices
+
+
+
+int width
+
+
+int height
+
+
+int start_x = 0
+
+
+int start_y = 0
+
+
+std::string title
+
+
+std::vector< call_t > calls
+
+
+
+
+constexpr static int choice_offset_x = 2
+
+
+constexpr static int choice_offset_y = 3
+
+
+
+static WINDOW * win = nullptr
+
+
+constexpr static int KEY_ENT = 10
+
+
+
+
+
+static void setWinContext (WINDOW *win)
+
+
+static WINDOW * getWinContext (void)
+
+
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
+
+
+
+
View for user selection input.
+
+
Definition at line 10 of file view_selection.h .
+
The documentation for this class was generated from the following files:
+
+
+
+
+
diff --git a/docs/html/classViewSelection.png b/docs/html/classViewSelection.png
new file mode 100644
index 0000000..53db457
Binary files /dev/null and b/docs/html/classViewSelection.png differ
diff --git a/docs/html/classes.html b/docs/html/classes.html
new file mode 100644
index 0000000..1c9bb5f
--- /dev/null
+++ b/docs/html/classes.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+B15F: Class Index
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/cli_8cpp_source.html b/docs/html/cli_8cpp_source.html
new file mode 100644
index 0000000..04c3f56
--- /dev/null
+++ b/docs/html/cli_8cpp_source.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+B15F: cli.cpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
17 #include "ui/view_selection.h" 18 #include "ui/view_info.h" 19 #include "ui/view_monitor.h" 20 #include "ui/view_promt.h" 22 constexpr uint8_t WIN_WIDTH = 80;
23 constexpr uint8_t WIN_HEIGHT = 24;
25 volatile int win_changed_cooldown = 0;
26 volatile bool t_refresh_active =
false ;
28 void signal_handler(
int signal)
30 if (signal == SIGWINCH)
32 win_changed_cooldown = 10;
34 if (!t_refresh_active)
36 if (t_refresh.joinable())
38 t_refresh_active =
true ;
39 t_refresh = std::thread([]()
42 while (win_changed_cooldown--)
43 std::this_thread::sleep_for(std::chrono::milliseconds(10));
45 t_refresh_active =
false ;
48 win_stack.back()->repaint();
54 else if (signal == SIGINT)
57 std::cout <<
"SIGINT - Abbruch." << std::endl;
62 void abort_handler(std::exception& ex)
65 view->setTitle(
"Fehler" );
66 std::string msg(ex.what());
67 msg +=
"\n\nBeende in 5 Sekunden." ;
68 view->setText(msg.c_str());
69 view->setLabelClose(
"" );
72 std::this_thread::sleep_for(std::chrono::milliseconds(5000));
75 std::cerr << std::endl <<
"*** EXCEPTION ***" << std::endl << ex.what() << std::endl;
83 #ifndef B15F_CLI_DEBUG 84 std::cout << std::endl <<
"Starte in 3s ..." << std::endl;
96 mousemask(ALL_MOUSE_EVENTS, NULL);
99 signal(SIGWINCH, signal_handler);
100 signal(SIGINT, signal_handler);
103 View::setWinContext(newwin(WIN_HEIGHT, WIN_WIDTH, 0, 0));
111 int exit_code = EXIT_SUCCESS;
+
+static B15F & getInstance(void)
+static void setAbortHandler(errorhandler_t func)
+
+
+
+
diff --git a/docs/html/closed.png b/docs/html/closed.png
new file mode 100644
index 0000000..98cc2c9
Binary files /dev/null and b/docs/html/closed.png differ
diff --git a/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html b/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html
new file mode 100644
index 0000000..45d394d
--- /dev/null
+++ b/docs/html/dir_1788f8309b1a812dcb800a185471cf6c.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+B15F: ui Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html b/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html
new file mode 100644
index 0000000..da1db98
--- /dev/null
+++ b/docs/html/dir_587c94d866dbb2f408f78cf41f9b2f8d.html
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+B15F: drv Directory Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/doc.png b/docs/html/doc.png
new file mode 100644
index 0000000..17edabf
Binary files /dev/null and b/docs/html/doc.png differ
diff --git a/docs/html/dot_8cpp_source.html b/docs/html/dot_8cpp_source.html
new file mode 100644
index 0000000..8602bb6
--- /dev/null
+++ b/docs/html/dot_8cpp_source.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+B15F: drv/dot.cpp Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
3 Dot::Dot (uint16_t x, uint16_t y, uint8_t curve) : x(x), y(y), curve(curve)
6 throw std::range_error(
"Kurvenindex muss im Bereich [0, 63] liegen" );
+uint16_t getX(void) const
+uint16_t getY(void) const
+uint8_t getCurve(void) const
+Dot(uint16_t x, uint16_t y, uint8_t curve)
+
+
+
+
diff --git a/docs/html/dot_8h_source.html b/docs/html/dot_8h_source.html
new file mode 100644
index 0000000..afb9290
--- /dev/null
+++ b/docs/html/dot_8h_source.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+B15F: drv/dot.h Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
18 Dot (uint16_t x, uint16_t y, uint8_t curve);
23 uint16_t
getX (
void )
const ;
28 uint16_t
getY (
void )
const ;
+uint16_t getX(void) const
+
+uint16_t getY(void) const
+uint8_t getCurve(void) const
+Dot(uint16_t x, uint16_t y, uint8_t curve)
+
+
+
+
diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css
new file mode 100644
index 0000000..5bc13aa
--- /dev/null
+++ b/docs/html/doxygen.css
@@ -0,0 +1,1766 @@
+/* The standard CSS for doxygen 1.8.16 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+ul.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+ column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #FFFFFF;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #FFFFFF;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+ul {
+ overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #FFFFFF;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl, img.inline {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
+}
+
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
+}
+
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+/*
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTableHead tr {
+}
+
+table.markdownTableBodyLeft td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter {
+ text-align: center
+}
+*/
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
Binary files /dev/null and b/docs/html/doxygen.png differ
diff --git a/docs/html/driverexception_8h_source.html b/docs/html/driverexception_8h_source.html
new file mode 100644
index 0000000..6109de2
--- /dev/null
+++ b/docs/html/driverexception_8h_source.html
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+B15F: drv/driverexception.h Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1 #ifndef DRIVEREXCEPTION_H 2 #define DRIVEREXCEPTION_H 25 virtual const char * what()
const throw ()
34 #endif // DRIVEREXCEPTION_H
+
+
+
+
+
diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js
new file mode 100644
index 0000000..c8e84aa
--- /dev/null
+++ b/docs/html/dynsections.js
@@ -0,0 +1,127 @@
+/*
+ @licstart The following is the entire license notice for the
+ JavaScript code in this file.
+
+ Copyright (C) 1997-2017 by Dimitri van Heesch
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ @licend The above is the entire license notice
+ for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l
+
+
+
+
+
+
+B15F: File List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1 2 ]
+ ▼ drv
+ b15f.cpp
+ b15f.h
+ dot.cpp
+ dot.h
+ driverexception.h
+ plottyfile.cpp
+ plottyfile.h
+ requests.h
+ timeoutexception.h
+ usart.cpp
+ usart.h
+ usartexception.h
+ ▼ ui
+ ui.cpp
+ ui.h
+ view.cpp
+ view.h
+ view_info.cpp
+ view_info.h
+ view_monitor.cpp
+ view_monitor.h
+ view_promt.cpp
+ view_promt.h
+ view_selection.cpp
+ view_selection.h
+ cli.cpp
+
+
+
+
+
+
+
diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
Binary files /dev/null and b/docs/html/folderclosed.png differ
diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
Binary files /dev/null and b/docs/html/folderopen.png differ
diff --git a/docs/html/functions.html b/docs/html/functions.html
new file mode 100644
index 0000000..cb1b56b
--- /dev/null
+++ b/docs/html/functions.html
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+B15F: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all documented class members with links to the class documentation for each member:
+
+
- a -
+abort()
+: B15F
+
+activateSelfTestMode()
+: B15F
+
+addDot()
+: PlottyFile
+
+analogRead()
+: B15F
+
+analogSequence()
+: B15F
+
+analogWrite0()
+: B15F
+
+analogWrite1()
+: B15F
+
+
+
+
+
- b -
+
+
+
- c -
+clearInputBuffer()
+: USART
+
+clearOutputBuffer()
+: USART
+
+closeDevice()
+: USART
+
+
+
+
+
- d -
+delay_ms()
+: B15F
+
+delay_us()
+: B15F
+
+digitalRead0()
+: B15F
+
+digitalRead1()
+: B15F
+
+digitalWrite0()
+: B15F
+
+digitalWrite1()
+: B15F
+
+discard()
+: B15F
+
+Dot()
+: Dot
+
+drop()
+: USART
+
+
+
+
+
- e -
+
+
+
- f -
+flushOutputBuffer()
+: USART
+
+
+
+
+
- g -
+
+
+
- m -
+
+
+
- o -
+openDevice()
+: USART
+
+
+
+
+
- p -
+PRE
+: B15F
+
+pwmSetFrequency()
+: B15F
+
+pwmSetValue()
+: B15F
+
+
+
+
+
- r -
+readDipSwitch()
+: B15F
+
+receive()
+: USART
+
+reconnect()
+: B15F
+
+RECONNECT_TIMEOUT
+: B15F
+
+RECONNECT_TRIES
+: B15F
+
+reverse()
+: B15F
+
+
+
+
+
- s -
+
+
+
- t -
+
+
+
- u -
+
+
+
- w -
+
+
+
- ~ -
+
+
+
+
+
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
new file mode 100644
index 0000000..bdaa77e
--- /dev/null
+++ b/docs/html/functions_func.html
@@ -0,0 +1,370 @@
+
+
+
+
+
+
+
+B15F: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- a -
+abort()
+: B15F
+
+activateSelfTestMode()
+: B15F
+
+addDot()
+: PlottyFile
+
+analogRead()
+: B15F
+
+analogSequence()
+: B15F
+
+analogWrite0()
+: B15F
+
+analogWrite1()
+: B15F
+
+
+
+
+
- c -
+clearInputBuffer()
+: USART
+
+clearOutputBuffer()
+: USART
+
+closeDevice()
+: USART
+
+
+
+
+
- d -
+delay_ms()
+: B15F
+
+delay_us()
+: B15F
+
+digitalRead0()
+: B15F
+
+digitalRead1()
+: B15F
+
+digitalWrite0()
+: B15F
+
+digitalWrite1()
+: B15F
+
+discard()
+: B15F
+
+Dot()
+: Dot
+
+drop()
+: USART
+
+
+
+
+
- e -
+
+
+
- f -
+flushOutputBuffer()
+: USART
+
+
+
+
+
- g -
+
+
+
- o -
+openDevice()
+: USART
+
+
+
+
+
- p -
+pwmSetFrequency()
+: B15F
+
+pwmSetValue()
+: B15F
+
+
+
+
+
- r -
+readDipSwitch()
+: B15F
+
+receive()
+: USART
+
+reconnect()
+: B15F
+
+reverse()
+: B15F
+
+
+
+
+
- s -
+
+
+
- t -
+
+
+
- u -
+
+
+
- w -
+
+
+
- ~ -
+
+
+
+
+
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
new file mode 100644
index 0000000..c8b2400
--- /dev/null
+++ b/docs/html/functions_vars.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+B15F: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
new file mode 100644
index 0000000..37f9113
--- /dev/null
+++ b/docs/html/hierarchy.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+B15F: Class Hierarchy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
+
+
+
+
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 0000000..85b7169
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+B15F: B15F Benutzerhandbuch
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hinweise :
+ - Terminal-Befehle sind fett gedruckt
+ - Als Student/Studentin können Sie davon ausgehen, dass die Steuersoftware auf Ihrem Arbeitsplatz bereits installiert ist
+ - D.h. Sie müssen zu Beginn jeder Übung nur die Firmware neu aufspielen (Installation Abschnitt 3)
+
+
+Einführung
+
Das gesamte Softwareprojekt besteht aus zwei Teilen:
+Die Firmware ist die Software auf dem Mikrocontroller (MCU) des Board 15. Der Mikrocontroller steuert die Peripherie (ADCs, DACs, ...) über einen SPI-BUS.
+ Der zweite Teil von B15F ist die Steuersoftware , die auf dem PC ausgeführt wird. Diese sendet über eine USART-Schnittstelle (RS-232) Befehle an den Mikrocontroller.
+Die Steuersoftware besitzt ein CLI (command line interface) mit einer Benutzerschnittstelle für die einfache Fernsteuerung des B15F .
+Außerdem wird eine Bibliothek (b15fdrv ) installiert, die eine einfache Entwicklung kleiner Steuerprogramme erlaubt.
+
+Installation
+
+Installation mit Installationsscript (empfohlen)
+
(a) Laden Sie das Installationsscript herunter
+ (b) Setzen Sie die Ausführungsberechtigung
+ (c) Starten Sie das Script
+
+
+Installation von Hand (falls Installationsscript mit Fehler abbricht)
+
+1. Abhängigkeiten installieren
+
(a) sudo apt-get update
+ (b) sudo apt-get install git avr-libc avrdude libncurses5-dev g++ astyle
+
+
+2. Das Repository klonen
+
(a) cd /home/famulus/
+ (b) git clone "https://github.com/devfix/b15f.git"
+
+
+3. Die Firmware installieren
+
(a) cd "/home/famulus/b15f/firmware"
+ (b) Passen Sie in der Datei Makefile die Option "MCU = ..." an die MCU des vorliegenden Boards an
+ (atmega1284 und atmega1284p sind nicht identisch!)
+ (c) make
+ Wenn udev richtig konfiguriert wurde:
+ (d I) make upload
+ Sonst:
+ (d II) sudo make upload
+
+
+4. Die Steuersoftware (Bibliothek & CLI) installieren
+
(a) cd "/home/famulus/b15f/control/src"
+ (b) make
+ (Die Warnungen durch doxygen können ignoriert werden.)
+
(c) sudo make install
+
+
+Aktualisierung
+
+Aktualisierung mit Installationsscript (empfohlen)
+
Wiederholen Sie den Schritt "Installation mit Installationsscript". Das Script erkennt die bereits installierte Version und aktualisiert diese.
+
+Aktualisierung von Hand (falls Installationsscript mit Fehler abbricht)
+
(a) cd /home/famulus/b15f/
+ (b) git pull –prune
+ (c) cd "/home/famulus/b15f/firmware"
+ (d) make clean
+ (e) cd "/home/famulus/b15f/control/src"
+ (f) make clean
+ (g) "Installation von Hand" ab Schritt 3 durchführen
+
+Die CommandLineInterface (CLI) benutzen
+
(a) Öffnen Sie ein Terminal und maximieren Sie das Fenster
+ (b) Start des CLI erfolgt durch b15fcli
+ (c) Die Navigation erfolgt durch <Tab>, die Pfeiltasten und <Enter> oder die Maus
+ (d) Mit <Strg + c> kann das Programm sofort verlassen werden
+
+Eigene Programme mit B15F schreiben
+
+Grundsätzliches
+
Verwendet wird die Bibliothekt b15fdrv . Die wichtigste Klasse für die Steuerung des Board 15 ist B15F .
+Dort befindet sich auch eine Übersicht der verfügbaren Befehle.
+
+
+Beispiele
+
In dem Verzeichnis b15f/control/examples sind einige Beispiele für die Verwendung einzelner B15F Funktionen.
+Zu jedem Beispiel gehört eine main.cpp mit dem Quellcode und eine Makefile -Datei. Durch das Makefile wird beim Kompilieren und Linken die Bibliothek b15fdrv automatisch einbezogen.
+Das Beispiel muss durch Sie also nur mit make kompiliert und mit .**/main.elf** gestartet werden.
+
+Den B15F Treiber verwenden
+
Benötigt wird der B15F-Header:
+#include <b15f/b15f.h>
+und der Header für die plottyfile-Generierung, falls mit Kennlinien gearbeitet werden soll:
+#include <b15f/plottyfile.h>
+
Für die Interaktion wird eine Referenz auf die aktuelle Treiberinstanz gespeichert:
+B15F & drv = B15F::getInstance() ;
+Falls noch keine existiert, wird automatisch eine erzeugt und Verbindung zum Board hergestellt.
+ Ab jetzt können auf dem Object drv
verschiedene Methoden angewand werden, siehe B15F .
+
+
+Kennlinien mit plottyfile generieren
+
Die Beschreibung zu Plottyfile befindet sich hier .
+Nach dem Include von plottyfile kann ein neues Objekt erzeugt und konfiguriert werden:
+
{C++}
PlottyFile pf;
pf.setUnitX("V");
pf.setUnitY("V");
pf.setUnitPara("V");
pf.setDescX("U_{OUT}"); // Markdown wird unterstuetzt
pf.setDescY("U_{IN}");
pf.setDescPara("");
pf.setRefX(5);
pf.setRefY(5);
pf.setParaFirstCurve(0);
pf.setParaStepWidth(0);
Messpunkte können anschließend hinzugefügt werden.
+Dabei gehören Punkte mit dem gleichen Index für curve
(uint8_t ) zur selben Kurve und erhalten durch Plotty automatisch die gleiche Farbe.
+
{C++}
pf.addDot(Dot(x, y, curve));
Wichtig : Die Werte für x
und y
sind uint16_t , also keine Gleitkommazahlen. Stattdessen sind sie auf RefX und RefY bezogen.
+
+
+
+
+
+
diff --git a/docs/html/jquery.js b/docs/html/jquery.js
new file mode 100644
index 0000000..64861eb
--- /dev/null
+++ b/docs/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML=" ";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B15F
+
+ Board 15 Famulus Edition
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1 #include "plottyfile.h" 15 this->function_type = function_type;
20 if (quadrant < 1 || quadrant > 4)
21 throw std::range_error(
"Ungueltiger Quadrant" );
22 this->quadrant = quadrant;
37 this->para_first = para_first;
42 this->para_stepwidth = para_stepwidth;
47 this->unit_x = unit_x;
52 this->desc_x = desc_x;
57 this->unit_y = unit_y;
62 this->desc_y = desc_y;
67 this->unit_para = unit_para;
72 this->desc_para = desc_para;
102 return para_stepwidth;
135 void PlottyFile::prepStr(std::string& str, uint8_t len)
137 if (str.length() > len)
138 throw std::runtime_error(
"Zu grosser String." );
140 if (str.length() != len)
143 while (str.length() < len)
150 throw std::length_error(
"Es wurden keine Punkte gespeichert." );
152 prepStr(unit_x, STR_LEN_SHORT);
153 prepStr(desc_x, STR_LEN_LARGE);
154 prepStr(unit_y, STR_LEN_SHORT);
155 prepStr(desc_y, STR_LEN_LARGE);
156 prepStr(unit_para, STR_LEN_SHORT);
157 prepStr(desc_para, STR_LEN_LARGE);
159 std::ofstream file(filename);
162 file.write(reinterpret_cast<char*>(&command), 1);
163 file.write(head.c_str(), head.length());
164 file.write(filetype.c_str(), filetype.length());
165 file.write(reinterpret_cast<char*>(&version), 2);
166 file.write(reinterpret_cast<char*>(&subversion), 2);
167 file.put(static_cast<uint8_t>(function_type));
168 file.write(reinterpret_cast<char*>(&quadrant), 1);
169 file.write(reinterpret_cast<char*>(&ref_x), 2);
170 file.write(reinterpret_cast<char*>(&ref_y), 2);
171 file.write(reinterpret_cast<char*>(¶_first), 2);
172 file.write(reinterpret_cast<char*>(¶_stepwidth), 2);
173 file.write(unit_x.c_str(), unit_x.length());
174 file.write(desc_x.c_str(), desc_x.length());
175 file.write(unit_y.c_str(), unit_y.length());
176 file.write(desc_y.c_str(), desc_y.length());
177 file.write(unit_para.c_str(), unit_para.length());
178 file.write(desc_para.c_str(), desc_para.length());
179 file.write(reinterpret_cast<const char*>(&eof), 1);
182 while (file.tellp() < 256)
187 file.put((dot.getX() >> 8) | (static_cast<uint8_t>(dot.getCurve()) << 2));
188 file.put(dot.getX() & 0xFF);
189 file.put(dot.getY() >> 8);
190 file.put(dot.getY() & 0xFF);
198 int code = system((
"plotty --in " + filename).c_str());
200 throw std::runtime_error(
"Fehler beim Aufruf von plotty" );
+void setParaStepWidth(uint16_t para_stepwidth)
+uint8_t getQuadrant(void) const
+void startPlotty(std::string filename)
+void writeToFile(std::string filename)
+void setUnitX(std::string unit_x)
+void setUnitPara(std::string unit_para)
+void setDescY(std::string desc_y)
+void setQuadrant(uint8_t quadrant)
+std::string getDescY(void) const
+void setRefY(uint16_t ref_y)
+std::string getDescX(void) const
+void setFunctionType(FunctionType function_type)
+void setDescX(std::string desc_x)
+
+void setRefX(uint16_t ref_x)
+void setUnitY(std::string unit_y)
+
+void setDescPara(std::string desc_para)
+uint16_t getParaStepWidth(void) const
+std::string getDescPara(void) const
+void setParaFirstCurve(uint16_t para_first)
+std::string getUnitY(void) const
+uint16_t getParaFirstCurve(void) const
+uint16_t getRefX(void) const
+std::string getUnitPara(void) const
+FunctionType getFunctionType(void) const
+uint16_t getRefY(void) const
+std::string getUnitX(void) const
+
+
+
+