diff --git a/docs/doxygen-cfg b/docs/doxygen-cfg index 5487fa3..edfca4d 100644 --- a/docs/doxygen-cfg +++ b/docs/doxygen-cfg @@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "My Project" +PROJECT_NAME = "B15F" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version @@ -44,7 +44,7 @@ PROJECT_NUMBER = # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = "Board 15 Famulus Edition" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 @@ -827,7 +827,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = +INPUT = "../control/src" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -902,7 +902,7 @@ FILE_PATTERNS = *.c \ # be searched for input files as well. # The default value is: NO. -RECURSIVE = NO +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -1033,7 +1033,7 @@ USE_MDFILE_AS_MAINPAGE = # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. diff --git a/docs/html/annotated.html b/docs/html/annotated.html new file mode 100644 index 0000000..06ae8d2 --- /dev/null +++ b/docs/html/annotated.html @@ -0,0 +1,93 @@ + + + + + + + +B15F: Class List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + + + + + + + +
 CB15F
 CDot
 CDriverException
 CPlottyFile
 CTimeoutException
 CUSART
 CUSARTException
 CView
 CViewInfo
 CViewMonitor
 CViewPromt
 CViewSelection
+
+
+ + + + diff --git a/docs/html/b15f_8cpp_source.html b/docs/html/b15f_8cpp_source.html new file mode 100644 index 0000000..f7fbaa7 --- /dev/null +++ b/docs/html/b15f_8cpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/b15f.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
b15f.cpp
+
+
+
1 #include "b15f.h"
2 
3 B15F* B15F::instance = nullptr;
4 errorhandler_t B15F::errorhandler = nullptr;
5 
6 B15F::B15F()
7 {
8  init();
9 }
10 
11 void B15F::init()
12 {
13 
14  std::string device = exec("bash -c 'ls /dev/ttyUSB*'");
15  while(device.find(' ') != std::string::npos || device.find('\n') != std::string::npos || device.find('\t') != std::string::npos)
16  device.pop_back();
17 
18  if(device.length() == 0)
19  abort("Adapter nicht gefunden");
20 
21  std::cout << PRE << "Verwende Adapter: " << device << std::endl;
22 
23 
24 
25  std::cout << PRE << "Stelle Verbindung mit Adapter her... " << std::flush;
26  usart.setBaudrate(BAUDRATE);
27  usart.openDevice(device);
28  std::cout << "OK" << std::endl;
29 
30 
31 
32  std::cout << PRE << "Teste Verbindung... " << std::flush;
33  uint8_t tries = 3;
34  while(tries--)
35  {
36  // verwerfe Daten, die µC noch hat
37  //discard();
38 
39  if(!testConnection())
40  continue;
41 
42  if(!testIntConv())
43  continue;
44 
45  break;
46  }
47  if(tries == 0)
48  abort("Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?");
49  std::cout << "OK" << std::endl;
50 
51 
52  // Gib board info aus
53  std::vector<std::string> info = getBoardInfo();
54  std::cout << PRE << "AVR Firmware Version: " << info[0] << " um " << info[1] << " Uhr (" << info[2] << ")" << std::endl;
55 }
56 
58 {
59  uint8_t tries = RECONNECT_TRIES;
60  while(tries--)
61  {
62  delay_ms(RECONNECT_TIMEOUT);
63  discard();
64 
65  if(testConnection())
66  return;
67  }
68 
69  abort("Verbindung kann nicht repariert werden");
70 }
71 
72 void B15F::discard(void)
73 {
74  try
75  {
76  usart.clearOutputBuffer();
77  for(uint8_t i = 0; i < 16; i++)
78  {
79  usart.writeByte(RQ_DISC); // sende discard Befehl (verwerfe input)
80  delay_ms(4);
81  }
82  usart.clearInputBuffer();
83  }
84  catch(std::exception& ex)
85  {
86  abort(ex);
87  }
88 }
89 
91 {
92  // erzeuge zufälliges Byte
93  srand(time(NULL));
94  uint8_t dummy = rand() % 256;
95 
96  usart.writeByte(RQ_TEST);
97  usart.writeByte(dummy);
98 
99  uint8_t aw = usart.readByte();
100  uint8_t mirror = usart.readByte();
101 
102  return aw == MSG_OK && mirror == dummy;
103 }
104 
106 {
107  srand(time(NULL));
108  uint16_t dummy = rand() % (0xFFFF / 3);
109 
110  usart.writeByte(RQ_INT);
111  usart.writeInt(dummy);
112 
113  uint16_t aw = usart.readInt();
114  return aw == dummy * 3;
115 }
116 
117 
118 std::vector<std::string> B15F::getBoardInfo(void)
119 {
120  std::vector<std::string> info;
121 
122  usart.writeByte(RQ_INFO);
123 
124  uint8_t n = usart.readByte();
125  while(n--)
126  {
127  uint8_t len = usart.readByte();
128  std::string str;
129 
130  while(len--) {
131  str += static_cast<char>(usart.readByte());
132  }
133 
134  info.push_back(str);
135  }
136 
137  uint8_t aw = usart.readByte();
138  if(aw != MSG_OK)
139  abort("Board Info fehlerhalft: code " + std::to_string((int) aw));
140 
141  return info;
142 }
143 
145 {
146  usart.writeByte(RQ_ST);
147 
148  uint8_t aw = usart.readByte();
149  return aw == MSG_OK;
150 }
151 
152 bool B15F::digitalWrite0(uint8_t port)
153 {
154  usart.writeByte(RQ_BA0);
155  usart.writeByte(port);
156 
157  uint8_t aw = usart.readByte();
158  delay_us(10);
159  return aw == MSG_OK;
160 }
161 
162 bool B15F::digitalWrite1(uint8_t port)
163 {
164  usart.writeByte(RQ_BA1);
165  usart.writeByte(port);
166 
167  uint8_t aw = usart.readByte();
168  delay_us(10);
169  return aw == MSG_OK;
170 }
171 
173 {
174  usart.clearInputBuffer();
175  usart.writeByte(RQ_BE0);
176  uint8_t byte = usart.readByte();
177  delay_us(10);
178  return byte;
179 }
180 
182 {
183  usart.clearInputBuffer();
184  usart.writeByte(RQ_BE1);
185  uint8_t byte = usart.readByte();
186  delay_us(10);
187  return byte;
188 }
189 
191 {
192  usart.clearInputBuffer();
193  usart.writeByte(RQ_DSW);
194  uint8_t byte = usart.readByte();
195  delay_us(10);
196  return byte;
197 }
198 
199 bool B15F::analogWrite0(uint16_t value)
200 {
201  usart.writeByte(RQ_AA0);
202  usart.writeInt(value);
203 
204  uint8_t aw = usart.readByte();
205  delay_us(10);
206  return aw == MSG_OK;
207 }
208 
209 bool B15F::analogWrite1(uint16_t value)
210 {
211  usart.writeByte(RQ_AA1);
212  usart.writeInt(value);
213 
214  uint8_t aw = usart.readByte();
215  delay_us(10);
216  return aw == MSG_OK;
217 }
218 
219 uint16_t B15F::analogRead(uint8_t channel)
220 {
221  usart.clearInputBuffer();
222  if(channel > 7)
223  abort("Bad ADC channel: " + std::to_string(channel));
224 
225  uint8_t rq[] = {
226  RQ_ADC,
227  channel
228  };
229 
230  int n_sent = usart.write_timeout(&rq[0], 0, sizeof(rq), 1000);
231  if(n_sent != sizeof(rq))
232  abort("Sent failed");
233 
234  uint16_t adc = usart.readInt();
235 
236  if(adc > 1023)
237  abort("Bad ADC data detected (1)");
238  return adc;
239 }
240 
241 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)
242 {
243  // check pointers
244  buffer_a += offset_a;
245  buffer_b += offset_b;
246 
247 
248  usart.clearInputBuffer();
249  usart.writeByte(RQ_ADC_DAC_STROKE);
250  usart.writeByte(channel_a);
251  usart.writeByte(channel_b);
252  usart.writeInt(start);
253  usart.writeInt(static_cast<uint16_t>(delta));
254  usart.writeInt(count);
255 
256  for(uint16_t i = 0; i < count; i++)
257  {
258  if(buffer_a)
259  {
260  buffer_a[i] = usart.readInt();
261 
262  if(buffer_a[i] > 1023) // check for broken usart connection
263  abort("Bad ADC data detected (2)");
264  }
265  else
266  {
267  usart.readInt();
268  }
269 
270  if(buffer_b)
271  {
272  buffer_b[i] = usart.readInt();
273 
274  if(buffer_b[i] > 1023) // check for broken usart connection
275  abort("Bad ADC data detected (3)");
276  }
277  else
278  {
279  usart.readInt();
280  }
281  }
282 
283  uint8_t aw = usart.readByte();
284  if(aw != MSG_OK)
285  abort("Sequenz unterbrochen");
286 
287  delay_us(10);
288 }
289 
290 void B15F::delay_ms(uint16_t ms)
291 {
292  std::this_thread::sleep_for(std::chrono::milliseconds(ms));
293 }
294 
295 void B15F::delay_us(uint16_t us)
296 {
297  std::this_thread::sleep_for(std::chrono::microseconds(us));
298 }
299 
301 {
302  if(!instance)
303  instance = new B15F();
304 
305  return *instance;
306 }
307 
308 // https://stackoverflow.com/a/478960
309 std::string B15F::exec(std::string cmd) {
310  std::array<char, 128> buffer;
311  std::string result;
312  std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(), "r"), pclose);
313  if (!pipe) {
314  throw std::runtime_error("popen() failed!");
315  }
316  while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
317  result += buffer.data();
318  }
319  return result;
320 }
321 
322 void B15F::abort(std::string msg)
323 {
324  DriverException ex(msg);
325  abort(ex);
326 }
327 void B15F::abort(std::exception& ex)
328 {
329  if(errorhandler)
330  errorhandler(ex);
331  else
332  {
333  std::cerr << "NOTICE: B15F::errorhandler not set" << std::endl;
334  std::cout << ex.what() << std::endl;
335  throw DriverException(ex.what());
336  }
337 }
338 
339 void B15F::setAbortHandler(errorhandler_t func)
340 {
341  errorhandler = func;
342 }
+
B15F::exec
static std::string exec(std::string cmd)
Definition: b15f.cpp:309
+
USART::readByte
uint8_t readByte(void)
Definition: usart.cpp:210
+
B15F::delay_us
void delay_us(uint16_t us)
Definition: b15f.cpp:295
+
B15F::digitalRead0
uint8_t digitalRead0(void)
Definition: b15f.cpp:172
+
B15F::analogSequence
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)
Komplexe Analoge Sequenz DAC 0 wird auf den Startwert gesetzt und dann schrittweise um Delta inkremen...
Definition: b15f.cpp:241
+
B15F::testConnection
bool testConnection(void)
Definition: b15f.cpp:90
+
B15F::readDipSwitch
uint8_t readDipSwitch(void)
Definition: b15f.cpp:190
+
B15F::delay_ms
void delay_ms(uint16_t ms)
Definition: b15f.cpp:290
+
B15F::analogWrite1
bool analogWrite1(uint16_t)
Definition: b15f.cpp:209
+
B15F::getInstance
static B15F & getInstance(void)
Definition: b15f.cpp:300
+
B15F
Definition: b15f.h:24
+
B15F::abort
static void abort(std::string msg)
Definition: b15f.cpp:322
+
USART::clearInputBuffer
void clearInputBuffer(void)
Definition: usart.cpp:39
+
USART::clearOutputBuffer
void clearOutputBuffer(void)
Definition: usart.cpp:46
+
B15F::analogRead
uint16_t analogRead(uint8_t channel)
Definition: b15f.cpp:219
+
B15F::digitalWrite0
bool digitalWrite0(uint8_t)
Definition: b15f.cpp:152
+
USART::setBaudrate
void setBaudrate(uint32_t baudrate)
Definition: usart.cpp:316
+
B15F::activateSelfTestMode
bool activateSelfTestMode(void)
Definition: b15f.cpp:144
+
B15F::getBoardInfo
std::vector< std::string > getBoardInfo(void)
Definition: b15f.cpp:118
+
USART::writeByte
void writeByte(uint8_t b)
Definition: usart.cpp:67
+
B15F::digitalWrite1
bool digitalWrite1(uint8_t)
Definition: b15f.cpp:162
+
B15F::init
void init(void)
Definition: b15f.cpp:11
+
B15F::discard
void discard(void)
Definition: b15f.cpp:72
+
B15F::analogWrite0
bool analogWrite0(uint16_t)
Definition: b15f.cpp:199
+
USART::openDevice
void openDevice(std::string device)
Definition: usart.cpp:3
+
USART::readInt
uint16_t readInt(void)
Definition: usart.cpp:229
+
B15F::digitalRead1
uint8_t digitalRead1(void)
Definition: b15f.cpp:181
+
B15F::reconnect
void reconnect(void)
Definition: b15f.cpp:57
+
B15F::setAbortHandler
static void setAbortHandler(errorhandler_t func)
Definition: b15f.cpp:339
+
USART::writeInt
void writeInt(uint16_t d)
Definition: usart.cpp:81
+
B15F::testIntConv
bool testIntConv(void)
Definition: b15f.cpp:105
+
DriverException
Definition: driverexception.h:8
+ + + + diff --git a/docs/html/b15f_8h_source.html b/docs/html/b15f_8h_source.html new file mode 100644 index 0000000..33242e7 --- /dev/null +++ b/docs/html/b15f_8h_source.html @@ -0,0 +1,105 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/b15f.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
b15f.h
+
+
+
1 #ifndef B15F_H
2 #define B15F_H
3 
4 #include <iostream>
5 #include <bits/stdc++.h>
6 #include <string>
7 #include <fstream>
8 #include <cstdlib>
9 #include <chrono>
10 #include <cstdint>
11 #include <vector>
12 
13 #include <unistd.h>
14 #include <fcntl.h>
15 #include <sys/ioctl.h>
16 #include <termios.h>
17 #include "usart.h"
18 #include "driverexception.h"
19 #include "timeoutexception.h"
20 
21 typedef std::function<void(std::exception&)> errorhandler_t;
22 
23 
24 class B15F
25 {
26 private:
27  // privater Konstruktor
28  B15F(void);
29 public:
30 
31  /*************************************
32  * Grundfunktionen des B15F Treibers *
33  *************************************/
34 
39  void init(void);
40 
45  void reconnect(void);
46 
51  void discard(void);
52 
57  bool testConnection(void);
58 
63  bool testIntConv(void);
64 
69  std::vector<std::string> getBoardInfo(void);
70 
75  void delay_ms(uint16_t ms);
76 
81  void delay_us(uint16_t us);
82 
87  static B15F& getInstance(void);
88 
93  static std::string exec(std::string cmd);
94 
99  static void abort(std::string msg);
100 
105  static void abort(std::exception& ex);
106 
111  static void setAbortHandler(errorhandler_t func);
112 
113  /*************************************/
114 
115 
116 
117  /*************************
118  * Steuerbefehle für B15 *
119  *************************/
120 
126  bool activateSelfTestMode(void);
127 
133  bool digitalWrite0(uint8_t);
134 
140  bool digitalWrite1(uint8_t);
141 
147  uint8_t digitalRead0(void);
148 
154  uint8_t digitalRead1(void);
155 
161  uint8_t readDipSwitch(void);
162 
168  bool analogWrite0(uint16_t);
169 
175  bool analogWrite1(uint16_t);
176 
182  uint16_t analogRead(uint8_t channel);
183 
200  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);
201 
202  /*************************/
203 
204 
205  // CONSTANTS
206  const std::string PRE = "[B15F] ";
207  constexpr static uint8_t MSG_OK = 0xFF;
208  constexpr static uint8_t MSG_FAIL = 0xFE;
209  constexpr static uint16_t RECONNECT_TIMEOUT = 64; // ms
210  constexpr static uint16_t WDT_TIMEOUT = 15; // ms
211  constexpr static uint8_t RECONNECT_TRIES = 3;
212  constexpr static uint32_t BAUDRATE = 57600;
213 
214 private:
215 
216  USART usart;
217  static B15F* instance;
218  static errorhandler_t errorhandler;
219 
220  // REQUESTS
221  constexpr static uint8_t RQ_DISC = 0;
222  constexpr static uint8_t RQ_TEST = 1;
223  constexpr static uint8_t RQ_INFO = 2;
224  constexpr static uint8_t RQ_INT = 3;
225  constexpr static uint8_t RQ_ST = 4;
226  constexpr static uint8_t RQ_BA0 = 5;
227  constexpr static uint8_t RQ_BA1 = 6;
228  constexpr static uint8_t RQ_BE0 = 7;
229  constexpr static uint8_t RQ_BE1 = 8;
230  constexpr static uint8_t RQ_DSW = 9;
231  constexpr static uint8_t RQ_AA0 = 10;
232  constexpr static uint8_t RQ_AA1 = 11;
233  constexpr static uint8_t RQ_ADC = 12;
234  constexpr static uint8_t RQ_ADC_DAC_STROKE = 13;
235 };
236 
237 #endif // B15F_H
+
B15F::exec
static std::string exec(std::string cmd)
Definition: b15f.cpp:309
+
B15F::delay_us
void delay_us(uint16_t us)
Definition: b15f.cpp:295
+
B15F::digitalRead0
uint8_t digitalRead0(void)
Definition: b15f.cpp:172
+
B15F::analogSequence
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)
Komplexe Analoge Sequenz DAC 0 wird auf den Startwert gesetzt und dann schrittweise um Delta inkremen...
Definition: b15f.cpp:241
+
B15F::testConnection
bool testConnection(void)
Definition: b15f.cpp:90
+
B15F::readDipSwitch
uint8_t readDipSwitch(void)
Definition: b15f.cpp:190
+
B15F::delay_ms
void delay_ms(uint16_t ms)
Definition: b15f.cpp:290
+
B15F::analogWrite1
bool analogWrite1(uint16_t)
Definition: b15f.cpp:209
+
B15F::getInstance
static B15F & getInstance(void)
Definition: b15f.cpp:300
+
B15F
Definition: b15f.h:24
+
B15F::abort
static void abort(std::string msg)
Definition: b15f.cpp:322
+
USART
Definition: usart.h:16
+
B15F::analogRead
uint16_t analogRead(uint8_t channel)
Definition: b15f.cpp:219
+
B15F::digitalWrite0
bool digitalWrite0(uint8_t)
Definition: b15f.cpp:152
+
B15F::activateSelfTestMode
bool activateSelfTestMode(void)
Definition: b15f.cpp:144
+
B15F::getBoardInfo
std::vector< std::string > getBoardInfo(void)
Definition: b15f.cpp:118
+
B15F::digitalWrite1
bool digitalWrite1(uint8_t)
Definition: b15f.cpp:162
+
B15F::init
void init(void)
Definition: b15f.cpp:11
+
B15F::discard
void discard(void)
Definition: b15f.cpp:72
+
B15F::analogWrite0
bool analogWrite0(uint16_t)
Definition: b15f.cpp:199
+
B15F::digitalRead1
uint8_t digitalRead1(void)
Definition: b15f.cpp:181
+
B15F::reconnect
void reconnect(void)
Definition: b15f.cpp:57
+
B15F::setAbortHandler
static void setAbortHandler(errorhandler_t func)
Definition: b15f.cpp:339
+
B15F::testIntConv
bool testIntConv(void)
Definition: b15f.cpp:105
+ + + + 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..cd747d3 --- /dev/null +++ b/docs/html/classB15F-members.html @@ -0,0 +1,110 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
B15F Member List
+
+
+ +

This is the complete list of members for B15F, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abort(std::string msg)B15Fstatic
abort(std::exception &ex)B15Fstatic
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)B15F
analogWrite1(uint16_t)B15F
BAUDRATE (defined in B15F)B15Fstatic
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)B15Fstatic
getBoardInfo(void)B15F
getInstance(void)B15Fstatic
init(void)B15F
MSG_FAIL (defined in B15F)B15Fstatic
MSG_OK (defined in B15F)B15Fstatic
PRE (defined in B15F)B15F
readDipSwitch(void)B15F
reconnect(void)B15F
RECONNECT_TIMEOUT (defined in B15F)B15Fstatic
RECONNECT_TRIES (defined in B15F)B15Fstatic
setAbortHandler(errorhandler_t func)B15Fstatic
testConnection(void)B15F
testIntConv(void)B15F
WDT_TIMEOUT (defined in B15F)B15Fstatic
+ + + + diff --git a/docs/html/classB15F.html b/docs/html/classB15F.html new file mode 100644 index 0000000..98d62ce --- /dev/null +++ b/docs/html/classB15F.html @@ -0,0 +1,911 @@ + + + + + + + +B15F: B15F Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Static Public Member Functions | +Public Attributes | +Static Public Attributes | +List of all members
+
+
B15F Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void init (void)
 
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)
 
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)
 
bool analogWrite1 (uint16_t)
 
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)
 Komplexe Analoge Sequenz 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. More...
 
+ + + + + + + + + + + +

+Static Public Member Functions

static B15FgetInstance (void)
 
static std::string exec (std::string cmd)
 
static void abort (std::string msg)
 
static void abort (std::exception &ex)
 
static void setAbortHandler (errorhandler_t func)
 
+ + + +

+Public Attributes

+const std::string PRE = "[B15F] "
 
+ + + + + + + + + + + + + +

+Static Public Attributes

+constexpr static uint8_t MSG_OK = 0xFF
 
+constexpr static uint8_t MSG_FAIL = 0xFE
 
+constexpr static uint16_t RECONNECT_TIMEOUT = 64
 
+constexpr static uint16_t WDT_TIMEOUT = 15
 
+constexpr static uint8_t RECONNECT_TRIES = 3
 
+constexpr static uint32_t BAUDRATE = 57600
 
+

Detailed Description

+
+

Definition at line 24 of file b15f.h.

+

Member Function Documentation

+ +

◆ abort() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void B15F::abort (std::exception & ex)
+
+static
+
+

Multithread sicherer Abbruch des B15F-Treibers

Parameters
+ + +
exException als Abbruchursache
+
+
+ +

Definition at line 327 of file b15f.cpp.

+ +
+
+ +

◆ abort() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void B15F::abort (std::string msg)
+
+static
+
+

Multithread sicherer Abbruch des B15F-Treibers

Parameters
+ + +
msgBeschreibung der Abbruchursache
+
+
+ +

Definition at line 322 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
+ + +
DriverException
+
+
+ +

Definition at line 144 of file b15f.cpp.

+ +
+
+ +

◆ analogRead()

+ +
+
+ + + + + + + + +
uint16_t B15F::analogRead (uint8_t channel)
+
+

Liest den Wert des Analog-Digital-Converters (ADC / ADU)

Parameters
+ + +
channelKanalwahl von 0 - 7
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 219 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 
)
+
+ +

Komplexe Analoge Sequenz 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_aAuswahl des ADC a, von 0 - 7
buffer_aSpeichertort für Werte des Kanals a
offset_aAnzahl an Werten des Kanals a, die im Speicher übersprungen werden sollen
channel_bAuswahl des ADC b, von 0 - 7
buffer_bSpeichertort für Werte des Kanals b
offset_bAnzahl an Werten des Kanals b, die im Speicher übersprungen werden
startStartwert des DACs
deltaSchrittweite, mit welcher der DAC inkrementiert wird
countAnzahl an Inkrementierungen
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 241 of file b15f.cpp.

+ +
+
+ +

◆ analogWrite0()

+ +
+
+ + + + + + + + +
bool B15F::analogWrite0 (uint16_t value)
+
+

Setzt den Wert des Digital-Analog-Converters (DAC / DAU) 0

Parameters
+ + +
port10-Bit Wert
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 199 of file b15f.cpp.

+ +
+
+ +

◆ analogWrite1()

+ +
+
+ + + + + + + + +
bool B15F::analogWrite1 (uint16_t value)
+
+

Setzt den Wert des Digital-Analog-Converters (DAC / DAU) 1

Parameters
+ + +
port10-Bit Wert
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 209 of file b15f.cpp.

+ +
+
+ +

◆ delay_ms()

+ +
+
+ + + + + + + + +
void B15F::delay_ms (uint16_t ms)
+
+

Lässt den Treiber für eine angegebene Zeit pausieren

Parameters
+ + +
msVerzögerung in Millisekunden
+
+
+ +

Definition at line 290 of file b15f.cpp.

+ +
+
+ +

◆ delay_us()

+ +
+
+ + + + + + + + +
void B15F::delay_us (uint16_t us)
+
+

Lässt den Treiber für eine angegebene Zeit pausieren

Parameters
+ + +
usVerzögerung in Microsekunden
+
+
+ +

Definition at line 295 of file b15f.cpp.

+ +
+
+ +

◆ digitalRead0()

+ +
+
+ + + + + + + + +
uint8_t B15F::digitalRead0 (void )
+
+

Liest den Wert des digitalen Eingabeports 0

Returns
Wert für gesamten Port
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 172 of file b15f.cpp.

+ +
+
+ +

◆ digitalRead1()

+ +
+
+ + + + + + + + +
uint8_t B15F::digitalRead1 (void )
+
+

Liest den Wert des digitalen Eingabeports 1

Returns
Wert für gesamten Port
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 181 of file b15f.cpp.

+ +
+
+ +

◆ digitalWrite0()

+ +
+
+ + + + + + + + +
bool B15F::digitalWrite0 (uint8_t port)
+
+

Setzt den Wert des digitalen Ausgabeports 0

Parameters
+ + +
portWert für gesamten Port
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 152 of file b15f.cpp.

+ +
+
+ +

◆ digitalWrite1()

+ +
+
+ + + + + + + + +
bool B15F::digitalWrite1 (uint8_t port)
+
+

Setzt den Wert des digitalen Ausgabeports 1

Parameters
+ + +
portWert für gesamten Port
+
+
+
Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 162 of file b15f.cpp.

+ +
+
+ +

◆ discard()

+ +
+
+ + + + + + + + +
void B15F::discard (void )
+
+

Verwirft Daten im USART Puffer auf dieser Maschine und B15

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 72 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
+ + +
cmdDer Befehl
+
+
+ +

Definition at line 309 of file b15f.cpp.

+ +
+
+ +

◆ getBoardInfo()

+ +
+
+ + + + + + + + +
std::vector< std::string > B15F::getBoardInfo (void )
+
+

Liefert Informationen zur aktuellen Firmware des B15

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 118 of file b15f.cpp.

+ +
+
+ +

◆ getInstance()

+ +
+
+ + + + + +
+ + + + + + + + +
B15F & B15F::getInstance (void )
+
+static
+
+

Liefert eine Referenz zur aktuellen Treiber-Instanz

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 300 of file b15f.cpp.

+ +
+
+ +

◆ init()

+ +
+
+ + + + + + + + +
void B15F::init (void )
+
+

Initialisiert und testet die Verbindung zum B15

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 11 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
+ + +
DriverException
+
+
+ +

Definition at line 190 of file b15f.cpp.

+ +
+
+ +

◆ reconnect()

+ +
+
+ + + + + + + + +
void B15F::reconnect (void )
+
+

Versucht die Verbindung zum B15 wiederherzustellen

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 57 of file b15f.cpp.

+ +
+
+ +

◆ setAbortHandler()

+ +
+
+ + + + + +
+ + + + + + + + +
void B15F::setAbortHandler (errorhandler_t func)
+
+static
+
+

Setzt eine Fehlerbehandlungsroutine für den Treiberabbruch (abort)

Parameters
+ + +
funcFunktion, die Exception als Parameter bekommt
+
+
+ +

Definition at line 339 of file b15f.cpp.

+ +
+
+ +

◆ testConnection()

+ +
+
+ + + + + + + + +
bool B15F::testConnection (void )
+
+

Testet die USART Verbindung auf Funktion

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 90 of file b15f.cpp.

+ +
+
+ +

◆ testIntConv()

+ +
+
+ + + + + + + + +
bool B15F::testIntConv (void )
+
+

Testet die Integer Konvertierung der USART Verbindung

Exceptions
+ + +
DriverException
+
+
+ +

Definition at line 105 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..414ff4f --- /dev/null +++ b/docs/html/classDot-members.html @@ -0,0 +1,84 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Dot Member List
+
+
+ +

