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));
146 std::cout <<
"len: " << (int) n << std::endl << std::flush;
150 usart.
receive(&len, 0,
sizeof(len));
154 usart.
receive(reinterpret_cast<uint8_t *>(&str[0]), 0, len);
156 std::cout << &str[0] << std::endl;
158 info.push_back(std::string(str));
162 usart.
receive(&aw, 0,
sizeof(aw));
164 abort(
"Board Info fehlerhalft: code " + std::to_string((
int) aw));
175 usart.
transmit(&rq[0], 0,
sizeof(rq));
178 usart.
receive(&aw, 0,
sizeof(aw));
189 usart.
transmit(&rq[0], 0,
sizeof(rq));
192 usart.
receive(&aw, 0,
sizeof(aw));
203 usart.
transmit(&rq[0], 0,
sizeof(rq));
206 usart.
receive(&aw, 0,
sizeof(aw));
217 usart.
transmit(&rq[0], 0,
sizeof(rq));
220 usart.
receive(&aw, 0,
sizeof(aw));
231 usart.
transmit(&rq[0], 0,
sizeof(rq));
234 usart.
receive(&aw, 0,
sizeof(aw));
245 usart.
transmit(&rq[0], 0,
sizeof(rq));
248 usart.
receive(&aw, 0,
sizeof(aw));
257 static_cast<uint8_t >(value & 0xFF),
258 static_cast<uint8_t >(value >> 8)
260 usart.
transmit(&rq[0], 0,
sizeof(rq));
263 usart.
receive(&aw, 0,
sizeof(aw));
272 static_cast<uint8_t >(value & 0xFF),
273 static_cast<uint8_t >(value >> 8)
275 usart.
transmit(&rq[0], 0,
sizeof(rq));
278 usart.
receive(&aw, 0,
sizeof(aw));
286 abort(
"Bad ADC channel: " + std::to_string(channel));
294 usart.
transmit(&rq[0], 0,
sizeof(rq));
297 usart.
receive(reinterpret_cast<uint8_t*>(&aw), 0,
sizeof(aw));
300 abort(
"Bad ADC data detected (1)");
305 B15F::analogSequence(uint8_t channel_a, uint16_t *buffer_a, uint32_t offset_a, uint8_t channel_b, uint16_t *buffer_b,
306 uint32_t offset_b, uint16_t start, int16_t delta, uint16_t count)
356 static_cast<uint8_t>((freq >> 0) & 0xFF),
357 static_cast<uint8_t>((freq >> 8) & 0xFF),
358 static_cast<uint8_t>((freq >> 16) & 0xFF),
359 static_cast<uint8_t>((freq >> 24) & 0xFF)
362 usart.
transmit(&rq[0], 0,
sizeof(rq));
365 usart.
receive(&aw, 0,
sizeof(aw));
379 usart.
transmit(&rq[0], 0,
sizeof(rq));
382 usart.
receive(&aw, 0,
sizeof(aw));
397 usart.
transmit(&rq[0], 0,
sizeof(rq));
400 usart.
receive(&aw, 0,
sizeof(aw));
414 usart.
transmit(&rq[0], 0,
sizeof(rq));
417 usart.
receive(&aw, 0,
sizeof(aw));
424 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
429 std::this_thread::sleep_for(std::chrono::microseconds(us));
435 instance =
new B15F();
443 std::array<char, 128> buffer;
445 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(),
"r"), pclose);
448 throw std::runtime_error(
"popen() failed!");
450 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr)
452 result += buffer.data();
469 std::cerr <<
"NOTICE: B15F::errorhandler not set" << std::endl;
470 std::cout << ex.what() << std::endl;