3 B15F *B15F::instance =
nullptr;
4 errorhandler_t B15F::errorhandler =
nullptr;
14 std::string device =
exec(
"bash -c 'ls /dev/ttyUSB*'");
15 while (device.find(
' ') != std::string::npos || device.find(
'\n') != std::string::npos ||
16 device.find(
'\t') != std::string::npos)
19 if (device.length() == 0)
20 abort(
"Adapter nicht gefunden");
22 std::cout <<
PRE <<
"Verwende Adapter: " << device << std::endl;
25 std::cout <<
PRE <<
"Stelle Verbindung mit Adapter her... " << std::flush;
28 std::cout <<
"OK" << std::endl;
31 std::cout <<
PRE <<
"Teste Verbindung... " << std::flush;
47 abort(
"Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?");
48 std::cout <<
"OK" << std::endl;
53 std::cout <<
PRE <<
"AVR Firmware Version: " << info[0] <<
" um " << info[1] <<
" Uhr (" << info[2] <<
")" 69 abort(
"Verbindung kann nicht repariert werden");
82 for (uint8_t i = 0; i < 16; i++)
84 usart.
transmit(&rq[0], 0,
sizeof(rq));
89 catch (std::exception &ex)
99 uint8_t dummy = rand() % 256;
106 usart.
transmit(&rq[0], 0,
sizeof(rq));
109 usart.
receive(&aw[0], 0,
sizeof(aw));
111 return aw[0] ==
MSG_OK && aw[1] == dummy;
117 uint16_t dummy = rand() % (0xFFFF / 3);
122 static_cast<uint8_t >(dummy & 0xFF),
123 static_cast<uint8_t >(dummy >> 8)
125 usart.
transmit(&rq[0], 0,
sizeof(rq));
128 usart.
receive(reinterpret_cast<uint8_t *>(&aw), 0,
sizeof(aw));
130 return aw == dummy * 3;
136 std::vector<std::string> info;
142 usart.
transmit(&rq[0], 0,
sizeof(rq));
145 usart.
receive(&n, 0,
sizeof(n));
149 usart.
receive(&len, 0,
sizeof(len));
153 usart.
receive(reinterpret_cast<uint8_t *>(&str[0]), 0, len);
155 info.push_back(std::string(str));
159 usart.
receive(&aw, 0,
sizeof(aw));
161 abort(
"Board Info fehlerhalft: code " + std::to_string((
int) aw));
172 usart.
transmit(&rq[0], 0,
sizeof(rq));
175 usart.
receive(&aw, 0,
sizeof(aw));
186 usart.
transmit(&rq[0], 0,
sizeof(rq));
189 usart.
receive(&aw, 0,
sizeof(aw));
200 usart.
transmit(&rq[0], 0,
sizeof(rq));
203 usart.
receive(&aw, 0,
sizeof(aw));
214 usart.
transmit(&rq[0], 0,
sizeof(rq));
217 usart.
receive(&aw, 0,
sizeof(aw));
228 usart.
transmit(&rq[0], 0,
sizeof(rq));
231 usart.
receive(&aw, 0,
sizeof(aw));
242 usart.
transmit(&rq[0], 0,
sizeof(rq));
245 usart.
receive(&aw, 0,
sizeof(aw));
254 static_cast<uint8_t >(value & 0xFF),
255 static_cast<uint8_t >(value >> 8)
257 usart.
transmit(&rq[0], 0,
sizeof(rq));
260 usart.
receive(&aw, 0,
sizeof(aw));
269 static_cast<uint8_t >(value & 0xFF),
270 static_cast<uint8_t >(value >> 8)
272 usart.
transmit(&rq[0], 0,
sizeof(rq));
275 usart.
receive(&aw, 0,
sizeof(aw));
283 abort(
"Bad ADC channel: " + std::to_string(channel));
291 usart.
transmit(&rq[0], 0,
sizeof(rq));
294 usart.
receive(reinterpret_cast<uint8_t *>(&aw), 0,
sizeof(aw));
297 abort(
"Bad ADC data detected (1)");
302 B15F::analogSequence(uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b,
303 uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)
306 buffer_a += offset_a;
307 buffer_b += offset_b;
316 static_cast<uint8_t >(start & 0xFF),
317 static_cast<uint8_t >(start >> 8),
318 static_cast<uint8_t >(delta & 0xFF),
319 static_cast<uint8_t >(delta >> 8),
320 static_cast<uint8_t >(count & 0xFF),
321 static_cast<uint8_t >(count >> 8)
324 usart.
transmit(&rq[0], 0,
sizeof(rq));
326 for (uint16_t i = 0; i < count; i++)
330 usart.
receive(reinterpret_cast<uint8_t *>(&buffer_a[i]), 0, 2);
332 if (buffer_a[i] > 1023)
333 abort(
"Bad ADC data detected (2)");
342 usart.
receive(reinterpret_cast<uint8_t *>(&buffer_b[i]), 0, 2);
344 if (buffer_b[i] > 1023)
345 abort(
"Bad ADC data detected (3)");
354 usart.
receive(&aw, 0,
sizeof(aw));
356 abort(
"Sequenz unterbrochen");
366 static_cast<uint8_t>((freq >> 0) & 0xFF),
367 static_cast<uint8_t>((freq >> 8) & 0xFF),
368 static_cast<uint8_t>((freq >> 16) & 0xFF),
369 static_cast<uint8_t>((freq >> 24) & 0xFF)
372 usart.
transmit(&rq[0], 0,
sizeof(rq));
375 usart.
receive(&aw, 0,
sizeof(aw));
389 usart.
transmit(&rq[0], 0,
sizeof(rq));
392 usart.
receive(&aw, 0,
sizeof(aw));
403 static_cast<uint8_t>(reinterpret_cast<size_t>(adr)),
407 usart.
transmit(&rq[0], 0,
sizeof(rq));
410 usart.
receive(&aw, 0,
sizeof(aw));
421 static_cast<uint8_t>(reinterpret_cast<size_t>(adr))
424 usart.
transmit(&rq[0], 0,
sizeof(rq));
427 usart.
receive(&aw, 0,
sizeof(aw));
434 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
439 std::this_thread::sleep_for(std::chrono::microseconds(us));
445 instance =
new B15F();
453 std::array<char, 128> buffer;
455 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(),
"r"), pclose);
458 throw std::runtime_error(
"popen() failed!");
460 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr)
462 result += buffer.data();
479 std::cerr <<
"NOTICE: B15F::errorhandler not set" << std::endl;
480 std::cout << ex.what() << std::endl;