diff --git a/mainwindow.cpp b/mainwindow.cpp index 53bd11c..722b20d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -17,9 +17,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi mAddress = ui->txt_address->text(); // load initial data - sendCommand("" - "GetParam" - ""); + sendCommand("GetParam"); + sendCommand("GetParam"); } MainWindow::~MainWindow() @@ -27,6 +26,72 @@ MainWindow::~MainWindow() delete ui; } +void MainWindow::sendCommand(QString cmd) +{ + QNetworkRequest request; + request.setUrl("http://" + mAddress + ":80/YamahaRemoteControl/ctrl"); + request.setRawHeader("Content-Type", "text/xml; charset=UTF-8"); + request.setRawHeader("Content-Length", QByteArray::number(cmd.size())); + + QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); + networkManager->post(request, cmd.toUtf8()); + connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished); +} + +void MainWindow::replyFinished(QNetworkReply* reply) +{ + QString ans; + + if(reply->error() == QNetworkReply::NoError) { + QByteArray data = reply->readAll(); + ans = QString(data); + } else { + qDebug() << reply->url(); + qDebug() << reply->errorString(); + return; + } + + // check power state + QRegularExpression regexPower("(.*)"); + QRegularExpressionMatch matchPower = regexPower.match(ans); + + if (matchPower.hasMatch()) { + if (matchPower.captured(1) == "On") mPowered = true; + else if (matchPower.captured(1) == "Off") mPowered = false; + } + + // check volume + QRegularExpression regexVolume("(.*)"); + QRegularExpressionMatch matchVolume = regexVolume.match(ans); + + if (matchVolume.hasMatch()) { + mVolume = matchVolume.captured(1).toInt(); + } + + qDebug() << ans; + + reply->deleteLater(); + updateUi(); +} + +void MainWindow::updateUi() { + ui->btn_onoff->setText(mPowered ? "On" : "Off"); + ui->dial->setEnabled(mPowered); + ui->dial->setValue(mVolume); + ui->lbl_volume->setEnabled(mPowered); + ui->btn_hdmi1->setEnabled(mPowered); + ui->btn_hdmi2->setEnabled(mPowered); + ui->btn_hdmi3->setEnabled(mPowered); + ui->btn_spotify->setEnabled(mPowered); + ui->btn_airplay->setEnabled(mPowered); + ui->btn_audioin->setEnabled(mPowered); +} + +void MainWindow::on_txt_address_textEdited(const QString &arg1) +{ + mAddress = arg1; +} + void MainWindow::on_btn_onoff_clicked() { if (mPowered){ @@ -43,60 +108,10 @@ void MainWindow::on_btn_onoff_clicked() updateUi(); } -void MainWindow::sendCommand(QString cmd) +} + +void yremote::MainWindow::on_dial_valueChanged(int value) { - QNetworkRequest request; - request.setUrl("http://" + mAddress + ":80/YamahaRemoteControl/ctrl"); - request.setRawHeader("Content-Type", "text/xml; charset=UTF-8"); - request.setRawHeader("Content-Length", QByteArray::number(cmd.size())); - - QNetworkAccessManager *networkManager = new QNetworkAccessManager(this); - mReply = networkManager->post(request, cmd.toUtf8()); - connect(networkManager, &QNetworkAccessManager::finished, this, &MainWindow::replyFinished); -} - -void MainWindow::replyFinished() -{ - QString ans; - mReply->deleteLater(); - - if(mReply->error() == QNetworkReply::NoError) { - QByteArray data = mReply->readAll(); - ans = QString(data); - } else { - qDebug() << mReply->url(); - qDebug() << mReply->errorString(); - return; - } - - // check power state - qDebug() << ans; - QRegularExpression regex("(.*)"); - QRegularExpressionMatch match = regex.match(ans); - - if (match.hasMatch()) { - if (match.captured(1) == "On") mPowered = true; - else if (match.captured(1) == "Off") mPowered = false; - } - - updateUi(); -} - -void MainWindow::updateUi() { - ui->btn_onoff->setText(mPowered ? "On" : "Off"); - ui->dial->setEnabled(mPowered); - ui->lbl_volume->setEnabled(mPowered); - ui->btn_hdmi1->setEnabled(mPowered); - ui->btn_hdmi2->setEnabled(mPowered); - ui->btn_hdmi3->setEnabled(mPowered); - ui->btn_spotify->setEnabled(mPowered); - ui->btn_airplay->setEnabled(mPowered); - ui->btn_audioin->setEnabled(mPowered); -} - -void MainWindow::on_txt_address_textEdited(const QString &arg1) -{ - mAddress = arg1; -} - + ui->lbl_volume->setText(QString::number(value)); + sendCommand("" + QString::number(value) + "1dB"); } diff --git a/mainwindow.h b/mainwindow.h index e246284..f3ce4d6 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -23,16 +23,18 @@ protected: private slots: void on_btn_onoff_clicked(); - void replyFinished(); + void replyFinished(QNetworkReply *reply); void on_txt_address_textEdited(const QString &arg1); + void on_dial_valueChanged(int value); + private: Ui::MainWindow *ui; QString mAddress; - QNetworkReply *mReply; bool mPowered = false; + int mVolume = 0; void sendCommand(QString cmd); void updateUi(); diff --git a/mainwindow.ui b/mainwindow.ui index 0a45761..a25e7ee 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -43,7 +43,20 @@ - + + + -805 + + + -165 + + + 5 + + + 5 + + @@ -145,7 +158,7 @@ QFrame::Sunken - -66.5 + -666 Qt::AlignCenter