X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_tracer.cc;h=081e4fedd3398f0435d5b060dd45a9deca1fc6d2;hb=95df99e6d4cf6d1f8d71183299d31835e6708eb8;hp=ea4b0c2d545cdaae2e87e20cebf337645689eb85;hpb=d074bc586e494d7dd83d415a487195a477095a4f;p=ardour.git diff --git a/gtk2_ardour/midi_tracer.cc b/gtk2_ardour/midi_tracer.cc index ea4b0c2d54..081e4fedd3 100644 --- a/gtk2_ardour/midi_tracer.cc +++ b/gtk2_ardour/midi_tracer.cc @@ -23,6 +23,9 @@ #include #include +#include "pbd/localtime_r.h" +#include "pbd/timersub.h" + #include "midi++/parser.h" #include "ardour/async_midi_port.h" @@ -40,13 +43,11 @@ using namespace Glib; MidiTracer::MidiTracer () : ArdourWindow (_("MIDI Tracer")) - , parser (0) , line_count_adjustment (200, 1, 2000, 1, 10) , line_count_spinner (line_count_adjustment) , line_count_label (_("Line history: ")) , autoscroll (true) , show_hex (true) - , collect (true) , show_delta_time (false) , _update_queued (0) , fifo (1024) @@ -178,6 +179,8 @@ MidiTracer::port_changed () if (mp) { mp->self_parser().any.connect_same_thread (_parser_connection, boost::bind (&MidiTracer::tracer, this, _1, _2, _3)); + mp->set_trace_on (true); + traced_port = mp; } } else { @@ -189,6 +192,11 @@ void MidiTracer::disconnect () { _parser_connection.disconnect (); + + if (traced_port) { + traced_port->set_trace_on (false); + traced_port.reset (); + } } void @@ -212,7 +220,7 @@ MidiTracer::tracer (Parser&, byte* msg, size_t len) 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); + localtime_r ((const time_t*)&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); @@ -272,9 +280,9 @@ MidiTracer::tracer (Parser&, byte* msg, size_t len) case MIDI::pitchbend: if (show_hex) { - s += snprintf (&buf[s], bufsize, "%16s chn %2d %02x\n", "Pitch Bend", (msg[0]&0xf)+1, (int) msg[1]); + s += snprintf (&buf[s], bufsize, "%16s chn %2d %02x %02x\n", "Pitch Bend", (msg[0]&0xf)+1, (int) msg[1], (int) msg[2]); } else { - s += snprintf (&buf[s], bufsize, "%16s chn %2d %-3d\n", "Pitch Bend", (msg[0]&0xf)+1, (int) msg[1]); + s += snprintf (&buf[s], bufsize, "%16s chn %2d %-3d %-3d\n", "Pitch Bend", (msg[0]&0xf)+1, (int) msg[1], (int) msg[2]); } break; @@ -402,6 +410,8 @@ MidiTracer::tracer (Parser&, byte* msg, size_t len) // If you want to append more to the line, uncomment this first // bufsize -= s; + assert(s <= buffer_size); // clang dead-assignment + fifo.write (&buf, 1); if (g_atomic_int_get (const_cast (&_update_queued)) == 0) {