X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_tracer.cc;h=2f97e5b6d5076a59136a78ce420bf794fc692ae0;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=934dffd11c161d88287dca38eea8460e837655d1;hpb=2a6a16f980ff9181b138f7a30aedfbde4426a591;p=ardour.git diff --git a/gtk2_ardour/midi_tracer.cc b/gtk2_ardour/midi_tracer.cc index 934dffd11c..2f97e5b6d5 100644 --- a/gtk2_ardour/midi_tracer.cc +++ b/gtk2_ardour/midi_tracer.cc @@ -34,7 +34,7 @@ #include "midi_tracer.h" #include "gui_thread.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace Gtk; using namespace std; @@ -43,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) @@ -59,7 +57,7 @@ MidiTracer::MidiTracer () , collect_button (_("Enabled")) , delta_time_button (_("Delta times")) { - ARDOUR::AudioEngine::instance()->PortRegisteredOrUnregistered.connect + ARDOUR::AudioEngine::instance()->PortRegisteredOrUnregistered.connect (_manager_connection, invalidator (*this), boost::bind (&MidiTracer::ports_changed, this), gui_context()); _last_receipt.tv_sec = 0; @@ -133,7 +131,7 @@ MidiTracer::ports_changed () { string const c = _port_combo.get_active_text (); _port_combo.clear (); - + ARDOUR::PortManager::PortList pl; ARDOUR::AudioEngine::instance()->get_ports (ARDOUR::DataType::MIDI, pl); @@ -181,8 +179,10 @@ 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 { async->parser()->any.connect_same_thread (_parser_connection, boost::bind (&MidiTracer::tracer, this, _1, _2, _3)); } @@ -192,6 +192,11 @@ void MidiTracer::disconnect () { _parser_connection.disconnect (); + + if (traced_port) { + traced_port->set_trace_on (false); + traced_port.reset (); + } } void @@ -215,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); @@ -275,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; @@ -405,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) {