#include "oambtsparam.h" #include "ui_oambtsparam.h" #include "maindlg.h" #include "includes.h" #include OamBtsParam::OamBtsParam(QWidget *parent) : QDialog(parent) , ui(new Ui::OamBtsParam) { ui->setupUi(this); m_pMainDlg = static_cast(parent);//保存主窗口指针 m_dwDeviceType = m_pMainDlg->getDeviceType(); initUi(); 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->queryParam);//查询参数 connect(ui->pushButtonConfig, &QPushButton::clicked, this,&this->configParam);//设置参数 connect(ui->pushButtonUploadParam, &QPushButton::clicked, this,&this->uploadBtsBaseParamAdd);//上传参数 //connect(ui->pushButtonImportProjectId, &QPushButton::clicked, this,&this->getProjectId);//导入项目编号 //将消息发送到主控模块 connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg); connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg); connect(this, &this->SignalUploadBtsBaseParamAdd, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamAdd); } OamBtsParam::~OamBtsParam() { delete ui; } //初始化UI void OamBtsParam::initUi(){ QString strText = ""; //初始化载波ID下拉框 ui->comboBoxCarrierId->addItem("请选择", 0); for(quint8 i = 1; i < 10; i++){ strText = QString::number(i) + "号载波"; ui->comboBoxCarrierId->addItem(strText, i); } //初始化时隙下拉框 ui->comboBoxTimeSlot->addItem("请选择", 0); for(quint8 i = 1; i < 5; i++){ strText = QString::number(i) + "号时隙"; ui->comboBoxTimeSlot->addItem(strText, i); } //定位类型 ui->comboBoxLocationType->addItem("请选择", 0); ui->comboBoxLocationType->addItem("一维定位", 1); ui->comboBoxLocationType->addItem("二维定位", 2); ui->comboBoxLocationType->addItem("融合定位", 3); updateUi(); } //更新页面 void OamBtsParam::updateUi(){ m_dwDeviceType = m_pMainDlg->getDeviceType(); //声波基站 if(m_dwDeviceType == 0){ ui->checkBoxBtsId->setDisabled(false); ui->checkBoxCarrierId->setDisabled(false); ui->checkBoxTimeslot->setDisabled(false); ui->checkBoxLocationType->setDisabled(false); ui->checkBoxTwoBtsNum->setDisabled(false); ui->checkBoxTwoBtsList->setDisabled(false); ui->spinBoxBtsId->setDisabled(false); ui->comboBoxCarrierId->setDisabled(false); ui->comboBoxTimeSlot->setDisabled(false); ui->comboBoxLocationType->setDisabled(false); ui->spinBoxTwoBtsNum->setDisabled(false); ui->lineEditTwoBtsList->setDisabled(false); }else{//同步站或中继站 ui->checkBoxBtsId->setDisabled(false); ui->checkBoxCarrierId->setChecked(false); ui->checkBoxCarrierId->setDisabled(true); ui->checkBoxTimeslot->setChecked(false); ui->checkBoxTimeslot->setDisabled(true); ui->checkBoxLocationType->setChecked(false); ui->checkBoxLocationType->setDisabled(true); ui->checkBoxTwoBtsNum->setChecked(false); ui->checkBoxTwoBtsNum->setDisabled(true); ui->checkBoxTwoBtsList->setChecked(false); ui->checkBoxTwoBtsList->setDisabled(true); ui->spinBoxBtsId->setDisabled(false); ui->comboBoxCarrierId->setDisabled(true); ui->comboBoxTimeSlot->setDisabled(true); ui->comboBoxLocationType->setDisabled(true); ui->spinBoxTwoBtsNum->setDisabled(true); ui->lineEditTwoBtsList->setDisabled(true); } } //全选 void OamBtsParam::selectAllItem(){ ui->checkBoxBtsId->setChecked(true); //声波基站 if(m_dwDeviceType == 0){ ui->checkBoxCarrierId->setChecked(true); ui->checkBoxTimeslot->setChecked(true); ui->checkBoxLocationType->setChecked(true); ui->checkBoxTwoBtsNum->setChecked(true); ui->checkBoxTwoBtsList->setChecked(true); }else{//同步基站 ui->checkBoxCarrierId->setChecked(false); ui->checkBoxTimeslot->setChecked(false); ui->checkBoxLocationType->setChecked(false); ui->checkBoxTwoBtsNum->setChecked(false); ui->checkBoxTwoBtsList->setChecked(false); } } //全不选 void OamBtsParam::selectAllNoItem(){ ui->checkBoxBtsId->setChecked(false); ui->checkBoxCarrierId->setChecked(false); ui->checkBoxTimeslot->setChecked(false); ui->checkBoxLocationType->setChecked(false); ui->checkBoxTwoBtsNum->setChecked(false); ui->checkBoxTwoBtsList->setChecked(false); } //清空参数 void OamBtsParam::clearAllItem(){ QString strText = ""; ui->spinBoxBtsId->setValue(10000); ui->comboBoxCarrierId->setCurrentIndex(0); ui->comboBoxTimeSlot->setCurrentIndex(0); ui->comboBoxLocationType->setCurrentIndex(0); ui->spinBoxTwoBtsNum->setValue(0); ui->lineEditTwoBtsList->setText(strText); } //切换按钮状态 //byFlag:开关状态,true:可用,false:不可用 void OamBtsParam::switchBtnFlag(bool byFlag){ ui->pushButtonAllSel->setEnabled(byFlag); ui->pushButtonAllNoSel->setEnabled(byFlag); ui->pushButtonClear->setEnabled(byFlag); ui->pushButtonQuery->setEnabled(byFlag); ui->pushButtonConfig->setEnabled(byFlag); } //查询参数 void OamBtsParam::queryParam(){ 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)); if(ui->checkBoxBtsId->isChecked()){//基站ID stLtv.wLen = 8; stLtv.wTag = ORDER_BTS_ID; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxCarrierId->isChecked()){//载波ID stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_CARRIER_ID; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxTimeslot->isChecked()){//时隙 stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_TIMESLOT; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxLocationType->isChecked()){//定位类型 stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_LOCATION_TYPE; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxTwoBtsNum->isChecked()){//两站数量 stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_TWO_BTS_NUM; memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } if(ui->checkBoxTwoBtsList->isChecked()){//两站列表 stLtv.wLen = 68; stLtv.wTag = ORDER_BTS_TWO_BTS_LIST; 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 OamBtsParam::showParam(LTV_T *pstData){ quint8 byLen = pstData->wLen - 4; quint16 wTag = pstData->wTag; QString strText = ""; quint32 dwTmp = 0; quint8 byTmp = 0; quint8 byIndex = 0; quint16 wIndex = 0; //将数据显示在界面上 if(wTag == ORDER_BTS_ID){//基站ID memcpy(&dwTmp, pstData->abyData, byLen); ui->spinBoxBtsId->setValue(dwTmp); m_dwBtsId = dwTmp;//保存基站ID m_pMainDlg->mainDlgSetBtsId(dwTmp); }else if(wTag == ORDER_BTS_CARRIER_ID){//载波ID memcpy(&byTmp, pstData->abyData, byLen); ui->comboBoxCarrierId->setCurrentIndex(byTmp); }else if(wTag == ORDER_BTS_TIMESLOT){//时隙 memcpy(&byTmp, pstData->abyData, byLen); ui->comboBoxTimeSlot->setCurrentIndex(byTmp); }else if(wTag == ORDER_BTS_LOCATION_TYPE){//定位类型 memcpy(&byTmp, pstData->abyData, byLen); ui->comboBoxLocationType->setCurrentIndex(byTmp); }else if(wTag == ORDER_BTS_TWO_BTS_NUM){//两站数量 memcpy(&byTmp, pstData->abyData, byLen); ui->spinBoxTwoBtsNum->setValue(byTmp); }else if(wTag == ORDER_BTS_TWO_BTS_LIST){//两站列表 strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData)); strText = strText.trimmed();//去掉首尾空格 ui->lineEditTwoBtsList->setText(strText); } return; } //配置参数 void OamBtsParam::configParam(){ quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN]; quint8 *pbyHead = abyData; quint16 wLen = 0; LTV_T stLtv; QString stText = ""; quint32 dwBtsId = 0;//基站ID quint8 byTmp = 0; QVariant varTmp; QByteArray byteTmp; QString strText = ""; QByteArray baData; quint8 byCharLen = 0; //禁用按钮 switchBtnFlag(false); memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN); memset((void*)&stLtv, 0, sizeof(LTV_T)); //基站ID if(ui->checkBoxBtsId->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 8; stLtv.wTag = ORDER_BTS_ID; dwBtsId = ui->spinBoxBtsId->value(); memcpy((void*)stLtv.abyData, &dwBtsId, (stLtv.wLen - 4)); memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; m_dwBtsId = dwBtsId;//保存基站ID m_pMainDlg->mainDlgSetBtsId(dwBtsId); } //载波ID if(ui->checkBoxCarrierId->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_CARRIER_ID; varTmp = ui->comboBoxCarrierId->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择基站载波"); switchBtnFlag(true); return; } memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4)); memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } //时隙 if(ui->checkBoxTimeslot->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_TIMESLOT; varTmp = ui->comboBoxTimeSlot->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择基站时隙"); switchBtnFlag(true); return; } memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4)); memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } //定位类型 if(ui->checkBoxLocationType->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_LOCATION_TYPE; varTmp = ui->comboBoxLocationType->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择定位类型"); switchBtnFlag(true); return; } memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4)); memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } //两站数量 if(ui->checkBoxTwoBtsNum->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 5; stLtv.wTag = ORDER_BTS_TWO_BTS_NUM; byTmp = ui->spinBoxTwoBtsNum->value(); memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4)); memcpy(pbyHead, &stLtv, stLtv.wLen); wLen = wLen + stLtv.wLen; pbyHead = pbyHead + stLtv.wLen; } //两站列表 if(ui->checkBoxTwoBtsList->isChecked()){ memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN); stLtv.wLen = 68; stLtv.wTag = ORDER_BTS_TWO_BTS_LIST; strText = ui->lineEditTwoBtsList->text(); strText = strText.trimmed(); baData = strText.toLocal8Bit(); byCharLen = baData.size(); if(byCharLen > 48){ QMessageBox::information(this, "提示", "两站列表字符长度超过48位"); switchBtnFlag(true);//启用按钮 return; } memcpy((void*)stLtv.abyData, baData, byCharLen); 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 SignalSendConfigMsg(abyData, wLen, 0); }else{ QMessageBox::information(this,"提示", "请至少选择一项管理项"); } switchBtnFlag(true); return; } //上传基站基本参数至网管中心 void OamBtsParam::uploadBtsBaseParamAdd(){ QJsonObject jsonObject; //定义一个json对象 QVariant varTmp;//下来框中的用户数据 quint8 byTmp = 0; QString strText = ""; quint32 dwBtsId = 0; quint8 byTwoNum = 0; QByteArray baData; quint8 byCharLen = 0; //禁用按钮 switchBtnFlag(false); //基站ID if(ui->checkBoxBtsId->isChecked()){ dwBtsId = ui->spinBoxBtsId->value(); if(dwBtsId < 1000){ QMessageBox::information(this,"提示", "请输入基站编号"); switchBtnFlag(true); return; } jsonObject["bts_id"] = QJsonValue::fromVariant(QVariant(static_cast(dwBtsId))); m_dwBtsId = dwBtsId;//保存基站ID m_pMainDlg->mainDlgSetBtsId(dwBtsId); } //载波ID if(ui->checkBoxCarrierId->isChecked()){ varTmp = ui->comboBoxCarrierId->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择载波编号"); switchBtnFlag(true); return; } jsonObject["carrier_id"] = byTmp; } //时隙 if(ui->checkBoxTimeslot->isChecked()){ varTmp = ui->comboBoxTimeSlot->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择基站时隙"); switchBtnFlag(true); return; } jsonObject["timeslot"] = byTmp; } //定位类型 if(ui->checkBoxLocationType->isChecked()){ varTmp = ui->comboBoxLocationType->currentData(); byTmp = (quint8)varTmp.toInt(); if(byTmp <= 0){ QMessageBox::critical(this, "提示", "请选择定位类型"); switchBtnFlag(true); return; } jsonObject["location_type"] = byTmp; } //两站定位数量 if(ui->checkBoxTwoBtsNum->isChecked()){ byTwoNum = ui->spinBoxTwoBtsNum->value(); jsonObject["two_bts_num"] = byTwoNum; } //两站定位基站列表 if(ui->checkBoxTwoBtsList->isChecked()){ strText = ui->lineEditTwoBtsList->text(); strText = strText.trimmed(); baData = strText.toLocal8Bit(); byCharLen = baData.size(); if(byCharLen > 64){ QMessageBox::information(this, "提示", "两站列表字符长度超过64位"); switchBtnFlag(true); return; } jsonObject["two_bts_list"] = strText; } //启用按钮 switchBtnFlag(true); //发送post请求给网管中心 emit SignalUploadBtsBaseParamAdd("guiUploadBtsBaseParamAdd", jsonObject); } //获得基站ID quint32 OamBtsParam::GetBtsId(){ return m_dwBtsId; }