This is the complete list of members for Dot, including all inherited members.

+ + + + + +
Dot(uint16_t x, uint16_t y, uint8_t curve) (defined in Dot)Dot
getCurve(void) const (defined in Dot)Dot
getX(void) const (defined in Dot)Dot
getY(void) const (defined in Dot)Dot
+ + + + diff --git a/docs/html/classDot.html b/docs/html/classDot.html new file mode 100644 index 0000000..924f414 --- /dev/null +++ b/docs/html/classDot.html @@ -0,0 +1,103 @@ + + + + + + + +B15F: Dot Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +List of all members
+
+
Dot Class Reference
+
+
+ + + + + + + + + + +

+Public Member Functions

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
 
+

Detailed Description

+
+

Definition at line 7 of file dot.h.

+

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..d4c2560 --- /dev/null +++ b/docs/html/classDriverException-members.html @@ -0,0 +1,85 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
DriverException Member List
+
+
+ +

This is the complete list of members for DriverException, including all inherited members.

+ + + + + + +
DriverException(const char *message) (defined in DriverException)DriverExceptioninlineexplicit
DriverException(const std::string &message) (defined in DriverException)DriverExceptioninlineexplicit
msg_ (defined in DriverException)DriverExceptionprotected
what() const (defined in DriverException)DriverExceptioninlinevirtual
~DriverException() (defined in DriverException)DriverExceptioninlinevirtual
+ + + + diff --git a/docs/html/classDriverException.html b/docs/html/classDriverException.html new file mode 100644 index 0000000..9d9654b --- /dev/null +++ b/docs/html/classDriverException.html @@ -0,0 +1,112 @@ + + + + + + + +B15F: DriverException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
DriverException Class Reference
+
+
+
+Inheritance diagram for DriverException:
+
+
+ +
+ + + + + + + + +

+Public Member Functions

DriverException (const char *message)
 
DriverException (const std::string &message)
 
+virtual const char * what () const throw ()
 
+ + + +

+Protected Attributes

+std::string msg_
 
+

Detailed Description

+
+

Definition at line 8 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..2486957 --- /dev/null +++ b/docs/html/classPlottyFile-members.html @@ -0,0 +1,108 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
PlottyFile Member List
+
+
+ +

This is the complete list of members for PlottyFile, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addDot(Dot &dot) (defined in PlottyFile)PlottyFile
addDot(Dot dot) (defined in PlottyFile)PlottyFile
getDescPara(void) const (defined in PlottyFile)PlottyFile
getDescX(void) const (defined in PlottyFile)PlottyFile
getDescY(void) const (defined in PlottyFile)PlottyFile
getFunctionType(void) const (defined in PlottyFile)PlottyFile
getParaFirstCurve(void) const (defined in PlottyFile)PlottyFile
getParaStepWidth(void) const (defined in PlottyFile)PlottyFile
getQuadrant(void) const (defined in PlottyFile)PlottyFile
getRefX(void) const (defined in PlottyFile)PlottyFile
getRefY(void) const (defined in PlottyFile)PlottyFile
getUnitPara(void) const (defined in PlottyFile)PlottyFile
getUnitX(void) const (defined in PlottyFile)PlottyFile
getUnitY(void) const (defined in PlottyFile)PlottyFile
setDescPara(std::string) (defined in PlottyFile)PlottyFile
setDescX(std::string) (defined in PlottyFile)PlottyFile
setDescY(std::string) (defined in PlottyFile)PlottyFile
setFunctionType(FunctionType) (defined in PlottyFile)PlottyFile
setParaFirstCurve(uint16_t) (defined in PlottyFile)PlottyFile
setParaStepWidth(uint16_t) (defined in PlottyFile)PlottyFile
setQuadrant(uint8_t) (defined in PlottyFile)PlottyFile
setRefX(uint16_t) (defined in PlottyFile)PlottyFile
setRefY(uint16_t) (defined in PlottyFile)PlottyFile
setUnitPara(std::string) (defined in PlottyFile)PlottyFile
setUnitX(std::string) (defined in PlottyFile)PlottyFile
setUnitY(std::string) (defined in PlottyFile)PlottyFile
startPlotty(std::string filename) (defined in PlottyFile)PlottyFile
writeToFile(std::string filename) (defined in PlottyFile)PlottyFile
+ + + + diff --git a/docs/html/classPlottyFile.html b/docs/html/classPlottyFile.html new file mode 100644 index 0000000..a0129e7 --- /dev/null +++ b/docs/html/classPlottyFile.html @@ -0,0 +1,175 @@ + + + + + + + +B15F: PlottyFile Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +List of all members
+
+
PlottyFile Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+void addDot (Dot &dot)
 
+void addDot (Dot dot)
 
+void setFunctionType (FunctionType)
 
+void setQuadrant (uint8_t)
 
+void setRefX (uint16_t)
 
+void setRefY (uint16_t)
 
+void setParaFirstCurve (uint16_t)
 
+void setParaStepWidth (uint16_t)
 
+void setUnitX (std::string)
 
+void setDescX (std::string)
 
+void setUnitY (std::string)
 
+void setDescY (std::string)
 
+void setUnitPara (std::string)
 
+void setDescPara (std::string)
 
+FunctionType getFunctionType (void) const
 
+uint8_t getQuadrant (void) const
 
+uint16_t getRefX (void) const
 
+uint16_t getRefY (void) const
 
+uint16_t getParaFirstCurve (void) const
 
+uint16_t getParaStepWidth (void) const
 
+std::string getUnitX (void) const
 
+std::string getDescX (void) const
 
+std::string getUnitY (void) const
 
+std::string getDescY (void) const
 
+std::string getUnitPara (void) const
 
+std::string getDescPara (void) const
 
+void writeToFile (std::string filename)
 
+void startPlotty (std::string filename)
 
+

Detailed Description

+
+

Definition at line 17 of file plottyfile.h.

+

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..511f555 --- /dev/null +++ b/docs/html/classTimeoutException-members.html @@ -0,0 +1,86 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
TimeoutException Member List
+
+
+ +

This is the complete list of members for TimeoutException, including all inherited members.

+ + + + + + + +
m_timeout (defined in TimeoutException)TimeoutExceptionprotected
msg (defined in TimeoutException)TimeoutExceptionprotected
TimeoutException(const char *message, int timeout) (defined in TimeoutException)TimeoutExceptioninlineexplicit
TimeoutException(const std::string &message, int timeout) (defined in TimeoutException)TimeoutExceptioninlineexplicit
what() const (defined in TimeoutException)TimeoutExceptioninlinevirtual
~TimeoutException() (defined in TimeoutException)TimeoutExceptioninlinevirtual
+ + + + diff --git a/docs/html/classTimeoutException.html b/docs/html/classTimeoutException.html new file mode 100644 index 0000000..d54eaae --- /dev/null +++ b/docs/html/classTimeoutException.html @@ -0,0 +1,115 @@ + + + + + + + +B15F: TimeoutException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
TimeoutException Class Reference
+
+
+
+Inheritance diagram for TimeoutException:
+
+
+ +
+ + + + + + + + +

+Public Member Functions

TimeoutException (const char *message, int timeout)
 
TimeoutException (const std::string &message, int timeout)
 
+virtual const char * what () const throw ()
 
+ + + + + +

+Protected Attributes

+std::string msg
 
+int m_timeout
 
+

Detailed Description

+
+

Definition at line 8 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..b80ed02 --- /dev/null +++ b/docs/html/classUSART-members.html @@ -0,0 +1,101 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
USART Member List
+
+
+ +

This is the complete list of members for USART, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
BLOCK_END (defined in USART)USARTstatic
clearInputBuffer(void)USART
clearOutputBuffer(void)USART
closeDevice(void)USART
CRC7_POLY (defined in USART)USARTstatic
flushOutputBuffer(void)USART
getBaudrate(void)USART
getTimeout(void)USART
MAX_BLOCK_SIZE (defined in USART)USARTstatic
openDevice(std::string device)USART
printStatistics(void)USART
read_timeout(uint8_t *buffer, uint16_t offset, uint8_t len, uint32_t timeout) (defined in USART)USART
readBlock(uint8_t *buffer, uint16_t offset) (defined in USART)USART
readByte(void)USART
readInt(void)USART
setBaudrate(uint32_t baudrate)USART
setTimeout(uint8_t timeout)USART
write_timeout(uint8_t *buffer, uint16_t offset, uint8_t len, uint32_t timeout) (defined in USART)USART
writeBlock(uint8_t *buffer, uint16_t offset, uint8_t len) (defined in USART)USART
writeByte(uint8_t b)USART
writeInt(uint16_t d)USART
+ + + + diff --git a/docs/html/classUSART.html b/docs/html/classUSART.html new file mode 100644 index 0000000..3321499 --- /dev/null +++ b/docs/html/classUSART.html @@ -0,0 +1,502 @@ + + + + + + + +B15F: USART Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Static Public Attributes | +List of all members
+
+
USART Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void openDevice (std::string device)
 
void closeDevice (void)
 
void clearInputBuffer (void)
 
void clearOutputBuffer (void)
 
void flushOutputBuffer (void)
 
void printStatistics (void)
 
void writeByte (uint8_t b)
 
void writeInt (uint16_t d)
 
uint8_t readByte (void)
 
uint16_t readInt (void)
 
+int read_timeout (uint8_t *buffer, uint16_t offset, uint8_t len, uint32_t timeout)
 
+int write_timeout (uint8_t *buffer, uint16_t offset, uint8_t len, uint32_t timeout)
 
+void writeBlock (uint8_t *buffer, uint16_t offset, uint8_t len)
 
+bool readBlock (uint8_t *buffer, uint16_t offset)
 
uint32_t getBaudrate (void)
 
uint8_t getTimeout (void)
 
void setBaudrate (uint32_t baudrate)
 
void setTimeout (uint8_t timeout)
 
+ + + + + + + +

+Static Public Attributes

+constexpr static uint8_t CRC7_POLY = 0x91
 
+constexpr static uint8_t MAX_BLOCK_SIZE = 64
 
+constexpr static uint8_t BLOCK_END = 0x80
 
+

Detailed Description

+
+

Definition at line 16 of file usart.h.

+

Member Function Documentation

+ +

◆ clearInputBuffer()

+ +
+
+ + + + + + + + +
void USART::clearInputBuffer (void )
+
+

Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gelesen wurden

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 39 of file usart.cpp.

+ +
+
+ +

◆ clearOutputBuffer()

+ +
+
+ + + + + + + + +
void USART::clearOutputBuffer (void )
+
+

Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 46 of file usart.cpp.

+ +
+
+ +

◆ closeDevice()

+ +
+
+ + + + + + + + +
void USART::closeDevice (void )
+
+

Schließt die USART Schnittstelle

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 32 of file usart.cpp.

+ +
+
+ +

◆ flushOutputBuffer()

+ +
+
+ + + + + + + + +
void USART::flushOutputBuffer (void )
+
+

Schreibt Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 53 of file usart.cpp.

+ +
+
+ +

◆ getBaudrate()

+ +
+
+ + + + + + + + +
uint32_t USART::getBaudrate (void )
+
+

Liefert die eingestellte Baudrate Änderungen werden erst nach einem open() wirksam

+ +

Definition at line 306 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 311 of file usart.cpp.

+ +
+
+ +

◆ openDevice()

+ +
+
+ + + + + + + + +
void USART::openDevice (std::string device)
+
+

Öffnet die USART Schnittstelle

Parameters
+ + +
deviceLinux-Gerätepfad
+
+
+
Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 3 of file usart.cpp.

+ +
+
+ +

◆ printStatistics()

+ +
+
+ + + + + + + + +
void USART::printStatistics (void )
+
+

Gibt Anzahl an erfolgreichen und fehlgeschlagenen Block-Übertragungen an

+ +

Definition at line 60 of file usart.cpp.

+ +
+
+ +

◆ readByte()

+ +
+
+ + + + + + + + +
uint8_t USART::readByte (void )
+
+

Empfängt ein Byte über die USART Schnittstelle

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 210 of file usart.cpp.

+ +
+
+ +

◆ readInt()

+ +
+
+ + + + + + + + +
uint16_t USART::readInt (void )
+
+

Empfängt ein Integer über die USART Schnittstelle

Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 229 of file usart.cpp.

+ +
+
+ +

◆ setBaudrate()

+ +
+
+ + + + + + + + +
void USART::setBaudrate (uint32_t baudrate)
+
+

Setzt die Baudrate Änderungen werden erst nach einem open() wirksam

+ +

Definition at line 316 of file usart.cpp.

+ +
+
+ +

◆ setTimeout()

+ +
+
+ + + + + + + + +
void USART::setTimeout (uint8_t timeout)
+
+

Setzt den Timeout (in Dezisekunden) Änderungen werden erst nach einem open() wirksam

+ +

Definition at line 321 of file usart.cpp.

+ +
+
+ +

◆ writeByte()

+ +
+
+ + + + + + + + +
void USART::writeByte (uint8_t b)
+
+

Sendet ein Byte über die USART Schnittstelle

Parameters
+ + +
bdas zu sendende Byte
+
+
+
Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 67 of file usart.cpp.

+ +
+
+ +

◆ writeInt()

+ +
+
+ + + + + + + + +
void USART::writeInt (uint16_t d)
+
+

Sendet ein Integer über die USART Schnittstelle

Parameters
+ + +
bdas zu sendende Byte
+
+
+
Exceptions
+ + +
USARTException
+
+
+ +

Definition at line 81 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..2ec12b3 --- /dev/null +++ b/docs/html/classUSARTException-members.html @@ -0,0 +1,85 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
USARTException Member List
+
+
+ +

This is the complete list of members for USARTException, including all inherited members.

+ + + + + + +
msg (defined in USARTException)USARTExceptionprotected
USARTException(const char *message) (defined in USARTException)USARTExceptioninlineexplicit
USARTException(const std::string &message) (defined in USARTException)USARTExceptioninlineexplicit
what() const (defined in USARTException)USARTExceptioninlinevirtual
~USARTException() (defined in USARTException)USARTExceptioninlinevirtual
+ + + + diff --git a/docs/html/classUSARTException.html b/docs/html/classUSARTException.html new file mode 100644 index 0000000..4f565a7 --- /dev/null +++ b/docs/html/classUSARTException.html @@ -0,0 +1,112 @@ + + + + + + + +B15F: USARTException Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +List of all members
+
+
USARTException Class Reference
+
+
+
+Inheritance diagram for USARTException:
+
+
+ +
+ + + + + + + + +

+Public Member Functions

USARTException (const char *message)
 
USARTException (const std::string &message)
 
+virtual const char * what () const throw ()
 
+ + + +

+Protected Attributes

+std::string msg
 
+

Detailed Description

+
+

Definition at line 9 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..2ce3664 --- /dev/null +++ b/docs/html/classView-members.html @@ -0,0 +1,97 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
View Member List
+
+
+ +

This is the complete list of members for View, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
calls (defined in View)Viewprotected
draw(void)=0 (defined in View)Viewpure virtual
getWinContext(void) (defined in View)Viewstatic
height (defined in View)Viewprotected
KEY_ENT (defined in View)Viewprotectedstatic
keypress(int &key)=0 (defined in View)Viewpure virtual
repaint(void) (defined in View)Viewvirtual
setTitle(std::string title) (defined in View)Viewvirtual
setWinContext(WINDOW *win) (defined in View)Viewstatic
start_x (defined in View)Viewprotected
start_y (defined in View)Viewprotected
str_split(const std::string &str, const std::string delim) (defined in View)Viewstatic
title (defined in View)Viewprotected
View(void) (defined in View)View
width (defined in View)Viewprotected
win (defined in View)Viewprotectedstatic
~View(void) (defined in View)Viewvirtual
+ + + + diff --git a/docs/html/classView.html b/docs/html/classView.html new file mode 100644 index 0000000..2a9bd26 --- /dev/null +++ b/docs/html/classView.html @@ -0,0 +1,160 @@ + + + + + + + +B15F: View Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Static Public Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
View Class Referenceabstract
+
+
+
+Inheritance diagram for View:
+
+
+ + +ViewInfo +ViewPromt +ViewSelection +ViewMonitor + +
+ + + + + + + + + + +

+Public Member Functions

+virtual void setTitle (std::string title)
 
+virtual void repaint (void)
 
+virtual void draw (void)=0
 
+virtual call_t keypress (int &key)=0
 
+ + + + + + + +

+Static Public Member Functions

+static void setWinContext (WINDOW *win)
 
+static WINDOW * getWinContext (void)
 
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
 
+ + + + + + + + + + + + + +

+Protected Attributes

+int width
 
+int height
 
+int start_x = 0
 
+int start_y = 0
 
+std::string title
 
+std::vector< call_t > calls
 
+ + + + + +

+Static Protected Attributes

+static WINDOW * win = nullptr
 
+constexpr static int KEY_ENT = 10
 
+

Detailed Description

+
+

Definition at line 17 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..b4f0ba4 --- /dev/null +++ b/docs/html/classViewInfo-members.html @@ -0,0 +1,107 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
ViewInfo Member List
+
+
+ +

This is the complete list of members for ViewInfo, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calls (defined in View)Viewprotected
close_offset_x (defined in ViewInfo)ViewInfoprotected
close_offset_y (defined in ViewInfo)ViewInfoprotected
draw(void) override (defined in ViewInfo)ViewInfovirtual
getWinContext(void) (defined in View)Viewstatic
height (defined in View)Viewprotected
KEY_ENT (defined in View)Viewprotectedstatic
keypress(int &key) override (defined in ViewInfo)ViewInfovirtual
label_close (defined in ViewInfo)ViewInfoprotected
repaint(void) (defined in View)Viewvirtual
setCall(call_t call) (defined in ViewInfo)ViewInfovirtual
setLabelClose(std::string label) (defined in ViewInfo)ViewInfovirtual
setText(std::string text) (defined in ViewInfo)ViewInfovirtual
setTitle(std::string title) (defined in View)Viewvirtual
setWinContext(WINDOW *win) (defined in View)Viewstatic
start_x (defined in View)Viewprotected
start_y (defined in View)Viewprotected
str_split(const std::string &str, const std::string delim) (defined in View)Viewstatic
text (defined in ViewInfo)ViewInfoprotected
text_offset_x (defined in ViewInfo)ViewInfoprotectedstatic
text_offset_y (defined in ViewInfo)ViewInfoprotectedstatic
title (defined in View)Viewprotected
View(void) (defined in View)View
ViewInfo(void) (defined in ViewInfo)ViewInfo
width (defined in View)Viewprotected
win (defined in View)Viewprotectedstatic
~View(void) (defined in View)Viewvirtual
+ + + + diff --git a/docs/html/classViewInfo.html b/docs/html/classViewInfo.html new file mode 100644 index 0000000..3689413 --- /dev/null +++ b/docs/html/classViewInfo.html @@ -0,0 +1,188 @@ + + + + + + + +B15F: ViewInfo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
ViewInfo Class Reference
+
+
+
+Inheritance diagram for ViewInfo:
+
+
+ + +View +ViewMonitor + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+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
 
- Public Member Functions inherited from View
+virtual void setTitle (std::string title)
 
+virtual void repaint (void)
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+std::string text
 
+std::string label_close
 
+int close_offset_x = 0
 
+int close_offset_y = 0
 
- Protected Attributes inherited from View
+int width
 
+int height
 
+int start_x = 0
 
+int start_y = 0
 
+std::string title
 
+std::vector< call_t > calls
 
+ + + + + + + + + + +

+Static Protected Attributes

+constexpr static int text_offset_x = 2
 
+constexpr static int text_offset_y = 3
 
- Static Protected Attributes inherited from View
+static WINDOW * win = nullptr
 
+constexpr static int KEY_ENT = 10
 
+ + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from View
+static void setWinContext (WINDOW *win)
 
+static WINDOW * getWinContext (void)
 
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
 
+

Detailed Description

+
+

Definition at line 6 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..44735ed --- /dev/null +++ b/docs/html/classViewMonitor-members.html @@ -0,0 +1,111 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
ViewMonitor Member List
+
+
+ +

This is the complete list of members for ViewMonitor, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calls (defined in View)Viewprotected
close_offset_x (defined in ViewInfo)ViewInfoprotected
close_offset_y (defined in ViewInfo)ViewInfoprotected
draw(void) override (defined in ViewInfo)ViewInfovirtual
getWinContext(void) (defined in View)Viewstatic
height (defined in View)Viewprotected
KEY_ENT (defined in View)Viewprotectedstatic
keypress(int &key) override (defined in ViewMonitor)ViewMonitorvirtual
label_close (defined in ViewInfo)ViewInfoprotected
repaint(void) (defined in View)Viewvirtual
run_worker (defined in ViewMonitor)ViewMonitorprotected
setCall(call_t call) (defined in ViewInfo)ViewInfovirtual
setLabelClose(std::string label) (defined in ViewInfo)ViewInfovirtual
setText(std::string text) (defined in ViewInfo)ViewInfovirtual
setTitle(std::string title) (defined in View)Viewvirtual
setWinContext(WINDOW *win) (defined in View)Viewstatic
start_x (defined in View)Viewprotected
start_y (defined in View)Viewprotected
str_split(const std::string &str, const std::string delim) (defined in View)Viewstatic
t_worker (defined in ViewMonitor)ViewMonitorprotected
text (defined in ViewInfo)ViewInfoprotected
text_offset_x (defined in ViewInfo)ViewInfoprotectedstatic
text_offset_y (defined in ViewInfo)ViewInfoprotectedstatic
title (defined in View)Viewprotected
View(void) (defined in View)View
ViewInfo(void) (defined in ViewInfo)ViewInfo
ViewMonitor(void) (defined in ViewMonitor)ViewMonitor
width (defined in View)Viewprotected
win (defined in View)Viewprotectedstatic
worker(void) (defined in ViewMonitor)ViewMonitorprotectedvirtual
~View(void) (defined in View)Viewvirtual
+ + + + diff --git a/docs/html/classViewMonitor.html b/docs/html/classViewMonitor.html new file mode 100644 index 0000000..c212af2 --- /dev/null +++ b/docs/html/classViewMonitor.html @@ -0,0 +1,200 @@ + + + + + + + +B15F: ViewMonitor Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Member Functions | +Protected Attributes | +List of all members
+
+
ViewMonitor Class Reference
+
+
+
+Inheritance diagram for ViewMonitor:
+
+
+ + +ViewInfo +View + +
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+virtual call_t keypress (int &key) override
 
- Public Member Functions inherited from ViewInfo
+virtual void setText (std::string text)
 
+virtual void setLabelClose (std::string label)
 
+virtual void setCall (call_t call)
 
+virtual void draw (void) override
 
- Public Member Functions inherited from View
+virtual void setTitle (std::string title)
 
+virtual void repaint (void)
 
+ + + +

+Protected Member Functions

+virtual void worker (void)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+volatile bool run_worker = true
 
+std::thread t_worker
 
- Protected Attributes inherited from ViewInfo
+std::string text
 
+std::string label_close
 
+int close_offset_x = 0
 
+int close_offset_y = 0
 
- Protected Attributes inherited from View
+int width
 
+int height
 
+int start_x = 0
 
+int start_y = 0
 
+std::string title
 
+std::vector< call_t > calls
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from View
+static void setWinContext (WINDOW *win)
 
+static WINDOW * getWinContext (void)
 
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
 
- Static Protected Attributes inherited from ViewInfo
+constexpr static int text_offset_x = 2
 
+constexpr static int text_offset_y = 3
 
- Static Protected Attributes inherited from View
+static WINDOW * win = nullptr
 
+constexpr static int KEY_ENT = 10
 
+

Detailed Description

+
+

Definition at line 11 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..20223c1 --- /dev/null +++ b/docs/html/classViewPromt-members.html @@ -0,0 +1,113 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
ViewPromt Member List
+
+
+ +

This is the complete list of members for ViewPromt, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
button_offset_x (defined in ViewPromt)ViewPromtprotected
button_offset_y (defined in ViewPromt)ViewPromtprotected
call_confirm (defined in ViewPromt)ViewPromtprotected
calls (defined in View)Viewprotected
cancelable (defined in ViewPromt)ViewPromtprotected
draw(void) override (defined in ViewPromt)ViewPromtvirtual
getInput(void) (defined in ViewPromt)ViewPromtvirtual
getWinContext(void) (defined in View)Viewstatic
height (defined in View)Viewprotected
input (defined in ViewPromt)ViewPromtprotected
KEY_ENT (defined in View)Viewprotectedstatic
keypress(int &key) override (defined in ViewPromt)ViewPromtvirtual
label_cancel (defined in ViewPromt)ViewPromtprotected
label_confirm (defined in ViewPromt)ViewPromtprotected
message (defined in ViewPromt)ViewPromtprotected
repaint(void) (defined in View)Viewvirtual
selection (defined in ViewPromt)ViewPromtprotected
sep (defined in ViewPromt)ViewPromtprotected
setCancel(std::string name, bool cancelable) (defined in ViewPromt)ViewPromtvirtual
setConfirm(std::string name, call_t call) (defined in ViewPromt)ViewPromtvirtual
setMessage(std::string message) (defined in ViewPromt)ViewPromtvirtual
setTitle(std::string title) (defined in View)Viewvirtual
setWinContext(WINDOW *win) (defined in View)Viewstatic
start_x (defined in View)Viewprotected
start_y (defined in View)Viewprotected
str_split(const std::string &str, const std::string delim) (defined in View)Viewstatic
text_offset_x (defined in ViewPromt)ViewPromtprotectedstatic
text_offset_y (defined in ViewPromt)ViewPromtprotectedstatic
title (defined in View)Viewprotected
View(void) (defined in View)View
width (defined in View)Viewprotected
win (defined in View)Viewprotectedstatic
~View(void) (defined in View)Viewvirtual
+ + + + diff --git a/docs/html/classViewPromt.html b/docs/html/classViewPromt.html new file mode 100644 index 0000000..ac80eed --- /dev/null +++ b/docs/html/classViewPromt.html @@ -0,0 +1,208 @@ + + + + + + + +B15F: ViewPromt Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
ViewPromt Class Reference
+
+
+
+Inheritance diagram for ViewPromt:
+
+
+ + +View + +
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+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
 
- Public Member Functions inherited from View
+virtual void setTitle (std::string title)
 
+virtual void repaint (void)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+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
 
- Protected Attributes inherited from View
+int width
 
+int height
 
+int start_x = 0
 
+int start_y = 0
 
+std::string title
 
+std::vector< call_t > calls
 
+ + + + + + + + + + +

+Static Protected Attributes

+constexpr static int text_offset_x = 2
 
+constexpr static int text_offset_y = 2
 
- Static Protected Attributes inherited from View
+static WINDOW * win = nullptr
 
+constexpr static int KEY_ENT = 10
 
+ + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from View
+static void setWinContext (WINDOW *win)
 
+static WINDOW * getWinContext (void)
 
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
 
+

Detailed Description

+
+

Definition at line 8 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..db6bea2 --- /dev/null +++ b/docs/html/classViewSelection-members.html @@ -0,0 +1,102 @@ + + + + + + + +B15F: Member List + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
ViewSelection Member List
+
+
+ +

This is the complete list of members for ViewSelection, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
addChoice(std::string name, call_t call) (defined in ViewSelection)ViewSelectionvirtual
calls (defined in View)Viewprotected
choice_offset_x (defined in ViewSelection)ViewSelectionprotectedstatic
choice_offset_y (defined in ViewSelection)ViewSelectionprotectedstatic
choices (defined in ViewSelection)ViewSelectionprotected
draw(void) override (defined in ViewSelection)ViewSelectionvirtual
getWinContext(void) (defined in View)Viewstatic
height (defined in View)Viewprotected
KEY_ENT (defined in View)Viewprotectedstatic
keypress(int &key) override (defined in ViewSelection)ViewSelectionvirtual
repaint(void) (defined in View)Viewvirtual
selection (defined in ViewSelection)ViewSelectionprotected
setTitle(std::string title) (defined in View)Viewvirtual
setWinContext(WINDOW *win) (defined in View)Viewstatic
start_x (defined in View)Viewprotected
start_y (defined in View)Viewprotected
str_split(const std::string &str, const std::string delim) (defined in View)Viewstatic
title (defined in View)Viewprotected
View(void) (defined in View)View
width (defined in View)Viewprotected
win (defined in View)Viewprotectedstatic
~View(void) (defined in View)Viewvirtual
+ + + + diff --git a/docs/html/classViewSelection.html b/docs/html/classViewSelection.html new file mode 100644 index 0000000..a635beb --- /dev/null +++ b/docs/html/classViewSelection.html @@ -0,0 +1,175 @@ + + + + + + + +B15F: ViewSelection Class Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+Public Member Functions | +Protected Attributes | +Static Protected Attributes | +List of all members
+
+
ViewSelection Class Reference
+
+
+
+Inheritance diagram for ViewSelection:
+
+
+ + +View + +
+ + + + + + + + + + + + + +

