123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671 |
- #include "maindlg.h"
- #include "ui_maindlg.h"
- #include "includes.h"
- #include <QIODeviceBase>
- extern quint8 gMain_bySoftType;
- MainDlg::MainDlg(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainDlg)
- {
- ui->setupUi(this);
- Init();//模块初始化
- }
- MainDlg::~MainDlg()
- {
- delete ui;
- }
- //窗口关闭事件
- void MainDlg::closeEvent(QCloseEvent *event){
- m_pUart->CloseUart();
- event->accept();
- }
- //模块初始化
- void MainDlg::Init(){
- m_dwDeviceType = 0;//设备类型
- m_dwTabIndex = 0;//页面
- //初始化通信包号
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- memset(m_abyTmpData, 0, PS_FRAME_MAX_LEN);
- //隐藏关闭串口
- ui->pushButtonCloseUart->setVisible(false);
- //创建串口对象
- m_pUart = new Uart(this);
- //创建协议栈对象
- m_objPs = new Ps(this);
- //创建网络对象
- m_pHttpReq = new HttpReq(this);
- //界面初始化
- initUi();
- //配置消息和槽函数
- configSignalAndSlot();
- //获得本机可用串口
- getUartNameList();
- //配置网络模块
- configHttpReq();
- //初始化定时器
- m_pTimer = new QTimer();
- m_pUpgradeTimer = new QTimer();//升级定时器
- m_pTimer->setInterval(3000);//3秒超时
- m_pUpgradeTimer->setInterval(5000);//5秒超时
- connect(this->ui->comboBoxDeviceType, &QComboBox::currentIndexChanged, this, &MainDlg::slotDeviceTypeChanged);
- connect(this->ui->tabWidgetOamItem, &QTabWidget::currentChanged, this, &MainDlg::slotTabSwitch);
- connect(m_pTimer, &QTimer::timeout, this, &MainDlg::Timeout2000Slot);
- connect(m_pUpgradeTimer, &QTimer::timeout, this, &MainDlg::Timeout5000Slot);
- connect(this, &this->signalNoticeUpgradeOk,m_pOamUpgrade, &m_pOamUpgrade->slotNoticeUpgradeOk);
- connect(this, &this->signalNoticeUpgradeFail,m_pOamUpgrade, &m_pOamUpgrade->slotNoticeUpgradeFail);
- connect(this, &this->signalNoticeUpgradeTimeout,m_pOamUpgrade, &m_pOamUpgrade->slotNoticeUpgradeTimeout);
- }
- //界面初始化
- void MainDlg::initUi(){
- QString strText = "";
- //初始化设备类型下拉框
- ui->comboBoxDeviceType->addItem("声波基站", 0);
- ui->comboBoxDeviceType->addItem("同步基站", 1);
- //删除全部tap页
- while(ui->tabWidgetOamItem->count() >0){
- QWidget *pTmp = ui->tabWidgetOamItem->widget(0);
- ui->tabWidgetOamItem->removeTab(0);
- delete pTmp;
- }
- //系统参数
- m_pSysConfig = new sysconfig(this);
- ui->tabWidgetOamItem->addTab(m_pSysConfig, "系统参数");
- //设备参数
- m_pOamBaseParam = new OamBaseParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamBaseParam, "设备参数");
- //网管参数
- m_pOamNetworkParam = new OamNetworkParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamNetworkParam ,"网管参数");
- //同步参数
- m_pOamSyncParam = new OamSyncParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamSyncParam, "同步参数");
- //同步定时参数
- m_pOamSyncTimer = new oamsynctimer(this);
- ui->tabWidgetOamItem->addTab(m_pOamSyncTimer, "同步定时");
- //配置参数
- m_pOamConfigParam = new OamConfigParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamConfigParam, "增益参数");
- //安装参数
- m_pOamInstallParam = new OamInstallParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamInstallParam, "安装参数");
- //基站参数
- m_pOamBtsParam = new OamBtsParam(this);
- ui->tabWidgetOamItem->addTab(m_pOamBtsParam, "基站参数");
- //软件升级
- m_pOamUpgrade = new OamUpgrade(this);
- ui->tabWidgetOamItem->addTab(m_pOamUpgrade, "软件升级");
- ui->tabWidgetOamItem->setCurrentIndex(0);
- //根据版本禁用重置参数按钮
- if(gMain_bySoftType == MAIN_SOFT_TYPE_DEV){
- ui->pushButtonResetParam->setDisabled(false);
- }else{
- ui->pushButtonResetParam->setDisabled(true);
- }
- }
- //配置消息和槽函数
- void MainDlg::configSignalAndSlot(){
- //操作串口
- connect(ui->pushButtonOpenUart, &QPushButton::clicked, this, &this->openUart);
- connect(ui->pushButtonCloseUart, &QPushButton::clicked, this, &this->closeUart);
- connect(ui->pushButtonRefresh,&QPushButton::clicked, this, &this->getUartNameList);
- //保存参数
- connect(ui->pushButtonSaveParam, &QPushButton::clicked, m_pOamConfigParam, &m_pOamConfigParam->saveParamSlot);
- //重启设备
- connect(ui->pushButtonRestart, &QPushButton::clicked, m_pOamConfigParam, &m_pOamConfigParam->restartSlot);
- //重置设备参数
- connect(ui->pushButtonResetParam, &QPushButton::clicked, m_pOamConfigParam, &m_pOamConfigParam->resetParamSlot);
- }
- //获得本机可用串口列表
- void MainDlg::getUartNameList(){
- quint8 byFlag = 0;
- QList<QString> strUartNameList;
- quint8 byLen = 0;
- QString strText = "";
- ui->comboBoxUart->clear();
- byFlag = m_pUart->GetUartNameList(&strUartNameList, &byLen);
- if(!byFlag){
- return;
- }
- for(quint8 i = 0; i < byLen; i++){
- strText = strUartNameList[i];
- ui->comboBoxUart->addItem(strText);
- }
- return;
- }
- //配置httpreq模块
- void MainDlg::configHttpReq(){
- QString strHostUrl= "";
- QString strHostPort = "";
- //获得系统参数
- m_pSysConfig->getSysConfigParam(&strHostUrl, &strHostPort);
- //配置HttpReq模块参数
- if(strHostUrl.length() >0 && strHostPort.length() > 0){
- m_pHttpReq->configNetworkParam(strHostUrl, strHostPort);
- m_byHttpReqConfigOk = 1;//表示网络模块配置OK
- }
- }
- //打开串口
- void MainDlg::openUart(){
- quint8 byFlag = 0;
- QString strUartName = "";
- //获得已选串口
- strUartName = ui->comboBoxUart->currentText();
- if(strUartName.size() <= 0){
- QMessageBox::information(this, "提示", "请选择串口");
- return;
- }
- //打开串口
- byFlag = m_pUart->OpenUart(strUartName);
- if(!byFlag){
- return;
- }
- ui->pushButtonOpenUart->setVisible(false);
- ui->pushButtonCloseUart->setVisible(true);
- return;
- }
- //关闭串口
- void MainDlg::closeUart(){
- m_pUart->CloseUart();
- ui->pushButtonCloseUart->setVisible(false);
- ui->pushButtonOpenUart->setVisible(true);
- }
- //从串口接收数据的槽函数
- void MainDlg::slotReceiveDataFromUart(QByteArray dataList, quint16 wLen){
- if(wLen > 0){
- //将数据发送给协议栈
- m_objPs->PsReceiveData(dataList, wLen);//把数据发送给协议栈
- }
- return;
- }
- //发送数据
- //返回值:本次发送的字节数
- qint64 MainDlg::sendDataToUart(QByteArray dataList){
- qint64 fTmp = m_pUart->SendData(dataList);
- return fTmp;
- }
- //协议栈上行响应信号设置成功槽函数
- void MainDlg::PsUlRespSignalConfigOkSlot(quint8 *pbyData, quint16 wLen){
- quint8 *pbyOamData = NULL;
- LTV_T *pstLtv = NULL;
- quint16 wCommand = 0;// 监控命令
- quint16 wCurrentLen = 0;//当前已遍历长度
- quint8 bySaveFlag = 0;
- m_pTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- //申请内存
- if(wLen > 0){
- pbyOamData = new quint8[wLen];
- }
- memcpy(pbyOamData, pbyData, sizeof(quint8)*wLen);//拷贝数据
- pstLtv = (LTV_T*)pbyOamData;
- // 遍历报文
- while (wCurrentLen < wLen)
- {
- wCurrentLen += pstLtv->wLen;
- wCommand = pstLtv->wTag;
- if (ORDER_CONFIG_SAVE_PARAM == wCommand){// 保存参数
- bySaveFlag = 1;
- if(pstLtv->abyData[0] == 0x01){//保存成功
- QMessageBox::StandardButton dlg;
- dlg = QMessageBox::question(this, "提示", "保存参数成功,是否重启设备", QMessageBox::Yes|QMessageBox::No);
- if (dlg == QMessageBox::Yes) {
- delete pbyOamData;//删除内存
- pbyOamData = NULL;
- emit ui->pushButtonRestart->click();//重启设备
- }
- }else{//保存失败
- QMessageBox::critical(this, "提示", "保存参数失败");
- }
- }
- //移动指针
- if (wCurrentLen < wLen)
- {
- pstLtv = (LTV_T *)(pbyData + wCurrentLen); // 指针后移一个对象的长度
- }
- }
- if(!bySaveFlag){//非保存参数
- QMessageBox::information(this, "提示", "配置数据成功");
- }
- delete pbyOamData;//删除内存
- pbyOamData = NULL;
- return;
- }
- //协议栈上行响应信号设置失败槽函数
- void MainDlg::PsUlRespSignalConfigFailSlot(){
- m_pTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- QMessageBox::critical(this, "提示", "配置数据失败");
- return;
- }
- //协议栈上行查询响应成功信号槽函数
- void MainDlg::PsUlRespSignaQueryOkSlot(quint8 *pbyData, quint16 wLen){
- quint8 *pbyOamData = NULL;
- LTV_T *pstLtv = NULL;
- quint16 wCommand = 0;// 监控命令
- quint16 wCurrentLen = 0;//当前已遍历长度
- m_pTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- //申请内存
- if(wLen > 0){
- pbyOamData = new quint8[wLen];
- }
- memcpy(pbyOamData, pbyData, sizeof(quint8)*wLen);//拷贝数据
- pstLtv = (LTV_T*)pbyOamData;
- // 遍历消息,组织查询数据
- while (wCurrentLen < wLen)
- {
- wCurrentLen += pstLtv->wLen;
- wCommand = pstLtv->wTag;
- //遍历数据链表
- if (wCommand <= 0x00FF){// 查询设备信息
- m_pOamBaseParam->showBaseParam(pstLtv);
- }
- else if ((0x0100 <= wCommand) && (0x01FF >= wCommand)){// 查询网管参数
- m_pOamNetworkParam->showParam(pstLtv);
- }
- else if ((0x0200 <= wCommand) && (0x02FF >= wCommand)){// 查询告警状态
- }
- else if ((0x0300 <= wCommand) && (0x03FF >= wCommand)){// 查询配置参数
- m_pOamConfigParam->showParam(pstLtv);
- }
- else if ((0x0400 <= wCommand) && (0x04FF >= wCommand)){// 查询安装参数
- m_pOamInstallParam->showParam(pstLtv);
- }
- else if ((0x0500 <= wCommand) && (0x05FF >= wCommand)){// 查询同步参数
- m_pOamSyncParam->showParam(pstLtv);
- }
- else if ((0x0600 <= wCommand) && (0x06FF >= wCommand)){// 查询基站参数
- m_pOamBtsParam->showParam(pstLtv);
- }else if ((0x0700 <= wCommand) && (0x07FF >= wCommand)){// 查询同步定时参数
- m_pOamSyncTimer->showParam(pstLtv);
- }
- //移动指针
- if (wCurrentLen < wLen)
- {
- pstLtv = (LTV_T *)(pbyData + wCurrentLen); // 指针后移一个对象的长度
- }
- }
- delete pbyOamData;//删除内存
- pbyOamData = NULL;
- return;
- }
- //协议栈上行查询响应失败信号槽函数
- void MainDlg::PsUlRespSignaQueryFailSlot(){
- m_pTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- QMessageBox::critical(this, "提示", "查询数据失败");
- return;
- }
- //发送查询信号的槽函数
- void MainDlg::slotOamSendQueryMsg(quint8 *pbyData, quint16 wLen){
- quint16 wOamMsgLen = wLen + PS_FRAME_MIN_LEN;
- QByteArray dataList;
- qint64 wSendLen = 0;
- qint16 wPacketNo = 0;
- //上一个通信包还没有返回
- if(m_byPacketNo != MAINDLG_DEFAULT_PACKET_NO){
- return;
- }
- //生成协议报文
- memset(m_abyTmpData, 0, PS_FRAME_MAX_LEN);
- wPacketNo = m_objPs->PsGenApMsg(MCP_A, MCP_A_QUERY, pbyData, wLen, m_abyTmpData, &wOamMsgLen);
- //重新组织数据
- for(quint16 i = 0; i < wOamMsgLen; i++){
- dataList.append(m_abyTmpData[i]);
- }
- //将协议报文发送到串口
- wSendLen = sendDataToUart(dataList);
- if(wSendLen != wOamMsgLen){
- QMessageBox::critical(this, "提示", "查询参数失败");
- return;
- }
- m_byPacketNo = wPacketNo;
- m_pTimer->start();
- return;
- }
- //pbyData:其他模块传过来的OAM消息
- //wLen:OAM消息长度
- //wCmd:监控命令
- void MainDlg::slotOamSendConfigMsg(quint8 *pbyData, quint16 wLen, quint16 wCmd){
- quint16 wOamMsgLen = wLen + PS_FRAME_MIN_LEN;
- QByteArray dataList;
- qint64 wSendLen = 0;
- qint16 wPacketNo = 0;
- //上一个通信包还没有返回
- if(m_byPacketNo != MAINDLG_DEFAULT_PACKET_NO){
- return;
- }
- //生成协议报文
- memset(m_abyTmpData, 0, PS_FRAME_MAX_LEN);
- wPacketNo = m_objPs->PsGenApMsg(MCP_A, MCP_A_CONFIGURE, pbyData, wLen, m_abyTmpData, &wOamMsgLen);
- //重新组织数据
- for(quint16 i = 0; i < wOamMsgLen; i++){
- dataList.append(m_abyTmpData[i]);
- }
- //将协议报文发送到串口
- wSendLen = sendDataToUart(dataList);
- if(wSendLen != wOamMsgLen){
- QMessageBox::critical(this, "提示", "配置参数失败");
- return;
- }
- //非重启命令
- if(wCmd != ORDER_CONFIG_RESTART){
- m_byPacketNo = wPacketNo;
- m_pTimer->start();
- }
- return;
- }
- //超时槽函数
- void MainDlg::Timeout2000Slot(){
- m_pTimer->stop();
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- QMessageBox::critical(this, "提示", "通信超时,请重试");
- }
- //升级超时槽函数
- void MainDlg::Timeout5000Slot(){
- m_pUpgradeTimer->stop();
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- //向升级模块发送升级超时消息
- emit signalNoticeUpgradeTimeout();
- }
- //槽函数-上传基站基本参数-增加
- void MainDlg::slotUploadBtsBaseParamAdd(QString strApi, QJsonObject jsonObject){
- QString strResp = "";
- //二次确认
- QMessageBox::StandardButton dlg;
- dlg = QMessageBox::question(this, "提示", "确定要上传基站参数吗", QMessageBox::Yes|QMessageBox::No);
- if (dlg == QMessageBox::No) {
- return;
- }
- //发送post消息
- if(m_byHttpReqConfigOk > 0){
- //组织项目编号
- if(m_dwProjectId <= 0){
- QMessageBox::critical(this, "提示", "请首先配置项目编号");
- return;
- }
- jsonObject["project_id"] = QJsonValue::fromVariant(QVariant(static_cast<quint64>(m_dwProjectId)));
- //设置消息源
- jsonObject["source_id"] = 3;//数据源于GUI网管;
- strResp = m_pHttpReq->sendPostReq(strApi, jsonObject);
- QMessageBox::information(this, "提示", strResp);
- }else{
- QMessageBox::critical(this, "提示", "http模块不可用,请先配置系统参数再尝试");
- }
- return;
- }
- //槽函数-上传基站基本参数-修改
- void MainDlg::slotUploadBtsBaseParamUpdate(QString strApi, QJsonObject jsonObject){
- QString strResp = "";
- //二次确认
- QMessageBox::StandardButton dlg;
- dlg = QMessageBox::question(this, "提示", "确定要上传基站参数吗", QMessageBox::Yes|QMessageBox::No);
- if (dlg == QMessageBox::No) {
- return;
- }
- if(m_byHttpReqConfigOk > 0){
- //组织项目编号
- if(m_dwProjectId <= 0){
- QMessageBox::critical(this, "提示", "请首先配置项目编号");
- return;
- }
- jsonObject["project_id"] = QJsonValue::fromVariant(QVariant(static_cast<quint64>(m_dwProjectId)));
- //组织基站ID
- if(m_dwBtsId < 1000){
- QMessageBox::critical(this, "提示", "请配置正确的基站编号");
- return;
- }
- jsonObject["bts_id"] = QJsonValue::fromVariant(QVariant(static_cast<quint64>(m_dwBtsId)));
- //设置消息源
- jsonObject["source_id"] = 3;//数据源于GUI网管
- //发送消息
- strResp = m_pHttpReq->sendPostReq(strApi, jsonObject);
- QMessageBox::information(this, "提示", strResp);
- }else{
- QMessageBox::critical(this, "提示", "http模块不可用,请先配置系统参数再尝试");
- }
- return;
- }
- //发送升级报文
- //pbyData:升级模块传过来的OAM消息
- //byCmdType:命令类型
- //wLen:OAM消息长度
- void MainDlg::slotOamSendUpgradeMsg(quint8 *pbyData, quint8 byCmdType, quint16 dataLen){
- quint16 wOamMsgLen = dataLen + PS_FRAME_MIN_LEN;
- QByteArray dataList;
- qint64 wSendLen = 0;
- quint16 wPacketNo = 0;
- //上一个通信包还没有返回
- if(m_byPacketNo != MAINDLG_DEFAULT_PACKET_NO){
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- return;
- }
- //生成协议报文
- memset(m_abyTmpData, 0, PS_FRAME_MAX_LEN);
- wPacketNo = m_objPs->PsGenApMsg(MCP_B, byCmdType, pbyData, dataLen, m_abyTmpData, &wOamMsgLen);
- //重新组织数据
- for(quint16 i = 0; i < wOamMsgLen; i++){
- dataList.append(m_abyTmpData[i]);
- }
- //将协议报文发送到串口
- wSendLen = sendDataToUart(dataList);
- if(wSendLen != wOamMsgLen){
- QMessageBox::critical(this, "提示", "升级报文发送失败");
- emit signalNoticeUpgradeFail();//通知升级模块,升级失败
- }
- m_byPacketNo = wPacketNo;
- m_pUpgradeTimer->start();
- return;
- }
- //协议栈上行响应信号-升级命令成功槽函数
- void MainDlg::PsUlRespSignalUpgradeOkSlot(quint8 *pbyData){
- LTV_B_T *pstLtv = (LTV_B_T*)pbyData;
- quint16 wCommand = pstLtv->wTag;// 监控命令
- m_pUpgradeTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- //通知升级模块
- emit signalNoticeUpgradeOk(wCommand);
- return;
- }
- //协议栈上行响应信号-升级命令失败槽函数
- void MainDlg::PsUlRespSignalUpgradeFailSlot(){
- m_pUpgradeTimer->stop();//停止定时器
- m_byPacketNo = MAINDLG_DEFAULT_PACKET_NO;
- //通知升级模块
- emit signalNoticeUpgradeFail();
- return;
- }
- //升级模块通知需要重启启动
- void MainDlg::slotUpgradeRestart(){
- emit ui->pushButtonRestart->click();//重启设备
- }
- //配置项目编号
- void MainDlg::setProjectId(quint32 dwProjectId){
- m_dwProjectId = dwProjectId;
- QString hexStr = QString::number(dwProjectId, 16);
- hexStr = hexStr.rightJustified(8, '0');//右侧对齐,输出8位字符,不足8位的左侧用0填充
- hexStr = hexStr.toUpper();
- ui->labelPorjectId->setText(hexStr);
- return;
- }
- //查询项目编号
- quint32 MainDlg::getPorjectId(){
- return m_dwProjectId;
- }
- //配置基站编号
- void MainDlg::mainDlgSetBtsId(quint32 dwBtsId){
- m_dwBtsId = dwBtsId;
- ui->labelBtsId->setText(QString::number(m_dwBtsId));
- return;
- }
- //设备类型下拉框槽函数
- void MainDlg::slotDeviceTypeChanged(int index){
- m_dwDeviceType = index;//设备类型
- if(m_dwTabIndex == 1){
- m_pOamBaseParam->updateUi();
- }else if(m_dwTabIndex == 3){
- m_pOamSyncParam->updateUi();
- }else if(m_dwTabIndex == 4){
- m_pOamSyncTimer->updateUi();
- }else if(m_dwTabIndex == 5){
- m_pOamConfigParam->updateUi();
- }else if(m_dwTabIndex == 6){
- m_pOamInstallParam->updateUi();
- }else if(m_dwTabIndex == 7){
- m_pOamBtsParam->updateUi();
- }
- }
- //查询设备类型
- int MainDlg::getDeviceType(){
- return m_dwDeviceType;
- }
- //tab页面切换
- void MainDlg::slotTabSwitch(int index){
- m_dwTabIndex = index;//保存tab索引
- if(index == 1){//设备基本参数
- m_pOamBaseParam->updateUi();
- }else if(index == 3){
- m_pOamSyncParam->updateUi();
- }else if(index == 4){
- m_pOamConfigParam->updateUi();
- }else if(index == 5){
- m_pOamInstallParam->updateUi();
- }else if(index == 6){
- m_pOamBtsParam->updateUi();
- }
- }
- void MainDlg::stopUpgradeTimer(){
- m_pUpgradeTimer->stop();
- }
|