summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-02-06 17:19:59 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-02-06 17:19:59 +0000
commit5252c77d94ab6e0005322dc90a1ec2d2f1226495 (patch)
treece2752c70d05e372342388e89b333c123b661b32
parent009c7a9e44d65184d6b6c613569decc9d93fb490 (diff)
add delta-time option to MIDI tracer window. note that its not incredibly accurate or useful right now, because timestamps come from the system clock and are taken when the data is read/written to the port buffer, not its actual timestamp within the buffer
git-svn-id: svn://localhost/ardour2/branches/3.0@11458 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/midi_tracer.cc34
-rw-r--r--gtk2_ardour/midi_tracer.h6
2 files changed, 33 insertions, 7 deletions
diff --git a/gtk2_ardour/midi_tracer.cc b/gtk2_ardour/midi_tracer.cc
index 6da5244600..70d7c24da6 100644
--- a/gtk2_ardour/midi_tracer.cc
+++ b/gtk2_ardour/midi_tracer.cc
@@ -40,19 +40,24 @@ MidiTracer::MidiTracer ()
, parser (0)
, line_count_adjustment (200, 1, 2000, 1, 10)
, line_count_spinner (line_count_adjustment)
- , line_count_label (_("Store this many lines: "))
+ , line_count_label (_("Line history: "))
, autoscroll (true)
, show_hex (true)
, collect (true)
+ , show_delta_time (false)
, _update_queued (0)
, fifo (1024)
, buffer_pool ("miditracer", buffer_size, 1024) // 1024 256 byte buffers
, autoscroll_button (_("Auto-Scroll"))
, base_button (_("Decimal"))
, collect_button (_("Enabled"))
+ , delta_time_button (_("Delta times"))
{
Manager::instance()->PortsChanged.connect (_manager_connection, invalidator (*this), boost::bind (&MidiTracer::ports_changed, this), gui_context());
+ _last_receipt.tv_sec = 0;
+ _last_receipt.tv_usec = 0;
+
VBox* vbox = manage (new VBox);
vbox->set_spacing (4);
@@ -88,6 +93,7 @@ MidiTracer::MidiTracer ()
HBox* bbox = manage (new HBox);
bbox->add (line_count_box);
+ bbox->add (delta_time_button);
bbox->add (base_button);
bbox->add (collect_button);
bbox->add (autoscroll_button);
@@ -100,6 +106,7 @@ MidiTracer::MidiTracer ()
base_button.signal_toggled().connect (sigc::mem_fun (*this, &MidiTracer::base_toggle));
collect_button.signal_toggled().connect (sigc::mem_fun (*this, &MidiTracer::collect_toggle));
autoscroll_button.signal_toggled().connect (sigc::mem_fun (*this, &MidiTracer::autoscroll_toggle));
+ delta_time_button.signal_toggled().connect (sigc::mem_fun (*this, &MidiTracer::delta_toggle));
base_button.show ();
collect_button.show ();
@@ -157,15 +164,24 @@ MidiTracer::tracer (Parser&, byte* msg, size_t len)
size_t s;
gettimeofday (&tv, 0);
- localtime_r (&tv.tv_sec, &now);
buf = (char *) buffer_pool.alloc ();
bufsize = buffer_size;
- s = strftime (buf, bufsize, "%H:%M:%S", &now);
- bufsize -= s;
- s += snprintf (&buf[s], bufsize, ".%06" PRId64, (int64_t) tv.tv_usec);
- bufsize -= s;
+ if (_last_receipt.tv_sec != 0 && show_delta_time) {
+ struct timeval delta;
+ timersub (&tv, &_last_receipt, &delta);
+ s = snprintf (buf, bufsize, "+%02" PRId64 ":%06" PRId64, (int64_t) delta.tv_sec, (int64_t) delta.tv_usec);
+ bufsize -= s;
+ } else {
+ localtime_r (&tv.tv_sec, &now);
+ s = strftime (buf, bufsize, "%H:%M:%S", &now);
+ bufsize -= s;
+ s += snprintf (&buf[s], bufsize, ".%06" PRId64, (int64_t) tv.tv_usec);
+ bufsize -= s;
+ }
+
+ _last_receipt = tv;
switch ((eventType) msg[0]&0xf0) {
case off:
@@ -386,6 +402,12 @@ MidiTracer::base_toggle ()
}
void
+MidiTracer::delta_toggle ()
+{
+ show_delta_time = delta_time_button.get_active();
+}
+
+void
MidiTracer::collect_toggle ()
{
if (collect_button.get_active ()) {
diff --git a/gtk2_ardour/midi_tracer.h b/gtk2_ardour/midi_tracer.h
index 0b195bf31e..682217be5b 100644
--- a/gtk2_ardour/midi_tracer.h
+++ b/gtk2_ardour/midi_tracer.h
@@ -34,10 +34,12 @@ class MidiTracer : public ArdourWindow
Gtk::SpinButton line_count_spinner;
Gtk::Label line_count_label;
Gtk::HBox line_count_box;
-
+ struct timeval _last_receipt;
+
bool autoscroll;
bool show_hex;
bool collect;
+ bool show_delta_time;
/** Incremented when an update is requested, decremented when one is handled; hence
* equal to 0 when an update is not queued. May temporarily be negative if a
@@ -55,11 +57,13 @@ class MidiTracer : public ArdourWindow
Gtk::CheckButton autoscroll_button;
Gtk::CheckButton base_button;
Gtk::CheckButton collect_button;
+ Gtk::CheckButton delta_time_button;
Gtk::ComboBoxText _port_combo;
void base_toggle ();
void autoscroll_toggle ();
void collect_toggle ();
+ void delta_toggle ();
void port_changed ();
void ports_changed ();