fix and listener
This commit is contained in:
@ -29,7 +29,6 @@ exec "$BIN" \
|
|||||||
packet_limit:0 \
|
packet_limit:0 \
|
||||||
do1_toggle_per_frame \
|
do1_toggle_per_frame \
|
||||||
do1_pair_subtract_avg \
|
do1_pair_subtract_avg \
|
||||||
do8_freq_ref \
|
|
||||||
do8_cycle_period:10 \
|
do8_cycle_period:10 \
|
||||||
"tty:${TTY_PATH}" \
|
"tty:${TTY_PATH}" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|||||||
102
tty_di8_listener.cpp
Normal file
102
tty_di8_listener.cpp
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cerrno>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
static constexpr uint16_t kMarkerDi8High = 0x00A8U;
|
||||||
|
static constexpr uint16_t kMarkerStandard = 0x000AU;
|
||||||
|
static constexpr uint16_t kMarkerAmplitude = 0x001AU;
|
||||||
|
static constexpr uint16_t kMarkerDo1Low = 0x00A3U;
|
||||||
|
static constexpr uint16_t kMarkerDo1High = 0x00A4U;
|
||||||
|
|
||||||
|
static const char* marker_name(uint16_t m) {
|
||||||
|
switch (m) {
|
||||||
|
case kMarkerDi8High: return "DI8_REF";
|
||||||
|
case kMarkerStandard: return "STD";
|
||||||
|
case kMarkerAmplitude: return "AMP";
|
||||||
|
case kMarkerDo1Low: return "DO1_LO";
|
||||||
|
case kMarkerDo1High: return "DO1_HI";
|
||||||
|
default: return "???";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
bool show_all = false;
|
||||||
|
const char* path = "/tmp/ttyADC_data";
|
||||||
|
|
||||||
|
for (int i = 1; i < argc; ++i) {
|
||||||
|
if (std::strcmp(argv[i], "--all") == 0 || std::strcmp(argv[i], "-a") == 0) {
|
||||||
|
show_all = true;
|
||||||
|
} else if (std::strcmp(argv[i], "-h") == 0 || std::strcmp(argv[i], "--help") == 0) {
|
||||||
|
std::fprintf(stderr,
|
||||||
|
"Usage: %s [OPTIONS] [tty_path]\n"
|
||||||
|
" tty_path path to TTY device (default: /tmp/ttyADC_data)\n"
|
||||||
|
" -a, --all show all frames, not just 0x00A8\n"
|
||||||
|
" -h, --help this message\n", argv[0]);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
path = argv[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::fprintf(stderr, "Opening %s ...\n", path);
|
||||||
|
const int fd = open(path, O_RDONLY);
|
||||||
|
if (fd < 0) {
|
||||||
|
std::fprintf(stderr, "open(%s): %s\n", path, std::strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
std::fprintf(stderr, "Listening (filter: %s). Ctrl+C to stop.\n",
|
||||||
|
show_all ? "all frames" : "0x00A8 only");
|
||||||
|
|
||||||
|
uint8_t buf[8];
|
||||||
|
std::size_t buf_fill = 0;
|
||||||
|
uint64_t frame_seq = 0;
|
||||||
|
uint64_t di8_count = 0;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
const ssize_t n = read(fd, buf + buf_fill, sizeof(buf) - buf_fill);
|
||||||
|
if (n <= 0) {
|
||||||
|
if (n == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (errno == EINTR) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::fprintf(stderr, "read: %s\n", std::strerror(errno));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
buf_fill += static_cast<std::size_t>(n);
|
||||||
|
if (buf_fill < 8) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t words[4];
|
||||||
|
std::memcpy(words, buf, 8);
|
||||||
|
buf_fill = 0;
|
||||||
|
|
||||||
|
const uint16_t marker = words[0];
|
||||||
|
const uint16_t step = words[1];
|
||||||
|
const int16_t ch1 = static_cast<int16_t>(words[2]);
|
||||||
|
const int16_t ch2 = static_cast<int16_t>(words[3]);
|
||||||
|
|
||||||
|
++frame_seq;
|
||||||
|
|
||||||
|
if (marker == kMarkerDi8High) {
|
||||||
|
++di8_count;
|
||||||
|
std::printf("#%-8lu [%s] step=%5u ch1=%6d ch2=%6d (di8_total=%lu)\n",
|
||||||
|
frame_seq, marker_name(marker), step, ch1, ch2, di8_count);
|
||||||
|
std::fflush(stdout);
|
||||||
|
} else if (show_all) {
|
||||||
|
std::printf("#%-8lu [%s] step=%5u ch1=%6d ch2=%6d\n",
|
||||||
|
frame_seq, marker_name(marker), step, ch1, ch2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
std::fprintf(stderr, "Done. Total frames: %lu, DI8 ref frames: %lu\n", frame_seq, di8_count);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user