+Public Member Functions

+virtual void draw (void) override
 
+virtual void addChoice (std::string name, call_t call)
 
+virtual call_t keypress (int &key) override
 
- Public Member Functions inherited from View
+virtual void setTitle (std::string title)
 
+virtual void repaint (void)
 
+ + + + + + + + + + + + + + + + + + +

+Protected Attributes

+size_t selection = 0
 
+std::vector< std::string > choices
 
- Protected Attributes inherited from View
+int width
 
+int height
 
+int start_x = 0
 
+int start_y = 0
 
+std::string title
 
+std::vector< call_t > calls
 
+ + + + + + + + + + +

+Static Protected Attributes

+constexpr static int choice_offset_x = 2
 
+constexpr static int choice_offset_y = 3
 
- Static Protected Attributes inherited from View
+static WINDOW * win = nullptr
 
+constexpr static int KEY_ENT = 10
 
+ + + + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from View
+static void setWinContext (WINDOW *win)
 
+static WINDOW * getWinContext (void)
 
+static std::vector< std::string > str_split (const std::string &str, const std::string delim)
 
+

Detailed Description

+
+

Definition at line 8 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..96be83c --- /dev/null +++ b/docs/html/classes.html @@ -0,0 +1,113 @@ + + + + + + + +B15F: Class Index + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
b | d | p | t | u | v
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
  b  
+
DriverException   
  u  
+
ViewInfo   
  p  
+
ViewMonitor   
B15F   USART   ViewPromt   
  d  
+
PlottyFile   USARTException   ViewSelection   
  t  
+
  v  
+
Dot   
TimeoutException   View   
+
b | d | p | t | u | v
+
+ + + + diff --git a/docs/html/cli_8cpp_source.html b/docs/html/cli_8cpp_source.html new file mode 100644 index 0000000..b928194 --- /dev/null +++ b/docs/html/cli_8cpp_source.html @@ -0,0 +1,84 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/cli.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cli.cpp
+
+
+
1 #define B15F_CLI_DEBUG
2 
3 #include <stdio.h>
4 #include <ncurses.h> // sudo apt-get install libncurses5-dev
5 #include <vector>
6 #include <string>
7 #include <iostream>
8 #include <signal.h>
9 #include <sys/ioctl.h>
10 #include <unistd.h>
11 #include <signal.h>
12 #include <future>
13 #include <thread>
14 #include <chrono>
15 #include "drv/b15f.h"
16 #include "ui/ui.h"
17 #include "ui/view_selection.h"
18 #include "ui/view_info.h"
19 #include "ui/view_monitor.h"
20 #include "ui/view_promt.h"
21 
22 volatile int win_changed_cooldown = 0;
23 volatile bool t_refresh_active = false;
24 
25 void signal_handler(int signal)
26 {
27  if(signal == SIGWINCH)
28  {
29  win_changed_cooldown = 10; // 100ms
30 
31  if (!t_refresh_active)
32  {
33  if(t_refresh.joinable())
34  t_refresh.join();
35  t_refresh_active = true;
36  t_refresh = std::thread([](){
37 
38  while(win_changed_cooldown--)
39  std::this_thread::sleep_for(std::chrono::milliseconds(10));
40 
41  t_refresh_active = false;
42 
43  if(win_stack.size())
44  win_stack.back()->repaint();
45 
46  });
47  }
48 
49  }
50  else if(signal == SIGINT)
51  {
52  cleanup();
53  std::cout << "SIGINT - Abbruch." << std::endl;
54  exit(EXIT_FAILURE);
55  }
56 }
57 
58 void abort_handler(std::exception& ex)
59 {
60  ViewInfo* view = new ViewInfo();
61  view->setTitle("Fehler");
62  std::string msg(ex.what());
63  msg += "\n\nBeende in 5 Sekunden.";
64  view->setText(msg.c_str());
65  view->setLabelClose("");
66  view->repaint();
67 
68  std::this_thread::sleep_for(std::chrono::milliseconds(5000));
69 
70  cleanup();
71  std::cerr << std::endl << "*** EXCEPTION ***" << std::endl << ex.what() << std::endl;
72  exit(EXIT_FAILURE);
73 }
74 
75 void init()
76 {
77  // init b15 driver
79 #ifndef B15F_CLI_DEBUG
80  std::cout << std::endl << "Starte in 3s ..." << std::endl;
81  sleep(3);
82 #endif
83  B15F::setAbortHandler(&abort_handler);
84 
85  // init all ncurses stuff
86  initscr();
87  start_color();
88  curs_set(0); // 0: invisible, 1: normal, 2: very visible
89  clear();
90  noecho();
91  cbreak(); // Line buffering disabled. pass on everything
92  mousemask(ALL_MOUSE_EVENTS, NULL);
93 
94  // connect signals to handler
95  signal(SIGWINCH, signal_handler);
96  signal(SIGINT, signal_handler);
97 
98  // set view context
99  View::setWinContext(newwin(25, 85, 0, 0));
100 }
101 
102 
103 int main()
104 {
105  init();
106 
107  int exit_code = EXIT_SUCCESS;
108 
109  show_main(0);
110 
111  cleanup();
112 
113  return exit_code;
114 }
+
ViewInfo
Definition: view_info.h:6
+
B15F::getInstance
static B15F & getInstance(void)
Definition: b15f.cpp:300
+
B15F::setAbortHandler
static void setAbortHandler(errorhandler_t func)
Definition: b15f.cpp:339
+ + + + 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_2e5593c9005d4dbc14b64af69adefad4.html b/docs/html/dir_2e5593c9005d4dbc14b64af69adefad4.html new file mode 100644 index 0000000..f338037 --- /dev/null +++ b/docs/html/dir_2e5593c9005d4dbc14b64af69adefad4.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ui Directory Reference
+
+
+
+ + + + diff --git a/docs/html/dir_56ea320f36428fc096e6ea8f45d8dae0.html b/docs/html/dir_56ea320f36428fc096e6ea8f45d8dae0.html new file mode 100644 index 0000000..a5bdc3f --- /dev/null +++ b/docs/html/dir_56ea320f36428fc096e6ea8f45d8dae0.html @@ -0,0 +1,85 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
control Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/docs/html/dir_5e190edae4b019e7e1b870accd701baf.html b/docs/html/dir_5e190edae4b019e7e1b870accd701baf.html new file mode 100644 index 0000000..8d97d59 --- /dev/null +++ b/docs/html/dir_5e190edae4b019e7e1b870accd701baf.html @@ -0,0 +1,85 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/docs/html/dir_81b0a61688244456393c2abc7725ec59.html b/docs/html/dir_81b0a61688244456393c2abc7725ec59.html new file mode 100644 index 0000000..89b9de6 --- /dev/null +++ b/docs/html/dir_81b0a61688244456393c2abc7725ec59.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
drv Directory Reference
+
+
+
+ + + + 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..98c9a6b --- /dev/null +++ b/docs/html/dot_8cpp_source.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/dot.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
dot.cpp
+
+
+
1 #include "dot.h"
2 
3 Dot::Dot(uint16_t x, uint16_t y, uint8_t curve) : x(x), y(y), curve(curve)
4 {
5  if(curve >= 64)
6  throw std::range_error("Kurvenindex muss im Bereich [0, 63] liegen");
7 }
8 
9 uint16_t Dot::getX() const
10 {
11  return x;
12 }
13 
14 uint16_t Dot::getY() const
15 {
16  return y;
17 }
18 
19 uint8_t Dot::getCurve(void) const
20 {
21  return curve;
22 }
+ + + + diff --git a/docs/html/dot_8h_source.html b/docs/html/dot_8h_source.html new file mode 100644 index 0000000..1f34539 --- /dev/null +++ b/docs/html/dot_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/dot.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
dot.h
+
+
+
1 #ifndef DOT_H
2 #define DOT_H
3 
4 #include <cstdint>
5 #include <stdexcept>
6 
7 class Dot
8 {
9 public:
10  Dot(uint16_t x, uint16_t y, uint8_t curve);
11  uint16_t getX(void) const;
12  uint16_t getY(void) const;
13  uint8_t getCurve(void) const;
14 
15 private:
16  uint16_t x, y;
17  uint8_t curve;
18 };
19 
20 
21 #endif // DOT_H
+
Dot
Definition: dot.h:7
+ + + + 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..c9aca1e --- /dev/null +++ b/docs/html/driverexception_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/driverexception.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
driverexception.h
+
+
+
1 #ifndef DRIVEREXCEPTION_H
2 #define DRIVEREXCEPTION_H
3 
4 #include <exception>
5 
6 // SOURCE: https://stackoverflow.com/a/8152888
7 
8 class DriverException: public std::exception
9 {
10 public:
11  explicit DriverException(const char* message) : msg_(message)
12  {
13  }
14 
15  explicit DriverException(const std::string& message) : msg_(message)
16  {
17  }
18 
19  virtual ~DriverException() throw ()
20  {
21  }
22 
23  virtual const char* what() const throw ()
24  {
25  return msg_.c_str();
26  }
27 
28 protected:
29  std::string msg_;
30 };
31 
32 #endif // DRIVEREXCEPTION_H
33 
+
DriverException
Definition: driverexception.h:8
+ + + + 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
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  control
  src
  drv
 b15f.cpp
 b15f.h
 dot.cpp
 dot.h
 driverexception.h
 plottyfile.cpp
 plottyfile.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..0480d53 --- /dev/null +++ b/docs/html/functions.html @@ -0,0 +1,233 @@ + + + + + + + +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 -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

+
+ + + + diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html new file mode 100644 index 0000000..891a1d2 --- /dev/null +++ b/docs/html/functions_func.html @@ -0,0 +1,233 @@ + + + + + + + +B15F: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- w -

+
+ + + + diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html new file mode 100644 index 0000000..5c42834 --- /dev/null +++ b/docs/html/hierarchy.html @@ -0,0 +1,94 @@ + + + + + + + +B15F: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + +
 CB15F
 CDot
 Cexception
 CDriverException
 CTimeoutException
 CUSARTException
 CPlottyFile
 CUSART
 CView
 CViewInfo
 CViewMonitor
 CViewPromt
 CViewSelection
