diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ad5df7a..677903d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,40 +1,73 @@ #include "mainwindow.h" #include +#include +#include mainWindow::mainWindow(QWidget *parent) : QMainWindow(parent), - _presets(new QTableWidget), - _presetSettings(new QTableWidget) + _presetsTable(new QTableWidget), + _presetSettingsTable(new QTableWidget) { QWidget *mainWidget = new QWidget(this); QHBoxLayout *mainLayout = new QHBoxLayout(mainWidget); - _presets->setRowCount(128); - _presets->setColumnCount(1); + _presetsTable->setRowCount(128); + _presetsTable->setColumnCount(1); - for(int i=0; i<_presets->rowCount(); i++){ + for(int i=0; i<_presetsTable->rowCount(); i++){ QString defaultCelString = QString("Preset #%1").arg(i+1); QTableWidgetItem *celContent = new QTableWidgetItem(defaultCelString); - _presets->setItem(i, 0, celContent); + _presetsTable->setItem(i, 0, celContent); } - _presets->horizontalHeader()->setVisible(false); + _presetsTable->horizontalHeader()->setVisible(false); QStringList settingsList; settingsList << "Channel" << "Description"<< "Type" << "Parameter"; - _presetSettings->setRowCount(16); - _presetSettings->setColumnCount(4); - _presetSettings->setHorizontalHeaderLabels(settingsList); + _presetSettingsTable->setRowCount(16); + _presetSettingsTable->setColumnCount(4); + _presetSettingsTable->setHorizontalHeaderLabels(settingsList); - mainLayout->addWidget(_presets); - mainLayout->addWidget(_presetSettings); + mainLayout->addWidget(_presetsTable); + mainLayout->addWidget(_presetSettingsTable); mainWidget->setLayout(mainLayout); setCentralWidget(mainWidget); + + connect(_midiIn, SIGNAL(midiMessageReceived(QMidiMessage*)), this, SLOT(onMidiMessageReceive(QMidiMessage*))); + } mainWindow::~mainWindow() { } + +void mainWindow::onMidiMessageReceive(QMidiMessage *message) +{ + std::vector rawMessage = message->getRawMessage(); + // MAKE SURE THE RECEIVED MESSAGE IS COMING FROM A POCKETC (F0 00 20 20 14 00) AND THAT message.size() > 7 BYTES + if(rawMessage.size() > 7) + { + // PROCESS THE MESSAGE ACCORDING TO THE BYTE #7 + switch(rawMessage.at(6)) + { + case THRU_MC_DUMP: + { + break; + } + + case SINGLE_DUMP: + { + break; + } + case VERSION_ANS: + { + break; + } + } + } + + //qDebug() << "BYTE #7 : " << rawMessage.at(6) ; // DEBUG +} diff --git a/src/mainwindow.h b/src/mainwindow.h index d109e92..4c1c245 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -5,18 +5,57 @@ #include #include #include +#include +#include + +#include "qmidimessage.h" +#include "qmidiin.h" +#include "qmidiout.h" + +enum deviceCommandByte { + + SINGLE_DUMP = 0x20, + SINGLE_STORE = 0x30, + SINGLE_STORE_REQ = 0x26, + THRU_MC_DUMP = 0x50, + THRU_MC_DUMP_REQ = 0x56, + VERSION_REQ = 0x06, + VERSION_ANS = 0x00, +}; + + class mainWindow : public QMainWindow { Q_OBJECT public: mainWindow(QWidget *parent = 0); - QTableWidget* _presets; - QTableWidget* _presetSettings; + QTableWidget* _presetsTable; + QTableWidget* _presetSettingsTable; ~mainWindow(); + + QMidiMessage* _midiMessage; + deviceCommandByte _deviceCommandByte; + + int _currentPreset; + int _masterChannel; + std::vector _presetSettings; + +private: + QMidiIn *_midiIn; + QMidiOut *_midiOut; + + signals: + void singleDumpReceived(QMidiMessage* message); + void thruMasterChnDumpReceived(QMidiMessage* message); + void versionAnswerReceived(QMidiMessage* message); public slots: + void onMidiMessageReceive(QMidiMessage* message); + //void updateDeviceConfig(std::bitset<3> thru, int mastChn); + //void updatePresetSettings(std::vector* presetSettings); + }; #endif // MAINWINDOW_H