qt/LedOK/wDevicesManager/ctrladvancedpanel.cpp
2022-08-25 18:37:24 +08:00

1756 lines
66 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 <QBoxLayout>
#include <QComboBox>
#include <QFileDialog>
#include <QJsonArray>
#include <QJsonObject>
#include <QKeyEvent>
#include <QMap>
#include <QMessageBox>
#include <QMetaEnum>
#include <QProcess>
#include <QSettings>
#include <QTextCodec>
#include <QUuid>
#include <QHeaderView>
#include <QColorDialog>
CtrlAdvancedPanel::CtrlAdvancedPanel(QWidget *parent,QList<LedCard *> *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; i<apps.size(); i++) {
auto app = apps.at(i);
QString packageName = app["packageName"].toString();
comboBox->addItem(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<QString,QString> 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<QAbstractSocket::SocketError>().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<QAbstractSocket::SocketError>().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(m_pLedlist==nullptr) return;
CHECK_CARD_SELECTED
m_strStartUrl = "http://"+m_pLedCard->m_strCardIp+":3000";
QString icFile = QFileDialog::getOpenFileName(this, "open file dialog", "", tr("indentity voucher (*.ic)"));
if(icFile.isEmpty()) return;
QFile file(icFile);
file.open(QIODevice::ReadOnly);
QJsonDocument icJson = QJsonDocument::fromJson(file.readAll());
file.close();
QJsonObject json;
json.insert("action", "InvokeTaxiAppFunction");
QJsonObject subJson;
subJson.insert("action", "BindAccount");
subJson.insert("accountIdToken", icJson["account_id_token"].toString());
subJson.insert("server", icJson["taxiServerURL"].toString());
subJson.insert("tlsServer", icJson["taxiServerTLSURL"].toString());
json.insert("jsonCommand", subJson);
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("InvokeTaxiAppFunction"),tr("Success"),tr("failed"));
m_pGetAskTimer->start(5000);
m_PostingDlg->exec();
}
}
} else emit sigSend(json,tr("InvokeTaxiAppFunction"));
});
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()<<tr("DeviceItem OnProHttpResponse 解析json文件错误");
return;
}
QJsonObject jsonObject = document.object();
QString strType=jsonObject["_type"].toString();
if(jsonObject["success"].toBool()==true){
if(strType == "SetRealtimeServer"){
MACRO_ASKTIME_STOP
MACRO_POSTING_DLG_UNLOCK
}
else if(strType == "RestartAndroid"){
MACRO_ASKTIME_STOP
MACRO_POSTING_DLG_UNLOCK
}
else if(strType == "GetScreenshotFull"){
MACRO_ASKTIME_STOP
MACRO_POSTING_DLG_UNLOCK
}
else if(strType == "AliIotSetting")
{
MACRO_ASKTIME_STOP
MACRO_POSTING_DLG_UNLOCK
}
else if(strType == "GetOnlineAddr"){
fdWebServerAddr->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()<<tr("DeviceItem OnProHttpResponse 解析json文件错误");
return;
}
QJsonObject jsonObject = document.object();
if(jsonObject["result"].toString()=="true")
{
if(jsonObject["data"].toString()=="true")
{
MACRO_ASKTIME_STOP
MACRO_POSTING_DLG_UNLOCK
QJsonObject json1;
json1.insert("_id", getRandomString(10));
json1.insert("_type", "GetOnlineAddr");
HttpPostByTypeJsonObject(pHpptClientAll,m_strUrl,json1);
}
}
}
}
//获取到httpPost的应答如果参数变化需要出发修改控件item的内容
void CtrlAdvancedPanel::OnProHttpResponseAll(QString url, QString postMD5, QByteArray data)
{
Q_UNUSED(postMD5)
//qDebug()<< url + "\r\n"+m_strUrl;
if(url == m_strUrl)
{
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(data,&parseJsonErr);
if(!(parseJsonErr.error == QJsonParseError::NoError))
{
if(data.size()==0)
qDebug()<<"json is empty";
else
qDebug()<<tr("DeviceItem OnProHttpResponse 解析json文件错误");
return;
}
QJsonObject jsonObject = document.object();
QString strType=jsonObject["_type"].toString();
if(jsonObject["success"].toBool()==true)
{
qDebug()<<m_pLedCard->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"<<jsonObject["server"].toString();
comboBox_realtimeServer->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<QString,QString> 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<QString,QString> params, QString fileName, QFile *uploadFile, int iType) {
auto boundary = QUuid::createUuid().toByteArray();
QByteArray data;
for(QMap<QString,QString>::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"));
}
}