#include "ctrladvancedpanel.h" #include "deviceitem.h" #include "globaldefine.h" #include "base/waitingdlg.h" #include "LoUIClass/changepasswordform.h" #include "LoUIClass/updateledset3dialog.h" #include "passwordindlg.h" #include "tools.h" #include "upgradeapkdialog.h" #include "base/table.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include CtrlAdvancedPanel::CtrlAdvancedPanel(QWidget *parent,QList *list) : QWidget(parent), m_pLedlist(list) { m_pLedlist = gSelCards; setFocusPolicy(Qt::StrongFocus); auto vBox = new QVBoxLayout(this); lbTitle = new QLabel; lbTitle->setAlignment(Qt::AlignCenter); vBox->addWidget(lbTitle); auto hBox = new QHBoxLayout; lbScreenWidth = new QLabel; hBox->addWidget(lbScreenWidth); fdScreenWidth = new QLineEdit; fdScreenWidth->setMaximumWidth(60); hBox->addWidget(fdScreenWidth); lbScreenHeight = new QLabel; hBox->addWidget(lbScreenHeight); fdScreenHeight = new QLineEdit; fdScreenHeight->setMaximumWidth(60); hBox->addWidget(fdScreenHeight); btnScreenSet = new QPushButton; btnScreenSet->setProperty("ssType", "progManageTool"); connect(btnScreenSet, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } auto width = fdScreenWidth->text(); if(width.isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputWidthTip")); fdScreenWidth->setFocus(); return; } auto height = fdScreenHeight->text(); if(height.isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputHeightTip")); fdScreenHeight->setFocus(); return; } QJsonObject json; json.insert("_id", "SetScreenSize"); json.insert("_type", "SetScreenSize"); json.insert("width", width.toInt()); json.insert("height", height.toInt()); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("SetScreenSize")); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("SetScreenSize")) } } }); hBox->addWidget(btnScreenSet); hBox->addSpacing(20); lbAlias = new QLabel; hBox->addWidget(lbAlias); fdAlias = new QLineEdit; fdAlias->setMaximumWidth(200); hBox->addWidget(fdAlias); btnAliasSet = new QPushButton; btnAliasSet->setProperty("ssType", "progManageTool"); connect(btnAliasSet, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } auto alias = fdAlias->text(); if(alias.isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputAliasTip")); fdAlias->setFocus(); return; } QJsonObject json; json.insert("_id", "SetCardAlias"); json.insert("_type", "SetCardAlias"); json.insert("alias", QString::fromLatin1(alias.toUtf8().toBase64())); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("SetCardAlias")); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("SetCardAlias")) } } }); hBox->addWidget(btnAliasSet); hBox->addStretch(); vBox->addLayout(hBox); hBox = new QHBoxLayout(); labelWebServer = new QLabel; hBox->addWidget(labelWebServer); fdWebServerAddr = new QComboBox; fdWebServerAddr->addItem(tr("www.m2mled.net")); fdWebServerAddr->addItem(tr("www.ledaips.com")); fdWebServerAddr->addItem(tr("https://www.taxihub.cn:2340")); fdWebServerAddr->addItem(tr("https://www.ledaips.com:2340")); fdWebServerAddr->addItem(tr("https://www.36taxi.com:2340")); fdWebServerAddr->addItem(tr("www.tlzxled.com")); fdWebServerAddr->setMinimumWidth(260); fdWebServerAddr->setEditable(true); hBox->addWidget(fdWebServerAddr); lbCompanyId = new QLabel; hBox->addWidget(lbCompanyId); fdCompanyId = new QLineEdit; fdCompanyId->setFixedWidth(100); hBox->addWidget(fdCompanyId); btnWebServerSet = new QPushButton; btnWebServerSet->setProperty("ssType", "progManageTool"); connect(btnWebServerSet, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QString serverAddr = fdWebServerAddr->currentText(); if(serverAddr.isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputWebServerAddressTip")); fdWebServerAddr->setFocus(); return; } auto companyId = fdCompanyId->text(); if(companyId.isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputCompanyIdTip")); fdCompanyId->setFocus(); return; } auto res = QMessageBox::question(gMainWin, tr("Tip Info"), tr("Do you want to modify webserveraddress and companyId?")); if(res != QMessageBox::Yes) return; QJsonObject json; json.insert("_id", "SetOnlineAddr"); json.insert("_type", "SetOnlineAddr"); json.insert("server", serverAddr); json.insert("companyID", companyId); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("SetOnlineAddr")); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("SetOnlineAddr")) } } }); hBox->addWidget(btnWebServerSet); hBox->addStretch(); vBox->addLayout(hBox); hBox = new QHBoxLayout(); label = new QLabel; hBox->addWidget(label); comboBox_realtimeServer = new QComboBox; comboBox_realtimeServer->addItem(tr("www.ledokcloud.com/realtime")); comboBox_realtimeServer->setMinimumWidth(260); comboBox_realtimeServer->setEditable(true); hBox->addWidget(comboBox_realtimeServer); pushButtonSetREaltimeServer = new QPushButton; hBox->addWidget(pushButtonSetREaltimeServer); pushButtonClearRealtimerAddress = new QPushButton; hBox->addWidget(pushButtonClearRealtimerAddress); hBox->addStretch(); vBox->addLayout(hBox); hBox = new QHBoxLayout(); btnApkCheck = new QPushButton; btnApkCheck->setProperty("ssType", "progManageTool"); connect(btnApkCheck, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QJsonObject json; json.insert("_id", "CheckSoftVersions"); json.insert("_type", "CheckSoftVersions"); if(gSelCards->count() != 1) return; auto waitingDlg = new WaitingDlg(this, tr("Check Apk Version")); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] { Def_CtrlSingleGetReply waitingDlg->close(); comboBox->clear(); auto apps = json["apps"].toArray(); auto infoDlg = new QDialog(this); infoDlg->setWindowFlag(Qt::WindowContextHelpButtonHint, false); infoDlg->resize(500, 500); infoDlg->setWindowTitle(tr("Software Version Info")); auto vBox = new QVBoxLayout(infoDlg); vBox->setContentsMargins(0, 0, 0, 0); auto table = new Table{ {"apk", "Apk"}, {"ver", tr("Version")}, {"pkg", tr("Package")} }; table->setDefs(); table->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); table->setRowCount(apps.size()); vBox->addWidget(table); for(int i=0; iaddItem(packageName); table->setItem(i, "apk", new QTableWidgetItem{app["appName"].toString()}); table->setItem(i, "ver", new QTableWidgetItem{app["versionName"].toString()}); table->setItem(i, "pkg", new QTableWidgetItem{packageName}); } infoDlg->show(); }); }); hBox->addWidget(btnApkCheck); btnApkUpgrade = new QPushButton; btnApkUpgrade->setProperty("ssType", "progManageTool"); connect(btnApkUpgrade, &QPushButton::clicked, this, [this] { if(m_pLedlist==0) return; if(m_pLedlist->count()==0 || (m_pLedlist->count()==1 && m_pLedCard==nullptr)) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } if(m_pLedlist->count() != 1) return; if(m_pLedCard->bPassword && m_pLedCard->m_bLockStatus && m_lockFlag) { QMessageBox::information(gMainWin, tr("Tip"),tr("This screen is encrypted,Please decrypt and upgrade APK!")); return; } QString url = "http://"+m_pLedCard->m_strCardIp+":2016/upload?type=software"; m_strUpgradeApkFile = QFileDialog::getOpenFileName(this, "open file dialog", "", tr("apk package (*.apk *.zip)")); QFileInfo file1(m_strUpgradeApkFile); QFile file(m_strUpgradeApkFile); QMap params_send; //上传的普通参数 在本程序中 需要上传一个普通参数为"username" params_send.insert("username","10005"); UpLoadForm(url, params_send, file1.fileName(), &file, 0); }); hBox->addWidget(btnApkUpgrade); comboBox = new QComboBox; comboBox->setMinimumWidth(200); hBox->addWidget(comboBox); pushButton_unistall = new QPushButton; hBox->addWidget(pushButton_unistall); pushButtonRunningCheck = new QPushButton; hBox->addWidget(pushButtonRunningCheck); hBox->addStretch(); vBox->addLayout(hBox); hBox = new QHBoxLayout(); pushButtonFpgaUpgrade = new QPushButton; hBox->addWidget(pushButtonFpgaUpgrade); pushButtonFpgaVerCheck = new QPushButton; hBox->addWidget(pushButtonFpgaVerCheck); pushButtonSyncFpgaVer = new QPushButton; hBox->addWidget(pushButtonSyncFpgaVer); pushButtonRestart = new QPushButton; hBox->addWidget(pushButtonRestart); hBox->addStretch(); vBox->addLayout(hBox); hBox = new QHBoxLayout(); btnClearProg = new QPushButton; btnClearProg->setProperty("ssType", "progManageTool"); connect(btnClearProg, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("Clearing Program")+" ..."); waitingDlg->show(); auto card = gSelCards->at(0); auto tcp = new QTcpSocket(); auto timer = new QTimer(tcp); timer->setSingleShot(true); connect(timer, &QTimer::timeout, tcp, [tcp] { tcp->close(); QMessageBox::critical(gMainWin, tr("Tip"), tr("Timeout")); }); connect(tcp, &QTcpSocket::disconnected, timer, &QTimer::stop); connect(tcp, &QTcpSocket::disconnected, tcp, &QTcpSocket::deleteLater); connect(tcp, &QTcpSocket::connected, tcp, [tcp, timer] { timer->stop(); tcp->write("{\"_type\":\"DelPrograms\",\"_id\":\"DelPrograms\",\"zVer\":\"xixun1\"}"); timer->start(10000); }); connect(tcp, &QTcpSocket::readyRead, tcp, [tcp, waitingDlg] { QByteArray resp = tcp->readAll(); tcp->close(); QJsonParseError parseErr; QJsonDocument json = QJsonDocument::fromJson(resp, &parseErr); if(parseErr.error != QJsonParseError::NoError) { waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Tip"), parseErr.errorString()); } else if(! json["success"].toBool()) { waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Tip"), tr("Clear Program")+" "+tr("Failed")); } else waitingDlg->success(); }); connect(tcp, &QTcpSocket::errorOccurred, tcp, [tcp, waitingDlg](QAbstractSocket::SocketError err) { tcp->close(); waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Tip"), QString::number(err)+" - "+QMetaEnum::fromType().valueToKey(err)+": "+tcp->errorString()); }); tcp->connectToHost(card->m_strCardIp, 3333); timer->start(10000); } else { foreach(auto card, *gSelCards) { auto tcp = new QTcpSocket(); auto timer = new QTimer(tcp); timer->setSingleShot(true); connect(timer, &QTimer::timeout, tcp, [tcp, card] { tcp->close(); gFdResInfo->append(card->m_strCardId+" "+tr("Clear Program")+" "+tr("Timeout")); }); connect(tcp, &QTcpSocket::disconnected, timer, &QTimer::stop); connect(tcp, &QTcpSocket::disconnected, tcp, &QTcpSocket::deleteLater); connect(tcp, &QTcpSocket::connected, tcp, [tcp, timer] { timer->stop(); tcp->write("{\"_type\":\"DelPrograms\",\"_id\":\"DelPrograms\",\"zVer\":\"xixun1\"}"); timer->start(10000); }); connect(tcp, &QTcpSocket::readyRead, tcp, [tcp, card] { QByteArray resp = tcp->readAll(); tcp->close(); QJsonParseError parseErr; QJsonDocument json = QJsonDocument::fromJson(resp, &parseErr); if(parseErr.error != QJsonParseError::NoError) gFdResInfo->append(card->m_strCardId+" "+tr("Clear Program")+" "+parseErr.errorString()); else if(! json["success"].toBool()) gFdResInfo->append(card->m_strCardId+" "+tr("Clear Program")+" "+tr("Failed")); else gFdResInfo->append(card->m_strCardId+" "+tr("Clear Program")+" "+tr("Success")); }); connect(tcp, &QTcpSocket::errorOccurred, tcp, [tcp, card](QAbstractSocket::SocketError err) { tcp->close(); gFdResInfo->append(card->m_strCardId+" "+tr("Clear Program")+" "+QString::number(err)+" - "+QMetaEnum::fromType().valueToKey(err)+": "+tcp->errorString()); }); tcp->connectToHost(card->m_strCardIp, 3333); timer->start(10000); } } }); hBox->addWidget(btnClearProg); btnGetLog = new QPushButton; btnGetLog->setProperty("ssType", "progManageTool"); connect(btnGetLog, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("Getting Log")+" ..."); waitingDlg->show(); auto card = gSelCards->at(0); auto reply = Tools::netManager().get(netReq("http://"+card->m_strCardIp+":2016/download?file=logs")); connect(reply, &QNetworkReply::finished, this, [this, reply, waitingDlg] { waitingDlg->close(); QString err = parseReplyJson(reply); if(! err.isEmpty()) { QMessageBox::critical(gMainWin, tr("Error"), err); return; } QString logFile = QApplication::applicationDirPath()+"/log_"+m_pLedCard->m_strCardId+".txt"; QFile file(logFile); if(! file.open(QIODevice::WriteOnly)) { QMessageBox::critical(gMainWin, tr("Error"), "Open for Write Fail"); return; } file.write(reply->readAll()); file.close(); QProcess::execute("notepad", {logFile}); }); } }); hBox->addWidget(btnGetLog); hBox->addStretch(); vBox->addLayout(hBox); groupM80 = new QGroupBox; hBox = new QHBoxLayout(groupM80); fdM80 = new QComboBox(); fdM80->setMinimumWidth(160); fdM80->setEditable(true); mM80Map.insert("576×3840","625×3960"); mM80Map.insert("640×3840","660×3960"); mM80Map.insert("720×3200","750×3300"); mM80Map.insert("864×2672","900×2750"); mM80Map.insert("1080×1920","1125×2200"); mM80Map.insert("1280×1760","1320×1850"); mM80Map.insert("1472×1536","1500×1650"); mM80Map.insert("1536×1472","1650×1500"); mM80Map.insert("1760×1280","1850×1320"); mM80Map.insert("1920×1080","2200×1125"); mM80Map.insert("2672×864","2750×900"); mM80Map.insert("3200×760","3300×825"); mM80Map.insert("3200×720","3300×750"); mM80Map.insert("3840×640","3960×660"); mM80Map.insert("3840×576","3960×625"); mM80Map.insert("4096×480","4500×550"); fdM80->addItems(mM80Map.keys()); hBox->addWidget(fdM80); btnM80Set = new QPushButton(); hBox->addWidget(btnM80Set); btnM80Refresh = new QPushButton(); hBox->addWidget(btnM80Refresh); btnM80Restore = new QPushButton(); hBox->addWidget(btnM80Restore); hBox->addStretch(); vBox->addWidget(groupM80); hBox = new QHBoxLayout(); btnLedSet3 = new QPushButton; btnLedSet3->setMinimumHeight(34); btnLedSet3->setProperty("ssType", "progManageTool"); connect(btnLedSet3, SIGNAL(clicked()),this,SLOT(OnStartConfigLedScreenSoft())); hBox->addWidget(btnLedSet3); btnLedSet4 = new QPushButton; btnLedSet4->setMinimumHeight(34); btnLedSet4->setProperty("ssType", "progManageTool"); connect(btnLedSet4, &QPushButton::clicked, btnLedSet4, [] { QFileInfo file("LedSet4.0/LedSet4.0.exe"); if(file.exists()) QProcess::startDetached(file.absoluteFilePath(), QStringList()); }); hBox->addWidget(btnLedSet4); vBox->addLayout(hBox); auto line = new QFrame; line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); vBox->addWidget(line); hBox = new QHBoxLayout(); btnBindTaxiIc = new QPushButton; btnBindTaxiIc->setProperty("ssType", "progManageTool"); connect(btnBindTaxiIc, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QString icFile = QFileDialog::getOpenFileName(this, "open file dialog", "", tr("indentity voucher (*.ic)")); if(icFile.isEmpty()) return; QFile file(icFile); if(! file.open(QIODevice::ReadOnly)) { QMessageBox::information(gMainWin, tr("Tip"), tr("Open file Failed")); return; } auto data = file.readAll(); file.close(); QJsonParseError jsonErr; QJsonDocument icJson = QJsonDocument::fromJson(data, &jsonErr); if(jsonErr.error != QJsonParseError::NoError) { QMessageBox::information(gMainWin, tr("Tip"), "JsonError "+jsonErr.errorString()+"\n"+data); return; } QJsonObject jsonCommand; jsonCommand.insert("action", "BindAccount"); jsonCommand.insert("accountIdToken", icJson["account_id_token"]); jsonCommand.insert("server", icJson["taxiServerURL"]); jsonCommand.insert("tlsServer", icJson["taxiServerTLSURL"]); QJsonObject json; json.insert("action", "InvokeTaxiAppFunction"); json.insert("jsonCommand", jsonCommand); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("InvokeTaxiAppFunction")); waitingDlg->show(); auto reply = Tools::netManager().post(reqForJson("http://"+gSelCards->at(0)->m_strCardIp+":3000"), QJsonDocument{json}.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { QString err = parseReplyJson(reply); if(! err.isEmpty()) { waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Error"), err); return; } auto data = reply->readAll(); QJsonParseError jsonErr; QJsonDocument json = QJsonDocument::fromJson(data, &jsonErr); if(jsonErr.error != QJsonParseError::NoError) { waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Error"), "JsonError "+jsonErr.errorString()+"\n"+data); return; } if(json["result"].toString() != "true") { waitingDlg->close(); QMessageBox::critical(gMainWin, tr("Error"), data); return; } waitingDlg->success(); }); } else { foreach(auto card, *gSelCards) { auto reply = Tools::netManager().post(reqForJson("http://"+card->m_strCardIp+":3000"), QJsonDocument{json}.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, card] { QString err = parseReplyJson(reply); if(! err.isEmpty()) { gFdResInfo->append(card->m_strCardId+" "+tr("InvokeTaxiAppFunction")+" "+tr("Error")+" "+err); return; } auto data = reply->readAll(); QJsonParseError jsonErr; QJsonDocument json = QJsonDocument::fromJson(data, &jsonErr); if(jsonErr.error != QJsonParseError::NoError) { gFdResInfo->append(card->m_strCardId+" "+tr("InvokeTaxiAppFunction")+" "+tr("Error")+" JsonError "+jsonErr.errorString()+"\n"+data); return; } if(json["result"].toString() != "true") { gFdResInfo->append(card->m_strCardId+" "+tr("InvokeTaxiAppFunction")+" "+tr("Error")+" "+data); return; } gFdResInfo->append(card->m_strCardId+" "+tr("InvokeTaxiAppFunction")+" "+QCoreApplication::translate("Def","Success")); }); } } }); hBox->addWidget(btnBindTaxiIc); hBox->addStretch(); vBox->addLayout(hBox); groupTopLevel = new QGroupBox(); hBox = new QHBoxLayout(groupTopLevel); fdTopLevelHL = new QRadioButton(groupTopLevel); fdTopLevelHL->setChecked(true); hBox->addWidget(fdTopLevelHL); fdTopLevelLH = new QRadioButton(groupTopLevel); hBox->addWidget(fdTopLevelLH); btnSetTopLevel = new QPushButton(groupTopLevel); hBox->addWidget(btnSetTopLevel); btnGetTopLevel = new QPushButton(groupTopLevel); hBox->addWidget(btnGetTopLevel); hBox->addStretch(); vBox->addWidget(groupTopLevel); groupBoxRotate = new QGroupBox(); hBox = new QHBoxLayout(groupBoxRotate); radioButton0degrees = new QRadioButton(groupBoxRotate); hBox->addWidget(radioButton0degrees); radioButton90degrees = new QRadioButton(groupBoxRotate); hBox->addWidget(radioButton90degrees); radioButton180degrees = new QRadioButton(groupBoxRotate); hBox->addWidget(radioButton180degrees); radioButton270degrees = new QRadioButton(groupBoxRotate); hBox->addWidget(radioButton270degrees); hBox->addStretch(); vBox->addWidget(groupBoxRotate); groupBoxMinMaxBrightness = new QGroupBox(); hBox = new QHBoxLayout(groupBoxMinMaxBrightness); lbMinBright = new QLabel(); hBox->addWidget(lbMinBright); fdMinBright = new QLineEdit("1"); fdMinBright->setMaximumWidth(50); hBox->addWidget(fdMinBright); lbMinBrightTip = new QLabel(); hBox->addWidget(lbMinBrightTip); btnMinBrightGet = new QPushButton(); hBox->addWidget(btnMinBrightGet); btnMinBrightSet = new QPushButton(); hBox->addWidget(btnMinBrightSet); label_3 = new QLabel(); hBox->addWidget(label_3); lineEdit_4 = new QLineEdit("255"); lineEdit_4->setMaximumWidth(50); hBox->addWidget(lineEdit_4); label_5 = new QLabel(); hBox->addWidget(label_5); pushButtonReadbackMaxBrightess = new QPushButton(); hBox->addWidget(pushButtonReadbackMaxBrightess); pushButtonSendMaxBrightness = new QPushButton(); hBox->addWidget(pushButtonSendMaxBrightness); hBox->addStretch(); vBox->addWidget(groupBoxMinMaxBrightness); vBox->addSpacing(20); grpBoxHiddenSettings = new QGroupBox; grpBoxHiddenSettings->setVisible(false); { auto vBox = new QVBoxLayout(grpBoxHiddenSettings); vBox->setContentsMargins(6,6,6,6); hBox = new QHBoxLayout; btnSetBack = new QPushButton; btnSetBack->setProperty("ssType", "progManageTool"); connect(btnSetBack, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QColorDialog colorDlg(this); colorDlg.setOption(QColorDialog::DontUseNativeDialog); if(colorDlg.exec() != QColorDialog::Accepted) return; QColor color = colorDlg.selectedColor(); if(! color.isValid()) return; QJsonObject json; json.insert("_id", "SetWallpaper"); json.insert("_type", "SetWallpaper"); json.insert("rgb", color.name()); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("Setting Wallpaper")+" ..."); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("Set Wallpaper")) } } }); hBox->addWidget(btnSetBack); btnSysUpd = new QPushButton; btnSysUpd->setProperty("ssType", "progManageTool"); connect(btnSysUpd, &QPushButton::clicked, this, [this] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QJsonObject json; json.insert("_id", "SystemUpdate"); json.insert("_type", "SystemUpdate"); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("System Updating")+" ..."); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("System Update")) } } }); hBox->addWidget(btnSysUpd); hBox->addStretch(); vBox->addLayout(hBox); lbBaudCfg = new QLabel; vBox->addWidget(lbBaudCfg); hBox = new QHBoxLayout; lbBaudModel = new QLabel; hBox->addWidget(lbBaudModel); auto fdBaudDevMod = new QComboBox; fdBaudDevMod->addItems({ "M5x/M6x", "M7x/Y7x", "E2x/Y6x", "L20" }); hBox->addWidget(fdBaudDevMod); lbUart = new QLabel; hBox->addWidget(lbUart); auto fdUart = new QComboBox; fdUart->setEditable(true); fdUart->setMinimumWidth(140); fdUart->setSizeAdjustPolicy(QComboBox::AdjustToContents); fdUart->addItems({ "/dev/ttyS3", "/dev/ttyS4", "/dev/ttyS5" }); hBox->addWidget(fdUart); connect(fdBaudDevMod, &QComboBox::currentTextChanged, fdUart, [fdUart](const QString &text) { fdUart->clear(); if(text.startsWith("M5x")) fdUart->addItems({ "/dev/ttyS3", "/dev/ttyS4", "/dev/ttyS5" }); else if(text.startsWith("M7x")) fdUart->addItem("/dev/ttyS4"); else if(text.startsWith("E2x")) fdUart->addItems({ "/dev/ttysWK0", "/dev/ttysWK1", "/dev/ttysWK2", "/dev/ttysWK3", "/dev/tty232", "/dev/tty485", "/dev/ttyTTL" }); else if(text.startsWith("L20")) fdUart->addItems({ "/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS4" }); }); lbBaud = new QLabel; hBox->addWidget(lbBaud); auto fdBaud = new QLineEdit; fdBaud->setMaximumWidth(70); hBox->addWidget(fdBaud); btnBaudSet = new QPushButton; btnBaudSet->setProperty("ssType", "progManageTool"); connect(btnBaudSet, &QPushButton::clicked, this, [this, fdUart, fdBaud] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QJsonObject json; json.insert("_id", "SetBaudRateByCardType"); json.insert("_type", "SetBaudRateByCardType"); json.insert("uartName", fdUart->currentText()); json.insert("baud", fdBaud->text().toInt()); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("Setting Baud Rate")+" ..."); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, waitingDlg] { Def_CtrlSetReqAfter }); } else { foreach(auto card, *gSelCards) { Def_CtrlSetMulti(tr("Set Baud Rate")) } } }); hBox->addWidget(btnBaudSet); btnBaudGet = new QPushButton; btnBaudGet->setProperty("ssType", "progManageTool"); connect(btnBaudGet, &QPushButton::clicked, this, [this, fdUart, fdBaud] { if(gSelCards->isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"), tr("NoSelectedController")); return; } QJsonObject json; json.insert("_id", "GetBaudRateByCardType"); json.insert("_type", "GetBaudRateByCardType"); json.insert("uartName", fdUart->currentText()); if(gSelCards->count() == 1) { auto waitingDlg = new WaitingDlg(this, tr("Getting Baud Rate")+" ..."); Def_CtrlReqPre connect(reply, &QNetworkReply::finished, this, [reply, fdBaud, waitingDlg] { Def_CtrlSingleGetReply waitingDlg->success(); fdBaud->setText(QString::number(json["baud"].toInt())); }); } else { foreach(auto card, *gSelCards) { auto reply = Tools::netManager().post(reqForJson("http://"+card->m_strCardIp+":2016/settings"), QJsonDocument{json}.toJson(QJsonDocument::Compact)); connect(reply, &QNetworkReply::finished, this, [reply, card] { QJsonDocument json; QString err = checkReplyForJson(reply, &json); gFdResInfo->append(card->m_strCardId+" "+tr("Get Baud Rate")+" "+(err.isEmpty()?QString::number(json["baud"].toInt()):err)); }); } } }); hBox->addWidget(btnBaudGet); hBox->addStretch(); vBox->addLayout(hBox); fdIsOpenADB = new QCheckBox; vBox->addWidget(fdIsOpenADB); hBox = new QHBoxLayout(); lbCustomJson = new QLabel; hBox->addWidget(lbCustomJson); hBox->addSpacing(40); btnSendCustomJson = new QPushButton; hBox->addWidget(btnSendCustomJson); hBox->addStretch(); vBox->addLayout(hBox); fdCustomJson = new QTextEdit; fdCustomJson->setMinimumHeight(120); vBox->addWidget(fdCustomJson); } vBox->addWidget(grpBoxHiddenSettings); vBox->addStretch(); pushButtonSetREaltimeServer->setProperty("ssType", "progManageTool"); pushButtonClearRealtimerAddress->setProperty("ssType", "progManageTool"); pushButtonRestart->setProperty("ssType", "progManageTool"); pushButton_unistall->setProperty("ssType", "progManageTool"); pushButtonRunningCheck->setProperty("ssType", "progManageTool"); pushButtonFpgaUpgrade->setProperty("ssType", "progManageTool"); pushButtonFpgaVerCheck->setProperty("ssType", "progManageTool"); pushButtonSyncFpgaVer->setProperty("ssType", "progManageTool"); btnMinBrightGet->setProperty("ssType", "progManageTool"); pushButtonReadbackMaxBrightess->setProperty("ssType", "progManageTool"); btnMinBrightSet->setProperty("ssType", "progManageTool"); pushButtonSendMaxBrightness->setProperty("ssType", "progManageTool"); btnM80Set->setProperty("ssType", "progManageTool"); btnM80Refresh->setProperty("ssType", "progManageTool"); btnM80Restore->setProperty("ssType", "progManageTool"); btnGetTopLevel->setProperty("ssType", "progManageTool"); btnSetTopLevel->setProperty("ssType", "progManageTool"); btnSendCustomJson->setProperty("ssType", "progManageTool"); groupBoxRotate->setVisible(false); groupBoxMinMaxBrightness->setVisible(false); groupTopLevel->setVisible(false); connect(pushButtonSetREaltimeServer,SIGNAL(clicked()),this,SLOT(OnSetRealtimeServer())); connect(pushButtonClearRealtimerAddress,SIGNAL(clicked()),this,SLOT(OnClearRealtimeServer())); connect(pushButtonRestart, SIGNAL(clicked()),this,SLOT(OnRestart())); connect(pushButton_unistall,SIGNAL(clicked()),this,SLOT(OnUnistall())); connect(pushButtonRunningCheck,SIGNAL(clicked()),this,SLOT(OnRunningCheck())); connect(pushButtonFpgaUpgrade,SIGNAL(clicked()),this,SLOT(OnFpgaUpgrade())); connect(pushButtonFpgaVerCheck,SIGNAL(clicked()),this,SLOT(OnFpgaVerCheck())); connect(pushButtonSyncFpgaVer,SIGNAL(clicked()),this,SLOT(OnSyncFpgaVer())); connect(radioButton0degrees,SIGNAL(clicked()),this,SLOT(On0degrees())); connect(radioButton90degrees,SIGNAL(clicked()),this,SLOT(On90degrees())); connect(radioButton180degrees,SIGNAL(clicked()),this,SLOT(On180degrees())); connect(radioButton270degrees,SIGNAL(clicked()),this,SLOT(On270degrees())); connect(btnMinBrightSet,SIGNAL(clicked()),this,SLOT(OnSendMinBrightness())); connect(pushButtonSendMaxBrightness,SIGNAL(clicked()),this,SLOT(OnSendMaxBrightness())); connect(btnMinBrightGet,SIGNAL(clicked()),this,SLOT(OnGetMinBrightness())); connect(pushButtonReadbackMaxBrightess,SIGNAL(clicked()),this,SLOT(OnGetMaxBrightness())); connect(btnSendCustomJson,SIGNAL(clicked()),this,SLOT(OnSendCustomJson())); pHpptClient = new HpptClient(this); connect(pHpptClient, &HpptClient::httpPostRspReady, this, &CtrlAdvancedPanel::OnProHttpResponse); pHpptClientAll = new HpptClient(this); connect(pHpptClientAll,SIGNAL(httpPostRspReady(QString , QString , QByteArray )),this, SLOT(OnProHttpResponseAll(QString , QString , QByteArray))); m_pGetAskTimer = new QTimer(this); connect(this, SIGNAL(sigSend(QJsonObject &,QString)), parent->parent(), SLOT(OnControlSendJson(QJsonObject &,QString))); connect(pHpptClient,SIGNAL(httpGetRspReady(QString , QByteArray )),this,SLOT(OnProHttpGetResponse(QString , QByteArray))); connect(btnM80Set,SIGNAL(clicked()),this,SLOT(OnM80Set())); connect(btnM80Refresh,SIGNAL(clicked()),this,SLOT(OnM80Refresh())); connect(btnM80Restore,SIGNAL(clicked()),this,SLOT(OnM80Restore())); connect(btnSetTopLevel,SIGNAL(clicked()),this,SLOT(OnSetTaxiTopScreen())); connect(btnGetTopLevel,SIGNAL(clicked()),this,SLOT(OnReadbackTaxiTopScreen())); connect(fdIsOpenADB,SIGNAL(clicked()),this,SLOT(OnOpenAdb())); connect(gDevicePanel, &DevicePanel::sigSelectedDeviceList, this, [this] { if(isVisible()) init(); }); transUi(); } CtrlAdvancedPanel::~CtrlAdvancedPanel(){ if(pHpptClient != nullptr){ delete pHpptClient; pHpptClient=nullptr; } if(pHpptClientAll != nullptr){ delete pHpptClientAll; pHpptClientAll=nullptr; } } void CtrlAdvancedPanel::showEvent(QShowEvent *event) { QWidget::showEvent(event); init(); } void CtrlAdvancedPanel::init() { m_pLedCard = gSelCards->at(0); if(! m_passwordOk) { hide(); PasswordInChDlg dlg(gMainWin); connect(dlg.btnBox, &QDialogButtonBox::accepted, &dlg, [&dlg]() { QString passRaw = QSettings().value("advUiPs").toString(); QString password = passRaw.isEmpty() ? "888" : QTextCodec::codecForName("GBK")->toUnicode(QByteArray::fromBase64(passRaw.toLocal8Bit())); if(dlg.fdPassword->text() == password) dlg.accept(); else QMessageBox::critical(&dlg, tr("Tip"),tr("Password is error")); }); if(dlg.exec()==QDialog::Accepted) { if(m_pLedlist->count()==1) btnScreenSet->setEnabled(true); m_passwordOk = true; show(); } else return; } bool isSingle = gSelCards->count()==1; btnApkUpgrade->setEnabled(isSingle); btnApkCheck->setEnabled(isSingle); pushButton_unistall->setEnabled(isSingle); pushButtonRunningCheck->setEnabled(isSingle); pushButtonFpgaUpgrade->setEnabled(isSingle); pushButtonFpgaVerCheck->setEnabled(isSingle); pushButtonSyncFpgaVer->setEnabled(isSingle); pushButtonRestart->setEnabled(isSingle); btnGetLog->setEnabled(isSingle); if(isSingle) groupM80->setVisible(m_pLedCard->m_strCardId.startsWith("M8", Qt::CaseInsensitive)); else groupM80->setVisible(true); if(! isSingle) return; m_strUrl = "http://"+m_pLedCard->m_strCardIp+":2016/settings"; QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "GetScreenSize"); HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json); QJsonObject json1; json1.insert("_id", getRandomString(10)); json1.insert("_type", "GetOnlineAddr"); HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json1); QJsonObject json2; json2.insert("_id", getRandomString(10)); json2.insert("_type", "GetRealtimeServer"); HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json2); QJsonObject json3; json3.insert("_id", getRandomString(10)); json3.insert("_type", "GetCardAlias"); HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json3); if(m_pLedCard->m_strCardId.startsWith("M8", Qt::CaseInsensitive)) { QJsonObject json3; json3.insert("_id", getRandomString(10)); json3.insert("_type", "GetAllScreenSizeM80"); qDebug()<<"GetAllScreenSizeM80 send"; HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json3); } } void CtrlAdvancedPanel::changeEvent(QEvent *event) { QWidget::changeEvent(event); if(event->type() == QEvent::LanguageChange) transUi(); } void CtrlAdvancedPanel::transUi() { btnBindTaxiIc->setText(tr("Binding *.ic account indentity voucher")); btnGetTopLevel->setText(tr("Readback")); btnLedSet3->setText(tr("Start LedSet3.0 configure LED module")); btnLedSet4->setText(tr("Start LedSet4")); btnM80Refresh->setText(tr("Refresh")); btnM80Restore->setText(tr("Restore to default")); btnM80Set->setText(tr("Set")); btnAliasSet->setText(tr("Set")); btnScreenSet->setText(tr("Set")); btnSetTopLevel->setText(tr("Set")); fdScreenHeight->setPlaceholderText(tr("Height")); fdScreenWidth->setPlaceholderText(tr("Width")); fdTopLevelHL->setText(tr("Service:High Out of service:Low")); fdTopLevelLH->setText(tr("Service:Low Out of service:High")); groupBoxRotate->setTitle(tr("Rotate")); grpBoxHiddenSettings->setTitle(tr("Hidden Settings")+" ("+tr("Click right button to hide")+")"); btnSysUpd->setText(tr("System Update")); lbBaudCfg->setText(tr("Baud Config")); lbBaudModel->setText(tr("Model")); lbUart->setText(tr("Uart")); lbBaud->setText(tr("Baud")); btnBaudSet->setText(tr("Set")); btnBaudGet->setText(tr("Get")); fdIsOpenADB->setText(tr("Open ADB")); lbCustomJson->setText(tr("Post Custom JSON")); btnSendCustomJson->setText(tr("Send")); groupM80->setTitle(tr("M80 configuration")); groupTopLevel->setTitle(tr("Taxi top screen configuration")); label->setText(tr("Realtimer Server Address:")); lbTitle->setText(tr("Advanced parameters")); lbCompanyId->setText(tr("Compant ID:")); labelWebServer->setText(tr("Web Server Address:")); lbMinBright->setText(tr("Min brightness")); label_3->setText(tr("Max brightness ")); lbMinBrightTip->setText(tr("(min:1)")); label_5->setText(tr("(max:255)")); lbAlias->setText(tr("Alias")); lbScreenHeight->setText(tr("Height")); lbScreenWidth->setText(tr("Screen Width(pixel)")); fdCompanyId->setPlaceholderText(tr("Compant ID")); btnApkCheck->setText(tr("Check Apk")); btnApkUpgrade->setText(tr("Apk upgrade")); btnGetLog->setText(tr("Check Log")); btnSetBack->setText(tr("Set Wallpaper")); btnClearProg->setText(tr("Clear Program")); pushButtonClearRealtimerAddress->setText(tr("Clear")); pushButtonFpgaUpgrade->setText(tr("FPGA Upgrade")); pushButtonFpgaVerCheck->setText(tr("FPGA version check")); btnMinBrightGet->setText(tr("Readback")); pushButtonReadbackMaxBrightess->setText(tr("Readback")); pushButtonRestart->setText(tr("Restart led controller system")); pushButtonRunningCheck->setText(tr("Running check")); pushButtonSendMaxBrightness->setText(tr("Send")); btnMinBrightSet->setText(tr("Send")); pushButtonSetREaltimeServer->setText(tr("Set")); btnWebServerSet->setText(tr("Set")); pushButtonSyncFpgaVer->setText(tr("Sync FPGA version")); pushButton_unistall->setText(tr("Uninstall")); radioButton0degrees->setText(tr("0 degrees")); radioButton180degrees->setText(tr("180 degrees")); radioButton270degrees->setText(tr("270 degrees")); radioButton90degrees->setText(tr("90 degrees")); } void CtrlAdvancedPanel::OnClearRealtimeServer(){ CHECK_CARD_SELECTED comboBox_realtimeServer->clearEditText(); QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetRealtimeServer"); json.insert("server", ""); MACRO_DEFINE_TIPDLG_FUCN(tr("ClearRealtimeServer"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnSetRealtimeServer(){ CHECK_CARD_SELECTED if(comboBox_realtimeServer->currentText().isEmpty()) { QMessageBox::information(gMainWin, tr("Tip"),tr("InputRealTimeAddressTip")); comboBox_realtimeServer->setFocus(); return; } QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetRealtimeServer"); json.insert("server", comboBox_realtimeServer->currentText()); MACRO_DEFINE_TIPDLG_FUCN(tr("SetRealtimeServer"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnStartConfigLedScreenSoft() { QString strLedSetFile = QApplication::applicationDirPath()+"/LedSet/LedSet3.0.exe"; QFileInfo cc22(strLedSetFile); if(cc22.exists()) { QProcess::startDetached(strLedSetFile,QStringList()); return; } QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\sysolution\\LedSet3.0", QSettings::NativeFormat); QString strLedsetPath = reg.value("Program_path").toString(); if(!strLedsetPath.isEmpty()) { QFileInfo cc(strLedsetPath); if(cc.exists()) QProcess::startDetached(strLedsetPath,QStringList()); else { auto res = QMessageBox::question(gMainWin, tr("Tip Info"), tr("Can not find LedSet3.0.exe,down you need download and install it")+strLedsetPath); if(res == QMessageBox::Yes) { UpdateLedset3Dialog *pDlg=new UpdateLedset3Dialog(this); pDlg->exec(); } } return; } QSettings reg1("HKEY_LOCAL_MACHINE\\SOFTWARE\\sysolution\\LedSet3.0", QSettings::NativeFormat); strLedsetPath = reg1.value("Program_path").toString(); QFileInfo cc(strLedsetPath); if(!strLedsetPath.isEmpty()) { if(cc.exists()) QProcess::startDetached(strLedsetPath,QStringList()); else { QString str1="C:/Program Files/sysolution/LedSet3.0/LedSet3.0.exe"; QFileInfo cc1(str1); if(cc1.exists()) QProcess::startDetached(str1,QStringList()); else { QString str2="C:/Program Files (x86)/sysolution/LedSet3.0/LedSet3.0.exe"; QFileInfo cc2(str1); if(cc2.exists()) QProcess::startDetached(str2,QStringList()); else { auto res = QMessageBox::question(gMainWin, tr("Tip Info"), tr("Can not find LedSet3.0.exe,down you need download and install it")+strLedsetPath); if(res == QMessageBox::Yes) { UpdateLedset3Dialog *pDlg=new UpdateLedset3Dialog(this); pDlg->exec(); } } } } } else { QString str1="C:/Program Files/sysolution/LedSet3.0/LedSet3.0.exe"; QFileInfo cc1(str1); if(cc1.exists()) QProcess::startDetached(str1,QStringList()); else { QString str2="C:/Program Files (x86)/sysolution/LedSet3.0/LedSet3.0.exe"; QFileInfo cc2(str1); if(cc2.exists())QProcess::startDetached(str2,QStringList()); else { auto res = QMessageBox::question(gMainWin, tr("Tip Info"), tr("Can not find LedSet3.0.exe,down you need download and install it")+strLedsetPath); if(res == QMessageBox::Yes) { UpdateLedset3Dialog *pDlg=new UpdateLedset3Dialog(this); pDlg->exec(); } } } } } void CtrlAdvancedPanel::OnRestart(){ CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "RestartAndroid"); MACRO_DEFINE_TIPDLG_FUCN(tr("RestartAndroid"),tr("Success"),tr("failed")) } //获取到httpPost的应答,如果参数变化需要出发修改控件item的内容 void CtrlAdvancedPanel::OnProHttpResponse(QString url, QString, QByteArray data){ if(url == m_strUrl) { QJsonParseError parseJsonErr; QJsonDocument document = QJsonDocument::fromJson(data,&parseJsonErr); if(parseJsonErr.error != QJsonParseError::NoError){ if(data.size()!=0) qDebug()<setCurrentText(jsonObject["server"].toString()); fdCompanyId->setText(jsonObject["companuID"].toString()); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "GetRealtimeServer"){ comboBox_realtimeServer->setCurrentText(jsonObject["server"].toString()); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "GetCardAlias") { fdAlias->setText(QString::fromUtf8(QByteArray::fromBase64(jsonObject["alias"].toString().toLatin1()))); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType =="UpgradeSoftware") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK QMessageBox::information(gMainWin, tr("Tip"),tr("UpgradeSoftware")+tr("Success")); } else if(strType == "UninstallSoftware"){ MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "SynchronousHardwareVersion"){ MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK QMessageBox::information(gMainWin, tr("Tip"),tr("SynchronousHardwareVersion")+" "+tr("Success")); } else if(strType == "DelPrograms") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "SetScreenRotation") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "SetMinBrightness") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "SetMaxBrightness") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "GetMinBrightness") { fdMinBright->setText(QString::number(jsonObject["brightness"].toInt())); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "GetMaxBrightness") { lineEdit_4->setText(QString::number(jsonObject["brightness"].toInt())); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "GetSpecialResolution") { QString strCurDisplayResolution = jsonObject["displayResolution"].toString(); fdM80->setCurrentText(strCurDisplayResolution); MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "CheckHardwareVersions"){ MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK QString strtempVer=""; int itempVerCount=0; foreach(QJsonValue value, jsonObject["versions"].toArray()) { QString strtempIcount=QString::number(itempVerCount); strtempVer += "[card"+strtempIcount+"]:"+value.toString()+"\r\n"; itempVerCount++; } QMessageBox::information(gMainWin, tr("FPGA Version"),strtempVer); } else if(strType == "IsSoftwareRunning"){ MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK if(jsonObject["running"].toBool()) { QMessageBox::information(gMainWin, tr("Tip"),tr("running")); } else { QMessageBox::information(gMainWin, tr("Tip"),tr("no running")); } } else if (strType == "SetHighForBusy") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if(strType == "OpenAdb") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } else if (strType == "GetStateForBusy") { MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK if(jsonObject["result"].toInt()==0) { fdTopLevelLH->setChecked(true); fdTopLevelHL->setChecked(false); } else { fdTopLevelLH->setChecked(false); fdTopLevelHL->setChecked(true); } } }else { if(strType =="UpgradeSoftware"){ qDebug()<<"slotUploadFinished failed ack"; MACRO_ASKTIME_STOP MACRO_POSTING_DLG_UNLOCK } } } if(url == m_strStartUrl) { QJsonParseError parseJsonErr; QJsonDocument document = QJsonDocument::fromJson(data,&parseJsonErr); if(!(parseJsonErr.error == QJsonParseError::NoError)) { if(data.size()==0) qDebug()<<"json is empty"; else qDebug()<m_strCardId +"---------"+ strType; if(strType == "GetScreenSize") { fdScreenWidth->setText(QString::number(jsonObject["width"].toInt())); fdScreenHeight->setText(QString::number(jsonObject["height"].toInt())); } else if(strType == "GetCardAlias") { fdAlias->setText(QString::fromUtf8(QByteArray::fromBase64(jsonObject["alias"].toString().toLatin1()))); } else if(strType == "GetOnlineAddr") { fdWebServerAddr->setCurrentText(jsonObject["server"].toString()); fdCompanyId->setText(jsonObject["companuID"].toString()); } else if(strType == "GetRealtimeServer") { qDebug()<<"GetRealtimeServer ack"<setCurrentText(jsonObject["server"].toString()); } else if(strType == "GetAllScreenSizeM80") { mM80Map=jsonObject["result"].toObject(); QStringList strlist=mM80Map.keys(); fdM80->clear(); fdM80->addItems(strlist); comboBox_realtimeServer->setCurrentText(jsonObject["server"].toString()); } } } } void CtrlAdvancedPanel::OnUnistall() { if(comboBox->currentText().isEmpty()) return; CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "UninstallSoftware"); json.insert("packageName", comboBox->currentText()); MACRO_DEFINE_TIPDLG_FUCN(tr("UninstallSoftware"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnRunningCheck() { if(comboBox->currentText().isEmpty()) return; CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "IsSoftwareRunning"); json.insert("packageName", comboBox->currentText());//包名需要填写? MACRO_DEFINE_TIPDLG_FUCN(tr("IsSoftwareRunning"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnFpgaUpgrade() { QString url="http://"+m_pLedCard->m_strCardIp+":2016/upload?type=hardware"; QFileDialog dlg; m_strUpgradeFpgaFile = QFileDialog::getOpenFileName(this, "open file dialog", "", tr("apk package (*.rpd)")); QFileInfo file1(m_strUpgradeFpgaFile); QFile file(m_strUpgradeFpgaFile); QMap params_send; //上传的普通参数 在本程序中 需要上传一个普通参数为"username" params_send.insert("username","10005"); UpLoadForm(url, params_send, file1.fileName(), &file, 1); } void CtrlAdvancedPanel::OnFpgaVerCheck() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "CheckHardwareVersions"); MACRO_DEFINE_TIPDLG_FUCN(tr("CheckHardwareVersions"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnSyncFpgaVer() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SynchronousHardwareVersion"); MACRO_DEFINE_TIPDLG_FUCN(tr("SynchronousHardwareVersion"),tr("Check Screen untile fpga update finished"),tr("failed")) } void CtrlAdvancedPanel::slotUploadFpgaFinished() { QFileInfo file(m_strUpgradeApkFile); QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SynchronousHardwareVersion"); HttpPostByTypeJsonObject(pHpptClient,m_strUrl,json); emit sigSetTipTextContent(tr("SynchronousHardwareVersion")); qDebug()<<"slotUploadFinished"; } void CtrlAdvancedPanel::slotUploadFinished() { QFileInfo file(m_strUpgradeApkFile); QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "UpgradeSoftware"); json.insert("fileName", file.fileName()); json.insert("isCustom", true); HttpPostByTypeJsonObject(pHpptClient,m_strUrl,json); emit sigSetTipTextContent(tr("install start...")); MACRO_ASKTIME_STOP m_pGetAskTimer->start(50000); qDebug()<<"slotUploadFinished"; } void CtrlAdvancedPanel::slotUploadProgress(qint64 A,qint64 B) { if(B!=0) { QString strbaifenbi=tr("Uploadding")+":"+QString("%1%").arg(A*100/B); emit sigSetTipTextContent(strbaifenbi); m_pGetAskTimer->stop(); m_pGetAskTimer->start(30000); } } void CtrlAdvancedPanel::UpLoadForm(QString Path, QMap params, QString fileName, QFile *uploadFile, int iType) { auto boundary = QUuid::createUuid().toByteArray(); QByteArray data; for(QMap::iterator t=params.begin(); t!=params.end(); t++) { data.append("--").append(boundary).append("\r\n"); data.append("Content-Disposition: form-data;name=\"").append(t.key().toUtf8()).append("\"\r\n"); data.append("\r\n"); data.append(t.value().toUtf8()).append("\r\n"); } //上传文件的头部 data.append("--").append(boundary).append("\r\n"); data.append("Content-Disposition: form-data;name=\"").append(fileName.toUtf8()).append("\";filename=\"").append(fileName.toUtf8()).append("\"\r\n"); data.append("\r\n"); //上传文件内容 if(!uploadFile->open(QIODevice::ReadOnly)) return; data.append(uploadFile->readAll()); uploadFile->close(); data.append("\r\n"); data.append("--").append(boundary).append("\r\n"); //编辑HTTP头部 QNetworkRequest request = netReq(Path, 15000, "multipart/form-data;boundary="+boundary); request.setHeader(QNetworkRequest::ContentLengthHeader, data.length()); //执行post请求 if(m_PostingDlg==nullptr) { m_PostingDlg = new LoEmptyDialog(); connect(m_PostingDlg,SIGNAL(sigClose()),this,SLOT(DeletePostingDlg())); connect(m_pGetAskTimer,SIGNAL(timeout()),m_PostingDlg,SLOT(TimerOutUnlock())); m_PostingDlg->lock(tr("UpgradeSoftware"),tr("Success"),tr("UpgradeSoftware")+tr("failed")); m_pGetAskTimer->start(60000); QNetworkReply * m_netReply = Tools::netManager().post(request, data); connect(m_netReply, SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(slotUploadProgress(qint64,qint64))); connect(this, SIGNAL(sigSetTipTextContent ( QString )), m_PostingDlg, SLOT( SetTipTextContent(QString))); if(iType==0)//apk { connect(m_netReply, SIGNAL(finished()), this, SLOT(slotUploadFinished())); } else if(iType==1)//fpga.rpd { connect(m_netReply, SIGNAL(finished()), this, SLOT(slotUploadFpgaFinished())); } m_PostingDlg->exec(); } } void messageHandler(QtMsgType type, const QMessageLogContext &, const QString &msg) { auto cur = QDateTime::currentDateTime(); QFile file("D:/LedOK-advanced-"+cur.toString("yy-MM-dd")+".log"); file.open(QIODevice::WriteOnly | QIODevice::Append); file.write(cur.toString("yy-MM-dd hh:mm:ss ").toUtf8()); if(type==QtDebugMsg) file.write(" Debug: "); else if(type==QtWarningMsg) file.write(" Warning: "); else if(type==QtCriticalMsg)file.write("Critical: "); else if(type==QtFatalMsg) file.write(" Fatal: "); else if(type==QtInfoMsg) file.write(" Info: "); else if(type==QtSystemMsg) file.write(" System: "); file.write(msg.toUtf8()); file.close(); } void CtrlAdvancedPanel::keyReleaseEvent(QKeyEvent *event) { auto key = event->key(); if(key == Qt::Key_F3) m_lockFlag = false; else if(key == Qt::Key_F5) groupBoxRotate->setVisible(! groupBoxRotate->isVisible()); else if(key == Qt::Key_F6) groupBoxMinMaxBrightness->setVisible(! groupBoxMinMaxBrightness->isVisible()); else if(key == Qt::Key_F8) groupTopLevel->setVisible(! groupTopLevel->isVisible()); else if(key == Qt::Key_F12) qInstallMessageHandler(messageHandler); QWidget::keyPressEvent(event); } void CtrlAdvancedPanel::mouseReleaseEvent(QMouseEvent *event){ if(event->button()==Qt::RightButton) grpBoxHiddenSettings->setVisible(! grpBoxHiddenSettings->isVisible()); } void CtrlAdvancedPanel::On0degrees() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetScreenRotation"); json.insert("rotation", 0); MACRO_DEFINE_TIPDLG_FUCN(tr("SetScreenRotation"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::On90degrees() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetScreenRotation"); json.insert("rotation", 1); MACRO_DEFINE_TIPDLG_FUCN(tr("SetScreenRotation"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::On180degrees() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetScreenRotation"); json.insert("rotation", 2); MACRO_DEFINE_TIPDLG_FUCN(tr("SetScreenRotation"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::On270degrees() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetScreenRotation"); json.insert("rotation", 3); MACRO_DEFINE_TIPDLG_FUCN(tr("SetScreenRotation"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnSendMinBrightness() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetMinBrightness"); json.insert("brightness", fdMinBright->text().toInt()); MACRO_DEFINE_TIPDLG_FUCN(tr("SetMinBrightness"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnSendMaxBrightness() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetMaxBrightness"); json.insert("brightness", lineEdit_4->text().toInt()); MACRO_DEFINE_TIPDLG_FUCN(tr("SetMaxBrightness"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnGetMinBrightness() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "GetMinBrightness"); MACRO_DEFINE_TIPDLG_FUCN(tr("GetMinBrightness"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnGetMaxBrightness() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "GetMaxBrightness"); MACRO_DEFINE_TIPDLG_FUCN(tr("GetMaxBrightness"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnM80Set() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetSpecialResolution"); json.insert("displayResolution",fdM80->currentText()), //显示分辨率 json.insert("totalResolution",mM80Map[fdM80->currentText()].toString() ); //显示分辨率 MACRO_DEFINE_TIPDLG_FUCN(tr("SetSpecialResolution"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnM80Refresh() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "GetSpecialResolution"); MACRO_DEFINE_TIPDLG_FUCN(tr("GetSpecialResolution"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnM80Restore() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "CleanDisplayScreenSize"); MACRO_DEFINE_TIPDLG_FUCN(tr("CleanDisplayScreenSize"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnSetTaxiTopScreen() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "SetHighForBusy"); if(fdTopLevelLH->isChecked()) json.insert("busyState", 0); else if(fdTopLevelHL->isChecked()) json.insert("busyState", 1); else { json.insert("busyState", 1); } MACRO_DEFINE_TIPDLG_FUCN(tr("SetHighForBusy"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnReadbackTaxiTopScreen() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "GetStateForBusy"); MACRO_DEFINE_TIPDLG_FUCN(tr("GetStateForBusy"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::OnOpenAdb() { CHECK_CARD_SELECTED QJsonObject json; json.insert("_id", getRandomString(10)); json.insert("_type", "OpenAdb"); if(fdIsOpenADB->isChecked()) { json.insert("open", true); } else { json.insert("open", false); } MACRO_DEFINE_TIPDLG_FUCN(tr("OpenAdb"),tr("Success"),tr("failed")) } void CtrlAdvancedPanel::DeletePostingDlg() { if(m_PostingDlg!=nullptr) { delete m_PostingDlg; m_PostingDlg=nullptr; } } void CtrlAdvancedPanel::OnSendCustomJson(){//ok CHECK_CARD_SELECTED m_strStartUrl="http://"+m_pLedCard->m_strCardIp+":3000"; QJsonObject json; QJsonParseError l_err; QJsonDocument l_doc = QJsonDocument::fromJson(fdCustomJson->toPlainText().toUtf8(), &l_err); if (l_err.error == QJsonParseError::NoError) { if (l_doc.isObject()) { json = l_doc.object(); } } if(json.count()<=0) { QMessageBox::information(gMainWin, tr("Tip"),tr("Json format is error!")); return; } if(m_pLedlist==nullptr) return; if(m_pLedlist->count()<=1) { if(m_pLedCard!=nullptr) { HttpPostByTypeJsonObject(pHpptClient,m_strStartUrl,json); if(m_PostingDlg==nullptr) { m_PostingDlg = new LoEmptyDialog(this); connect(m_PostingDlg,SIGNAL(sigClose()),this,SLOT(DeletePostingDlg())); connect(m_pGetAskTimer,SIGNAL(timeout()),m_PostingDlg,SLOT(TimerOutUnlock())); m_PostingDlg->lock(tr("AliIotSetting"),tr("Success"),tr("failed")); m_pGetAskTimer->start(5000); m_PostingDlg->exec(); } } } else { emit sigSend(json,tr("AliIotSetting")); } }