+
+
+ + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..a232af3 --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,77 @@ + + + + + + + +B15F: Main Page + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
B15F Documentation
+
+
+
+ + + + 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=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
plottyfile.cpp
+
+
+
1 #include "plottyfile.h"
2 
3 void PlottyFile::addDot(Dot& dot)
4 {
5  dots.push_back(dot);
6 }
7 
8 void PlottyFile::addDot(Dot dot)
9 {
10  dots.push_back(dot);
11 }
12 
13 void PlottyFile::setFunctionType(FunctionType function_type)
14 {
15  this->function_type = function_type;
16 }
17 
18 void PlottyFile::setQuadrant(uint8_t quadrant)
19 {
20  if(quadrant < 1 || quadrant > 4)
21  throw std::range_error("Ungueltiger Quadrant");
22  this->quadrant = quadrant;
23 }
24 
25 void PlottyFile::setRefX(uint16_t ref_x)
26 {
27  this->ref_x = ref_x;
28 }
29 
30 void PlottyFile::setRefY(uint16_t ref_y)
31 {
32  this->ref_y = ref_y;
33 }
34 
35 void PlottyFile::setParaFirstCurve(uint16_t para_first)
36 {
37  this->para_first = para_first;
38 }
39 
40 void PlottyFile::setParaStepWidth(uint16_t para_stepwidth)
41 {
42  this->para_stepwidth = para_stepwidth;
43 }
44 
45 void PlottyFile::setUnitX(std::string unit_x)
46 {
47  this->unit_x = unit_x;
48 }
49 
50 void PlottyFile::setDescX(std::string desc_x)
51 {
52  this->desc_x = desc_x;
53 }
54 
55 void PlottyFile::setUnitY(std::string unit_y)
56 {
57  this->unit_y = unit_y;
58 }
59 
60 void PlottyFile::setDescY(std::string desc_y)
61 {
62  this->desc_y = desc_y;
63 }
64 
65 void PlottyFile::setUnitPara(std::string unit_para)
66 {
67  this->unit_para = unit_para;
68 }
69 
70 void PlottyFile::setDescPara(std::string desc_para)
71 {
72  this->desc_para = desc_para;
73 }
74 
75 FunctionType PlottyFile::getFunctionType() const
76 {
77  return function_type;
78 }
79 
80 uint8_t PlottyFile::getQuadrant() const
81 {
82  return quadrant;
83 }
84 
85 uint16_t PlottyFile::getRefX() const
86 {
87  return ref_x;
88 }
89 
90 uint16_t PlottyFile::getRefY() const
91 {
92  return ref_y;
93 }
94 
95 uint16_t PlottyFile::getParaFirstCurve() const
96 {
97  return para_first;
98 }
99 
100 uint16_t PlottyFile::getParaStepWidth() const
101 {
102  return para_stepwidth;
103 }
104 
105 std::string PlottyFile::getUnitX() const
106 {
107  return unit_x;
108 }
109 
110 std::string PlottyFile::getDescX() const
111 {
112  return desc_x;
113 }
114 
115 std::string PlottyFile::getUnitY() const
116 {
117  return unit_y;
118 }
119 
120 std::string PlottyFile::getDescY() const
121 {
122  return desc_y;
123 }
124 
125 std::string PlottyFile::getUnitPara() const
126 {
127  return unit_para;
128 }
129 
130 std::string PlottyFile::getDescPara() const
131 {
132  return desc_para;
133 }
134 
135 void PlottyFile::prepStr(std::string& str, uint8_t len)
136 {
137  if(str.length() > len)
138  throw std::runtime_error("Zu grosser String.");
139 
140  if(str.length() != len)
141  str += '\n';
142 
143  while(str.length() < len)
144  str += '\0';
145 }
146 
147 void PlottyFile::writeToFile(std::string filename)
148 {
149  prepStr(unit_x, STR_LEN_SHORT);
150  prepStr(desc_x, STR_LEN_LARGE);
151  prepStr(unit_y, STR_LEN_SHORT);
152  prepStr(desc_y, STR_LEN_LARGE);
153  prepStr(unit_para, STR_LEN_SHORT);
154  prepStr(desc_para, STR_LEN_LARGE);
155 
156  std::ofstream file(filename);
157 
158  // write file header
159  file.write(reinterpret_cast<char*>(&command), 1);
160  file.write(head.c_str(), head.length());
161  file.write(filetype.c_str(), filetype.length());
162  file.write(reinterpret_cast<char*>(&version), 2);
163  file.write(reinterpret_cast<char*>(&subversion), 2);
164  file.put(static_cast<uint8_t>(function_type));
165  file.write(reinterpret_cast<char*>(&quadrant), 1);
166  file.write(reinterpret_cast<char*>(&ref_x), 2);
167  file.write(reinterpret_cast<char*>(&ref_y), 2);
168  file.write(reinterpret_cast<char*>(&para_first), 2);
169  file.write(reinterpret_cast<char*>(&para_stepwidth), 2);
170  file.write(unit_x.c_str(), unit_x.length());
171  file.write(desc_x.c_str(), desc_x.length());
172  file.write(unit_y.c_str(), unit_y.length());
173  file.write(desc_y.c_str(), desc_y.length());
174  file.write(unit_para.c_str(), unit_para.length());
175  file.write(desc_para.c_str(), desc_para.length());
176  file.write(reinterpret_cast<const char*>(&eof), 1);
177 
178  // make sure header size is 256 Byte
179  while(file.tellp() < 256)
180  file.put(0);
181 
182  for(Dot& dot : dots)
183  {
184  file.put((dot.getX() >> 8) | (static_cast<uint8_t>(dot.getCurve()) << 2));
185  file.put(dot.getX() & 0xFF);
186  file.put(dot.getY() >> 8);
187  file.put(dot.getY() & 0xFF);
188  }
189 
190  file.close();
191 }
192 
193 void PlottyFile::startPlotty(std::string filename)
194 {
195  int code = system(("plotty --in " + filename).c_str());
196  if(code)
197  throw std::runtime_error("Fehler beim Aufruf von plotty");
198 }
+
Definition: dot.h:7
+ + + + diff --git a/docs/html/plottyfile_8h_source.html b/docs/html/plottyfile_8h_source.html new file mode 100644 index 0000000..ae5dfa1 --- /dev/null +++ b/docs/html/plottyfile_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/plottyfile.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
plottyfile.h
+
+
+
1 #ifndef PLOTTYFILE_H
2 #define PLOTTYFILE_H
3 
4 #include <iostream>
5 #include <fstream>
6 #include <exception>
7 #include <vector>
8 #include "dot.h"
9 
10 enum FunctionType
11 {
12  CurveFamily = 'S',
13  Curve = 'C',
14  Level = 'P'
15 };
16 
18 {
19 public:
20  void addDot(Dot& dot);
21  void addDot(Dot dot);
22 
23  void setFunctionType(FunctionType);
24  void setQuadrant(uint8_t);
25  void setRefX(uint16_t);
26  void setRefY(uint16_t);
27  void setParaFirstCurve(uint16_t);
28  void setParaStepWidth(uint16_t);
29  void setUnitX(std::string);
30  void setDescX(std::string);
31  void setUnitY(std::string);
32  void setDescY(std::string);
33  void setUnitPara(std::string);
34  void setDescPara(std::string);
35 
36  FunctionType getFunctionType(void) const;
37  uint8_t getQuadrant(void) const;
38  uint16_t getRefX(void) const;
39  uint16_t getRefY(void) const;
40  uint16_t getParaFirstCurve(void) const;
41  uint16_t getParaStepWidth(void) const;
42  std::string getUnitX(void) const;
43  std::string getDescX(void) const;
44  std::string getUnitY(void) const;
45  std::string getDescY(void) const;
46  std::string getUnitPara(void) const;
47  std::string getDescPara(void) const;
48 
49  void writeToFile(std::string filename);
50  void startPlotty(std::string filename);
51 private:
52  void prepStr(std::string& str, uint8_t len);
53 
54  std::vector<Dot> dots;
55 
56  int8_t command = 0x1D;
57  const std::string head = "HTWK-HWLab";
58  const std::string filetype = "MD";
59  int16_t version = 1;
60  int16_t subversion = 0;
61  FunctionType function_type = FunctionType::Curve;
62  uint8_t quadrant = 1;
63  uint16_t ref_x = 1023;
64  uint16_t ref_y = 1023;
65  uint16_t para_first = 1;
66  uint16_t para_stepwidth = 1;
67  std::string unit_x;
68  std::string desc_x;
69  std::string unit_y;
70  std::string desc_y;
71  std::string unit_para;
72  std::string desc_para;
73  const uint8_t eof = 0xD;
74 
75  constexpr static uint8_t STR_LEN_SHORT = 10;
76  constexpr static uint8_t STR_LEN_LARGE = 20;
77 };
78 
79 #endif // PLOTTYFILE_H
+ +
Definition: dot.h:7
+ + + + diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html new file mode 100644 index 0000000..a52d5f0 --- /dev/null +++ b/docs/html/search/all_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js new file mode 100644 index 0000000..ebee3d5 --- /dev/null +++ b/docs/html/search/all_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['abort',['abort',['../classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e',1,'B15F::abort(std::string msg)'],['../classB15F.html#ac962a6a49bddd0e261a8c7d3aded23f8',1,'B15F::abort(std::exception &ex)']]], + ['activateselftestmode',['activateSelfTestMode',['../classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1',1,'B15F']]], + ['analogread',['analogRead',['../classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627',1,'B15F']]], + ['analogsequence',['analogSequence',['../classB15F.html#ab82a324426c3063318c6cafb3089ae02',1,'B15F']]], + ['analogwrite0',['analogWrite0',['../classB15F.html#a5c5583d591afdd3f9501856c6b0ba3e3',1,'B15F']]], + ['analogwrite1',['analogWrite1',['../classB15F.html#a63d67795879cdc0b035c9c970e7d6fc3',1,'B15F']]] +]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html new file mode 100644 index 0000000..0fcb704 --- /dev/null +++ b/docs/html/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js new file mode 100644 index 0000000..7622f87 --- /dev/null +++ b/docs/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['b15f',['B15F',['../classB15F.html',1,'']]] +]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html new file mode 100644 index 0000000..19c530f --- /dev/null +++ b/docs/html/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js new file mode 100644 index 0000000..7200182 --- /dev/null +++ b/docs/html/search/all_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['clearinputbuffer',['clearInputBuffer',['../classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156',1,'USART']]], + ['clearoutputbuffer',['clearOutputBuffer',['../classUSART.html#a756d268a8762c316f91ca3238972b0c1',1,'USART']]], + ['closedevice',['closeDevice',['../classUSART.html#af80d6291ac1d2df04cfa1d8d27458cc5',1,'USART']]] +]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html new file mode 100644 index 0000000..1ae887f --- /dev/null +++ b/docs/html/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js new file mode 100644 index 0000000..196425e --- /dev/null +++ b/docs/html/search/all_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['delay_5fms',['delay_ms',['../classB15F.html#aaffce20afb9f06bc4b7556c70ce76416',1,'B15F']]], + ['delay_5fus',['delay_us',['../classB15F.html#adcaac8ae8db3c28eccb499fbd720361f',1,'B15F']]], + ['digitalread0',['digitalRead0',['../classB15F.html#ae0df6d423deeb2fd610968bd1c72060e',1,'B15F']]], + ['digitalread1',['digitalRead1',['../classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2',1,'B15F']]], + ['digitalwrite0',['digitalWrite0',['../classB15F.html#a13797edea1c50278988373acbd110064',1,'B15F']]], + ['digitalwrite1',['digitalWrite1',['../classB15F.html#aa225e7fc813849634063e071ef25db1b',1,'B15F']]], + ['discard',['discard',['../classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5',1,'B15F']]], + ['dot',['Dot',['../classDot.html',1,'']]], + ['driverexception',['DriverException',['../classDriverException.html',1,'']]] +]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html new file mode 100644 index 0000000..14c90ef --- /dev/null +++ b/docs/html/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js new file mode 100644 index 0000000..fb3f662 --- /dev/null +++ b/docs/html/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['exec',['exec',['../classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a',1,'B15F']]] +]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html new file mode 100644 index 0000000..60fa53e --- /dev/null +++ b/docs/html/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js new file mode 100644 index 0000000..3641ddc --- /dev/null +++ b/docs/html/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['flushoutputbuffer',['flushOutputBuffer',['../classUSART.html#adb6ff4d1cf1af79ca255c5a81780200d',1,'USART']]] +]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html new file mode 100644 index 0000000..7180363 --- /dev/null +++ b/docs/html/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js new file mode 100644 index 0000000..fc75b8c --- /dev/null +++ b/docs/html/search/all_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getbaudrate',['getBaudrate',['../classUSART.html#a4918672d8069df205378a528b1892db3',1,'USART']]], + ['getboardinfo',['getBoardInfo',['../classB15F.html#a4f01677e73d6d172a2c1cae9427a591b',1,'B15F']]], + ['getinstance',['getInstance',['../classB15F.html#a8b4533d232c55ef2aa967e39e2d23380',1,'B15F']]], + ['gettimeout',['getTimeout',['../classUSART.html#a19cf777956a038878fc2d2b58c3d2b41',1,'USART']]] +]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html new file mode 100644 index 0000000..ee6d2e4 --- /dev/null +++ b/docs/html/search/all_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js new file mode 100644 index 0000000..c1170e9 --- /dev/null +++ b/docs/html/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['init',['init',['../classB15F.html#a74d8cca6edbb4e24a2f760829b3742a5',1,'B15F']]] +]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html new file mode 100644 index 0000000..7829aa4 --- /dev/null +++ b/docs/html/search/all_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js new file mode 100644 index 0000000..bd75d34 --- /dev/null +++ b/docs/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['opendevice',['openDevice',['../classUSART.html#a5f7e2abda2ec4a68a5fdb8ee2f8a940a',1,'USART']]] +]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html new file mode 100644 index 0000000..e4242c7 --- /dev/null +++ b/docs/html/search/all_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js new file mode 100644 index 0000000..8232ab7 --- /dev/null +++ b/docs/html/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['plottyfile',['PlottyFile',['../classPlottyFile.html',1,'']]], + ['printstatistics',['printStatistics',['../classUSART.html#a33559bb8f0eda33a489d47b9c9227b59',1,'USART']]] +]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html new file mode 100644 index 0000000..47a4a78 --- /dev/null +++ b/docs/html/search/all_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js new file mode 100644 index 0000000..5d35f1d --- /dev/null +++ b/docs/html/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['readbyte',['readByte',['../classUSART.html#a8f54b98b26bfe084359a5604bda82562',1,'USART']]], + ['readdipswitch',['readDipSwitch',['../classB15F.html#a6f858f21ea81d491b5031b3644a2239a',1,'B15F']]], + ['readint',['readInt',['../classUSART.html#a1534c229db71a375e556cf1e7d0b8119',1,'USART']]], + ['reconnect',['reconnect',['../classB15F.html#a52557b375443c180a044e7d4e80a1ae7',1,'B15F']]] +]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html new file mode 100644 index 0000000..1320a43 --- /dev/null +++ b/docs/html/search/all_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js new file mode 100644 index 0000000..4f4d28c --- /dev/null +++ b/docs/html/search/all_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['setaborthandler',['setAbortHandler',['../classB15F.html#a55b0cd1ea582bda53d6979442640f8e9',1,'B15F']]], + ['setbaudrate',['setBaudrate',['../classUSART.html#aac63918a8b97ae63ee607cfa39e6d88d',1,'USART']]], + ['settimeout',['setTimeout',['../classUSART.html#ad7fe866cebe920784d2b17602824c7ff',1,'USART']]] +]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html new file mode 100644 index 0000000..32a3a1b --- /dev/null +++ b/docs/html/search/all_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js new file mode 100644 index 0000000..57a58a5 --- /dev/null +++ b/docs/html/search/all_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['testconnection',['testConnection',['../classB15F.html#af01983594f2af98ab2b1e514aa036a5d',1,'B15F']]], + ['testintconv',['testIntConv',['../classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78',1,'B15F']]], + ['timeoutexception',['TimeoutException',['../classTimeoutException.html',1,'']]] +]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html new file mode 100644 index 0000000..a386096 --- /dev/null +++ b/docs/html/search/all_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js new file mode 100644 index 0000000..c030e1b --- /dev/null +++ b/docs/html/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['usart',['USART',['../classUSART.html',1,'']]], + ['usartexception',['USARTException',['../classUSARTException.html',1,'']]] +]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html new file mode 100644 index 0000000..2931618 --- /dev/null +++ b/docs/html/search/all_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js new file mode 100644 index 0000000..27f785f --- /dev/null +++ b/docs/html/search/all_e.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['view',['View',['../classView.html',1,'']]], + ['viewinfo',['ViewInfo',['../classViewInfo.html',1,'']]], + ['viewmonitor',['ViewMonitor',['../classViewMonitor.html',1,'']]], + ['viewpromt',['ViewPromt',['../classViewPromt.html',1,'']]], + ['viewselection',['ViewSelection',['../classViewSelection.html',1,'']]] +]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html new file mode 100644 index 0000000..ca42a52 --- /dev/null +++ b/docs/html/search/all_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js new file mode 100644 index 0000000..88b07d9 --- /dev/null +++ b/docs/html/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['writebyte',['writeByte',['../classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5',1,'USART']]], + ['writeint',['writeInt',['../classUSART.html#a78b30d9aa863f38745e982860392599a',1,'USART']]] +]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html new file mode 100644 index 0000000..d585e6a --- /dev/null +++ b/docs/html/search/classes_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js new file mode 100644 index 0000000..7622f87 --- /dev/null +++ b/docs/html/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['b15f',['B15F',['../classB15F.html',1,'']]] +]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html new file mode 100644 index 0000000..baeb182 --- /dev/null +++ b/docs/html/search/classes_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js new file mode 100644 index 0000000..c2d5cc3 --- /dev/null +++ b/docs/html/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dot',['Dot',['../classDot.html',1,'']]], + ['driverexception',['DriverException',['../classDriverException.html',1,'']]] +]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html new file mode 100644 index 0000000..d267279 --- /dev/null +++ b/docs/html/search/classes_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js new file mode 100644 index 0000000..ca8950f --- /dev/null +++ b/docs/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['plottyfile',['PlottyFile',['../classPlottyFile.html',1,'']]] +]; diff --git a/docs/html/search/classes_3.html b/docs/html/search/classes_3.html new file mode 100644 index 0000000..8a5cbe1 --- /dev/null +++ b/docs/html/search/classes_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js new file mode 100644 index 0000000..b7d0b63 --- /dev/null +++ b/docs/html/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['timeoutexception',['TimeoutException',['../classTimeoutException.html',1,'']]] +]; diff --git a/docs/html/search/classes_4.html b/docs/html/search/classes_4.html new file mode 100644 index 0000000..300b9ab --- /dev/null +++ b/docs/html/search/classes_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js new file mode 100644 index 0000000..c030e1b --- /dev/null +++ b/docs/html/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['usart',['USART',['../classUSART.html',1,'']]], + ['usartexception',['USARTException',['../classUSARTException.html',1,'']]] +]; diff --git a/docs/html/search/classes_5.html b/docs/html/search/classes_5.html new file mode 100644 index 0000000..e7afb2c --- /dev/null +++ b/docs/html/search/classes_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js new file mode 100644 index 0000000..27f785f --- /dev/null +++ b/docs/html/search/classes_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['view',['View',['../classView.html',1,'']]], + ['viewinfo',['ViewInfo',['../classViewInfo.html',1,'']]], + ['viewmonitor',['ViewMonitor',['../classViewMonitor.html',1,'']]], + ['viewpromt',['ViewPromt',['../classViewPromt.html',1,'']]], + ['viewselection',['ViewSelection',['../classViewSelection.html',1,'']]] +]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/docs/html/search/close.png differ diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html new file mode 100644 index 0000000..8a729f7 --- /dev/null +++ b/docs/html/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js new file mode 100644 index 0000000..ebee3d5 --- /dev/null +++ b/docs/html/search/functions_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['abort',['abort',['../classB15F.html#a3f09a418f9e3be5d1d750e4515c96f1e',1,'B15F::abort(std::string msg)'],['../classB15F.html#ac962a6a49bddd0e261a8c7d3aded23f8',1,'B15F::abort(std::exception &ex)']]], + ['activateselftestmode',['activateSelfTestMode',['../classB15F.html#ad9bf80ee2485fb5aac9926c6ef0731f1',1,'B15F']]], + ['analogread',['analogRead',['../classB15F.html#ae0bd1f69751e2dc3c462db9213fc4627',1,'B15F']]], + ['analogsequence',['analogSequence',['../classB15F.html#ab82a324426c3063318c6cafb3089ae02',1,'B15F']]], + ['analogwrite0',['analogWrite0',['../classB15F.html#a5c5583d591afdd3f9501856c6b0ba3e3',1,'B15F']]], + ['analogwrite1',['analogWrite1',['../classB15F.html#a63d67795879cdc0b035c9c970e7d6fc3',1,'B15F']]] +]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html new file mode 100644 index 0000000..d4929aa --- /dev/null +++ b/docs/html/search/functions_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js new file mode 100644 index 0000000..7200182 --- /dev/null +++ b/docs/html/search/functions_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['clearinputbuffer',['clearInputBuffer',['../classUSART.html#a28a2b4c5ed66b2c3a81196f76884f156',1,'USART']]], + ['clearoutputbuffer',['clearOutputBuffer',['../classUSART.html#a756d268a8762c316f91ca3238972b0c1',1,'USART']]], + ['closedevice',['closeDevice',['../classUSART.html#af80d6291ac1d2df04cfa1d8d27458cc5',1,'USART']]] +]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html new file mode 100644 index 0000000..07e3fda --- /dev/null +++ b/docs/html/search/functions_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js new file mode 100644 index 0000000..970150a --- /dev/null +++ b/docs/html/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['delay_5fms',['delay_ms',['../classB15F.html#aaffce20afb9f06bc4b7556c70ce76416',1,'B15F']]], + ['delay_5fus',['delay_us',['../classB15F.html#adcaac8ae8db3c28eccb499fbd720361f',1,'B15F']]], + ['digitalread0',['digitalRead0',['../classB15F.html#ae0df6d423deeb2fd610968bd1c72060e',1,'B15F']]], + ['digitalread1',['digitalRead1',['../classB15F.html#afc76b612dd4faeee0ac02a66b65af5f2',1,'B15F']]], + ['digitalwrite0',['digitalWrite0',['../classB15F.html#a13797edea1c50278988373acbd110064',1,'B15F']]], + ['digitalwrite1',['digitalWrite1',['../classB15F.html#aa225e7fc813849634063e071ef25db1b',1,'B15F']]], + ['discard',['discard',['../classB15F.html#ae4740cd473f40a1a4121dfa66b25e1d5',1,'B15F']]] +]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html new file mode 100644 index 0000000..40bd389 --- /dev/null +++ b/docs/html/search/functions_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js new file mode 100644 index 0000000..fb3f662 --- /dev/null +++ b/docs/html/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['exec',['exec',['../classB15F.html#a1a7ac52984ed7ecac008a3e4060eee3a',1,'B15F']]] +]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html new file mode 100644 index 0000000..8a4df4c --- /dev/null +++ b/docs/html/search/functions_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js new file mode 100644 index 0000000..3641ddc --- /dev/null +++ b/docs/html/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['flushoutputbuffer',['flushOutputBuffer',['../classUSART.html#adb6ff4d1cf1af79ca255c5a81780200d',1,'USART']]] +]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html new file mode 100644 index 0000000..2b983b2 --- /dev/null +++ b/docs/html/search/functions_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js new file mode 100644 index 0000000..fc75b8c --- /dev/null +++ b/docs/html/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getbaudrate',['getBaudrate',['../classUSART.html#a4918672d8069df205378a528b1892db3',1,'USART']]], + ['getboardinfo',['getBoardInfo',['../classB15F.html#a4f01677e73d6d172a2c1cae9427a591b',1,'B15F']]], + ['getinstance',['getInstance',['../classB15F.html#a8b4533d232c55ef2aa967e39e2d23380',1,'B15F']]], + ['gettimeout',['getTimeout',['../classUSART.html#a19cf777956a038878fc2d2b58c3d2b41',1,'USART']]] +]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html new file mode 100644 index 0000000..f7d283d --- /dev/null +++ b/docs/html/search/functions_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js new file mode 100644 index 0000000..c1170e9 --- /dev/null +++ b/docs/html/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['init',['init',['../classB15F.html#a74d8cca6edbb4e24a2f760829b3742a5',1,'B15F']]] +]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html new file mode 100644 index 0000000..a74fe44 --- /dev/null +++ b/docs/html/search/functions_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js new file mode 100644 index 0000000..bd75d34 --- /dev/null +++ b/docs/html/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['opendevice',['openDevice',['../classUSART.html#a5f7e2abda2ec4a68a5fdb8ee2f8a940a',1,'USART']]] +]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html new file mode 100644 index 0000000..75fc0be --- /dev/null +++ b/docs/html/search/functions_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js new file mode 100644 index 0000000..cfb7a36 --- /dev/null +++ b/docs/html/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['printstatistics',['printStatistics',['../classUSART.html#a33559bb8f0eda33a489d47b9c9227b59',1,'USART']]] +]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html new file mode 100644 index 0000000..7541c9e --- /dev/null +++ b/docs/html/search/functions_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js new file mode 100644 index 0000000..5d35f1d --- /dev/null +++ b/docs/html/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['readbyte',['readByte',['../classUSART.html#a8f54b98b26bfe084359a5604bda82562',1,'USART']]], + ['readdipswitch',['readDipSwitch',['../classB15F.html#a6f858f21ea81d491b5031b3644a2239a',1,'B15F']]], + ['readint',['readInt',['../classUSART.html#a1534c229db71a375e556cf1e7d0b8119',1,'USART']]], + ['reconnect',['reconnect',['../classB15F.html#a52557b375443c180a044e7d4e80a1ae7',1,'B15F']]] +]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html new file mode 100644 index 0000000..5a5be63 --- /dev/null +++ b/docs/html/search/functions_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js new file mode 100644 index 0000000..4f4d28c --- /dev/null +++ b/docs/html/search/functions_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['setaborthandler',['setAbortHandler',['../classB15F.html#a55b0cd1ea582bda53d6979442640f8e9',1,'B15F']]], + ['setbaudrate',['setBaudrate',['../classUSART.html#aac63918a8b97ae63ee607cfa39e6d88d',1,'USART']]], + ['settimeout',['setTimeout',['../classUSART.html#ad7fe866cebe920784d2b17602824c7ff',1,'USART']]] +]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html new file mode 100644 index 0000000..fc2d5aa --- /dev/null +++ b/docs/html/search/functions_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js new file mode 100644 index 0000000..4b801c0 --- /dev/null +++ b/docs/html/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['testconnection',['testConnection',['../classB15F.html#af01983594f2af98ab2b1e514aa036a5d',1,'B15F']]], + ['testintconv',['testIntConv',['../classB15F.html#a7b8a0e2a9156f7dcb05d097f23666a78',1,'B15F']]] +]; diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html new file mode 100644 index 0000000..a1a1437 --- /dev/null +++ b/docs/html/search/functions_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js new file mode 100644 index 0000000..88b07d9 --- /dev/null +++ b/docs/html/search/functions_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['writebyte',['writeByte',['../classUSART.html#a60eadbe9956bab8144ee96d89eacd9f5',1,'USART']]], + ['writeint',['writeInt',['../classUSART.html#a78b30d9aa863f38745e982860392599a',1,'USART']]] +]; diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png new file mode 100644 index 0000000..39c0ed5 Binary files /dev/null and b/docs/html/search/mag_sel.png differ diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html new file mode 100644 index 0000000..4377320 --- /dev/null +++ b/docs/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/docs/html/search/search.css b/docs/html/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/docs/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/html/search/search.js b/docs/html/search/search.js new file mode 100644 index 0000000..a554ab9 --- /dev/null +++ b/docs/html/search/search.js @@ -0,0 +1,814 @@ +/* + @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 convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/html/timeoutexception_8h_source.html b/docs/html/timeoutexception_8h_source.html new file mode 100644 index 0000000..d7c2fa7 --- /dev/null +++ b/docs/html/timeoutexception_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/timeoutexception.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
timeoutexception.h
+
+
+
1 #ifndef TIMEOUTEXCEPTION_H
2 #define TIMEOUTEXCEPTION_H
3 
4 #include <exception>
5 
6 // SOURCE: https://stackoverflow.com/a/8152888
7 
8 class TimeoutException: public std::exception
9 {
10 public:
11  explicit TimeoutException(const char* message, int timeout) : TimeoutException(std::string(message), timeout)
12  {
13  }
14 
15  explicit TimeoutException(const std::string& message, int timeout) : msg(message), m_timeout(timeout)
16  {
17  if(!msg.length())
18  msg = "Timeout reached (" + std::to_string(m_timeout) + ")";
19  }
20 
21  virtual ~TimeoutException() throw ()
22  {
23  }
24 
25  virtual const char* what() const throw ()
26  {
27  return msg.c_str();
28  }
29 
30 protected:
31  std::string msg;
32  int m_timeout;
33 };
34 
35 #endif // TIMEOUTEXCEPTION_H
+ + + + + diff --git a/docs/html/ui_8cpp_source.html b/docs/html/ui_8cpp_source.html new file mode 100644 index 0000000..ef02300 --- /dev/null +++ b/docs/html/ui_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/ui.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ui.cpp
+
+
+
1 #include "ui.h"
2 #include "../drv/b15f.h"
3 
4 std::vector<View*> win_stack;
5 std::thread t_refresh;
6 
7 void show_main(int)
8 {
9  ViewSelection* view = new ViewSelection();
10  view->setTitle("B15F - Command Line Interface");
11  view->addChoice("[ Monitor - Eingaben beobachten ]", &show_monitor);
12  view->addChoice("[ Digitale Ausgabe BE0 ]", &show_digital_output0);
13  view->addChoice("[ Digitale Ausgabe BE1 ]", &show_digital_output1);
14  view->addChoice("[ Analoge Ausgabe AA0 ]", &show_analog_output0);
15  view->addChoice("[ Analoge Ausgabe AA1 ]", &show_analog_output1);
16  view->addChoice("[ Selbsttest des B15 ]", &show_selftest_info);
17  view->addChoice("[ Informationen ]", &show_info);
18  view->addChoice("", nullptr);
19  view->addChoice("[ Beenden ]", &finish);
20  view->repaint();
21 
22  win_stack.push_back(view);
23  input(0);
24 }
25 
26 void input(int)
27 {
28  call_t nextCall;
29  int key;
30  do
31  {
32  key = wgetch(View::getWinContext());
33  win_stack.back()->repaint();
34  nextCall = win_stack.back()->keypress(key);
35 
36  if(key == -1)
37  view_back(key);
38 
39  if(nextCall)
40  nextCall(key);
41  }
42  while(win_stack.size());
43 }
44 
45 void view_back(int)
46 {
47  if(win_stack.size())
48  {
49  delete win_stack.back();
50  win_stack.pop_back();
51  }
52  if(win_stack.size())
53  win_stack.back()->repaint();
54 }
55 
56 void finish(int)
57 {
58  cleanup();
59  exit(EXIT_SUCCESS);
60 }
61 
62 void cleanup()
63 {
64  if(t_refresh.joinable())
65  t_refresh.join();
66  clrtoeol();
67  refresh();
68  endwin();
69 }
70 
71 void show_info(int)
72 {
73  ViewInfo* view = new ViewInfo();
74  view->setTitle("Info");
75  view->setText("Informationen zu Board 15 Famulus Edition\nEs war einmal...");
76  view->setLabelClose("[ Zurueck ]");
77  view->repaint();
78 
79  win_stack.push_back(view);
80  input(0);
81 }
82 
83 void show_monitor(int)
84 {
85  ViewMonitor* view = new ViewMonitor();
86  view->setTitle("Monitor");
87  view->setText("\nErfasse Messwerte...");
88  view->setLabelClose("[ Zurueck ]");
89  view->repaint();
90 
91  win_stack.push_back(view);
92  input(0);
93 }
94 
95 void show_invalid_port_input(int)
96 {
97  ViewInfo* view = new ViewInfo();
98  view->setTitle("Falsche Eingabe");
99  view->setText("Bitte geben Sie einen Wert aus dem Intervall [0, FF] an.");
100  view->setLabelClose("[ Schliessen ]");
101  view->repaint();
102 
103  win_stack.push_back(view);
104  input(0);
105 }
106 
107 void show_invalid_dac_input(int)
108 {
109  ViewInfo* view = new ViewInfo();
110  view->setTitle("Falsche Eingabe");
111  view->setText("Bitte geben Sie einen Wert aus dem Intervall [0, 1023] an.");
112  view->setLabelClose("[ Schliessen ]");
113  view->repaint();
114 
115  win_stack.push_back(view);
116  input(0);
117 }
118 
119 void write_digital_output0(int)
120 {
121  try
122  {
123  int d = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput(), 0, 16);
124  if(d > 255 || 0 > d)
125  throw std::invalid_argument("bad value");
126  uint8_t port = static_cast<uint8_t>(d);
127 
128  B15F& drv = B15F::getInstance();
129  drv.digitalWrite0(port);
130  view_back(0);
131  }
132  catch(std::invalid_argument& ex)
133  {
134  show_invalid_port_input(0);
135  }
136 }
137 
138 void write_digital_output1(int)
139 {
140  try
141  {
142  int d = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput(), 0, 16);
143  if(d > 255 || 0 > d)
144  throw std::invalid_argument("bad value");
145  uint8_t port = static_cast<uint8_t>(d);
146 
147  B15F& drv = B15F::getInstance();
148  drv.digitalWrite1(port);
149  view_back(0);
150  }
151  catch(std::invalid_argument& ex)
152  {
153  show_invalid_port_input(0);
154  }
155 }
156 
157 void write_analog_output0(int)
158 {
159  try
160  {
161  uint16_t port = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput());
162  if(port > 1023)
163  throw std::invalid_argument("bad value");
164 
165  B15F& drv = B15F::getInstance();
166  drv.analogWrite0(port);
167  view_back(0);
168  }
169  catch(std::invalid_argument& ex)
170  {
171  show_invalid_dac_input(0);
172  }
173 }
174 
175 void write_analog_output1(int)
176 {
177  try
178  {
179  uint16_t port = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput());
180  if(port > 1023)
181  throw std::invalid_argument("bad value");
182 
183  B15F& drv = B15F::getInstance();
184  drv.analogWrite1(port);
185  view_back(0);
186  }
187  catch(std::invalid_argument& ex)
188  {
189  show_invalid_dac_input(0);
190  }
191 }
192 
193 void show_digital_output0(int)
194 {
195  ViewPromt* view = new ViewPromt();
196  view->setTitle("Digitale Ausgabe BE0");
197  view->setMessage("\nAusgabe Port-Wert (hex): 0x");
198  view->setCancel("[ Zurueck ]", true);
199  view->setConfirm("[ OK ]", &write_digital_output0);
200  view->repaint();
201 
202  win_stack.push_back(view);
203  input(0);
204 }
205 
206 void show_digital_output1(int)
207 {
208  ViewPromt* view = new ViewPromt();
209  view->setTitle("Digitale Ausgabe BE1");
210  view->setMessage("\nAusgabe Port-Wert (hex): 0x");
211  view->setCancel("[ Zurueck ]", true);
212  view->setConfirm("[ OK ]", &write_digital_output1);
213  view->repaint();
214 
215  win_stack.push_back(view);
216  input(0);
217 }
218 
219 void show_analog_output0(int)
220 {
221  ViewPromt* view = new ViewPromt();
222  view->setTitle("Analoge Ausgabe AA0");
223  view->setMessage("\nAusgabe 10-Bit-Wert (0...1023): ");
224  view->setCancel("[ Zurueck ]", true);
225  view->setConfirm("[ OK ]", &write_analog_output0);
226  view->repaint();
227 
228  win_stack.push_back(view);
229  input(0);
230 }
231 
232 void show_analog_output1(int)
233 {
234  ViewPromt* view = new ViewPromt();
235  view->setTitle("Analoge Ausgabe AA1");
236  view->setMessage("\nAusgabe 10-Bit-Wert (0...1023): ");
237  view->setCancel("[ Zurueck ]", true);
238  view->setConfirm("[ OK ]", &write_analog_output1);
239  view->repaint();
240 
241  win_stack.push_back(view);
242  input(0);
243 }
244 
245 void start_selftest(int)
246 {
247  B15F& drv = B15F::getInstance();
248  drv.activateSelfTestMode();
249 
250  ViewInfo* view = new ViewInfo();
251  view->setTitle("Selbsttest aktiv");
252  view->setText("Das B15 befindet sich jetzt im Selbsttestmodus.\n \nSelbsttest:\nZu Beginn geht der Reihe nach jede LED von BA0 bis BA1 an.\nDanach leuchten die LEDs an AA0 und AA1 kurz auf.\nZum Schluss spiegelt in einer Endlosschleife:\n* BA0 Port BE0\n* BA1 die DIP-Schalter S7\n* AA0 ADC0\n* AA1 ADC1");
253  view->setLabelClose("[ Selbsttest Beenden ]");
254  view->setCall(&stop_selftest);
255  view->repaint();
256 
257  win_stack.push_back(view);
258  input(0);
259 }
260 
261 void stop_selftest(int)
262 {
263  B15F& drv = B15F::getInstance();
264  drv.discard();
265  drv.delay_ms(B15F::WDT_TIMEOUT);
266  drv.reconnect();
267  drv.digitalWrite0(0);
268  drv.digitalWrite1(0);
269 }
270 
271 void show_selftest_info(int)
272 {
273  ViewInfo* view = new ViewInfo();
274  view->setTitle("Selbsttest");
275  view->setText("Bitte entfernen Sie jetzt alle Draehte von den Anschlussklemmen und bestaetigen\nmit Enter.");
276  view->setLabelClose("[ Weiter ]");
277  view->setCall(&start_selftest);
278  view->repaint();
279 
280  win_stack.push_back(view);
281  input(0);
282 }
+ + +
void delay_ms(uint16_t ms)
Definition: b15f.cpp:290
+
bool analogWrite1(uint16_t)
Definition: b15f.cpp:209
+
static B15F & getInstance(void)
Definition: b15f.cpp:300
+
Definition: b15f.h:24
+
bool digitalWrite0(uint8_t)
Definition: b15f.cpp:152
+
bool activateSelfTestMode(void)
Definition: b15f.cpp:144
+ + +
bool digitalWrite1(uint8_t)
Definition: b15f.cpp:162
+
void discard(void)
Definition: b15f.cpp:72
+
bool analogWrite0(uint16_t)
Definition: b15f.cpp:199
+
void reconnect(void)
Definition: b15f.cpp:57
+ + + + diff --git a/docs/html/ui_8h_source.html b/docs/html/ui_8h_source.html new file mode 100644 index 0000000..bc5857e --- /dev/null +++ b/docs/html/ui_8h_source.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/ui.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ui.h
+
+
+
1 #ifndef UI_H
2 #define UI_H
3 
4 #include <vector>
5 #include "view_selection.h"
6 #include "view_info.h"
7 #include "view_monitor.h"
8 #include "view_promt.h"
9 
10 void show_main(int);
11 void input(int);
12 void view_back(int);
13 void finish(int);
14 void cleanup();
15 
16 void show_info(int);
17 void show_monitor(int);
18 void show_invalid_port_input(int);
19 void show_invalid_dac_input(int);
20 void write_digital_output0(int);
21 void write_digital_output1(int);
22 void write_analog_output0(int);
23 void write_analog_output1(int);
24 void show_digital_output0(int);
25 void show_digital_output1(int);
26 void show_analog_output0(int);
27 void show_analog_output1(int);
28 
29 // selftest group
30 void show_selftest_info(int);
31 void start_selftest(int);
32 void stop_selftest(int);
33 
34 
35 extern std::vector<View*> win_stack;
36 extern std::thread t_refresh;
37 
38 #endif // UI_H
+ + + + diff --git a/docs/html/usart_8cpp_source.html b/docs/html/usart_8cpp_source.html new file mode 100644 index 0000000..c638206 --- /dev/null +++ b/docs/html/usart_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/usart.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
usart.cpp
+
+
+
1 #include "usart.h"
2 
3 void USART::openDevice(std::string device)
4 {
5  file_desc = open(device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY /* | O_NONBLOCK*/);
6  if(file_desc <= 0)
7  throw USARTException("Fehler beim Öffnen des Gerätes");
8 
9  struct termios options;
10  int code = tcgetattr(file_desc, &options);
11  if(code)
12  throw USARTException("Fehler beim Lesen der Geräteparameter");
13 
14  options.c_cflag = CS8 | CLOCAL | CREAD;
15  options.c_iflag = IGNPAR;
16  options.c_oflag = 0;
17  options.c_lflag = 0;
18  options.c_cc[VMIN] = 0; // #bytes read returns at least
19  options.c_cc[VTIME] = timeout;
20  code = cfsetspeed(&options, baudrate);
21  if(code)
22  throw USARTException("Fehler beim Setzen der Baudrate");
23 
24  code = tcsetattr(file_desc, TCSANOW, &options);
25  if(code)
26  throw USARTException("Fehler beim Setzen der Geräteparameter");
27 
30 }
31 
33 {
34  int code = close(file_desc);
35  if(code)
36  throw USARTException("Fehler beim Schließen des Gerätes");
37 }
38 
40 {
41  int code = tcflush(file_desc, TCIFLUSH);
42  if(code)
43  throw USARTException("Fehler beim Leeren des Eingangspuffers");
44 }
45 
47 {
48  int code = tcflush(file_desc, TCOFLUSH);
49  if(code)
50  throw USARTException("Fehler beim Leeren des Ausgangspuffers");
51 }
52 
54 {
55  int code = tcdrain(file_desc);
56  if(code)
57  throw USARTException("Fehler beim Versenden des Ausgangspuffers");
58 }
59 
61 {
62  double pz = 1e2 * n_blocks_failed / n_blocks_total;
63  pz = std::round(pz * 1e2) / 1e2;
64  std::cout << "blocks total: " << n_blocks_total << " ok: " << (n_blocks_total - n_blocks_failed) << " failed: " << n_blocks_failed << " (" << pz << "%)" << std::endl;
65 }
66 
67 void USART::writeByte(uint8_t b)
68 {
69  int sent = write(file_desc, &b, 1);
70  if(sent != 1)
71  {
72  std::cout << "WARNUNG: Fehler beim Senden (" << sent << "): writeByte(), wiederhole..." << std::endl;
73  usleep(100000);
74  sent = write(file_desc, &b, 1);
75  if(sent != 1)
76  throw USARTException("Fehler beim Senden: writeByte()");
77  }
78 
79 }
80 
81 void USART::writeInt(uint16_t d)
82 {
83  int sent = write(file_desc, reinterpret_cast<char*>(&d), 2);
84  if(sent != 2)
85  throw USARTException("Fehler beim Senden: writeInt()");
86 }
87 
88 
89 
90 int USART::read_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout)
91 {
92  uint32_t elapsed = 0;
93  int n_read = -1;
94  auto start = std::chrono::steady_clock::now();
95  auto end = start;
96  while(elapsed < timeout)
97  {
98  n_read = read(file_desc, buffer + offset, len);
99  if (n_read == len)
100  return n_read;
101 
102  end = std::chrono::steady_clock::now();
103  elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
104  }
105 
106  return 0;
107 }
108 
109 int USART::write_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout)
110 {
111  uint32_t elapsed = 0;
112  int n_sent = -1;
113  auto start = std::chrono::steady_clock::now();
114  auto end = start;
115  while(elapsed < timeout)
116  {
117  n_sent = write(file_desc, buffer + offset, len);
119  if (n_sent == len)
120  return n_sent;
121 
122  end = std::chrono::steady_clock::now();
123  elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
124  }
125 
126  return n_sent;
127 }
128 
129 void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len)
130 {
131  uint8_t crc;
132  uint8_t aw;
133  const uint16_t us_per_bit = (1000000 / baudrate) * 16;
134  const uint16_t n_total = len + 3;
135 
136  n_blocks_total++;
137  bool failed = false;
138 
139  do
140  {
141  // calc crc
142  crc = 0;
143  for(uint8_t i = 0; i < len; i++)
144  {
145  crc ^= buffer[i];
146  for (uint8_t k = 0; k < 8; k++)
147  {
148  if (crc & 1)
149  crc ^= CRC7_POLY;
150  crc >>= 1;
151  }
152  }
153 
154  // construct block
155  block_buffer[0] = len;
156  std::memcpy(&block_buffer[1], buffer + offset, len);
157  block_buffer[len + 1] = crc;
158  block_buffer[len + 2] = BLOCK_END;
159 
160  // send block
163  int n_sent = write_timeout(&block_buffer[0], 0, len + 3, us_per_bit * n_total);
164  if(n_sent != n_total)
165  throw std::runtime_error("fatal (send): " + std::to_string(n_sent));
166 
167  /*for(uint8_t i = 0; i < len + 3; i++)
168  {
169  write_timeout(&block_buffer[i], 0, 1, us_per_bit * n_total);
170  //tcdrain(file_desc);
171  //usleep(1000);
172  }*/
173 
174  // flush output data
175  tcdrain(file_desc);
176 
177  //usleep(us_per_bit * n_total * 10);
178 
179  // check response
180  int n_read = read_timeout(&aw, 0, 1, us_per_bit * n_blocks_total * 10);
181  for(uint16_t i = 0; i < 255 && n_read != 1; i++)
182  {
183  writeByte(0x80); // Stoppzeichen für Block
184  if(tcdrain(file_desc))
185  {
186  std::cout << "drain failed" << std::endl;
187  }
188  std::cout << "WARNING: read error (" << n_read << "), retry #" << (int) i << std::endl;
189  usleep(us_per_bit*100);
190  n_read = read_timeout(&aw, 0, 1, us_per_bit);
191  }
192 
193  if(n_read != 1)
194  throw std::runtime_error("fatal: " + std::to_string(n_read));
195 
196  //clearInputBuffer();
197 
198  if(aw != 0xFF) {
199  if(!failed)
200  n_blocks_failed++;
201  failed = true;
202  std::cout << "block failed, retry" << std::endl;
203  }
204  }
205  while(aw != 0xFF);
206 
207  //std::cout << "OK" << std::endl;
208 }
209 
210 uint8_t USART::readByte(void)
211 {
212  char b;
213  auto start = std::chrono::steady_clock::now();
214  auto end = start;
215  uint16_t elapsed = 0;
216  while(elapsed < timeout * 100)
217  {
218  int code = read(file_desc, &b, 1);
219  if (code > 0)
220  return static_cast<uint8_t>(b);
221 
222  end = std::chrono::steady_clock::now();
223  elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
224  }
225 
226  throw TimeoutException("Verbindung unterbrochen.", timeout);
227 }
228 
229 uint16_t USART::readInt(void)
230 {
231  return readByte() | readByte() << 8;
232 }
233 
234 bool USART::readBlock(uint8_t* buffer, uint16_t offset)
235 {
236  uint8_t len = readByte();
237  uint8_t crc = 0;
238  buffer += offset;
239 
240  uint32_t block_timeout = timeout / 10;
241 
242  // wait for block
243  int n_ready;
244  uint16_t elapsed = 0;
245  auto start = std::chrono::steady_clock::now();
246  auto end = start;
247  while(elapsed < block_timeout)
248  {
249  int code = ioctl(file_desc, FIONREAD, &n_ready);
250  if(code != 0)
251  {
252  std::cout << "n_ready code: " << code << std::endl;
253  return false;
254  }
255 
256  if(n_ready >= len + 1)
257  break;
258 
259  end = std::chrono::steady_clock::now();
260  elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
261  }
262  if(elapsed >= timeout)
263  {
264  std::cout << "block timeout: " << std::endl;
265  return false;
266  }
267 
268  while(len--)
269  {
270  *buffer = readByte();
271 
272  crc ^= *buffer++;
273  for (uint8_t i = 0; i < 8; i++)
274  {
275  if (crc & 1)
276  crc ^= CRC7_POLY;
277  crc >>= 1;
278  }
279  }
280 
281  crc ^= readByte();
282  for (uint8_t i = 0; i < 8; i++)
283  {
284  if (crc & 1)
285  crc ^= CRC7_POLY;
286  crc >>= 1;
287  }
288 
289  if(TEST == 1)
290  crc = 1;
291  if(TEST > 100)
292  TEST = 0;
293 
294  if (crc == 0)
295  {
296  writeByte(0xFF);
297  return true;
298  }
299  else
300  {
301  writeByte(0xFE);
302  return false;
303  }
304 }
305 
307 {
308  return baudrate;
309 }
310 
312 {
313  return timeout;
314 }
315 
316 void USART::setBaudrate(uint32_t baudrate)
317 {
318  this->baudrate = baudrate;
319 }
320 
321 void USART::setTimeout(uint8_t timeout)
322 {
323  this->timeout = timeout;
324 }
+
uint32_t getBaudrate(void)
Definition: usart.cpp:306
+
uint8_t readByte(void)
Definition: usart.cpp:210
+ +
void printStatistics(void)
Definition: usart.cpp:60
+
void closeDevice(void)
Definition: usart.cpp:32
+
void clearInputBuffer(void)
Definition: usart.cpp:39
+
uint8_t getTimeout(void)
Definition: usart.cpp:311
+
void clearOutputBuffer(void)
Definition: usart.cpp:46
+
void setBaudrate(uint32_t baudrate)
Definition: usart.cpp:316
+
void writeByte(uint8_t b)
Definition: usart.cpp:67
+
void openDevice(std::string device)
Definition: usart.cpp:3
+
uint16_t readInt(void)
Definition: usart.cpp:229
+
void setTimeout(uint8_t timeout)
Definition: usart.cpp:321
+
void flushOutputBuffer(void)
Definition: usart.cpp:53
+ +
void writeInt(uint16_t d)
Definition: usart.cpp:81
+ + + + diff --git a/docs/html/usart_8h_source.html b/docs/html/usart_8h_source.html new file mode 100644 index 0000000..c6776a3 --- /dev/null +++ b/docs/html/usart_8h_source.html @@ -0,0 +1,96 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/usart.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
usart.h
+
+
+
1 #ifndef USART_H
2 #define USART_H
3 
4 #include <iostream>
5 #include <cstdint>
6 #include <chrono>
7 #include <unistd.h>
8 #include <cstring>
9 #include <fcntl.h>
10 #include <sys/ioctl.h>
11 #include <termios.h>
12 #include <cmath>
13 #include "usartexception.h"
14 #include "timeoutexception.h"
15 
16 class USART
17 {
18 public:
19 
20  /*************************************************
21  * Methoden für die Verwaltung der Schnittstelle *
22  *************************************************/
23 
29  void openDevice(std::string device);
30 
35  void closeDevice(void);
36 
41  void clearInputBuffer(void);
42 
47  void clearOutputBuffer(void);
48 
53  void flushOutputBuffer(void);
54 
58  void printStatistics(void);
59 
60  /*************************************************/
61 
62 
63 
64  /*************************************
65  * Methoden für die Datenübertragung *
66  *************************************/
67 
73  void writeByte(uint8_t b);
74 
80  void writeInt(uint16_t d);
81 
86  uint8_t readByte(void);
87 
92  uint16_t readInt(void);
93 
94  int read_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout);
95  int write_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout);
96  void writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len);
97  bool readBlock(uint8_t* buffer, uint16_t offset);
98 
99  /*************************************/
100 
101 
102 
103  /***************************************
104  * Methoden für einstellbare Parameter *
105  ***************************************/
106 
111  uint32_t getBaudrate(void);
112 
117  uint8_t getTimeout(void);
118 
123  void setBaudrate(uint32_t baudrate);
124 
129  void setTimeout(uint8_t timeout);
130 
131  /***************************************/
132 
133  constexpr static uint8_t CRC7_POLY = 0x91;
134  constexpr static uint8_t MAX_BLOCK_SIZE = 64;
135  constexpr static uint8_t BLOCK_END = 0x80;
136 private:
137 
138  int file_desc = -1; // Linux Dateideskriptor
139  uint32_t baudrate = 9600; // Standard-Baudrate, sollte mit setBaudrate() überschrieben werden!
140  int TEST = 0;
141  uint8_t timeout = 10; // in Dezisekunden
142  uint8_t block_buffer[MAX_BLOCK_SIZE + 3];
143 
144  // debug statistics
145  uint32_t n_blocks_total = 0;
146  uint32_t n_blocks_failed = 0;
147 };
148 
149 
150 #endif // USART_H
+
uint32_t getBaudrate(void)
Definition: usart.cpp:306
+
uint8_t readByte(void)
Definition: usart.cpp:210
+
void printStatistics(void)
Definition: usart.cpp:60
+
void closeDevice(void)
Definition: usart.cpp:32
+
void clearInputBuffer(void)
Definition: usart.cpp:39
+
uint8_t getTimeout(void)
Definition: usart.cpp:311
+
Definition: usart.h:16
+
void clearOutputBuffer(void)
Definition: usart.cpp:46
+
void setBaudrate(uint32_t baudrate)
Definition: usart.cpp:316
+
void writeByte(uint8_t b)
Definition: usart.cpp:67
+
void openDevice(std::string device)
Definition: usart.cpp:3
+
uint16_t readInt(void)
Definition: usart.cpp:229
+
void setTimeout(uint8_t timeout)
Definition: usart.cpp:321
+
void flushOutputBuffer(void)
Definition: usart.cpp:53
+
void writeInt(uint16_t d)
Definition: usart.cpp:81
+ + + + diff --git a/docs/html/usartexception_8h_source.html b/docs/html/usartexception_8h_source.html new file mode 100644 index 0000000..d88ec8c --- /dev/null +++ b/docs/html/usartexception_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/drv/usartexception.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
usartexception.h
+
+
+
1 #ifndef USARTEXCEPTION_H
2 #define USARTEXCEPTION_H
3 
4 #include <exception>
5 #include <string>
6 
7 // SOURCE: https://stackoverflow.com/a/8152888
8 
9 class USARTException: public std::exception
10 {
11 public:
12  explicit USARTException(const char* message) : msg(message)
13  {
14  }
15 
16  explicit USARTException(const std::string& message) : msg(message)
17  {
18  }
19 
20  virtual ~USARTException() throw ()
21  {
22  }
23 
24  virtual const char* what() const throw ()
25  {
26  return msg.c_str();
27  }
28 
29 protected:
30  std::string msg;
31 };
32 
33 #endif // USARTEXCEPTION_H
+ + + + + diff --git a/docs/html/view_8cpp_source.html b/docs/html/view_8cpp_source.html new file mode 100644 index 0000000..a406dcc --- /dev/null +++ b/docs/html/view_8cpp_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view.cpp
+
+
+
1 #include "view.h"
2 
3 WINDOW* View::win = nullptr;
4 
5 View::View()
6 {
7  if(!win)
8  {
9  B15F::abort("View::win not initialized, missing context");
10  }
11  getmaxyx(win, height, width); // init width and height
12  keypad(win, TRUE);
13 }
14 
15 View::~View()
16 {
17 }
18 
19 void View::setWinContext(WINDOW* win)
20 {
21  View::win = win;
22 }
23 
24 WINDOW* View::getWinContext()
25 {
26  return win;
27 }
28 
29 // from: https://stackoverflow.com/a/37454181
30 std::vector<std::string> View::str_split(const std::string& str, const std::string delim)
31 {
32  std::vector<std::string> tokens;
33  size_t prev = 0, pos = 0;
34  do
35  {
36  pos = str.find(delim, prev);
37  if (pos == std::string::npos) pos = str.length();
38  std::string token = str.substr(prev, pos-prev);
39  if (!token.empty()) tokens.push_back(token);
40  prev = pos + delim.length();
41  }
42  while (pos < str.length() && prev < str.length());
43  return tokens;
44 }
45 
46 
47 void View::setTitle(std::string title)
48 {
49  this->title = title;
50 }
51 
52 void View::repaint()
53 {
54  // get screen size
55  struct winsize size;
56  if (ioctl(0, TIOCGWINSZ, (char *) &size) < 0)
57  throw std::runtime_error("TIOCGWINSZ error");
58 
59 
60  start_x = floor((size.ws_col - width) / 2.);
61  start_y = floor((size.ws_row - height) / 2.);
62 
63  curs_set(0); // hide cursor
64  mvwin(win, start_y, start_x);
65  clear();
66  wclear(win);
67 
68  // generic draw
69  box(win, 0, 0);
70  int offset_x = (width - title.length()) / 2;
71  mvwprintw(win, 1, offset_x, "%s", title.c_str());
72 
73  // specific draw
74  draw();
75 
76  refresh();
77  wrefresh(win);
78 }
+
static void abort(std::string msg)
Definition: b15f.cpp:322
+ + + + diff --git a/docs/html/view_8h_source.html b/docs/html/view_8h_source.html new file mode 100644 index 0000000..7a64b63 --- /dev/null +++ b/docs/html/view_8h_source.html @@ -0,0 +1,82 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view.h
+
+
+
1 #ifndef VIEW_H
2 #define VIEW_H
3 
4 #include <iostream>
5 #include <cmath>
6 #include <vector>
7 #include <functional>
8 #include <ncurses.h> // sudo apt-get install libncurses5-dev
9 #include <sys/ioctl.h>
10 #include <unistd.h>
11 #include <signal.h>
12 #include "../drv/b15f.h"
13 
14 extern std::string ERR_MSG;
15 typedef std::function<void(int)> call_t;
16 
17 class View
18 {
19 public:
20  View(void);
21  virtual ~View(void);
22 
23  static void setWinContext(WINDOW* win);
24  static WINDOW* getWinContext(void);
25  static std::vector<std::string> str_split(const std::string& str, const std::string delim);
26 
27  virtual void setTitle(std::string title);
28 
29  virtual void repaint(void);
30 
31  virtual void draw(void) = 0;
32  virtual call_t keypress(int& key) = 0;
33 
34 
35 protected:
36  int width, height;
37  int start_x = 0, start_y = 0;
38  std::string title;
39  std::vector<call_t> calls;
40 
41  static WINDOW* win;
42  constexpr static int KEY_ENT = 10;
43 };
44 
45 #endif // VIEW_H
+
Definition: view.h:17
+ + + + diff --git a/docs/html/view__info_8cpp_source.html b/docs/html/view__info_8cpp_source.html new file mode 100644 index 0000000..c58cc89 --- /dev/null +++ b/docs/html/view__info_8cpp_source.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_info.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_info.cpp
+
+
+
1 #include "view_info.h"
2 
3 ViewInfo::ViewInfo()
4 {
5  calls.push_back(nullptr);
6 }
7 
8 void ViewInfo::setText(std::string text)
9 {
10  this->text = text;
11 }
12 
13 void ViewInfo::setLabelClose(std::string label)
14 {
15  this->label_close = label;
16 }
17 
18 void ViewInfo::setCall(call_t call)
19 {
20  calls[0] = call;
21 }
22 
23 void ViewInfo::draw()
24 {
25  int li = 0;
26  for(std::string line : str_split(text, "\n"))
27  mvwprintw(win, text_offset_y + li++, text_offset_x, "%s", line.c_str());
28 
29  close_offset_x = (width - label_close.length()) / 2;
30  close_offset_y = height - 2;
31 
32  wattron(win, A_REVERSE);
33  mvwprintw(win, close_offset_y, close_offset_x, "%s", label_close.c_str());
34  wattroff(win, A_REVERSE);
35 }
36 
37 call_t ViewInfo::keypress(int& key)
38 {
39  switch(key)
40  {
41 
42  case KEY_MOUSE:
43  {
44  // http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml
45  MEVENT event;
46  if(getmouse(&event) == OK && event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
47  {
48  size_t column = start_x + close_offset_x;
49  size_t row = start_y + close_offset_y;
50  size_t mouse_x = event.x, mouse_y = event.y;
51  if(mouse_y == row && mouse_x >= column && mouse_x < column + label_close.length())
52  key = -1; // do return from view
53  }
54  break;
55  }
56  case KEY_ENT:
57  key = -1; // do return from view
58  break;
59  default:
60  break;
61  }
62  return calls[0];
63 }
+ + + + diff --git a/docs/html/view__info_8h_source.html b/docs/html/view__info_8h_source.html new file mode 100644 index 0000000..9976d00 --- /dev/null +++ b/docs/html/view__info_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_info.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_info.h
+
+
+
1 #ifndef VIEW_INFO
2 #define VIEW_INFO
3 
4 #include "view.h"
5 
6 class ViewInfo : public View
7 {
8 public:
9  ViewInfo(void);
10  virtual void setText(std::string text);
11  virtual void setLabelClose(std::string label);;
12  virtual void setCall(call_t call);
13  virtual void draw(void) override;
14  virtual call_t keypress(int& key) override;
15 
16 protected:
17  std::string text;
18  std::string label_close;
19  int close_offset_x = 0;
20  int close_offset_y = 0;
21  constexpr static int text_offset_x = 2;
22  constexpr static int text_offset_y = 3;
23 };
24 
25 #endif // VIEW_INFO
+ +
Definition: view.h:17
+ + + + diff --git a/docs/html/view__monitor_8cpp_source.html b/docs/html/view__monitor_8cpp_source.html new file mode 100644 index 0000000..0bed7a8 --- /dev/null +++ b/docs/html/view__monitor_8cpp_source.html @@ -0,0 +1,92 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_monitor.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_monitor.cpp
+
+
+
1 #include "view_monitor.h"
2 
3 ViewMonitor::ViewMonitor() : t_worker(&ViewMonitor::worker, this)
4 {
5 }
6 
7 call_t ViewMonitor::keypress(int& key)
8 {
9  switch(key)
10  {
11 
12  case KEY_MOUSE:
13  {
14  // http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml
15  MEVENT event;
16  bool hit = false;
17  if(getmouse(&event) == OK && event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
18  {
19  size_t column = start_x + close_offset_x;
20  size_t row = start_y + close_offset_y;
21  size_t mouse_x = event.x, mouse_y = event.y;
22  if(mouse_y == row && mouse_x >= column && mouse_x < column + label_close.length())
23  hit = true;
24  }
25  if(!hit)
26  break;
27 
28  // fall through to next case
29  [[fallthrough]];
30  }
31  case KEY_ENT:
32  run_worker = false;
33  key = -1; // do return from view
34  wclear(win);
35  wrefresh(win);
36  t_worker.join();
37  break;
38  default:
39  break;
40  }
41  return calls[0];
42 }
43 
44 std::string ViewMonitor::fancyDigitalString(uint8_t& b)
45 {
46  std::stringstream str;
47  str << std::bitset<8>(b).to_string();
48  str << " ";
49  str << "0x" << std::setfill ('0') << std::setw(2) << std::hex << (int) b << std::dec;
50  return str.str();
51 }
52 
53 std::string ViewMonitor::fancyAnalogString(uint16_t& v)
54 {
55  std::stringstream str;
56  double volt = round(v * 100.0 * 5.0 / 1023.0) / 100.0;
57 
58  str << std::setfill ('0') << std::setw(4) << (int) v << " " << std::fixed << std::setprecision(2) << volt << " V ";
59 
60  str << "[";
61  uint8_t p = round(v * 40.0 / 1023.0);
62  for(uint8_t i = 0; i < p; i++)
63  str << "X";
64  for(uint8_t i = 0; i < 40 - p; i++)
65  str << " ";
66  str << "]" << std::endl;
67 
68  return str.str();
69 }
70 
71 void ViewMonitor::worker()
72 {
73  B15F& drv = B15F::getInstance();
74  while(run_worker)
75  {
76  try
77  {
78  std::this_thread::sleep_for(std::chrono::milliseconds(100));
79 
80  uint8_t be0 = drv.digitalRead0();
81  uint8_t be1 = drv.digitalRead1();
82  uint8_t dsw = drv.readDipSwitch();
83  uint16_t adc[8];
84  for(uint8_t i = 0; i < sizeof(adc) / sizeof(adc[0]); i++)
85  adc[i] = drv.analogRead(i);
86 
87 
88  std::stringstream str;
89 
90  // hline
91  for(uint8_t i = 0; i < width - 2 * text_offset_x; i++)
92  if(i % 2 == 0)
93  str << "-";
94  else
95  str << " ";
96  str << std::endl;
97 
98  str << "Digitale Enigaenge:" << std::endl;
99  str << "Binaere Eingabe 0: " << fancyDigitalString(be0) << std::endl;
100  str << "Binaere Eingabe 1: " << fancyDigitalString(be1) << std::endl;
101  str << "Dip Schalter (S7): " << fancyDigitalString(dsw) << std::endl;
102 
103  // hline
104  for(uint8_t i = 0; i < width - 2 * text_offset_x; i++)
105  if(i % 2 == 0)
106  str << "-";
107  else
108  str << " ";
109  str << std::endl;
110 
111  str << "Analoge Eingaenge:" << std::endl;
112  for(uint8_t i = 0; i < sizeof(adc) / sizeof(adc[0]); i++)
113  {
114  str << "Kanal " << std::to_string((int) i) << ": ";
115  str << fancyAnalogString(adc[i]) << std::endl;
116  }
117 
118  text = str.str();
119  repaint();
120  }
121  catch(DriverException& ex)
122  {
123  std::cout << "DriverException: " << ex.what() << std::endl;
124  drv.delay_ms(1000);
125  }
126  catch(...)
127  {
128  try
129  {
130  drv.reconnect();
131  }
132  catch(...)
133  {
134  B15F::abort("yoho meine dudes");
135  return;
136  }
137  }
138  }
139 }
+ +
uint8_t digitalRead0(void)
Definition: b15f.cpp:172
+
uint8_t readDipSwitch(void)
Definition: b15f.cpp:190
+
void delay_ms(uint16_t ms)
Definition: b15f.cpp:290
+
static B15F & getInstance(void)
Definition: b15f.cpp:300
+
Definition: b15f.h:24
+
static void abort(std::string msg)
Definition: b15f.cpp:322
+
uint16_t analogRead(uint8_t channel)
Definition: b15f.cpp:219
+
uint8_t digitalRead1(void)
Definition: b15f.cpp:181
+
void reconnect(void)
Definition: b15f.cpp:57
+ + + + + diff --git a/docs/html/view__monitor_8h_source.html b/docs/html/view__monitor_8h_source.html new file mode 100644 index 0000000..cce433a --- /dev/null +++ b/docs/html/view__monitor_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_monitor.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_monitor.h
+
+
+
1 #ifndef VIEW_MONITOR_H
2 #define VIEW_MONITOR_H
3 
4 #include <thread>
5 #include <chrono>
6 #include <sstream>
7 #include <bitset>
8 #include "view_info.h"
9 #include "../drv/b15f.h"
10 
11 class ViewMonitor : public ViewInfo
12 {
13 
14 public:
15  ViewMonitor(void);
16  virtual call_t keypress(int& key) override;
17 
18 private:
19  std::string fancyDigitalString(uint8_t& b);
20  std::string fancyAnalogString(uint16_t& v);
21 
22 protected:
23  virtual void worker(void);
24  volatile bool run_worker = true;
25  std::thread t_worker;
26 
27 };
28 
29 #endif // VIEW_MONITOR_H
+ + + + + + diff --git a/docs/html/view__promt_8cpp_source.html b/docs/html/view__promt_8cpp_source.html new file mode 100644 index 0000000..01dfefd --- /dev/null +++ b/docs/html/view__promt_8cpp_source.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_promt.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_promt.cpp
+
+
+
1 #include "view_promt.h"
2 
3 void ViewPromt::draw()
4 {
5  curs_set(1); // show cursor
6 
7  int li = text_offset_y;
8  int ci = 0;
9  for(std::string line : str_split(message + input, "\n"))
10  {
11  mvwprintw(win, ++li, text_offset_x, "%s", line.c_str());
12  ci = line.length() + text_offset_x;
13  }
14 
15  button_offset_x = (width - label_cancel.length() - sep.length() - label_confirm.length()) / 2;
16  button_offset_y = height - text_offset_y;
17 
18  if(selection == 0)
19  {
20  wattron(win, A_REVERSE);
21  mvwprintw(win, button_offset_y, button_offset_x, "%s", label_cancel.c_str());
22  wattroff(win, A_REVERSE);
23  mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length(), "%s", sep.c_str());
24  mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length() + sep.length(), "%s", label_confirm.c_str());
25  }
26  else
27  {
28  mvwprintw(win, button_offset_y, button_offset_x, "%s", label_cancel.c_str());
29  mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length(), "%s", sep.c_str());
30  wattron(win, A_REVERSE);
31  mvwprintw(win, button_offset_y, button_offset_x + label_cancel.length() + sep.length(), "%s", label_confirm.c_str());
32  wattroff(win, A_REVERSE);
33  }
34  wmove(win, li, ci);
35 }
36 
37 void ViewPromt::setMessage(std::string message)
38 {
39  this->message = message;
40 }
41 
42 void ViewPromt::setConfirm(std::string name, std::function<void(int)> call)
43 {
44  label_confirm = name;
45  call_confirm = call;
46 }
47 
48 void ViewPromt::setCancel(std::string name, bool cancelable)
49 {
50  label_cancel = name;
51  this->cancelable = cancelable;
52 }
53 
54 std::string ViewPromt::getInput()
55 {
56  return input;
57 }
58 
59 std::function<void(int)> ViewPromt::keypress(int& key)
60 {
61  std::function<void(int)> ret = nullptr;
62  switch(key)
63  {
64  case KEY_BACKSPACE:
65  if(input.length())
66  input.pop_back();
67  break;
68  case '\t':
69  case KEY_LEFT:
70  case KEY_RIGHT:
71  selection = (selection + 1 ) % 2;
72  break;
73  case KEY_MOUSE:
74  {
75  // http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml
76  MEVENT event;
77  bool hit = false;
78  if(getmouse(&event) == OK && event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
79  {
80  size_t column_start = start_x + button_offset_x;
81  size_t row_start = start_y + button_offset_y;
82  size_t mouse_x = event.x, mouse_y = event.y;
83  if(mouse_y == row_start)
84  {
85  if(cancelable && mouse_x >= column_start && mouse_x < column_start + label_cancel.length())
86  {
87  if(selection == 0 || event.bstate & BUTTON1_DOUBLE_CLICKED)
88  hit = true;
89  selection = 0;
90  }
91  if(mouse_x >= column_start + label_cancel.length() + sep.length() && mouse_x < column_start + label_cancel.length() + sep.length() + label_confirm.length())
92  {
93  if(selection == 1 || event.bstate & BUTTON1_DOUBLE_CLICKED)
94  hit = true;
95  selection = 1;
96  }
97  }
98  }
99  if(!hit)
100  break;
101 
102  // fall through to next case
103  [[fallthrough]];
104  }
105  case KEY_ENT:
106  if(selection == 0) // exit
107  key = -1; // do return from view
108  else
109  ret = call_confirm;
110  break;
111  default:
112  break;
113  }
114 
115  if(key >= ' ' && key <= '~')
116  input += (char) key;
117 
118  if(key != KEY_ENT)
119  repaint();
120  return ret;
121 }
+ + + + diff --git a/docs/html/view__promt_8h_source.html b/docs/html/view__promt_8h_source.html new file mode 100644 index 0000000..b97325d --- /dev/null +++ b/docs/html/view__promt_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_promt.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_promt.h
+
+
+
1 #ifndef VIEW_PROMT_H
2 #define VIEW_PROMT_H
3 
4 #include <vector>
5 #include <string>
6 #include "view.h"
7 
8 class ViewPromt : public View
9 {
10 public:
11  virtual void draw(void) override;
12  virtual void setMessage(std::string message);
13  virtual void setConfirm(std::string name, call_t call);
14  virtual void setCancel(std::string name, bool cancelable);
15  virtual std::string getInput(void);
16  virtual call_t keypress(int& key) override;
17 
18 protected:
19  size_t selection = 1;
20  std::string input;
21  std::string message = "Input";
22  std::string label_confirm = "[ OK ]";
23  std::string sep = " ";
24  std::string label_cancel = "[ Cancel ]";
25  call_t call_confirm = nullptr;
26  bool cancelable = true;
27  int button_offset_x = 0, button_offset_y = 0;
28  constexpr static int text_offset_x = 2;
29  constexpr static int text_offset_y = 2;
30 };
31 
32 #endif // VIEW_PROMT_H
+
Definition: view.h:17
+ + + + + diff --git a/docs/html/view__selection_8cpp_source.html b/docs/html/view__selection_8cpp_source.html new file mode 100644 index 0000000..528cbee --- /dev/null +++ b/docs/html/view__selection_8cpp_source.html @@ -0,0 +1,81 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_selection.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_selection.cpp
+
+
+
1 #include "view_selection.h"
2 
3 void ViewSelection::draw()
4 {
5  //curs_set(0); // hide cursor
6  for(size_t i = 0; i < choices.size(); i++)
7  {
8  if(selection == i)
9  wattron(win, A_REVERSE);
10  mvwprintw(win, i + choice_offset_y, choice_offset_x, "%s", choices[i].c_str());
11  if(selection == i)
12  wattroff(win, A_REVERSE);
13  }
14 }
15 
16 void ViewSelection::addChoice(std::string name, call_t call)
17 {
18  choices.push_back(name);
19  calls.push_back(call);
20 }
21 
22 call_t ViewSelection::keypress(int& key)
23 {
24  call_t ret = nullptr;
25  switch(key)
26  {
27  case KEY_UP:
28  do
29  selection = (selection - 1 + choices.size()) % choices.size();
30  while(!choices[selection].length() && choices.size());
31  break;
32 
33  case '\t':
34  case KEY_DOWN:
35  do
36  selection = (selection + 1) % choices.size();
37  while(!choices[selection].length() && choices.size());
38  break;
39 
40  case KEY_MOUSE:
41  {
42  // http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10b.shtml
43  MEVENT event;
44  bool hit = false;
45  if(getmouse(&event) == OK && event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
46  {
47  size_t column_start = start_x + choice_offset_x;
48  size_t row_start = start_y + choice_offset_y;
49  size_t mouse_x = event.x, mouse_y = event.y;
50  for(size_t i = 0; i < choices.size(); i++)
51  if(choices[i].length() && mouse_y == row_start + i && mouse_x >= column_start && mouse_x < column_start + choices[i].length())
52  {
53  if(selection == i || event.bstate & BUTTON1_DOUBLE_CLICKED)
54  hit = true;
55  selection = i;
56  }
57  }
58  if(!hit)
59  break;
60 
61  // fall through to next case
62  [[fallthrough]];
63  }
64 
65  case KEY_ENT:
66  if(selection == choices.size() - 1) // exit
67  key = -1; // do return from view
68  else
69  ret = calls[selection];
70  break;
71  default:
72  break;
73  }
74  repaint();
75  return ret;
76 }
+ + + + diff --git a/docs/html/view__selection_8h_source.html b/docs/html/view__selection_8h_source.html new file mode 100644 index 0000000..93bdbaf --- /dev/null +++ b/docs/html/view__selection_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +B15F: /home/famulus/Dokumente/b15f/control/src/ui/view_selection.h Source File + + + + + + + + + +
+
+ + + + + + +
+
B15F +
+
Board 15 Famulus Edition
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
view_selection.h
+
+
+
1 #ifndef VIEW_SELECTION_H
2 #define VIEW_SELECTION_H
3 
4 #include <vector>
5 #include <string>
6 #include "view.h"
7 
8 class ViewSelection : public View
9 {
10 public:
11  virtual void draw(void) override;
12  virtual void addChoice(std::string name, call_t call);
13  virtual call_t keypress(int& key) override;
14 
15 
16 protected:
17  size_t selection = 0;
18  std::vector<std::string> choices;
19 
20  constexpr static int choice_offset_x = 2;
21  constexpr static int choice_offset_y = 3;
22 };
23 
24 #endif // VIEW_SELECTION_H
+
Definition: view.h:17
+ + + + + diff --git a/docs/latex/Makefile b/docs/latex/Makefile new file mode 100644 index 0000000..877c9cc --- /dev/null +++ b/docs/latex/Makefile @@ -0,0 +1,23 @@ +LATEX_CMD=pdflatex + +all: refman.pdf + +pdf: refman.pdf + +refman.pdf: clean refman.tex + $(LATEX_CMD) refman + makeindex refman.idx + $(LATEX_CMD) refman + latex_count=8 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) refman ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + makeindex refman.idx + $(LATEX_CMD) refman + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf diff --git a/docs/latex/annotated.tex b/docs/latex/annotated.tex new file mode 100644 index 0000000..305f68e --- /dev/null +++ b/docs/latex/annotated.tex @@ -0,0 +1,15 @@ +\doxysection{Class List} +Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{\mbox{\hyperlink{classB15F}{B15F}} }{\pageref{classB15F}}{} +\item\contentsline{section}{\mbox{\hyperlink{classDot}{Dot}} }{\pageref{classDot}}{} +\item\contentsline{section}{\mbox{\hyperlink{classDriverException}{Driver\+Exception}} }{\pageref{classDriverException}}{} +\item\contentsline{section}{\mbox{\hyperlink{classPlottyFile}{Plotty\+File}} }{\pageref{classPlottyFile}}{} +\item\contentsline{section}{\mbox{\hyperlink{classTimeoutException}{Timeout\+Exception}} }{\pageref{classTimeoutException}}{} +\item\contentsline{section}{\mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} }{\pageref{classUSART}}{} +\item\contentsline{section}{\mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}} }{\pageref{classUSARTException}}{} +\item\contentsline{section}{\mbox{\hyperlink{classView}{View}} }{\pageref{classView}}{} +\item\contentsline{section}{\mbox{\hyperlink{classViewInfo}{View\+Info}} }{\pageref{classViewInfo}}{} +\item\contentsline{section}{\mbox{\hyperlink{classViewMonitor}{View\+Monitor}} }{\pageref{classViewMonitor}}{} +\item\contentsline{section}{\mbox{\hyperlink{classViewPromt}{View\+Promt}} }{\pageref{classViewPromt}}{} +\item\contentsline{section}{\mbox{\hyperlink{classViewSelection}{View\+Selection}} }{\pageref{classViewSelection}}{} +\end{DoxyCompactList} diff --git a/docs/latex/classB15F.tex b/docs/latex/classB15F.tex new file mode 100644 index 0000000..c576f8e --- /dev/null +++ b/docs/latex/classB15F.tex @@ -0,0 +1,501 @@ +\hypertarget{classB15F}{}\doxysection{B15F Class Reference} +\label{classB15F}\index{B15F@{B15F}} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +void \mbox{\hyperlink{classB15F_a74d8cca6edbb4e24a2f760829b3742a5}{init}} (void) +\item +void \mbox{\hyperlink{classB15F_a52557b375443c180a044e7d4e80a1ae7}{reconnect}} (void) +\item +void \mbox{\hyperlink{classB15F_ae4740cd473f40a1a4121dfa66b25e1d5}{discard}} (void) +\item +bool \mbox{\hyperlink{classB15F_af01983594f2af98ab2b1e514aa036a5d}{test\+Connection}} (void) +\item +bool \mbox{\hyperlink{classB15F_a7b8a0e2a9156f7dcb05d097f23666a78}{test\+Int\+Conv}} (void) +\item +std\+::vector$<$ std\+::string $>$ \mbox{\hyperlink{classB15F_a4f01677e73d6d172a2c1cae9427a591b}{get\+Board\+Info}} (void) +\item +void \mbox{\hyperlink{classB15F_aaffce20afb9f06bc4b7556c70ce76416}{delay\+\_\+ms}} (uint16\+\_\+t ms) +\item +void \mbox{\hyperlink{classB15F_adcaac8ae8db3c28eccb499fbd720361f}{delay\+\_\+us}} (uint16\+\_\+t us) +\item +bool \mbox{\hyperlink{classB15F_ad9bf80ee2485fb5aac9926c6ef0731f1}{activate\+Self\+Test\+Mode}} (void) +\item +bool \mbox{\hyperlink{classB15F_a13797edea1c50278988373acbd110064}{digital\+Write0}} (uint8\+\_\+t) +\item +bool \mbox{\hyperlink{classB15F_aa225e7fc813849634063e071ef25db1b}{digital\+Write1}} (uint8\+\_\+t) +\item +uint8\+\_\+t \mbox{\hyperlink{classB15F_ae0df6d423deeb2fd610968bd1c72060e}{digital\+Read0}} (void) +\item +uint8\+\_\+t \mbox{\hyperlink{classB15F_afc76b612dd4faeee0ac02a66b65af5f2}{digital\+Read1}} (void) +\item +uint8\+\_\+t \mbox{\hyperlink{classB15F_a6f858f21ea81d491b5031b3644a2239a}{read\+Dip\+Switch}} (void) +\item +bool \mbox{\hyperlink{classB15F_a5c5583d591afdd3f9501856c6b0ba3e3}{analog\+Write0}} (uint16\+\_\+t) +\item +bool \mbox{\hyperlink{classB15F_a63d67795879cdc0b035c9c970e7d6fc3}{analog\+Write1}} (uint16\+\_\+t) +\item +uint16\+\_\+t \mbox{\hyperlink{classB15F_ae0bd1f69751e2dc3c462db9213fc4627}{analog\+Read}} (uint8\+\_\+t channel) +\item +void \mbox{\hyperlink{classB15F_ab82a324426c3063318c6cafb3089ae02}{analog\+Sequence}} (uint8\+\_\+t channel\+\_\+a, uint16\+\_\+t $\ast$buffer\+\_\+a, uint32\+\_\+t offset\+\_\+a, uint8\+\_\+t channel\+\_\+b, uint16\+\_\+t $\ast$buffer\+\_\+b, uint32\+\_\+t offset\+\_\+b, uint16\+\_\+t start, int16\+\_\+t delta, uint16\+\_\+t count) +\begin{DoxyCompactList}\small\item\em Komplexe Analoge Sequenz D\+AC 0 wird auf den Startwert gesetzt und dann schrittweise um Delta inkrementiert. Für jeden eingestelleten D\+A\+C-\/\+Wert werden zwei A\+D\+Cs (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. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsection*{Static Public Member Functions} +\begin{DoxyCompactItemize} +\item +static \mbox{\hyperlink{classB15F}{B15F}} \& \mbox{\hyperlink{classB15F_a8b4533d232c55ef2aa967e39e2d23380}{get\+Instance}} (void) +\item +static std\+::string \mbox{\hyperlink{classB15F_a1a7ac52984ed7ecac008a3e4060eee3a}{exec}} (std\+::string cmd) +\item +static void \mbox{\hyperlink{classB15F_a3f09a418f9e3be5d1d750e4515c96f1e}{abort}} (std\+::string msg) +\item +static void \mbox{\hyperlink{classB15F_ac962a6a49bddd0e261a8c7d3aded23f8}{abort}} (std\+::exception \&ex) +\item +static void \mbox{\hyperlink{classB15F_a55b0cd1ea582bda53d6979442640f8e9}{set\+Abort\+Handler}} (errorhandler\+\_\+t func) +\end{DoxyCompactItemize} +\doxysubsection*{Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classB15F_a3b0fc1f85954b2d9c145af4a3af5b1ec}\label{classB15F_a3b0fc1f85954b2d9c145af4a3af5b1ec}} +const std\+::string {\bfseries P\+RE} = \char`\"{}\mbox{[}B15F\mbox{]} \char`\"{} +\end{DoxyCompactItemize} +\doxysubsection*{Static Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classB15F_ab01299858f74a6cec598688562e0ad02}\label{classB15F_ab01299858f74a6cec598688562e0ad02}} +constexpr static uint8\+\_\+t {\bfseries M\+S\+G\+\_\+\+OK} = 0x\+FF +\item +\mbox{\Hypertarget{classB15F_a77d1ecf24b406c9204665d3b09c36f1e}\label{classB15F_a77d1ecf24b406c9204665d3b09c36f1e}} +constexpr static uint8\+\_\+t {\bfseries M\+S\+G\+\_\+\+F\+A\+IL} = 0x\+FE +\item +\mbox{\Hypertarget{classB15F_a040951746fbfd632e12bd1ad14578816}\label{classB15F_a040951746fbfd632e12bd1ad14578816}} +constexpr static uint16\+\_\+t {\bfseries R\+E\+C\+O\+N\+N\+E\+C\+T\+\_\+\+T\+I\+M\+E\+O\+UT} = 64 +\item +\mbox{\Hypertarget{classB15F_a158d13bc84aed6430cdede1396384e06}\label{classB15F_a158d13bc84aed6430cdede1396384e06}} +constexpr static uint16\+\_\+t {\bfseries W\+D\+T\+\_\+\+T\+I\+M\+E\+O\+UT} = 15 +\item +\mbox{\Hypertarget{classB15F_a6c4895bdbcd71ff6743becf97985c2dc}\label{classB15F_a6c4895bdbcd71ff6743becf97985c2dc}} +constexpr static uint8\+\_\+t {\bfseries R\+E\+C\+O\+N\+N\+E\+C\+T\+\_\+\+T\+R\+I\+ES} = 3 +\item +\mbox{\Hypertarget{classB15F_a7d548d6861cfc69753161bf9cda14f87}\label{classB15F_a7d548d6861cfc69753161bf9cda14f87}} +constexpr static uint32\+\_\+t {\bfseries B\+A\+U\+D\+R\+A\+TE} = 57600 +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 24 of file b15f.\+h. + + + +\doxysubsection{Member Function Documentation} +\mbox{\Hypertarget{classB15F_ac962a6a49bddd0e261a8c7d3aded23f8}\label{classB15F_ac962a6a49bddd0e261a8c7d3aded23f8}} +\index{B15F@{B15F}!abort@{abort}} +\index{abort@{abort}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{abort()}{abort()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}} +{\footnotesize\ttfamily void B15\+F\+::abort (\begin{DoxyParamCaption}\item[{std\+::exception \&}]{ex }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + +Multithread sicherer Abbruch des B15\+F-\/\+Treibers +\begin{DoxyParams}{Parameters} +{\em ex} & Exception als Abbruchursache \\ +\hline +\end{DoxyParams} + + +Definition at line 327 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a3f09a418f9e3be5d1d750e4515c96f1e}\label{classB15F_a3f09a418f9e3be5d1d750e4515c96f1e}} +\index{B15F@{B15F}!abort@{abort}} +\index{abort@{abort}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{abort()}{abort()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}} +{\footnotesize\ttfamily void B15\+F\+::abort (\begin{DoxyParamCaption}\item[{std\+::string}]{msg }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + +Multithread sicherer Abbruch des B15\+F-\/\+Treibers +\begin{DoxyParams}{Parameters} +{\em msg} & Beschreibung der Abbruchursache \\ +\hline +\end{DoxyParams} + + +Definition at line 322 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_ad9bf80ee2485fb5aac9926c6ef0731f1}\label{classB15F_ad9bf80ee2485fb5aac9926c6ef0731f1}} +\index{B15F@{B15F}!activateSelfTestMode@{activateSelfTestMode}} +\index{activateSelfTestMode@{activateSelfTestMode}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{activateSelfTestMode()}{activateSelfTestMode()}} +{\footnotesize\ttfamily bool B15\+F\+::activate\+Self\+Test\+Mode (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Versetzt das Board in den Selbsttest-\/\+Modus W\+I\+C\+H\+T\+IG\+: Es darf dabei nichts an den Klemmen angeschlossen sein! +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 144 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_ae0bd1f69751e2dc3c462db9213fc4627}\label{classB15F_ae0bd1f69751e2dc3c462db9213fc4627}} +\index{B15F@{B15F}!analogRead@{analogRead}} +\index{analogRead@{analogRead}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{analogRead()}{analogRead()}} +{\footnotesize\ttfamily uint16\+\_\+t B15\+F\+::analog\+Read (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel }\end{DoxyParamCaption})} + +Liest den Wert des Analog-\/\+Digital-\/\+Converters (A\+DC / A\+DU) +\begin{DoxyParams}{Parameters} +{\em channel} & Kanalwahl von 0 -\/ 7 \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 219 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_ab82a324426c3063318c6cafb3089ae02}\label{classB15F_ab82a324426c3063318c6cafb3089ae02}} +\index{B15F@{B15F}!analogSequence@{analogSequence}} +\index{analogSequence@{analogSequence}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{analogSequence()}{analogSequence()}} +{\footnotesize\ttfamily void B15\+F\+::analog\+Sequence (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{channel\+\_\+a, }\item[{uint16\+\_\+t $\ast$}]{buffer\+\_\+a, }\item[{uint32\+\_\+t}]{offset\+\_\+a, }\item[{uint8\+\_\+t}]{channel\+\_\+b, }\item[{uint16\+\_\+t $\ast$}]{buffer\+\_\+b, }\item[{uint32\+\_\+t}]{offset\+\_\+b, }\item[{uint16\+\_\+t}]{start, }\item[{int16\+\_\+t}]{delta, }\item[{uint16\+\_\+t}]{count }\end{DoxyParamCaption})} + + + +Komplexe Analoge Sequenz D\+AC 0 wird auf den Startwert gesetzt und dann schrittweise um Delta inkrementiert. Für jeden eingestelleten D\+A\+C-\/\+Wert werden zwei A\+D\+Cs (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. + + +\begin{DoxyParams}{Parameters} +{\em channel\+\_\+a} & Auswahl des A\+DC a, von 0 -\/ 7 \\ +\hline +{\em buffer\+\_\+a} & Speichertort für Werte des Kanals a \\ +\hline +{\em offset\+\_\+a} & Anzahl an Werten des Kanals a, die im Speicher übersprungen werden sollen \\ +\hline +{\em channel\+\_\+b} & Auswahl des A\+DC b, von 0 -\/ 7 \\ +\hline +{\em buffer\+\_\+b} & Speichertort für Werte des Kanals b \\ +\hline +{\em offset\+\_\+b} & Anzahl an Werten des Kanals b, die im Speicher übersprungen werden \\ +\hline +{\em start} & Startwert des D\+A\+Cs \\ +\hline +{\em delta} & Schrittweite, mit welcher der D\+AC inkrementiert wird \\ +\hline +{\em count} & Anzahl an Inkrementierungen \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 241 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a5c5583d591afdd3f9501856c6b0ba3e3}\label{classB15F_a5c5583d591afdd3f9501856c6b0ba3e3}} +\index{B15F@{B15F}!analogWrite0@{analogWrite0}} +\index{analogWrite0@{analogWrite0}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{analogWrite0()}{analogWrite0()}} +{\footnotesize\ttfamily bool B15\+F\+::analog\+Write0 (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{value }\end{DoxyParamCaption})} + +Setzt den Wert des Digital-\/\+Analog-\/\+Converters (D\+AC / D\+AU) 0 +\begin{DoxyParams}{Parameters} +{\em port} & 10-\/Bit Wert \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 199 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a63d67795879cdc0b035c9c970e7d6fc3}\label{classB15F_a63d67795879cdc0b035c9c970e7d6fc3}} +\index{B15F@{B15F}!analogWrite1@{analogWrite1}} +\index{analogWrite1@{analogWrite1}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{analogWrite1()}{analogWrite1()}} +{\footnotesize\ttfamily bool B15\+F\+::analog\+Write1 (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{value }\end{DoxyParamCaption})} + +Setzt den Wert des Digital-\/\+Analog-\/\+Converters (D\+AC / D\+AU) 1 +\begin{DoxyParams}{Parameters} +{\em port} & 10-\/Bit Wert \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 209 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_aaffce20afb9f06bc4b7556c70ce76416}\label{classB15F_aaffce20afb9f06bc4b7556c70ce76416}} +\index{B15F@{B15F}!delay\_ms@{delay\_ms}} +\index{delay\_ms@{delay\_ms}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{delay\_ms()}{delay\_ms()}} +{\footnotesize\ttfamily void B15\+F\+::delay\+\_\+ms (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{ms }\end{DoxyParamCaption})} + +Lässt den Treiber für eine angegebene Zeit pausieren +\begin{DoxyParams}{Parameters} +{\em ms} & Verzögerung in Millisekunden \\ +\hline +\end{DoxyParams} + + +Definition at line 290 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_adcaac8ae8db3c28eccb499fbd720361f}\label{classB15F_adcaac8ae8db3c28eccb499fbd720361f}} +\index{B15F@{B15F}!delay\_us@{delay\_us}} +\index{delay\_us@{delay\_us}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{delay\_us()}{delay\_us()}} +{\footnotesize\ttfamily void B15\+F\+::delay\+\_\+us (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{us }\end{DoxyParamCaption})} + +Lässt den Treiber für eine angegebene Zeit pausieren +\begin{DoxyParams}{Parameters} +{\em us} & Verzögerung in Microsekunden \\ +\hline +\end{DoxyParams} + + +Definition at line 295 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_ae0df6d423deeb2fd610968bd1c72060e}\label{classB15F_ae0df6d423deeb2fd610968bd1c72060e}} +\index{B15F@{B15F}!digitalRead0@{digitalRead0}} +\index{digitalRead0@{digitalRead0}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{digitalRead0()}{digitalRead0()}} +{\footnotesize\ttfamily uint8\+\_\+t B15\+F\+::digital\+Read0 (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liest den Wert des digitalen Eingabeports 0 \begin{DoxyReturn}{Returns} +Wert für gesamten Port +\end{DoxyReturn} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 172 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_afc76b612dd4faeee0ac02a66b65af5f2}\label{classB15F_afc76b612dd4faeee0ac02a66b65af5f2}} +\index{B15F@{B15F}!digitalRead1@{digitalRead1}} +\index{digitalRead1@{digitalRead1}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{digitalRead1()}{digitalRead1()}} +{\footnotesize\ttfamily uint8\+\_\+t B15\+F\+::digital\+Read1 (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liest den Wert des digitalen Eingabeports 1 \begin{DoxyReturn}{Returns} +Wert für gesamten Port +\end{DoxyReturn} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 181 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a13797edea1c50278988373acbd110064}\label{classB15F_a13797edea1c50278988373acbd110064}} +\index{B15F@{B15F}!digitalWrite0@{digitalWrite0}} +\index{digitalWrite0@{digitalWrite0}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{digitalWrite0()}{digitalWrite0()}} +{\footnotesize\ttfamily bool B15\+F\+::digital\+Write0 (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{port }\end{DoxyParamCaption})} + +Setzt den Wert des digitalen Ausgabeports 0 +\begin{DoxyParams}{Parameters} +{\em port} & Wert für gesamten Port \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 152 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_aa225e7fc813849634063e071ef25db1b}\label{classB15F_aa225e7fc813849634063e071ef25db1b}} +\index{B15F@{B15F}!digitalWrite1@{digitalWrite1}} +\index{digitalWrite1@{digitalWrite1}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{digitalWrite1()}{digitalWrite1()}} +{\footnotesize\ttfamily bool B15\+F\+::digital\+Write1 (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{port }\end{DoxyParamCaption})} + +Setzt den Wert des digitalen Ausgabeports 1 +\begin{DoxyParams}{Parameters} +{\em port} & Wert für gesamten Port \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 162 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_ae4740cd473f40a1a4121dfa66b25e1d5}\label{classB15F_ae4740cd473f40a1a4121dfa66b25e1d5}} +\index{B15F@{B15F}!discard@{discard}} +\index{discard@{discard}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{discard()}{discard()}} +{\footnotesize\ttfamily void B15\+F\+::discard (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Verwirft Daten im \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Puffer auf dieser Maschine und B15 +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 72 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a1a7ac52984ed7ecac008a3e4060eee3a}\label{classB15F_a1a7ac52984ed7ecac008a3e4060eee3a}} +\index{B15F@{B15F}!exec@{exec}} +\index{exec@{exec}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{exec()}{exec()}} +{\footnotesize\ttfamily std\+::string B15\+F\+::exec (\begin{DoxyParamCaption}\item[{std\+::string}]{cmd }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + +Führt ein Befehl auf dieser Maschine aus und liefert stdout zurück +\begin{DoxyParams}{Parameters} +{\em cmd} & Der Befehl \\ +\hline +\end{DoxyParams} + + +Definition at line 309 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a4f01677e73d6d172a2c1cae9427a591b}\label{classB15F_a4f01677e73d6d172a2c1cae9427a591b}} +\index{B15F@{B15F}!getBoardInfo@{getBoardInfo}} +\index{getBoardInfo@{getBoardInfo}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{getBoardInfo()}{getBoardInfo()}} +{\footnotesize\ttfamily std\+::vector$<$ std\+::string $>$ B15\+F\+::get\+Board\+Info (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liefert Informationen zur aktuellen Firmware des B15 +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 118 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a8b4533d232c55ef2aa967e39e2d23380}\label{classB15F_a8b4533d232c55ef2aa967e39e2d23380}} +\index{B15F@{B15F}!getInstance@{getInstance}} +\index{getInstance@{getInstance}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{getInstance()}{getInstance()}} +{\footnotesize\ttfamily \mbox{\hyperlink{classB15F}{B15F}} \& B15\+F\+::get\+Instance (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + +Liefert eine Referenz zur aktuellen Treiber-\/\+Instanz +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 300 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a74d8cca6edbb4e24a2f760829b3742a5}\label{classB15F_a74d8cca6edbb4e24a2f760829b3742a5}} +\index{B15F@{B15F}!init@{init}} +\index{init@{init}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{init()}{init()}} +{\footnotesize\ttfamily void B15\+F\+::init (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Initialisiert und testet die Verbindung zum B15 +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 11 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a6f858f21ea81d491b5031b3644a2239a}\label{classB15F_a6f858f21ea81d491b5031b3644a2239a}} +\index{B15F@{B15F}!readDipSwitch@{readDipSwitch}} +\index{readDipSwitch@{readDipSwitch}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{readDipSwitch()}{readDipSwitch()}} +{\footnotesize\ttfamily uint8\+\_\+t B15\+F\+::read\+Dip\+Switch (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liest den Wert des digitalen Eingabeports, an dem der D\+I\+P-\/switch angeschlossen ist (S7) \begin{DoxyReturn}{Returns} +Wert für gesamten Port +\end{DoxyReturn} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 190 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a52557b375443c180a044e7d4e80a1ae7}\label{classB15F_a52557b375443c180a044e7d4e80a1ae7}} +\index{B15F@{B15F}!reconnect@{reconnect}} +\index{reconnect@{reconnect}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{reconnect()}{reconnect()}} +{\footnotesize\ttfamily void B15\+F\+::reconnect (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Versucht die Verbindung zum B15 wiederherzustellen +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 57 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a55b0cd1ea582bda53d6979442640f8e9}\label{classB15F_a55b0cd1ea582bda53d6979442640f8e9}} +\index{B15F@{B15F}!setAbortHandler@{setAbortHandler}} +\index{setAbortHandler@{setAbortHandler}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{setAbortHandler()}{setAbortHandler()}} +{\footnotesize\ttfamily void B15\+F\+::set\+Abort\+Handler (\begin{DoxyParamCaption}\item[{errorhandler\+\_\+t}]{func }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}} + +Setzt eine Fehlerbehandlungsroutine für den Treiberabbruch (abort) +\begin{DoxyParams}{Parameters} +{\em func} & Funktion, die Exception als Parameter bekommt \\ +\hline +\end{DoxyParams} + + +Definition at line 339 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_af01983594f2af98ab2b1e514aa036a5d}\label{classB15F_af01983594f2af98ab2b1e514aa036a5d}} +\index{B15F@{B15F}!testConnection@{testConnection}} +\index{testConnection@{testConnection}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{testConnection()}{testConnection()}} +{\footnotesize\ttfamily bool B15\+F\+::test\+Connection (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Testet die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Verbindung auf Funktion +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 90 of file b15f.\+cpp. + +\mbox{\Hypertarget{classB15F_a7b8a0e2a9156f7dcb05d097f23666a78}\label{classB15F_a7b8a0e2a9156f7dcb05d097f23666a78}} +\index{B15F@{B15F}!testIntConv@{testIntConv}} +\index{testIntConv@{testIntConv}!B15F@{B15F}} +\doxysubsubsection{\texorpdfstring{testIntConv()}{testIntConv()}} +{\footnotesize\ttfamily bool B15\+F\+::test\+Int\+Conv (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Testet die Integer Konvertierung der \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Verbindung +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classDriverException}{Driver\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 105 of file b15f.\+cpp. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/b15f.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/drv/b15f.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classDot.tex b/docs/latex/classDot.tex new file mode 100644 index 0000000..6e72100 --- /dev/null +++ b/docs/latex/classDot.tex @@ -0,0 +1,30 @@ +\hypertarget{classDot}{}\doxysection{Dot Class Reference} +\label{classDot}\index{Dot@{Dot}} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classDot_ad975f119c0627a928790b3cd5ca6da05}\label{classDot_ad975f119c0627a928790b3cd5ca6da05}} +{\bfseries Dot} (uint16\+\_\+t x, uint16\+\_\+t y, uint8\+\_\+t curve) +\item +\mbox{\Hypertarget{classDot_a029f0cc99c474122b77a708a317e7f77}\label{classDot_a029f0cc99c474122b77a708a317e7f77}} +uint16\+\_\+t {\bfseries getX} (void) const +\item +\mbox{\Hypertarget{classDot_a8fcb987e6308d8184d1a2c8692227e58}\label{classDot_a8fcb987e6308d8184d1a2c8692227e58}} +uint16\+\_\+t {\bfseries getY} (void) const +\item +\mbox{\Hypertarget{classDot_ad0ae7dc1a9be3d8d985affc089b34396}\label{classDot_ad0ae7dc1a9be3d8d985affc089b34396}} +uint8\+\_\+t {\bfseries get\+Curve} (void) const +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 7 of file dot.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/dot.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/drv/dot.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classDriverException.eps b/docs/latex/classDriverException.eps new file mode 100644 index 0000000..9948080 --- /dev/null +++ b/docs/latex/classDriverException.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 360.360360 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.387500 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(DriverException) cw +(exception) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (DriverException) 0.000000 0.000000 box + (exception) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/classDriverException.tex b/docs/latex/classDriverException.tex new file mode 100644 index 0000000..324d2fd --- /dev/null +++ b/docs/latex/classDriverException.tex @@ -0,0 +1,38 @@ +\hypertarget{classDriverException}{}\doxysection{Driver\+Exception Class Reference} +\label{classDriverException}\index{DriverException@{DriverException}} +Inheritance diagram for Driver\+Exception\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{classDriverException} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classDriverException_a6dcc078e6bfb7d87b53a5aef758cfe5f}\label{classDriverException_a6dcc078e6bfb7d87b53a5aef758cfe5f}} +{\bfseries Driver\+Exception} (const char $\ast$message) +\item +\mbox{\Hypertarget{classDriverException_abf7f902d3fbbfcdbde8e54a058948519}\label{classDriverException_abf7f902d3fbbfcdbde8e54a058948519}} +{\bfseries Driver\+Exception} (const std\+::string \&message) +\item +\mbox{\Hypertarget{classDriverException_a781362760bcd75b1bd5448629df58446}\label{classDriverException_a781362760bcd75b1bd5448629df58446}} +virtual const char $\ast$ {\bfseries what} () const throw () +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classDriverException_ab8777afe3f5aed2e66f2b2fcb480a651}\label{classDriverException_ab8777afe3f5aed2e66f2b2fcb480a651}} +std\+::string {\bfseries msg\+\_\+} +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 8 of file driverexception.\+h. + + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/driverexception.\+h\end{DoxyCompactItemize} diff --git a/docs/latex/classPlottyFile.tex b/docs/latex/classPlottyFile.tex new file mode 100644 index 0000000..77d263d --- /dev/null +++ b/docs/latex/classPlottyFile.tex @@ -0,0 +1,102 @@ +\hypertarget{classPlottyFile}{}\doxysection{Plotty\+File Class Reference} +\label{classPlottyFile}\index{PlottyFile@{PlottyFile}} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classPlottyFile_ae091e6eaaca16302f17572ac7dec6f7c}\label{classPlottyFile_ae091e6eaaca16302f17572ac7dec6f7c}} +void {\bfseries add\+Dot} (\mbox{\hyperlink{classDot}{Dot}} \&dot) +\item +\mbox{\Hypertarget{classPlottyFile_a80e4b45219b4e9571992edfc28a28568}\label{classPlottyFile_a80e4b45219b4e9571992edfc28a28568}} +void {\bfseries add\+Dot} (\mbox{\hyperlink{classDot}{Dot}} dot) +\item +\mbox{\Hypertarget{classPlottyFile_a189d8cfd0ae81a62ecf620279e07b966}\label{classPlottyFile_a189d8cfd0ae81a62ecf620279e07b966}} +void {\bfseries set\+Function\+Type} (Function\+Type) +\item +\mbox{\Hypertarget{classPlottyFile_ad7cc60f268d34bbb5d672a4171c75604}\label{classPlottyFile_ad7cc60f268d34bbb5d672a4171c75604}} +void {\bfseries set\+Quadrant} (uint8\+\_\+t) +\item +\mbox{\Hypertarget{classPlottyFile_afc019b323200923c2f02f9156fd29e6a}\label{classPlottyFile_afc019b323200923c2f02f9156fd29e6a}} +void {\bfseries set\+RefX} (uint16\+\_\+t) +\item +\mbox{\Hypertarget{classPlottyFile_aff7a9b1fa247588e1740e719ea19222f}\label{classPlottyFile_aff7a9b1fa247588e1740e719ea19222f}} +void {\bfseries set\+RefY} (uint16\+\_\+t) +\item +\mbox{\Hypertarget{classPlottyFile_ae24cfd5c953e7726f6140a65c989a635}\label{classPlottyFile_ae24cfd5c953e7726f6140a65c989a635}} +void {\bfseries set\+Para\+First\+Curve} (uint16\+\_\+t) +\item +\mbox{\Hypertarget{classPlottyFile_a5bba6acb78ae3fbbf35375c063690b6e}\label{classPlottyFile_a5bba6acb78ae3fbbf35375c063690b6e}} +void {\bfseries set\+Para\+Step\+Width} (uint16\+\_\+t) +\item +\mbox{\Hypertarget{classPlottyFile_a040a05b4f606c7bf904be149c039452f}\label{classPlottyFile_a040a05b4f606c7bf904be149c039452f}} +void {\bfseries set\+UnitX} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_ada0b074e2248b1a710d5df33ebfbc8d1}\label{classPlottyFile_ada0b074e2248b1a710d5df33ebfbc8d1}} +void {\bfseries set\+DescX} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_a7b41356b1d3fac9f864785f70cbf9c57}\label{classPlottyFile_a7b41356b1d3fac9f864785f70cbf9c57}} +void {\bfseries set\+UnitY} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_a9249d341c81f6c3b8dd02ba2459e6507}\label{classPlottyFile_a9249d341c81f6c3b8dd02ba2459e6507}} +void {\bfseries set\+DescY} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_a35bf02fb23f01ba0a1c3f480b69ed46d}\label{classPlottyFile_a35bf02fb23f01ba0a1c3f480b69ed46d}} +void {\bfseries set\+Unit\+Para} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_af617e3a349f18368e216c977da4017bc}\label{classPlottyFile_af617e3a349f18368e216c977da4017bc}} +void {\bfseries set\+Desc\+Para} (std\+::string) +\item +\mbox{\Hypertarget{classPlottyFile_a88bb7d8350ed5fbc7a40e8d903c94bdb}\label{classPlottyFile_a88bb7d8350ed5fbc7a40e8d903c94bdb}} +Function\+Type {\bfseries get\+Function\+Type} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a54e94e80061a27614f2d4d63697d3376}\label{classPlottyFile_a54e94e80061a27614f2d4d63697d3376}} +uint8\+\_\+t {\bfseries get\+Quadrant} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a7dd84b9f0826f3220fc6b5a4f1ce9890}\label{classPlottyFile_a7dd84b9f0826f3220fc6b5a4f1ce9890}} +uint16\+\_\+t {\bfseries get\+RefX} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_ae6650c61a3b1a610ce716253418bd7f2}\label{classPlottyFile_ae6650c61a3b1a610ce716253418bd7f2}} +uint16\+\_\+t {\bfseries get\+RefY} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a40828c93d66fe80166c4f603d5bdfa48}\label{classPlottyFile_a40828c93d66fe80166c4f603d5bdfa48}} +uint16\+\_\+t {\bfseries get\+Para\+First\+Curve} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a9da23f2bb8e6eb1837fc992ffd4057db}\label{classPlottyFile_a9da23f2bb8e6eb1837fc992ffd4057db}} +uint16\+\_\+t {\bfseries get\+Para\+Step\+Width} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_af952ac5e2c40896acaf6a86063874fe3}\label{classPlottyFile_af952ac5e2c40896acaf6a86063874fe3}} +std\+::string {\bfseries get\+UnitX} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a9cf7baa569be308c2cf6e07cadded09d}\label{classPlottyFile_a9cf7baa569be308c2cf6e07cadded09d}} +std\+::string {\bfseries get\+DescX} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a746b96036872dbece204e9739f3413b6}\label{classPlottyFile_a746b96036872dbece204e9739f3413b6}} +std\+::string {\bfseries get\+UnitY} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_ab4a847fd71a804182f211233e194df45}\label{classPlottyFile_ab4a847fd71a804182f211233e194df45}} +std\+::string {\bfseries get\+DescY} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_abcda4139adf8c5ab8a93b13b84ac097c}\label{classPlottyFile_abcda4139adf8c5ab8a93b13b84ac097c}} +std\+::string {\bfseries get\+Unit\+Para} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a536967daae3b382a5d6575f55450e198}\label{classPlottyFile_a536967daae3b382a5d6575f55450e198}} +std\+::string {\bfseries get\+Desc\+Para} (void) const +\item +\mbox{\Hypertarget{classPlottyFile_a82c348e7fade2edcbc907e7c2bc2e305}\label{classPlottyFile_a82c348e7fade2edcbc907e7c2bc2e305}} +void {\bfseries write\+To\+File} (std\+::string filename) +\item +\mbox{\Hypertarget{classPlottyFile_a08a115ef10458cadfe76077d623313df}\label{classPlottyFile_a08a115ef10458cadfe76077d623313df}} +void {\bfseries start\+Plotty} (std\+::string filename) +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 17 of file plottyfile.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/plottyfile.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/drv/plottyfile.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classTimeoutException.eps b/docs/latex/classTimeoutException.eps new file mode 100644 index 0000000..68c321d --- /dev/null +++ b/docs/latex/classTimeoutException.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 338.983051 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.475000 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(TimeoutException) cw +(exception) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (TimeoutException) 0.000000 0.000000 box + (exception) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/classTimeoutException.tex b/docs/latex/classTimeoutException.tex new file mode 100644 index 0000000..cf0fa84 --- /dev/null +++ b/docs/latex/classTimeoutException.tex @@ -0,0 +1,41 @@ +\hypertarget{classTimeoutException}{}\doxysection{Timeout\+Exception Class Reference} +\label{classTimeoutException}\index{TimeoutException@{TimeoutException}} +Inheritance diagram for Timeout\+Exception\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{classTimeoutException} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classTimeoutException_a33d1b23baf86d5481e1fe18db8a37c15}\label{classTimeoutException_a33d1b23baf86d5481e1fe18db8a37c15}} +{\bfseries Timeout\+Exception} (const char $\ast$message, int timeout) +\item +\mbox{\Hypertarget{classTimeoutException_a6c6f1372eaeab7dd2f4dec06cc1e8f8f}\label{classTimeoutException_a6c6f1372eaeab7dd2f4dec06cc1e8f8f}} +{\bfseries Timeout\+Exception} (const std\+::string \&message, int timeout) +\item +\mbox{\Hypertarget{classTimeoutException_a97eaf01fc39ddb94b060020b42fefd6e}\label{classTimeoutException_a97eaf01fc39ddb94b060020b42fefd6e}} +virtual const char $\ast$ {\bfseries what} () const throw () +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classTimeoutException_aa625fc0fae48a67737a98eafb91c9624}\label{classTimeoutException_aa625fc0fae48a67737a98eafb91c9624}} +std\+::string {\bfseries msg} +\item +\mbox{\Hypertarget{classTimeoutException_a00704ad4af4a07e6956949f633b5b161}\label{classTimeoutException_a00704ad4af4a07e6956949f633b5b161}} +int {\bfseries m\+\_\+timeout} +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 8 of file timeoutexception.\+h. + + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/timeoutexception.\+h\end{DoxyCompactItemize} diff --git a/docs/latex/classUSART.tex b/docs/latex/classUSART.tex new file mode 100644 index 0000000..e5e0aaa --- /dev/null +++ b/docs/latex/classUSART.tex @@ -0,0 +1,273 @@ +\hypertarget{classUSART}{}\doxysection{U\+S\+A\+RT Class Reference} +\label{classUSART}\index{USART@{USART}} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +void \mbox{\hyperlink{classUSART_a5f7e2abda2ec4a68a5fdb8ee2f8a940a}{open\+Device}} (std\+::string device) +\item +void \mbox{\hyperlink{classUSART_af80d6291ac1d2df04cfa1d8d27458cc5}{close\+Device}} (void) +\item +void \mbox{\hyperlink{classUSART_a28a2b4c5ed66b2c3a81196f76884f156}{clear\+Input\+Buffer}} (void) +\item +void \mbox{\hyperlink{classUSART_a756d268a8762c316f91ca3238972b0c1}{clear\+Output\+Buffer}} (void) +\item +void \mbox{\hyperlink{classUSART_adb6ff4d1cf1af79ca255c5a81780200d}{flush\+Output\+Buffer}} (void) +\item +void \mbox{\hyperlink{classUSART_a33559bb8f0eda33a489d47b9c9227b59}{print\+Statistics}} (void) +\item +void \mbox{\hyperlink{classUSART_a60eadbe9956bab8144ee96d89eacd9f5}{write\+Byte}} (uint8\+\_\+t b) +\item +void \mbox{\hyperlink{classUSART_a78b30d9aa863f38745e982860392599a}{write\+Int}} (uint16\+\_\+t d) +\item +uint8\+\_\+t \mbox{\hyperlink{classUSART_a8f54b98b26bfe084359a5604bda82562}{read\+Byte}} (void) +\item +uint16\+\_\+t \mbox{\hyperlink{classUSART_a1534c229db71a375e556cf1e7d0b8119}{read\+Int}} (void) +\item +\mbox{\Hypertarget{classUSART_a7d024eae412c26c8026a19c23152fb15}\label{classUSART_a7d024eae412c26c8026a19c23152fb15}} +int {\bfseries read\+\_\+timeout} (uint8\+\_\+t $\ast$buffer, uint16\+\_\+t offset, uint8\+\_\+t len, uint32\+\_\+t timeout) +\item +\mbox{\Hypertarget{classUSART_abc38663b1be6af13dd6bc295b34b1f91}\label{classUSART_abc38663b1be6af13dd6bc295b34b1f91}} +int {\bfseries write\+\_\+timeout} (uint8\+\_\+t $\ast$buffer, uint16\+\_\+t offset, uint8\+\_\+t len, uint32\+\_\+t timeout) +\item +\mbox{\Hypertarget{classUSART_aa5380551953f95293287d93a3291e6f9}\label{classUSART_aa5380551953f95293287d93a3291e6f9}} +void {\bfseries write\+Block} (uint8\+\_\+t $\ast$buffer, uint16\+\_\+t offset, uint8\+\_\+t len) +\item +\mbox{\Hypertarget{classUSART_a6301a60df27ab1506ce8d64e3b061eb2}\label{classUSART_a6301a60df27ab1506ce8d64e3b061eb2}} +bool {\bfseries read\+Block} (uint8\+\_\+t $\ast$buffer, uint16\+\_\+t offset) +\item +uint32\+\_\+t \mbox{\hyperlink{classUSART_a4918672d8069df205378a528b1892db3}{get\+Baudrate}} (void) +\item +uint8\+\_\+t \mbox{\hyperlink{classUSART_a19cf777956a038878fc2d2b58c3d2b41}{get\+Timeout}} (void) +\item +void \mbox{\hyperlink{classUSART_aac63918a8b97ae63ee607cfa39e6d88d}{set\+Baudrate}} (uint32\+\_\+t baudrate) +\item +void \mbox{\hyperlink{classUSART_ad7fe866cebe920784d2b17602824c7ff}{set\+Timeout}} (uint8\+\_\+t timeout) +\end{DoxyCompactItemize} +\doxysubsection*{Static Public Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classUSART_a3401693a5b971f54a2bf177e9a8b55fd}\label{classUSART_a3401693a5b971f54a2bf177e9a8b55fd}} +constexpr static uint8\+\_\+t {\bfseries C\+R\+C7\+\_\+\+P\+O\+LY} = 0x91 +\item +\mbox{\Hypertarget{classUSART_a43cc131e2611437ed3c6c0448ba5ade5}\label{classUSART_a43cc131e2611437ed3c6c0448ba5ade5}} +constexpr static uint8\+\_\+t {\bfseries M\+A\+X\+\_\+\+B\+L\+O\+C\+K\+\_\+\+S\+I\+ZE} = 64 +\item +\mbox{\Hypertarget{classUSART_a19bfa88e843626b2d822361738cf0039}\label{classUSART_a19bfa88e843626b2d822361738cf0039}} +constexpr static uint8\+\_\+t {\bfseries B\+L\+O\+C\+K\+\_\+\+E\+ND} = 0x80 +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 16 of file usart.\+h. + + + +\doxysubsection{Member Function Documentation} +\mbox{\Hypertarget{classUSART_a28a2b4c5ed66b2c3a81196f76884f156}\label{classUSART_a28a2b4c5ed66b2c3a81196f76884f156}} +\index{USART@{USART}!clearInputBuffer@{clearInputBuffer}} +\index{clearInputBuffer@{clearInputBuffer}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{clearInputBuffer()}{clearInputBuffer()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::clear\+Input\+Buffer (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gelesen wurden +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 39 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a756d268a8762c316f91ca3238972b0c1}\label{classUSART_a756d268a8762c316f91ca3238972b0c1}} +\index{USART@{USART}!clearOutputBuffer@{clearOutputBuffer}} +\index{clearOutputBuffer@{clearOutputBuffer}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{clearOutputBuffer()}{clearOutputBuffer()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::clear\+Output\+Buffer (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Verwirft Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 46 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_af80d6291ac1d2df04cfa1d8d27458cc5}\label{classUSART_af80d6291ac1d2df04cfa1d8d27458cc5}} +\index{USART@{USART}!closeDevice@{closeDevice}} +\index{closeDevice@{closeDevice}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{closeDevice()}{closeDevice()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::close\+Device (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Schließt die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 32 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_adb6ff4d1cf1af79ca255c5a81780200d}\label{classUSART_adb6ff4d1cf1af79ca255c5a81780200d}} +\index{USART@{USART}!flushOutputBuffer@{flushOutputBuffer}} +\index{flushOutputBuffer@{flushOutputBuffer}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{flushOutputBuffer()}{flushOutputBuffer()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::flush\+Output\+Buffer (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Schreibt Daten, die bereits im Puffer liegen, aber noch nicht gesendet wurden +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 53 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a4918672d8069df205378a528b1892db3}\label{classUSART_a4918672d8069df205378a528b1892db3}} +\index{USART@{USART}!getBaudrate@{getBaudrate}} +\index{getBaudrate@{getBaudrate}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{getBaudrate()}{getBaudrate()}} +{\footnotesize\ttfamily uint32\+\_\+t U\+S\+A\+R\+T\+::get\+Baudrate (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liefert die eingestellte Baudrate {\bfseries{Änderungen werden erst nach einem open() wirksam}} + +Definition at line 306 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a19cf777956a038878fc2d2b58c3d2b41}\label{classUSART_a19cf777956a038878fc2d2b58c3d2b41}} +\index{USART@{USART}!getTimeout@{getTimeout}} +\index{getTimeout@{getTimeout}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{getTimeout()}{getTimeout()}} +{\footnotesize\ttfamily uint8\+\_\+t U\+S\+A\+R\+T\+::get\+Timeout (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Liefert den eingestellten Timeout (in Dezisekunden) {\bfseries{Änderungen werden erst nach einem open() wirksam}} + +Definition at line 311 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a5f7e2abda2ec4a68a5fdb8ee2f8a940a}\label{classUSART_a5f7e2abda2ec4a68a5fdb8ee2f8a940a}} +\index{USART@{USART}!openDevice@{openDevice}} +\index{openDevice@{openDevice}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{openDevice()}{openDevice()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::open\+Device (\begin{DoxyParamCaption}\item[{std\+::string}]{device }\end{DoxyParamCaption})} + +Öffnet die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyParams}{Parameters} +{\em device} & Linux-\/\+Gerätepfad \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 3 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a33559bb8f0eda33a489d47b9c9227b59}\label{classUSART_a33559bb8f0eda33a489d47b9c9227b59}} +\index{USART@{USART}!printStatistics@{printStatistics}} +\index{printStatistics@{printStatistics}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{printStatistics()}{printStatistics()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::print\+Statistics (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Gibt Anzahl an erfolgreichen und fehlgeschlagenen Block-\/Übertragungen an + +Definition at line 60 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a8f54b98b26bfe084359a5604bda82562}\label{classUSART_a8f54b98b26bfe084359a5604bda82562}} +\index{USART@{USART}!readByte@{readByte}} +\index{readByte@{readByte}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{readByte()}{readByte()}} +{\footnotesize\ttfamily uint8\+\_\+t U\+S\+A\+R\+T\+::read\+Byte (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Empfängt ein Byte über die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 210 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a1534c229db71a375e556cf1e7d0b8119}\label{classUSART_a1534c229db71a375e556cf1e7d0b8119}} +\index{USART@{USART}!readInt@{readInt}} +\index{readInt@{readInt}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{readInt()}{readInt()}} +{\footnotesize\ttfamily uint16\+\_\+t U\+S\+A\+R\+T\+::read\+Int (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +Empfängt ein Integer über die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 229 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_aac63918a8b97ae63ee607cfa39e6d88d}\label{classUSART_aac63918a8b97ae63ee607cfa39e6d88d}} +\index{USART@{USART}!setBaudrate@{setBaudrate}} +\index{setBaudrate@{setBaudrate}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{setBaudrate()}{setBaudrate()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::set\+Baudrate (\begin{DoxyParamCaption}\item[{uint32\+\_\+t}]{baudrate }\end{DoxyParamCaption})} + +Setzt die Baudrate {\bfseries{Änderungen werden erst nach einem open() wirksam}} + +Definition at line 316 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_ad7fe866cebe920784d2b17602824c7ff}\label{classUSART_ad7fe866cebe920784d2b17602824c7ff}} +\index{USART@{USART}!setTimeout@{setTimeout}} +\index{setTimeout@{setTimeout}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{setTimeout()}{setTimeout()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::set\+Timeout (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{timeout }\end{DoxyParamCaption})} + +Setzt den Timeout (in Dezisekunden) {\bfseries{Änderungen werden erst nach einem open() wirksam}} + +Definition at line 321 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a60eadbe9956bab8144ee96d89eacd9f5}\label{classUSART_a60eadbe9956bab8144ee96d89eacd9f5}} +\index{USART@{USART}!writeByte@{writeByte}} +\index{writeByte@{writeByte}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{writeByte()}{writeByte()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::write\+Byte (\begin{DoxyParamCaption}\item[{uint8\+\_\+t}]{b }\end{DoxyParamCaption})} + +Sendet ein Byte über die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyParams}{Parameters} +{\em b} & das zu sendende Byte \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 67 of file usart.\+cpp. + +\mbox{\Hypertarget{classUSART_a78b30d9aa863f38745e982860392599a}\label{classUSART_a78b30d9aa863f38745e982860392599a}} +\index{USART@{USART}!writeInt@{writeInt}} +\index{writeInt@{writeInt}!USART@{USART}} +\doxysubsubsection{\texorpdfstring{writeInt()}{writeInt()}} +{\footnotesize\ttfamily void U\+S\+A\+R\+T\+::write\+Int (\begin{DoxyParamCaption}\item[{uint16\+\_\+t}]{d }\end{DoxyParamCaption})} + +Sendet ein Integer über die \mbox{\hyperlink{classUSART}{U\+S\+A\+RT}} Schnittstelle +\begin{DoxyParams}{Parameters} +{\em b} & das zu sendende Byte \\ +\hline +\end{DoxyParams} + +\begin{DoxyExceptions}{Exceptions} +{\em \mbox{\hyperlink{classUSARTException}{U\+S\+A\+R\+T\+Exception}}} & \\ +\hline +\end{DoxyExceptions} + + +Definition at line 81 of file usart.\+cpp. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/usart.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/drv/usart.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classUSARTException.eps b/docs/latex/classUSARTException.eps new file mode 100644 index 0000000..965877a --- /dev/null +++ b/docs/latex/classUSARTException.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 347.826087 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.437500 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(USARTException) cw +(exception) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (USARTException) 0.000000 0.000000 box + (exception) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/classUSARTException.tex b/docs/latex/classUSARTException.tex new file mode 100644 index 0000000..16eecb0 --- /dev/null +++ b/docs/latex/classUSARTException.tex @@ -0,0 +1,38 @@ +\hypertarget{classUSARTException}{}\doxysection{U\+S\+A\+R\+T\+Exception Class Reference} +\label{classUSARTException}\index{USARTException@{USARTException}} +Inheritance diagram for U\+S\+A\+R\+T\+Exception\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{classUSARTException} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classUSARTException_a3c359db129825703b91392d5128cf93d}\label{classUSARTException_a3c359db129825703b91392d5128cf93d}} +{\bfseries U\+S\+A\+R\+T\+Exception} (const char $\ast$message) +\item +\mbox{\Hypertarget{classUSARTException_a643c0a8b7f0d81e2f1693a75b378e6c2}\label{classUSARTException_a643c0a8b7f0d81e2f1693a75b378e6c2}} +{\bfseries U\+S\+A\+R\+T\+Exception} (const std\+::string \&message) +\item +\mbox{\Hypertarget{classUSARTException_a2af5e3c00cd0585c7427c2e0420a8f15}\label{classUSARTException_a2af5e3c00cd0585c7427c2e0420a8f15}} +virtual const char $\ast$ {\bfseries what} () const throw () +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classUSARTException_a14c80df95f216d221aa97cffbcd8dd79}\label{classUSARTException_a14c80df95f216d221aa97cffbcd8dd79}} +std\+::string {\bfseries msg} +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 9 of file usartexception.\+h. + + + +The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/drv/usartexception.\+h\end{DoxyCompactItemize} diff --git a/docs/latex/classView.eps b/docs/latex/classView.eps new file mode 100644 index 0000000..29178de --- /dev/null +++ b/docs/latex/classView.eps @@ -0,0 +1,213 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 200.000000 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 2.500000 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 def +/cols 3 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(View) cw +(ViewInfo) cw +(ViewPromt) cw +(ViewSelection) cw +(ViewMonitor) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (View) 1.000000 2.000000 box + (ViewInfo) 0.000000 1.000000 box + (ViewPromt) 1.000000 1.000000 box + (ViewSelection) 2.000000 1.000000 box + (ViewMonitor) 0.000000 0.000000 box + +% ----- relations ----- + +solid +1 1.000000 1.250000 out +solid +0.000000 2.000000 2.000000 conn +solid +0 0.000000 1.750000 in +solid +1 0.000000 0.250000 out +solid +0 1.000000 1.750000 in +solid +0 2.000000 1.750000 in +solid +0 0.000000 0.750000 in diff --git a/docs/latex/classView.tex b/docs/latex/classView.tex new file mode 100644 index 0000000..0129493 --- /dev/null +++ b/docs/latex/classView.tex @@ -0,0 +1,78 @@ +\hypertarget{classView}{}\doxysection{View Class Reference} +\label{classView}\index{View@{View}} +Inheritance diagram for View\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.000000cm]{classView} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classView_a6c725e4d83fd7474635a7e64200c7a08}\label{classView_a6c725e4d83fd7474635a7e64200c7a08}} +virtual void {\bfseries set\+Title} (std\+::string title) +\item +\mbox{\Hypertarget{classView_aa7b1f1179e3c4f06bef1e99355d0d592}\label{classView_aa7b1f1179e3c4f06bef1e99355d0d592}} +virtual void {\bfseries repaint} (void) +\item +\mbox{\Hypertarget{classView_a092a269bf53569af7fca4d710dd5b980}\label{classView_a092a269bf53569af7fca4d710dd5b980}} +virtual void {\bfseries draw} (void)=0 +\item +\mbox{\Hypertarget{classView_a60f77156dc4786bb6227d58a3061d2f6}\label{classView_a60f77156dc4786bb6227d58a3061d2f6}} +virtual call\+\_\+t {\bfseries keypress} (int \&key)=0 +\end{DoxyCompactItemize} +\doxysubsection*{Static Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classView_a990aa2223befde031dfcce54a740c558}\label{classView_a990aa2223befde031dfcce54a740c558}} +static void {\bfseries set\+Win\+Context} (W\+I\+N\+D\+OW $\ast$win) +\item +\mbox{\Hypertarget{classView_a0710c6ba06e3795e7ddf369361308b79}\label{classView_a0710c6ba06e3795e7ddf369361308b79}} +static W\+I\+N\+D\+OW $\ast$ {\bfseries get\+Win\+Context} (void) +\item +\mbox{\Hypertarget{classView_a52c2e2a7bc56388e7d9bfa398ad52668}\label{classView_a52c2e2a7bc56388e7d9bfa398ad52668}} +static std\+::vector$<$ std\+::string $>$ {\bfseries str\+\_\+split} (const std\+::string \&str, const std\+::string delim) +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classView_ae039aa744b085db819ae149705b2c32b}\label{classView_ae039aa744b085db819ae149705b2c32b}} +int {\bfseries width} +\item +\mbox{\Hypertarget{classView_a6e3e5c18893617490f02166641356746}\label{classView_a6e3e5c18893617490f02166641356746}} +int {\bfseries height} +\item +\mbox{\Hypertarget{classView_a9fc9f3b0c876d063e6f57dee320a43fe}\label{classView_a9fc9f3b0c876d063e6f57dee320a43fe}} +int {\bfseries start\+\_\+x} = 0 +\item +\mbox{\Hypertarget{classView_ac424db4c13776c3ce9d33f9074dfcfaa}\label{classView_ac424db4c13776c3ce9d33f9074dfcfaa}} +int {\bfseries start\+\_\+y} = 0 +\item +\mbox{\Hypertarget{classView_a80441aa81b52e04677a2aa2bd9c47753}\label{classView_a80441aa81b52e04677a2aa2bd9c47753}} +std\+::string {\bfseries title} +\item +\mbox{\Hypertarget{classView_a610367214a727e2f7da72ac5bdb60fa3}\label{classView_a610367214a727e2f7da72ac5bdb60fa3}} +std\+::vector$<$ call\+\_\+t $>$ {\bfseries calls} +\end{DoxyCompactItemize} +\doxysubsection*{Static Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classView_a5ddee2bf0b26dbcfa7780be17ff33dd7}\label{classView_a5ddee2bf0b26dbcfa7780be17ff33dd7}} +static W\+I\+N\+D\+OW $\ast$ {\bfseries win} = nullptr +\item +\mbox{\Hypertarget{classView_a3554cf8689cad24c643665aa3d182134}\label{classView_a3554cf8689cad24c643665aa3d182134}} +constexpr static int {\bfseries K\+E\+Y\+\_\+\+E\+NT} = 10 +\end{DoxyCompactItemize} + + +\doxysubsection{Detailed Description} + + +Definition at line 17 of file view.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classViewInfo.eps b/docs/latex/classViewInfo.eps new file mode 100644 index 0000000..940c28b --- /dev/null +++ b/docs/latex/classViewInfo.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 659.340659 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 0.758333 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(ViewInfo) cw +(View) cw +(ViewMonitor) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (ViewInfo) 0.000000 1.000000 box + (View) 0.000000 2.000000 box + (ViewMonitor) 0.000000 0.000000 box + +% ----- relations ----- + +solid +0 0.000000 1.000000 out +solid +1 0.000000 2.000000 in +solid +1 0.000000 0.250000 out +solid +0 0.000000 0.750000 in diff --git a/docs/latex/classViewInfo.tex b/docs/latex/classViewInfo.tex new file mode 100644 index 0000000..a67e1d9 --- /dev/null +++ b/docs/latex/classViewInfo.tex @@ -0,0 +1,64 @@ +\hypertarget{classViewInfo}{}\doxysection{View\+Info Class Reference} +\label{classViewInfo}\index{ViewInfo@{ViewInfo}} +Inheritance diagram for View\+Info\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.000000cm]{classViewInfo} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewInfo_abc93067b319df17e19f013a86d762f81}\label{classViewInfo_abc93067b319df17e19f013a86d762f81}} +virtual void {\bfseries set\+Text} (std\+::string text) +\item +\mbox{\Hypertarget{classViewInfo_a4c3db4806515ea8b0f07a9864f983377}\label{classViewInfo_a4c3db4806515ea8b0f07a9864f983377}} +virtual void {\bfseries set\+Label\+Close} (std\+::string label) +\item +\mbox{\Hypertarget{classViewInfo_a45fd0b8b96d15fd92824ce63fb6814ca}\label{classViewInfo_a45fd0b8b96d15fd92824ce63fb6814ca}} +virtual void {\bfseries set\+Call} (call\+\_\+t call) +\item +\mbox{\Hypertarget{classViewInfo_ab7f9ea145f8cf26dbd27e29982cda206}\label{classViewInfo_ab7f9ea145f8cf26dbd27e29982cda206}} +virtual void {\bfseries draw} (void) override +\item +\mbox{\Hypertarget{classViewInfo_a7d231a44600aa100ad4a0b9f283e5bd8}\label{classViewInfo_a7d231a44600aa100ad4a0b9f283e5bd8}} +virtual call\+\_\+t {\bfseries keypress} (int \&key) override +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewInfo_ac392a569ef16af3dc11ee659f3fa1eb4}\label{classViewInfo_ac392a569ef16af3dc11ee659f3fa1eb4}} +std\+::string {\bfseries text} +\item +\mbox{\Hypertarget{classViewInfo_a34879bd1c0a8fe230429cc600dcd6739}\label{classViewInfo_a34879bd1c0a8fe230429cc600dcd6739}} +std\+::string {\bfseries label\+\_\+close} +\item +\mbox{\Hypertarget{classViewInfo_ae4dab70d82761e0f59f51dcae79685fe}\label{classViewInfo_ae4dab70d82761e0f59f51dcae79685fe}} +int {\bfseries close\+\_\+offset\+\_\+x} = 0 +\item +\mbox{\Hypertarget{classViewInfo_a5954adf853cb44d4655ede731faf1a28}\label{classViewInfo_a5954adf853cb44d4655ede731faf1a28}} +int {\bfseries close\+\_\+offset\+\_\+y} = 0 +\end{DoxyCompactItemize} +\doxysubsection*{Static Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewInfo_a4681a8138f17ea229aca02e6db7357cd}\label{classViewInfo_a4681a8138f17ea229aca02e6db7357cd}} +constexpr static int {\bfseries text\+\_\+offset\+\_\+x} = 2 +\item +\mbox{\Hypertarget{classViewInfo_a34a9239c8954a0c27a22cf44d112f5b8}\label{classViewInfo_a34a9239c8954a0c27a22cf44d112f5b8}} +constexpr static int {\bfseries text\+\_\+offset\+\_\+y} = 3 +\end{DoxyCompactItemize} +\doxysubsection*{Additional Inherited Members} + + +\doxysubsection{Detailed Description} + + +Definition at line 6 of file view\+\_\+info.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+info.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+info.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classViewMonitor.eps b/docs/latex/classViewMonitor.eps new file mode 100644 index 0000000..d74fe53 --- /dev/null +++ b/docs/latex/classViewMonitor.eps @@ -0,0 +1,203 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 659.340659 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 0.758333 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 3 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(ViewMonitor) cw +(ViewInfo) cw +(View) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (ViewMonitor) 0.000000 0.000000 box + (ViewInfo) 0.000000 1.000000 box + (View) 0.000000 2.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in +solid +0 0.000000 1.000000 out +solid +1 0.000000 2.000000 in diff --git a/docs/latex/classViewMonitor.tex b/docs/latex/classViewMonitor.tex new file mode 100644 index 0000000..ae6274d --- /dev/null +++ b/docs/latex/classViewMonitor.tex @@ -0,0 +1,43 @@ +\hypertarget{classViewMonitor}{}\doxysection{View\+Monitor Class Reference} +\label{classViewMonitor}\index{ViewMonitor@{ViewMonitor}} +Inheritance diagram for View\+Monitor\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=3.000000cm]{classViewMonitor} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewMonitor_a2224002fe45655df87130fe07a161693}\label{classViewMonitor_a2224002fe45655df87130fe07a161693}} +virtual call\+\_\+t {\bfseries keypress} (int \&key) override +\end{DoxyCompactItemize} +\doxysubsection*{Protected Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewMonitor_a245a1dc3cc43a84f63e1175a195581a2}\label{classViewMonitor_a245a1dc3cc43a84f63e1175a195581a2}} +virtual void {\bfseries worker} (void) +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewMonitor_a79a68894c0a05422b5707202d28a6db0}\label{classViewMonitor_a79a68894c0a05422b5707202d28a6db0}} +volatile bool {\bfseries run\+\_\+worker} = true +\item +\mbox{\Hypertarget{classViewMonitor_a377eb8deab3061aa4e084be9b791c056}\label{classViewMonitor_a377eb8deab3061aa4e084be9b791c056}} +std\+::thread {\bfseries t\+\_\+worker} +\end{DoxyCompactItemize} +\doxysubsection*{Additional Inherited Members} + + +\doxysubsection{Detailed Description} + + +Definition at line 11 of file view\+\_\+monitor.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+monitor.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+monitor.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classViewPromt.eps b/docs/latex/classViewPromt.eps new file mode 100644 index 0000000..9554b0a --- /dev/null +++ b/docs/latex/classViewPromt.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 500.000000 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.000000 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(ViewPromt) cw +(View) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (ViewPromt) 0.000000 0.000000 box + (View) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/classViewPromt.tex b/docs/latex/classViewPromt.tex new file mode 100644 index 0000000..59cd8ec --- /dev/null +++ b/docs/latex/classViewPromt.tex @@ -0,0 +1,85 @@ +\hypertarget{classViewPromt}{}\doxysection{View\+Promt Class Reference} +\label{classViewPromt}\index{ViewPromt@{ViewPromt}} +Inheritance diagram for View\+Promt\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{classViewPromt} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewPromt_a8f3f805bece2a669f10e29d1d22a9de1}\label{classViewPromt_a8f3f805bece2a669f10e29d1d22a9de1}} +virtual void {\bfseries draw} (void) override +\item +\mbox{\Hypertarget{classViewPromt_ab67a9f9ecb7345f9cb3d7fb04145a81a}\label{classViewPromt_ab67a9f9ecb7345f9cb3d7fb04145a81a}} +virtual void {\bfseries set\+Message} (std\+::string message) +\item +\mbox{\Hypertarget{classViewPromt_adbdbc4bd715637b97b9a60ddb8c7dcc6}\label{classViewPromt_adbdbc4bd715637b97b9a60ddb8c7dcc6}} +virtual void {\bfseries set\+Confirm} (std\+::string name, call\+\_\+t call) +\item +\mbox{\Hypertarget{classViewPromt_a4129b57bfeea20c328c6bbc93e226d45}\label{classViewPromt_a4129b57bfeea20c328c6bbc93e226d45}} +virtual void {\bfseries set\+Cancel} (std\+::string name, bool cancelable) +\item +\mbox{\Hypertarget{classViewPromt_aa82bf5da77c041f733a0f29918c29319}\label{classViewPromt_aa82bf5da77c041f733a0f29918c29319}} +virtual std\+::string {\bfseries get\+Input} (void) +\item +\mbox{\Hypertarget{classViewPromt_a24aa1e8887fc5e6631d6cb88adb7f3db}\label{classViewPromt_a24aa1e8887fc5e6631d6cb88adb7f3db}} +virtual call\+\_\+t {\bfseries keypress} (int \&key) override +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewPromt_a86916a820e28320c91c9d053b350b9c9}\label{classViewPromt_a86916a820e28320c91c9d053b350b9c9}} +size\+\_\+t {\bfseries selection} = 1 +\item +\mbox{\Hypertarget{classViewPromt_a02573b9ae37cf6c2adacd8f2a0152a38}\label{classViewPromt_a02573b9ae37cf6c2adacd8f2a0152a38}} +std\+::string {\bfseries input} +\item +\mbox{\Hypertarget{classViewPromt_a00aff1fb73dfe44595b259ca8c8b12af}\label{classViewPromt_a00aff1fb73dfe44595b259ca8c8b12af}} +std\+::string {\bfseries message} = \char`\"{}Input\char`\"{} +\item +\mbox{\Hypertarget{classViewPromt_a97f8bb434ac6663c64d41e95bad8a539}\label{classViewPromt_a97f8bb434ac6663c64d41e95bad8a539}} +std\+::string {\bfseries label\+\_\+confirm} = \char`\"{}\mbox{[} OK \mbox{]}\char`\"{} +\item +\mbox{\Hypertarget{classViewPromt_ad1491d50a47f70d0af91cc1db65ac18d}\label{classViewPromt_ad1491d50a47f70d0af91cc1db65ac18d}} +std\+::string {\bfseries sep} = \char`\"{} \char`\"{} +\item +\mbox{\Hypertarget{classViewPromt_a61c6061beeb27a1e3ffca87489ad5b7b}\label{classViewPromt_a61c6061beeb27a1e3ffca87489ad5b7b}} +std\+::string {\bfseries label\+\_\+cancel} = \char`\"{}\mbox{[} Cancel \mbox{]}\char`\"{} +\item +\mbox{\Hypertarget{classViewPromt_a29288778b003ec44e8a3b72edcada99c}\label{classViewPromt_a29288778b003ec44e8a3b72edcada99c}} +call\+\_\+t {\bfseries call\+\_\+confirm} = nullptr +\item +\mbox{\Hypertarget{classViewPromt_a941325e694e0e2f42e42f7b9b6ecf3e0}\label{classViewPromt_a941325e694e0e2f42e42f7b9b6ecf3e0}} +bool {\bfseries cancelable} = true +\item +\mbox{\Hypertarget{classViewPromt_a0e23911230a135f02d3108864a1a2c94}\label{classViewPromt_a0e23911230a135f02d3108864a1a2c94}} +int {\bfseries button\+\_\+offset\+\_\+x} = 0 +\item +\mbox{\Hypertarget{classViewPromt_a4781094c5c3dede08f38906fca0a53c3}\label{classViewPromt_a4781094c5c3dede08f38906fca0a53c3}} +int {\bfseries button\+\_\+offset\+\_\+y} = 0 +\end{DoxyCompactItemize} +\doxysubsection*{Static Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewPromt_acc22bf152b511eeaa1d056927fe556ff}\label{classViewPromt_acc22bf152b511eeaa1d056927fe556ff}} +constexpr static int {\bfseries text\+\_\+offset\+\_\+x} = 2 +\item +\mbox{\Hypertarget{classViewPromt_a87c3e5440179a1b36c616489b5c29787}\label{classViewPromt_a87c3e5440179a1b36c616489b5c29787}} +constexpr static int {\bfseries text\+\_\+offset\+\_\+y} = 2 +\end{DoxyCompactItemize} +\doxysubsection*{Additional Inherited Members} + + +\doxysubsection{Detailed Description} + + +Definition at line 8 of file view\+\_\+promt.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+promt.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+promt.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/classViewSelection.eps b/docs/latex/classViewSelection.eps new file mode 100644 index 0000000..3aae2bd --- /dev/null +++ b/docs/latex/classViewSelection.eps @@ -0,0 +1,197 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: ClassName +%%Creator: Doxygen +%%CreationDate: Time +%%For: +%Magnification: 1.00 +%%Orientation: Portrait +%%BoundingBox: 0 0 500 400.000000 +%%Pages: 0 +%%BeginSetup +%%EndSetup +%%EndComments + +% ----- variables ----- + +/boxwidth 0 def +/boxheight 40 def +/fontheight 24 def +/marginwidth 10 def +/distx 20 def +/disty 40 def +/boundaspect 1.250000 def % aspect ratio of the BoundingBox (width/height) +/boundx 500 def +/boundy boundx boundaspect div def +/xspacing 0 def +/yspacing 0 def +/rows 2 def +/cols 1 def +/scalefactor 0 def +/boxfont /Times-Roman findfont fontheight scalefont def + +% ----- procedures ----- + +/dotted { [1 4] 0 setdash } def +/dashed { [5] 0 setdash } def +/solid { [] 0 setdash } def + +/max % result = MAX(arg1,arg2) +{ + /a exch def + /b exch def + a b gt {a} {b} ifelse +} def + +/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2) +{ + 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max +} def + +/cw % boxwidth = MAX(boxwidth, stringwidth(arg1)) +{ + /str exch def + /boxwidth boxwidth str stringwidth pop max def +} def + +/box % draws a box with text `arg1' at grid pos (arg2,arg3) +{ gsave + 2 setlinewidth + newpath + exch xspacing mul xoffset add + exch yspacing mul + moveto + boxwidth 0 rlineto + 0 boxheight rlineto + boxwidth neg 0 rlineto + 0 boxheight neg rlineto + closepath + dup stringwidth pop neg boxwidth add 2 div + boxheight fontheight 2 div sub 2 div + rmoveto show stroke + grestore +} def + +/mark +{ newpath + exch xspacing mul xoffset add boxwidth add + exch yspacing mul + moveto + 0 boxheight 4 div rlineto + boxheight neg 4 div boxheight neg 4 div rlineto + closepath + eofill + stroke +} def + +/arrow +{ newpath + moveto + 3 -8 rlineto + -6 0 rlineto + 3 8 rlineto + closepath + eofill + stroke +} def + +/out % draws an output connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight add + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/in % draws an input connector for the block at (arg1,arg2) +{ + newpath + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul disty 2 div sub + /y exch def + /x exch def + x y moveto + 0 disty 2 div rlineto + stroke + 1 eq { x y disty 2 div add arrow } if +} def + +/hedge +{ + exch xspacing mul xoffset add boxwidth 2 div add + exch yspacing mul boxheight 2 div sub + /y exch def + /x exch def + newpath + x y moveto + boxwidth 2 div distx add 0 rlineto + stroke + 1 eq + { newpath x boxwidth 2 div distx add add y moveto + -8 3 rlineto + 0 -6 rlineto + 8 3 rlineto + closepath + eofill + stroke + } if +} def + +/vedge +{ + /ye exch def + /ys exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add dup + ys yspacing mul boxheight 2 div sub + moveto + ye yspacing mul boxheight 2 div sub + lineto + stroke +} def + +/conn % connections the blocks from col `arg1' to `arg2' of row `arg3' +{ + /ys exch def + /xe exch def + /xs exch def + newpath + xs xspacing mul xoffset add boxwidth 2 div add + ys yspacing mul disty 2 div sub + moveto + xspacing xe xs sub mul 0 + rlineto + stroke +} def + +% ----- main ------ + +boxfont setfont +1 boundaspect scale +(ViewSelection) cw +(View) cw +/boxwidth boxwidth marginwidth 2 mul add def +/xspacing boxwidth distx add def +/yspacing boxheight disty add def +/scalefactor + boxwidth cols mul distx cols 1 sub mul add + boxheight rows mul disty rows 1 sub mul add boundaspect mul + max def +boundx scalefactor div boundy scalefactor div scale + +% ----- classes ----- + + (ViewSelection) 0.000000 0.000000 box + (View) 0.000000 1.000000 box + +% ----- relations ----- + +solid +0 0.000000 0.000000 out +solid +1 0.000000 1.000000 in diff --git a/docs/latex/classViewSelection.tex b/docs/latex/classViewSelection.tex new file mode 100644 index 0000000..2d3043c --- /dev/null +++ b/docs/latex/classViewSelection.tex @@ -0,0 +1,52 @@ +\hypertarget{classViewSelection}{}\doxysection{View\+Selection Class Reference} +\label{classViewSelection}\index{ViewSelection@{ViewSelection}} +Inheritance diagram for View\+Selection\+:\begin{figure}[H] +\begin{center} +\leavevmode +\includegraphics[height=2.000000cm]{classViewSelection} +\end{center} +\end{figure} +\doxysubsection*{Public Member Functions} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewSelection_a10fa34fb676bfed472ca5ee62ef9446d}\label{classViewSelection_a10fa34fb676bfed472ca5ee62ef9446d}} +virtual void {\bfseries draw} (void) override +\item +\mbox{\Hypertarget{classViewSelection_a20984423a21a0c78c12d4ad0df656b8a}\label{classViewSelection_a20984423a21a0c78c12d4ad0df656b8a}} +virtual void {\bfseries add\+Choice} (std\+::string name, call\+\_\+t call) +\item +\mbox{\Hypertarget{classViewSelection_a04341cde5e8355edc5ff3d653d1dbc76}\label{classViewSelection_a04341cde5e8355edc5ff3d653d1dbc76}} +virtual call\+\_\+t {\bfseries keypress} (int \&key) override +\end{DoxyCompactItemize} +\doxysubsection*{Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewSelection_a7947cb252d889a298a622adccec10fda}\label{classViewSelection_a7947cb252d889a298a622adccec10fda}} +size\+\_\+t {\bfseries selection} = 0 +\item +\mbox{\Hypertarget{classViewSelection_a118f23e16e3deeaedeee7cbf62bf34bb}\label{classViewSelection_a118f23e16e3deeaedeee7cbf62bf34bb}} +std\+::vector$<$ std\+::string $>$ {\bfseries choices} +\end{DoxyCompactItemize} +\doxysubsection*{Static Protected Attributes} +\begin{DoxyCompactItemize} +\item +\mbox{\Hypertarget{classViewSelection_a9478d01473618353734436c26e0c35cb}\label{classViewSelection_a9478d01473618353734436c26e0c35cb}} +constexpr static int {\bfseries choice\+\_\+offset\+\_\+x} = 2 +\item +\mbox{\Hypertarget{classViewSelection_a20f8c7a3df9c37f05008c7da31deed56}\label{classViewSelection_a20f8c7a3df9c37f05008c7da31deed56}} +constexpr static int {\bfseries choice\+\_\+offset\+\_\+y} = 3 +\end{DoxyCompactItemize} +\doxysubsection*{Additional Inherited Members} + + +\doxysubsection{Detailed Description} + + +Definition at line 8 of file view\+\_\+selection.\+h. + + + +The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize} +\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+selection.\+h\item +/home/famulus/\+Dokumente/b15f/control/src/ui/view\+\_\+selection.\+cpp\end{DoxyCompactItemize} diff --git a/docs/latex/doxygen.sty b/docs/latex/doxygen.sty new file mode 100644 index 0000000..bd5fdba --- /dev/null +++ b/docs/latex/doxygen.sty @@ -0,0 +1,571 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +\RequirePackage{array} +\RequirePackage{calc} +\RequirePackage{float} +\RequirePackage{ifthen} +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable} +\RequirePackage{tabu} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \hrule% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
 ... 
