From 2ab00c42ffa9587922852673063b35f2411c5a80 Mon Sep 17 00:00:00 2001 From: David Given Date: Thu, 7 Jan 2021 01:05:23 +0100 Subject: [PATCH] Handle index pulses on read. --- lib/usb/greaseweazleusb.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/usb/greaseweazleusb.cc b/lib/usb/greaseweazleusb.cc index ccc14792..0d88b48e 100644 --- a/lib/usb/greaseweazleusb.cc +++ b/lib/usb/greaseweazleusb.cc @@ -164,9 +164,7 @@ public: br.seek(4); nanoseconds_t freq = br.read_le32(); - std::cout << fmt::format("freq={}\n", freq); _clock = 1000000000 / freq; - std::cout << fmt::format("_clock={}\n", _clock); br.seek(0); return br.read_be16(); @@ -264,6 +262,7 @@ public: { uint64_t ticks_gw = 0; uint64_t lastevent_fl = 0; + uint64_t indexticks_gw = 0; for (;;) { uint8_t b = read_byte(); @@ -275,7 +274,19 @@ public: switch (read_byte()) { case FLUXOP_INDEX: + { + indexticks_gw += read_28(); + uint64_t ticks_fl = (indexticks_gw * _clock) / NS_PER_TICK; + uint64_t delta_fl = ticks_fl - lastevent_fl; + while (delta_fl > 0x3f) + { + bw.write_8(0x3f); + delta_fl -= 0x3f; + } + bw.write_8(delta_fl | F_BIT_INDEX); + lastevent_fl = ticks_fl; break; + } case FLUXOP_SPACE: ticks_gw += read_28();