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 || device.find(
'\t') != std::string::npos)
18 if(device.length() == 0)
19 abort(
"Adapter nicht gefunden");
21 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;
32 std::cout << PRE <<
"Teste Verbindung... " << std::flush;
48 abort(
"Verbindungstest fehlgeschlagen. Neueste Version im Einsatz?");
49 std::cout <<
"OK" << std::endl;
54 std::cout << PRE <<
"AVR Firmware Version: " << info[0] <<
" um " << info[1] <<
" Uhr (" << info[2] <<
")" << std::endl;
59 uint8_t tries = RECONNECT_TRIES;
69 abort(
"Verbindung kann nicht repariert werden");
77 for(uint8_t i = 0; i < 16; i++)
84 catch(std::exception& ex)
94 uint8_t dummy = rand() % 256;
102 return aw == MSG_OK && mirror == dummy;
108 uint16_t dummy = rand() % (0xFFFF / 3);
114 return aw == dummy * 3;
120 std::vector<std::string> info;
131 str += static_cast<char>(usart.
readByte());
139 abort(
"Board Info fehlerhalft: code " + std::to_string((
int) aw));
223 abort(
"Bad ADC channel: " + std::to_string(channel));
230 int n_sent = usart.write_timeout(&rq[0], 0,
sizeof(rq), 1000);
231 if(n_sent !=
sizeof(rq))
232 abort(
"Sent failed");
234 uint16_t adc = usart.
readInt();
237 abort(
"Bad ADC data detected (1)");
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)
244 buffer_a += offset_a;
245 buffer_b += offset_b;
253 usart.
writeInt(static_cast<uint16_t>(delta));
256 for(uint16_t i = 0; i < count; i++)
262 if(buffer_a[i] > 1023)
263 abort(
"Bad ADC data detected (2)");
274 if(buffer_b[i] > 1023)
275 abort(
"Bad ADC data detected (3)");
285 abort(
"Sequenz unterbrochen");
292 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
297 std::this_thread::sleep_for(std::chrono::microseconds(us));
303 instance =
new B15F();
310 std::array<char, 128> buffer;
312 std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd.c_str(),
"r"), pclose);
314 throw std::runtime_error(
"popen() failed!");
316 while (fgets(buffer.data(), buffer.size(), pipe.get()) !=
nullptr) {
317 result += buffer.data();
333 std::cerr <<
"NOTICE: B15F::errorhandler not set" << std::endl;
334 std::cout << ex.what() << std::endl;