123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- #include "oamupgrade.h"
- #include "ui_oamupgrade.h"
- #include "includes.h"
- #include "maindlg.h"
- OamUpgrade::OamUpgrade(QWidget *parent)
- : QDialog(parent)
- , ui(new Ui::OamUpgrade)
- {
- ui->setupUi(this);
- m_pMainDlg = static_cast<MainDlg*>(parent);
- m_strFilePaht = "";
- memset(&m_stUpgrade, 0,sizeof(OAM_UPGRADE_T));
- memset(&m_stLtvB, 0,sizeof(LTV_B_T));
- configSignalSlot();
- }
- OamUpgrade::~OamUpgrade()
- {
- delete ui;
- }
- void OamUpgrade::configSignalSlot(){
- connect(ui->pushButtonOpenFIle, &QPushButton::clicked, this, &this->selectUpgradeFile);
- connect(ui->pushButtonUpgrade, &QPushButton::clicked, this, &this->startUpgrade);
- connect(this, &this->SignalSendUpgradeMsg, m_pMainDlg, &m_pMainDlg->slotOamSendUpgradeMsg);
- connect(this, &this->SignalSendRestartMsg, m_pMainDlg, &m_pMainDlg->slotUpgradeRestart);
- }
- void OamUpgrade::selectUpgradeFile(){
-
- QString filter = tr("升级文件(*.bin);;All Files (*)");
-
- QString filePath = QFileDialog::getOpenFileName(this, tr("Open Bin File"),"",filter);
-
- if (filePath.isEmpty()) {
- return;
- }
-
- m_strFilePaht = filePath;
- ui->lineEditFilePath->setText(filePath);
- return;
- }
- void OamUpgrade::startUpgrade(){
- QMessageBox::StandardButton dlg;
- quint32 fileSize = 0;
- quint32 dataLen = 0;
- quint32 totalTimes = 0;
- quint8 remainderLen = 0;
- quint8 *pDataHead = NULL;
-
- m_pMainDlg->stopUpgradeTimer();
-
- if(m_strFilePaht.isEmpty()){
- QMessageBox::information(this, "提示", "请选择文件");
- return;
- }
-
- dlg = QMessageBox::question(this, "提示", "确实要进行升级吗", QMessageBox::Yes|QMessageBox::No);
- if (dlg == QMessageBox::No) {
- return;
- }
-
- QFile file(m_strFilePaht);
- if (!file.open(QIODevice::ReadOnly)) {
- QMessageBox::information(this, "提示", "打开文件错误");
- return;
- }
-
- QByteArray fileData = file.readAll();
- fileSize = fileData.size();
- remainderLen = fileSize % 4;
- dataLen = fileSize;
- if(remainderLen){
- dataLen = fileSize + 4 - remainderLen;
- }
-
- m_stUpgrade.pData = new quint8[dataLen];
- memset(m_stUpgrade.pData, 0, sizeof(quint8)*dataLen);
- pDataHead = m_stUpgrade.pData;
- for(quint32 i = 0; i < fileSize;i++){
- *pDataHead = fileData.at(i);
- pDataHead++;
- }
-
- m_stUpgrade.fileSize = dataLen;
- totalTimes = dataLen / PS_MCP_B_DATA_LEN;
- remainderLen = dataLen % PS_MCP_B_DATA_LEN;
- if(remainderLen){
- m_stUpgrade.totalTimes = totalTimes + 1;
- m_stUpgrade.remainderLen = remainderLen;
- }else{
- m_stUpgrade.totalTimes = totalTimes;
- m_stUpgrade.remainderLen = PS_MCP_B_DATA_LEN;
- }
-
- ui->progressBarUpgrade->setRange(0,totalTimes);
- ui->progressBarUpgrade->setValue(0);
-
- m_stUpgrade.upgradeStatus = 1;
- switchSoftWorkMode();
- return;
- }
- void OamUpgrade::switchSoftWorkMode(){
- m_stLtvB.wLen = 5;
- m_stLtvB.wTag = OAM_UPGRADE_SWITCH_SOFT_WORK_MODE;
- m_stLtvB.abyData[0] = 0x02;
- emit SignalSendUpgradeMsg((quint8*)&m_stLtvB, MCP_B_CONTROL, 5);
- return;
- }
- void OamUpgrade::noticeUpgradeFileInfo(){
- quint8 dataLen = 8;
- OAM_UPGRAD_NOTICE_FILE_INFO_T *pdwData = NULL;
- m_stLtvB.wLen = dataLen;
- m_stLtvB.wTag = OAM_UPGRADE_NOTICE_UPGRADE_FILE_INFO;
- pdwData = (OAM_UPGRAD_NOTICE_FILE_INFO_T *)m_stLtvB.abyData;
- pdwData->fileSize = m_stUpgrade.fileSize;
- emit SignalSendUpgradeMsg((quint8*)&m_stLtvB, MCP_B_CONTROL, dataLen);
- return;
- }
- void OamUpgrade::sendUpgradeFile(){
- quint16 dataLen = PS_MCP_B_DATA_LEN;
- quint8 *pbyDataHead = NULL;
- OAM_UPGRADE_DATA_PAYLOAD_T stUpgradeDataPayload;
- memset(&stUpgradeDataPayload, 0, sizeof(OAM_UPGRADE_DATA_PAYLOAD_T));
-
- if(m_stUpgrade.sendingTimes < m_stUpgrade.totalTimes){
- dataLen = PS_MCP_B_DATA_LEN;
- if(m_stUpgrade.sendingTimes == (m_stUpgrade.totalTimes - 1)){
- dataLen = m_stUpgrade.remainderLen;
- }
-
- m_stLtvB.wLen = 2 + 2 + 4 + dataLen;
- m_stLtvB.wTag = OAM_UPGRADE_SEND_UPGRADE_FILE;
-
- pbyDataHead = m_stUpgrade.pData + m_stUpgrade.sendingTimes * PS_MCP_B_DATA_LEN;
- memcpy(stUpgradeDataPayload.abyData, pbyDataHead, dataLen);
- m_stUpgrade.sendingTimes++;
- stUpgradeDataPayload.sendTimes = m_stUpgrade.sendingTimes;
- memcpy(m_stLtvB.abyData, &stUpgradeDataPayload, dataLen+4);
-
- emit SignalSendUpgradeMsg((quint8*)&m_stLtvB, MCP_B_FILE_TRANSFER, m_stLtvB.wLen);
-
- ui->progressBarUpgrade->setValue(m_stUpgrade.sendingTimes);
- }else{
- noticeUpgradeOver();
- }
- return;
- }
- void OamUpgrade::noticeUpgradeOver(){
- quint8 dataLen = 8;
- m_stLtvB.wLen = dataLen;
- m_stLtvB.wTag = OAM_UPGRADE_NOTICE_UPGRADE_OVER;
- memcpy(m_stLtvB.abyData, &m_stUpgrade.fileSize, 4);
- emit SignalSendUpgradeMsg((quint8*)&m_stLtvB, MCP_B_CONTROL, dataLen);
- return;
- }
- void OamUpgrade::slotNoticeUpgradeOk(quint16 wTag){
- if(m_stUpgrade.upgradeStatus == 1){
-
- if(wTag == OAM_UPGRADE_SWITCH_SOFT_WORK_MODE){
- QThread::msleep(25);
- noticeUpgradeFileInfo();
- }
-
- else if(wTag == OAM_UPGRADE_NOTICE_UPGRADE_FILE_INFO){
- QThread::msleep(25);
- sendUpgradeFile();
- }
-
- else if(wTag == OAM_UPGRADE_SEND_UPGRADE_FILE){
- QThread::msleep(25);
- sendUpgradeFile();
- }
-
- else if(wTag == OAM_UPGRADE_NOTICE_UPGRADE_OVER){
- deinitUpgrade();
- m_stUpgrade.upgradeStatus = 2;
- upgradeSuccess();
- }else{
- deinitUpgrade();
- QMessageBox::information(this,"提示","错的升级命令");
- }
- }
- return;
- }
- void OamUpgrade::slotNoticeUpgradeFail(){
- deinitUpgrade();
- QMessageBox::information(this,"提示","升级失败,请重试");
- m_stUpgrade.upgradeStatus = 3;
- return;
- }
- void OamUpgrade::slotNoticeUpgradeTimeout(){
- deinitUpgrade();
- QMessageBox::information(this,"提示","升级超时,请重试");
- m_stUpgrade.upgradeStatus = 4;
- return;
- }
- void OamUpgrade::deinitUpgrade(){
- ui->lineEditFilePath->setText("");
-
- free(m_stUpgrade.pData);
- m_stUpgrade.pData = NULL;
- memset(&m_stUpgrade, 0,sizeof(OAM_UPGRADE_T));
- memset(&m_stLtvB, 0,sizeof(LTV_B_T));
- return;
- }
- void OamUpgrade::upgradeSuccess(){
- QMessageBox::StandardButton dlg;
-
- dlg = QMessageBox::question(this, "提示", "软件升级成功,重启后生效,要重启吗?", QMessageBox::Yes|QMessageBox::No);
- if (dlg == QMessageBox::No) {
- return;
- }
-
- emit SignalSendRestartMsg();
- return;
- }
|