void MainWindow::onValueChanged() { if(bridge) { bridge->deleteLater(); QThread::yieldCurrentThread(); // Try and get any signals from the bridge sent sooner not later QCoreApplication::processEvents(); bridge = NULL; } Settings::setLastMidiIn(ui->cmbMidiIn->currentText()); Settings::setLastMidiOut(ui->cmbMidiOut->currentText()); Settings::setLastSerialPort(ui->cmbSerial->currentText()); if(!ui->chk_on->isChecked() || ( ui->cmbSerial->currentIndex() == 0 && ui->cmbMidiIn->currentIndex() == 0 && ui->cmbMidiOut->currentIndex() == 0 )) { return; } ui->lst_debug->clear(); int midiIn =ui->cmbMidiIn->currentIndex()-1; int midiOut = ui->cmbMidiOut->currentIndex()-1; ui->lst_debug->addItem("Starting MIDI<->Serial Bridge..."); bridge = new Bridge(); connect(bridge, SIGNAL(debugMessage(QString)), SLOT(onDebugMessage(QString))); connect(bridge, SIGNAL(displayMessage(QString)), SLOT(onDisplayMessage(QString))); connect(bridge, SIGNAL(midiReceived()), ui->led_midiin, SLOT(blinkOn())); connect(bridge, SIGNAL(midiSent()), ui->led_midiout, SLOT(blinkOn())); connect(bridge, SIGNAL(serialTraffic()), ui->led_serial, SLOT(blinkOn())); bridge->attach(ui->cmbSerial->itemData(ui->cmbSerial->currentIndex()).toString(), Settings::getPortSettings(), midiIn, midiOut, workerThread); }
void Bridge::sendMidiMessage() { if(msg_data.length() == 0) return; if(bufferStartsWith(MSG_DEBUG)) { QString debug_msg = QString::fromAscii(msg_data.mid(4, msg_data[3]).data()); emit displayMessage(applyTimeStamp(QString("Serial Says: %1").arg(debug_msg))); } else { emit debugMessage(applyTimeStamp(QString("Serial In: %1").arg(describeMIDI(msg_data)))); if(midiOut) { std::vector<uint8_t> message = std::vector<uint8_t>(msg_data.begin(), msg_data.end()); midiOut->sendMessage(&message); emit midiSent(); } } msg_data.clear(); data_expected = 0; }