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::onSerialAvailable() { emit serialTraffic(); QByteArray data = this->serial->readAll(); foreach(uint8_t next, data) { if (next & STATUS_MASK) this->onStatusByte(next); else this->onDataByte(next); if(this->data_expected == 0) sendMidiMessage(); } }
void Bridge::onMidiIn(double timeStamp, QByteArray message) { QString description = describeMIDI(message); QString translatedmessage = translateMIDItoSerialCommand(message); QByteArray ba = translatedmessage.toLocal8Bit(); const char *translatedmessagetosend = ba.data(); emit debugMessage(applyTimeStamp(QString("MIDI In: %1").arg((QString) translatedmessage))); emit midiReceived(); if(serial && serial->isOpen()) { serial->write(translatedmessagetosend); // serial->write(message); emit serialTraffic(); } }