#include "oambaseparam.h" #include "ui_oambaseparam.h" #include "maindlg.h" extern quint8 gMain_bySoftType; OamBaseParam::OamBaseParam(QWidget *parent) : QDialog(parent) , ui(new Ui::OamBaseParam) { ui->setupUi(this); m_pMainDlg = static_cast(parent);//保存主窗口指针 init(); } OamBaseParam::~OamBaseParam() { delete ui; } void OamBaseParam::init(){ m_dwDeviceType = m_pMainDlg->getDeviceType(); initUi();//增加串口下拉框数据 configSignalSlot();//配置信号与槽 } //初始化设备类型下来框数据 void OamBaseParam::initUi(){ ui->comboBoxDeviceType->addItem("请选择", 0); ui->comboBoxDeviceType->addItem("声波基站", 1); ui->comboBoxDeviceType->addItem("同步基站", 2); ui->comboBoxDeviceType->addItem("同步中继", 3); ui->comboBoxDeviceType->setCurrentIndex(0); //禁用配置按钮 if(gMain_bySoftType == MAIN_SOFT_TYPE_PRO){ ui->pushButtonConfig->setEnabled(false); } //更新界面 updateUi(); } //更新界面 void OamBaseParam::updateUi(){ m_dwDeviceType = m_pMainDlg->getDeviceType(); if(m_dwDeviceType!= 0){//同步基站 ui->checkBoxBleBtsName->setDisabled(true); ui->checkBoxBleBtsName->setChecked(false); ui->lineEditBleBtsName->setDisabled(true); ui->pushButtonImportBleBtsName->setDisabled(true); }else{//声波基站 ui->checkBoxBleBtsName->setDisabled(false); ui->lineEditBleBtsName->setDisabled(false); ui->pushButtonImportBleBtsName->setDisabled(false); } } //配置界面按钮信号与槽 void OamBaseParam::configSignalSlot(){ connect(ui->pushButtonAllSel, &QPushButton::clicked, this,&this->selectAllItem);//全选 connect(ui->pushButtonAllNoSel, &QPushButton::clicked, this,&this->selectAllNoItem);//全不选 connect(ui->pushButtonClear, &QPushButton::clicked, this,&this->clearAllItem);//清空 connect(ui->pushButtonQuery, &QPushButton::clicked, this,&this->queryBaseParam);//查询参数 connect(ui->pushButtonConfig, &QPushButton::clicked, this,&this->configBaseParam);//设置参数 connect(ui->pushButtonUpload, &QPushButton::clicked, this,&this->uploadData);//上传参数 connect(ui->pushButtonImportBleBtsName, &QPushButton::clicked, this,&this->importBleName);//导入蓝牙基站名称 //connect(ui->pushButtonImportWifiBtsName, &QPushButton::clicked, this,&this->configBaseParam);//导入wifi基站名称 //将消息发送到主控模块 connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg); connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg); connect(this, &this->SignalUploadBtsBaseParamUpdate, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamUpdate); } //全选 void OamBaseParam::selectAllItem(){ ui->checkBoxProjectId->setChecked(true); ui->checkBoxDeviceType->setChecked(true); ui->checkBoxGenNo->setChecked(true); ui->checkBoxDeviceModel->setChecked(true); ui->checkBoxSoftVersion->setChecked(true); if(m_dwDeviceType == 0){ ui->checkBoxBleBtsName->setChecked(true); } } //全不选 void OamBaseParam::selectAllNoItem(){ ui->checkBoxProjectId->setChecked(false); ui->checkBoxDeviceType->setChecked(false); ui->checkBoxGenNo->setChecked(false); ui->checkBoxDeviceModel->setChecked(false); ui->checkBoxSoftVersion->setChecked(false); ui->checkBoxBleBtsName->setChecked(false); } //清空参数 void OamBaseParam::clearAllItem(){ QString strText = ""; ui->lineEditProjectId->setText(strText); ui->comboBoxDeviceType->setCurrentIndex(0); ui->lineEditGenNo->setText(strText); ui->lineEditDeviceModel->setText(strText); ui->lineEditSoftVersion->setText(strText); ui->lineEditBleBtsName->setText(strText); } //切换按钮状态 //byFlag:开关状态,true:可用,false:不可用 void OamBaseParam::switchBtnFlag(bool byFlag){ ui->pushButtonAllSel->setEnabled(byFlag); ui->pushButtonAllNoSel->setEnabled(byFlag); ui->pushButtonClear->setEnabled(byFlag); ui->pushButtonQuery->setEnabled(byFlag); ui->pushButtonConfig->setEnabled(byFlag); ui->pushButtonImportBleBtsName->setEnabled(byFlag); //禁用配置按钮 if(gMain_bySoftType == MAIN_SOFT_TYPE_PRO){ ui->pushButtonConfig->setEnabled(false); } } //显示基本参数 void OamBaseParam::showBaseParam(LTV_T *pstData){ quint8 byLen = pstData->wLen - 4; QString strText = ""; quint8 byTmp = 0; quint32 dwTmp = 0; //将数据显示在界面上 if(pstData->wTag == 0x0001){//设备类型 memcpy(&byTmp, pstData->abyData, byLen); ui->comboBoxDeviceType->setCurrentIndex(byTmp); }else if(pstData->wTag == 0x0002){//设备生产序列号 strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData)); strText = strText.trimmed(); ui->lineEditGenNo->setText(strText); }else if(pstData->wTag == 0x0003){//设备型号 strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData)); strText = strText.trimmed(); ui->lineEditDeviceModel->setText(strText); }else if(pstData->wTag == 0x0004){//软件版本 strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData)); strText = strText.trimmed(); ui->lineEditSoftVersion->setText(strText); }else if(pstData->wTag == 0x0005){//项目编号 memcpy(&dwTmp, pstData->abyData, byLen); QString hexStr = QString::number(dwTmp, 16); hexStr = hexStr.rightJustified(8, '0', Qt::AlignRight); hexStr = hexStr.toUpper(); ui->lineEditProjectId->setText(hexStr); m_pMainDlg->setProjectId(dwTmp);//保存项目编号 }else if(pstData->wTag == 0x0006){//ble名称 strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData)); strText = strText.trimmed(); ui->lineEditBleBtsName->setText(strText); m_stOamBase.bleBtsName = strText; }/*else if(pstData->wTag == 0x0007){//wifi名称 strText = QString::fromUtf8((char *)pstData->abyData, byLen); strText = strText.trimmed(); ui->lineEditWifiBtsName->setText(strText); m_stOamBase.wifiBtsName = strText; }*/ return; } //查询基本参数 void OamBaseParam::queryBaseParam(){ quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN]; quint8 *pbyHead = NULL; quint16 wLen = 0; LTV_T stLtv; //禁用按钮 switchBtnFlag(false); memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN); memset((void*)&stLtv, 0, sizeof(LTV_T)); pbyHead = abyData; if(ui->checkBoxProjectId->isChecked()){//项目编号 stLtv.wLen = 8; stLtv.wTag = ORDER_DEVICE_PROJECT_ID; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxDeviceType->isChecked()){//选择了设备类型 stLtv.wLen = 5; stLtv.wTag = ORDER_DEVICE_TYPE; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxGenNo->isChecked()){//选择设备生产序列号 stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_SERIAL_NO; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号 stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_MODEL; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxSoftVersion->isChecked()){//软件版本 stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_MCU_VERSION; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxBleBtsName->isChecked()){//蓝牙名称 stLtv.wLen = 32; stLtv.wTag = ORDER_DEVICE_BLE_BTS_NAME; memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } // if(ui->checkBoxWifiBtsName->isChecked()){//wifi名称 // stLtv.wLen = 32; // stLtv.wTag = 0x0007; // memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); // wLen = wLen + stLtv.wLen; // pbyHead = pbyHead + stLtv.wLen; // } if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){ QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查询项"); switchBtnFlag(true); return; } //将参数发送给主控模块 if(wLen > 0){ emit SignalSendQueryMsg(abyData, wLen); }else{ QMessageBox::information(this,"提示", "请至少选择一项管理项"); } //启用按钮 switchBtnFlag(true); return; } //配置基本参数 void OamBaseParam::configBaseParam(){ quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN]; quint8 *pbyHead = abyData; quint16 wLen = 0; LTV_T stLtv; QByteArray tmp; quint8 byDeviceType = 0; QString stText = ""; quint32 dwProjectId = 0; //禁用按钮 switchBtnFlag(false); memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN); memset((void*)&stLtv, 0, sizeof(LTV_T)); if(ui->checkBoxDeviceType->isChecked()){//选择了设备类型 memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 5; stLtv.wTag = ORDER_DEVICE_TYPE; byDeviceType = ui->comboBoxDeviceType->currentIndex(); memcpy((void*)stLtv.abyData, &byDeviceType, 1); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxGenNo->isChecked()){//选择设备生产序列号 memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_SERIAL_NO; stText = ui->lineEditGenNo->text().trimmed(); tmp = stText.toUtf8(); memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size()); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号 memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_MODEL; stText = ui->lineEditDeviceModel->text().trimmed(); tmp = stText.toUtf8(); memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size()); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxSoftVersion->isChecked()){//软件版本 memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 24; stLtv.wTag = ORDER_DEVICE_MCU_VERSION; stText = ui->lineEditSoftVersion->text().trimmed(); tmp = stText.toUtf8(); memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size()); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } //项目编号 if(ui->checkBoxProjectId->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 12; stLtv.wTag = ORDER_DEVICE_PROJECT_ID; stText = ui->lineEditProjectId->text().trimmed(); QByteArray hexArray = QByteArray::fromHex(stText.toUtf8()); // 将16进制字符串转换为QByteArray,确保以16进制形式解析 QDataStream stream(&hexArray, QIODevice::ReadOnly);// 使用QDataStream来读取转换后的QByteArray stream>>dwProjectId; memcpy((void*)stLtv.abyData, &dwProjectId, sizeof(quint32)); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; m_pMainDlg->setProjectId(dwProjectId);//保存项目编号 } if(ui->checkBoxBleBtsName->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 32; stLtv.wTag = ORDER_DEVICE_BLE_BTS_NAME; stText = ui->lineEditBleBtsName->text().trimmed(); tmp = stText.toUtf8(); if(tmp.size() > 28 || tmp.size() <= 0){ QMessageBox::information(this,"提示", "请先导入蓝牙名称"); switchBtnFlag(true);//启用按钮 return; } memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size()); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen += stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; m_stOamBase.bleBtsName = stText; } // if(ui->checkBoxWifiBtsName->isChecked()){//wifi名称 // stLtv.wLen = 32; // stLtv.wTag = 0x0007; // stText = ui->lineEditWifiBtsName->text().trimmed(); // tmp = stText.toUtf8(); // // if(tmp.size() > 28 || tmp.size() <= 0){ // // QMessageBox::information(this,"提示", "请先导入wifi名称"); // // return; // // } // memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size()); // memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); // wLen += stLtv.wLen; // pbyHead = pbyHead + stLtv.wLen; // m_stOamBase.wifiBtsName = stText; // } if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){ QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查设置项"); switchBtnFlag(true); return; } //将参数发送给主控模块 if(wLen > 0){ emit SignalSendConfigMsg(abyData, wLen, 0); }else{ QMessageBox::information(this,"提示", "请至少选择一项管理项"); } //启用按钮 switchBtnFlag(true); return; } //导入蓝牙名称 void OamBaseParam::importBleName(){ quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN]; quint8 *pbyHead = abyData; quint16 wLen = 0; LTV_T stLtv; //禁用按钮 switchBtnFlag(false); memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN); memset((void*)&stLtv, 0, sizeof(LTV_T)); stLtv.wLen = 32; stLtv.wTag = 0x0006; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; //将参数发送给主控模块 emit SignalSendQueryMsg(abyData, wLen); //启用按钮 switchBtnFlag(true); return; } //上传数据到管理中心 void OamBaseParam::uploadData(){ QJsonObject jsonObject; //定义一个json对象 quint8 byTmp = 0; QString strText = ""; quint32 dwProjectId = 0; //禁用按钮 switchBtnFlag(false); //设备类型 if(ui->checkBoxDeviceType->isChecked()){ byTmp = ui->comboBoxDeviceType->currentIndex(); jsonObject["bts_type"] = byTmp; } //选择设备生产序列号 if(ui->checkBoxGenNo->isChecked()){ strText = ui->lineEditGenNo->text().trimmed(); jsonObject["serial_number"] = strText; } if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号 strText = ui->lineEditDeviceModel->text().trimmed(); jsonObject["bts_model"] = strText; } if(ui->checkBoxSoftVersion->isChecked()){//软件版本 strText = ui->lineEditSoftVersion->text().trimmed(); jsonObject["soft_version"] = strText; } if(ui->checkBoxProjectId->isChecked()){//项目编号 strText = ui->lineEditProjectId->text().trimmed(); QByteArray hexArray = QByteArray::fromHex(strText.toUtf8()); // 将16进制字符串转换为QByteArray,确保以16进制形式解析 QDataStream stream(&hexArray, QIODevice::ReadOnly);// 使用QDataStream来读取转换后的QByteArray stream>>dwProjectId; jsonObject["project_id"] = QJsonValue::fromVariant(QVariant(static_cast(dwProjectId))); m_pMainDlg->setProjectId(dwProjectId);//保存项目编号 } if(ui->checkBoxBleBtsName->isChecked()){ strText = ui->lineEditBleBtsName->text().trimmed(); jsonObject["ble_name"] = strText; } //启用按钮 switchBtnFlag(true); //发送post请求 emit SignalUploadBtsBaseParamUpdate("guiUploadBtsBaseParamUpdate", jsonObject); return; }