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));
150 usart.
receive(&len, 0,
sizeof(len));
154 usart.
receive(reinterpret_cast<uint8_t *>(&str[0]), 0, len);
156 info.push_back(std::string(str));
160 usart.
receive(&aw, 0,
sizeof(aw));
162 abort(
"Board Info fehlerhalft: code " + std::to_string((
int) aw));
173 usart.
transmit(&rq[0], 0,
sizeof(rq));
176 usart.
receive(&aw, 0,
sizeof(aw));
187 usart.
transmit(&rq[0], 0,
sizeof(rq));
190 usart.
receive(&aw, 0,
sizeof(aw));
201 usart.
transmit(&rq[0], 0,
sizeof(rq));
204 usart.
receive(&aw, 0,
sizeof(aw));
215 usart.
transmit(&rq[0], 0,
sizeof(rq));
218 usart.
receive(&aw, 0,
sizeof(aw));
229 usart.
transmit(&rq[0], 0,
sizeof(rq));
232 usart.
receive(&aw, 0,
sizeof(aw));
243 usart.
transmit(&rq[0], 0,
sizeof(rq));
246 usart.
receive(&aw, 0,
sizeof(aw));
255 static_cast<uint8_t >(value & 0xFF),
256 static_cast<uint8_t >(value >> 8)
258 usart.
transmit(&rq[0], 0,
sizeof(rq));
261 usart.
receive(&aw, 0,
sizeof(aw));
270 static_cast<uint8_t >(value & 0xFF),
271 static_cast<uint8_t >(value >> 8)
273 usart.
transmit(&rq[0], 0,
sizeof(rq));
276 usart.
receive(&aw, 0,
sizeof(aw));
284 abort(
"Bad ADC channel: " + std::to_string(channel));
292 usart.
transmit(&rq[0], 0,
sizeof(rq));
295 usart.
receive(reinterpret_cast<uint8_t*>(&aw), 0,
sizeof(aw));
298 abort(
"Bad ADC data detected (1)");
303 B15F::analogSequence(uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b,
304 uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)
354 static_cast<uint8_t>((freq >> 0) & 0xFF),
355 static_cast<uint8_t>((freq >> 8) & 0xFF),
356 static_cast<uint8_t>((freq >> 16) & 0xFF),
357 static_cast<uint8_t>((freq >> 24) & 0xFF)
360 usart.
transmit(&rq[0], 0,
sizeof(rq));
363 usart.
receive(&aw, 0,
sizeof(aw));
377 usart.
transmit(&rq[0], 0,
sizeof(rq));
380 usart.
receive(&aw, 0,
sizeof(aw));
395 usart.
transmit(&rq[0], 0,
sizeof(rq));
398 usart.
receive(&aw, 0,
sizeof(aw));
412 usart.
transmit(&rq[0], 0,
sizeof(rq));
415 usart.
receive(&aw, 0,
sizeof(aw));
422 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
427 std::this_thread::sleep_for(std::chrono::microseconds(us));
433 instance =
new B15F();
441 std::array<char, 128> buffer;
443 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(),
"r"), pclose);
446 throw std::runtime_error(
"popen() failed!");
448 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr)
450 result += buffer.data();
467 std::cerr <<
"NOTICE: B15F::errorhandler not set" << std::endl;
468 std::cout << ex.what() << std::endl;