+\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined charcaters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
    ...
) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
    ...
) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
...
) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \begin{center}% +}{% + \end{center}% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{list}{}{% + \settowidth{\labelwidth}{40pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{-4pt}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +\makeatletter +\newcommand{\doxysection}{\@ifstar{\doxysection@star}{\doxysection@nostar}} +\newcommand{\doxysection@star}[1]{\begingroup\sloppy\raggedright\section*{#1}\endgroup} +\newcommand{\doxysection@nostar}[1]{\begingroup\sloppy\raggedright\section{#1}\endgroup} +\newcommand{\doxysubsection}{\@ifstar{\doxysubsection@star}{\doxysubsection@nostar}} +\newcommand{\doxysubsection@star}[1]{\begingroup\sloppy\raggedright\subsection*{#1}\endgroup} +\newcommand{\doxysubsection@nostar}[1]{\begingroup\sloppy\raggedright\subsection{#1}\endgroup} +\newcommand{\doxysubsubsection}{\@ifstar{\doxysubsubsection@star}{\doxysubsubsection@nostar}} +\newcommand{\doxysubsubsection@star}[1]{\begingroup\sloppy\raggedright\subsubsection*{#1}\endgroup} +\newcommand{\doxysubsubsection@nostar}[1]{\begingroup\sloppy\raggedright\subsubsection{#1}\endgroup} +\newcommand{\doxyparagraph}{\@ifstar{\doxyparagraph@star}{\doxyparagraph@nostar}} +\newcommand{\doxyparagraph@star}[1]{\begingroup\sloppy\raggedright\paragraph*{#1}\endgroup} +\newcommand{\doxyparagraph@nostar}[1]{\begingroup\sloppy\raggedright\paragraph{#1}\endgroup} +\newcommand{\doxysubparagraph}{\@ifstar{\doxysubparagraph@star}{\doxysubparagraph@nostar}} +\newcommand{\doxysubparagraph@star}[1]{\begingroup\sloppy\raggedright\subparagraph*{#1}\endgroup} +\newcommand{\doxysubparagraph@nostar}[1]{\begingroup\sloppy\raggedright\subparagraph{#1}\endgroup} +\makeatother +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother diff --git a/docs/latex/hierarchy.tex b/docs/latex/hierarchy.tex new file mode 100644 index 0000000..4f0819d --- /dev/null +++ b/docs/latex/hierarchy.tex @@ -0,0 +1,21 @@ +\doxysection{Class Hierarchy} +This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList} +\item \contentsline{section}{B15F}{\pageref{classB15F}}{} +\item \contentsline{section}{Dot}{\pageref{classDot}}{} +\item exception\begin{DoxyCompactList} +\item \contentsline{section}{Driver\+Exception}{\pageref{classDriverException}}{} +\item \contentsline{section}{Timeout\+Exception}{\pageref{classTimeoutException}}{} +\item \contentsline{section}{U\+S\+A\+R\+T\+Exception}{\pageref{classUSARTException}}{} +\end{DoxyCompactList} +\item \contentsline{section}{Plotty\+File}{\pageref{classPlottyFile}}{} +\item \contentsline{section}{U\+S\+A\+RT}{\pageref{classUSART}}{} +\item \contentsline{section}{View}{\pageref{classView}}{} +\begin{DoxyCompactList} +\item \contentsline{section}{View\+Info}{\pageref{classViewInfo}}{} +\begin{DoxyCompactList} +\item \contentsline{section}{View\+Monitor}{\pageref{classViewMonitor}}{} +\end{DoxyCompactList} +\item \contentsline{section}{View\+Promt}{\pageref{classViewPromt}}{} +\item \contentsline{section}{View\+Selection}{\pageref{classViewSelection}}{} +\end{DoxyCompactList} +\end{DoxyCompactList} diff --git a/docs/latex/refman.tex b/docs/latex/refman.tex new file mode 100644 index 0000000..a82c3da --- /dev/null +++ b/docs/latex/refman.tex @@ -0,0 +1,189 @@ +\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{book} + +% Packages required by doxygen +\usepackage{fixltx2e} +\usepackage{calc} +\usepackage{doxygen} +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\usepackage{multicol} +\usepackage{multirow} +\PassOptionsToPackage{warn}{textcomp} +\usepackage{textcomp} +\usepackage[nointegrals]{wasysym} +\usepackage[table]{xcolor} +\usepackage{ifpdf,ifxetex} + +% Font selection +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{courier} +\usepackage{amssymb} +\usepackage{sectsty} +\renewcommand{\familydefault}{\sfdefault} +\allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + +% Arguments of doxygenemoji: +% 1) '::' form of the emoji, already "LaTeX"-escaped +% 2) file with the name of the emoji without the .png extension +% in case image exist use this otherwise use the '::' form +\newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% +} +% Page & text layout +\usepackage{geometry} +\geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% +} +\tolerance=750 +\hfuzz=15pt +\hbadness=750 +\setlength{\emergencystretch}{15pt} +\setlength{\parindent}{0cm} +\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} +\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} +\doxynormalparskip +\makeatletter +\renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% +} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% +} +\makeatother + +% Headers & footers +\usepackage{fancyhdr} +\pagestyle{fancyplain} +\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} +\fancyhead[CE]{\fancyplain{}{}} +\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} +\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} +\fancyhead[CO]{\fancyplain{}{}} +\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} +\fancyfoot[LE]{\fancyplain{}{}} +\fancyfoot[CE]{\fancyplain{}{}} +\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[CO]{\fancyplain{}{}} +\fancyfoot[RO]{\fancyplain{}{}} +\renewcommand{\footrulewidth}{0.4pt} +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} + +% Indices & bibliography +\usepackage{natbib} +\usepackage[titles]{tocloft} +\setcounter{tocdepth}{3} +\setcounter{secnumdepth}{5} +\makeindex + +\usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + +% Hyperlinks (required, but should be loaded last) +\ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} +\else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi +\fi + +\hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode% +} + +% Custom commands +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} + +\usepackage{caption} +\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + +\usepackage{etoc} +\etocsettocstyle{\doxytocparskip}{\doxynormalparskip} +\renewcommand{\numberline}[1]{#1~} +%===== C O N T E N T S ===== + +\begin{document} + +% Titlepage & ToC +\hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } +\pagenumbering{alph} +\begin{titlepage} +\vspace*{7cm} +\begin{center}% +{\Large B15F }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.8.16}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} + +%--- Begin generated contents --- +\chapter{Hierarchical Index} +\input{hierarchy} +\chapter{Class Index} +\input{annotated} +\chapter{Class Documentation} +\input{classB15F} +\input{classDot} +\input{classDriverException} +\input{classPlottyFile} +\input{classTimeoutException} +\input{classUSART} +\input{classUSARTException} +\input{classView} +\input{classViewInfo} +\input{classViewMonitor} +\input{classViewPromt} +\input{classViewSelection} +%--- End generated contents --- + +% Index +\backmatter +\newpage +\phantomsection +\clearemptydoublepage +\addcontentsline{toc}{chapter}{\indexname} +\printindex + +\end{document}