(marker.first) / frame_freq_hz)
+ << ",\"label\":\"P" << marker.second << "\"}";
+ }
+ out << "]";
+ return out.str();
+}
+
[[noreturn]] void fail_write(const std::string& message);
std::string replace_extension(const std::string& path, const std::string& new_extension) {
@@ -296,22 +409,25 @@ void write_live_html_document(const std::string& path, const std::string& data_s
<< " Auto-refresh every 500 ms\n"
<< " \n"
<< " \n"
- << " Open this page once and leave it open. It refreshes its data script to pick up new packets.
\n"
+ << " Open this page once and leave it open. It refreshes its data script to pick up a rolling continuous packet window.
\n"
<< " \n"
<< " \n"
<< " \n"
+ << " \n"
+ << " \n"
<< " \n"
<< " \n"
<< " \n"
<< " \n"
- << " Wheel: X zoom, Shift+wheel: Y zoom, double-click: reset\n"
+ << " Wheel: X zoom, Shift+wheel: Y zoom, Left/Right buttons or arrow keys: pan X, double-click: reset. The live view shows a rolling continuous packet window; CSV stores all samples.\n"
<< "
\n"
<< " \n"
- << " \n"
- << " CH1\n"
- << " CH2\n"
- << " DI1\n"
- << "
\n"
+ << " \n"
+ << " CH1\n"
+ << " CH2\n"
+ << " \n"
+ << " DI1\n"
+ << "
\n"
<< " \n"
<< " \n"
<< "