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); }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "discoFever starting..."; g_appParameters = new QtKApplicationParameters(0,QString("discoFever")); if(g_appParameters->fileLoad(false)) { setDefaultParameters(); QString msg = "discoFever.cfg not found!\r\nSetting default configuration."; qDebug() << msg; a.exit(); } if(!g_appParameters->loadParam(QString("aplicacion"),QString("fileLog"),0).compare("1")) { qInstallMessageHandler(debugLogger); } qtkVirtualMIDI midi; networkThread network(QHostAddress(g_appParameters->loadParam(QString("network"),QString("udpHost"),0)), (quint16)g_appParameters->loadParam(QString("network"),QString("udpPort"),0).toInt(), (quint8)g_appParameters->loadParam(QString("network"),QString("statusRepeat"),0).toInt(), (quint8)g_appParameters->loadParam(QString("network"),QString("midiOffIgnore"),0).toInt(), (quint8)g_appParameters->loadParam(QString("network"),QString("midiChannelFilter"),0).toInt(), (quint8)g_appParameters->loadParam(QString("network"),QString("midiChannelFilterEnable"),0).toInt(), (quint8)g_appParameters->loadParam(QString("network"),QString("midiNoteOffset"),0).toInt()); switch(midi.getStatus()) { case stReady: QObject::connect(&midi,SIGNAL(midiReceived(midiMessage)),&network, SLOT(OnMidiReceived(midiMessage))); network.start(); qDebug() << "discoFever is ready to dance!"; return a.exec(); break; case stUnknown: case stClosed: case stError: default: qDebug() << "qtkVirtualMIDI error, status: " << midi.getStatus(); qDebug() << "discoFever will exit now..."; break; } return 0; }
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(); } }