oambtsparam.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. #include "oambtsparam.h"
  2. #include "ui_oambtsparam.h"
  3. #include "maindlg.h"
  4. #include "includes.h"
  5. #include <QJsonObject>
  6. OamBtsParam::OamBtsParam(QWidget *parent)
  7. : QDialog(parent)
  8. , ui(new Ui::OamBtsParam)
  9. {
  10. ui->setupUi(this);
  11. m_pMainDlg = static_cast<MainDlg*>(parent);//保存主窗口指针
  12. m_dwDeviceType = m_pMainDlg->getDeviceType();
  13. initUi();
  14. connect(ui->pushButtonAllSel, &QPushButton::clicked, this,&this->selectAllItem);//全选
  15. connect(ui->pushButtonAllNoSel, &QPushButton::clicked, this,&this->selectAllNoItem);//全不选
  16. connect(ui->pushButtonClear, &QPushButton::clicked, this,&this->clearAllItem);//清空
  17. connect(ui->pushButtonQuery, &QPushButton::clicked, this,&this->queryParam);//查询参数
  18. connect(ui->pushButtonConfig, &QPushButton::clicked, this,&this->configParam);//设置参数
  19. connect(ui->pushButtonUploadParam, &QPushButton::clicked, this,&this->uploadBtsBaseParamAdd);//上传参数
  20. //connect(ui->pushButtonImportProjectId, &QPushButton::clicked, this,&this->getProjectId);//导入项目编号
  21. //将消息发送到主控模块
  22. connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg);
  23. connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg);
  24. connect(this, &this->SignalUploadBtsBaseParamAdd, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamAdd);
  25. }
  26. OamBtsParam::~OamBtsParam()
  27. {
  28. delete ui;
  29. }
  30. //初始化UI
  31. void OamBtsParam::initUi(){
  32. QString strText = "";
  33. //初始化载波ID下拉框
  34. ui->comboBoxCarrierId->addItem("请选择", 0);
  35. for(quint8 i = 1; i < 10; i++){
  36. strText = QString::number(i) + "号载波";
  37. ui->comboBoxCarrierId->addItem(strText, i);
  38. }
  39. //初始化时隙下拉框
  40. ui->comboBoxTimeSlot->addItem("请选择", 0);
  41. for(quint8 i = 1; i < 5; i++){
  42. strText = QString::number(i) + "号时隙";
  43. ui->comboBoxTimeSlot->addItem(strText, i);
  44. }
  45. //定位类型
  46. ui->comboBoxLocationType->addItem("请选择", 0);
  47. ui->comboBoxLocationType->addItem("一维定位", 1);
  48. ui->comboBoxLocationType->addItem("二维定位", 2);
  49. ui->comboBoxLocationType->addItem("融合定位", 3);
  50. updateUi();
  51. }
  52. //更新页面
  53. void OamBtsParam::updateUi(){
  54. m_dwDeviceType = m_pMainDlg->getDeviceType();
  55. //声波基站
  56. if(m_dwDeviceType == 0){
  57. ui->checkBoxBtsId->setDisabled(false);
  58. ui->checkBoxCarrierId->setDisabled(false);
  59. ui->checkBoxTimeslot->setDisabled(false);
  60. ui->checkBoxLocationType->setDisabled(false);
  61. ui->checkBoxTwoBtsNum->setDisabled(false);
  62. ui->checkBoxTwoBtsList->setDisabled(false);
  63. ui->spinBoxBtsId->setDisabled(false);
  64. ui->comboBoxCarrierId->setDisabled(false);
  65. ui->comboBoxTimeSlot->setDisabled(false);
  66. ui->comboBoxLocationType->setDisabled(false);
  67. ui->spinBoxTwoBtsNum->setDisabled(false);
  68. ui->lineEditTwoBtsList->setDisabled(false);
  69. }else{//同步站或中继站
  70. ui->checkBoxBtsId->setDisabled(false);
  71. ui->checkBoxCarrierId->setChecked(false);
  72. ui->checkBoxCarrierId->setDisabled(true);
  73. ui->checkBoxTimeslot->setChecked(false);
  74. ui->checkBoxTimeslot->setDisabled(true);
  75. ui->checkBoxLocationType->setChecked(false);
  76. ui->checkBoxLocationType->setDisabled(true);
  77. ui->checkBoxTwoBtsNum->setChecked(false);
  78. ui->checkBoxTwoBtsNum->setDisabled(true);
  79. ui->checkBoxTwoBtsList->setChecked(false);
  80. ui->checkBoxTwoBtsList->setDisabled(true);
  81. ui->spinBoxBtsId->setDisabled(false);
  82. ui->comboBoxCarrierId->setDisabled(true);
  83. ui->comboBoxTimeSlot->setDisabled(true);
  84. ui->comboBoxLocationType->setDisabled(true);
  85. ui->spinBoxTwoBtsNum->setDisabled(true);
  86. ui->lineEditTwoBtsList->setDisabled(true);
  87. }
  88. }
  89. //全选
  90. void OamBtsParam::selectAllItem(){
  91. ui->checkBoxBtsId->setChecked(true);
  92. //声波基站
  93. if(m_dwDeviceType == 0){
  94. ui->checkBoxCarrierId->setChecked(true);
  95. ui->checkBoxTimeslot->setChecked(true);
  96. ui->checkBoxLocationType->setChecked(true);
  97. ui->checkBoxTwoBtsNum->setChecked(true);
  98. ui->checkBoxTwoBtsList->setChecked(true);
  99. }else{//同步基站
  100. ui->checkBoxCarrierId->setChecked(false);
  101. ui->checkBoxTimeslot->setChecked(false);
  102. ui->checkBoxLocationType->setChecked(false);
  103. ui->checkBoxTwoBtsNum->setChecked(false);
  104. ui->checkBoxTwoBtsList->setChecked(false);
  105. }
  106. }
  107. //全不选
  108. void OamBtsParam::selectAllNoItem(){
  109. ui->checkBoxBtsId->setChecked(false);
  110. ui->checkBoxCarrierId->setChecked(false);
  111. ui->checkBoxTimeslot->setChecked(false);
  112. ui->checkBoxLocationType->setChecked(false);
  113. ui->checkBoxTwoBtsNum->setChecked(false);
  114. ui->checkBoxTwoBtsList->setChecked(false);
  115. }
  116. //清空参数
  117. void OamBtsParam::clearAllItem(){
  118. QString strText = "";
  119. ui->spinBoxBtsId->setValue(10000);
  120. ui->comboBoxCarrierId->setCurrentIndex(0);
  121. ui->comboBoxTimeSlot->setCurrentIndex(0);
  122. ui->comboBoxLocationType->setCurrentIndex(0);
  123. ui->spinBoxTwoBtsNum->setValue(0);
  124. ui->lineEditTwoBtsList->setText(strText);
  125. }
  126. //切换按钮状态
  127. //byFlag:开关状态,true:可用,false:不可用
  128. void OamBtsParam::switchBtnFlag(bool byFlag){
  129. ui->pushButtonAllSel->setEnabled(byFlag);
  130. ui->pushButtonAllNoSel->setEnabled(byFlag);
  131. ui->pushButtonClear->setEnabled(byFlag);
  132. ui->pushButtonQuery->setEnabled(byFlag);
  133. ui->pushButtonConfig->setEnabled(byFlag);
  134. }
  135. //查询参数
  136. void OamBtsParam::queryParam(){
  137. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  138. quint8 *pbyHead = abyData;
  139. quint16 wLen = 0;
  140. LTV_T stLtv;
  141. //禁用按钮
  142. switchBtnFlag(false);
  143. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  144. memset((void*)&stLtv, 0, sizeof(LTV_T));
  145. if(ui->checkBoxBtsId->isChecked()){//基站ID
  146. stLtv.wLen = 8;
  147. stLtv.wTag = ORDER_BTS_ID;
  148. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  149. wLen = wLen + stLtv.wLen;
  150. pbyHead = pbyHead + stLtv.wLen;
  151. }
  152. if(ui->checkBoxCarrierId->isChecked()){//载波ID
  153. stLtv.wLen = 5;
  154. stLtv.wTag = ORDER_BTS_CARRIER_ID;
  155. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  156. wLen = wLen + stLtv.wLen;
  157. pbyHead = pbyHead + stLtv.wLen;
  158. }
  159. if(ui->checkBoxTimeslot->isChecked()){//时隙
  160. stLtv.wLen = 5;
  161. stLtv.wTag = ORDER_BTS_TIMESLOT;
  162. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  163. wLen = wLen + stLtv.wLen;
  164. pbyHead = pbyHead + stLtv.wLen;
  165. }
  166. if(ui->checkBoxLocationType->isChecked()){//定位类型
  167. stLtv.wLen = 5;
  168. stLtv.wTag = ORDER_BTS_LOCATION_TYPE;
  169. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  170. wLen = wLen + stLtv.wLen;
  171. pbyHead = pbyHead + stLtv.wLen;
  172. }
  173. if(ui->checkBoxTwoBtsNum->isChecked()){//两站数量
  174. stLtv.wLen = 5;
  175. stLtv.wTag = ORDER_BTS_TWO_BTS_NUM;
  176. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  177. wLen = wLen + stLtv.wLen;
  178. pbyHead = pbyHead + stLtv.wLen;
  179. }
  180. if(ui->checkBoxTwoBtsList->isChecked()){//两站列表
  181. stLtv.wLen = 68;
  182. stLtv.wTag = ORDER_BTS_TWO_BTS_LIST;
  183. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  184. wLen = wLen + stLtv.wLen;
  185. pbyHead = pbyHead + stLtv.wLen;
  186. }
  187. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  188. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查询项");
  189. switchBtnFlag(true);
  190. return;
  191. }
  192. //将参数发送给主控模块
  193. if(wLen > 0){
  194. emit SignalSendQueryMsg(abyData, wLen);
  195. }else{
  196. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  197. }
  198. //启用按钮
  199. switchBtnFlag(true);
  200. return;
  201. }
  202. //显示参数
  203. void OamBtsParam::showParam(LTV_T *pstData){
  204. quint8 byLen = pstData->wLen - 4;
  205. quint16 wTag = pstData->wTag;
  206. QString strText = "";
  207. quint32 dwTmp = 0;
  208. quint8 byTmp = 0;
  209. quint8 byIndex = 0;
  210. quint16 wIndex = 0;
  211. //将数据显示在界面上
  212. if(wTag == ORDER_BTS_ID){//基站ID
  213. memcpy(&dwTmp, pstData->abyData, byLen);
  214. ui->spinBoxBtsId->setValue(dwTmp);
  215. m_dwBtsId = dwTmp;//保存基站ID
  216. m_pMainDlg->mainDlgSetBtsId(dwTmp);
  217. }else if(wTag == ORDER_BTS_CARRIER_ID){//载波ID
  218. memcpy(&byTmp, pstData->abyData, byLen);
  219. ui->comboBoxCarrierId->setCurrentIndex(byTmp);
  220. }else if(wTag == ORDER_BTS_TIMESLOT){//时隙
  221. memcpy(&byTmp, pstData->abyData, byLen);
  222. ui->comboBoxTimeSlot->setCurrentIndex(byTmp);
  223. }else if(wTag == ORDER_BTS_LOCATION_TYPE){//定位类型
  224. memcpy(&byTmp, pstData->abyData, byLen);
  225. ui->comboBoxLocationType->setCurrentIndex(byTmp);
  226. }else if(wTag == ORDER_BTS_TWO_BTS_NUM){//两站数量
  227. memcpy(&byTmp, pstData->abyData, byLen);
  228. ui->spinBoxTwoBtsNum->setValue(byTmp);
  229. }else if(wTag == ORDER_BTS_TWO_BTS_LIST){//两站列表
  230. strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData));
  231. strText = strText.trimmed();//去掉首尾空格
  232. ui->lineEditTwoBtsList->setText(strText);
  233. }
  234. return;
  235. }
  236. //配置参数
  237. void OamBtsParam::configParam(){
  238. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  239. quint8 *pbyHead = abyData;
  240. quint16 wLen = 0;
  241. LTV_T stLtv;
  242. QString stText = "";
  243. quint32 dwBtsId = 0;//基站ID
  244. quint8 byTmp = 0;
  245. QVariant varTmp;
  246. QByteArray byteTmp;
  247. QString strText = "";
  248. QByteArray baData;
  249. quint8 byCharLen = 0;
  250. //禁用按钮
  251. switchBtnFlag(false);
  252. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  253. memset((void*)&stLtv, 0, sizeof(LTV_T));
  254. //基站ID
  255. if(ui->checkBoxBtsId->isChecked()){
  256. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  257. stLtv.wLen = 8;
  258. stLtv.wTag = ORDER_BTS_ID;
  259. dwBtsId = ui->spinBoxBtsId->value();
  260. memcpy((void*)stLtv.abyData, &dwBtsId, (stLtv.wLen - 4));
  261. memcpy(pbyHead, &stLtv, stLtv.wLen);
  262. wLen = wLen + stLtv.wLen;
  263. pbyHead = pbyHead + stLtv.wLen;
  264. m_dwBtsId = dwBtsId;//保存基站ID
  265. m_pMainDlg->mainDlgSetBtsId(dwBtsId);
  266. }
  267. //载波ID
  268. if(ui->checkBoxCarrierId->isChecked()){
  269. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  270. stLtv.wLen = 5;
  271. stLtv.wTag = ORDER_BTS_CARRIER_ID;
  272. varTmp = ui->comboBoxCarrierId->currentData();
  273. byTmp = (quint8)varTmp.toInt();
  274. if(byTmp <= 0){
  275. QMessageBox::critical(this, "提示", "请选择基站载波");
  276. switchBtnFlag(true);
  277. return;
  278. }
  279. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  280. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  281. wLen = wLen + stLtv.wLen;
  282. pbyHead = pbyHead + stLtv.wLen;
  283. }
  284. //时隙
  285. if(ui->checkBoxTimeslot->isChecked()){
  286. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  287. stLtv.wLen = 5;
  288. stLtv.wTag = ORDER_BTS_TIMESLOT;
  289. varTmp = ui->comboBoxTimeSlot->currentData();
  290. byTmp = (quint8)varTmp.toInt();
  291. if(byTmp <= 0){
  292. QMessageBox::critical(this, "提示", "请选择基站时隙");
  293. switchBtnFlag(true);
  294. return;
  295. }
  296. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  297. memcpy(pbyHead, &stLtv, stLtv.wLen);
  298. wLen = wLen + stLtv.wLen;
  299. pbyHead = pbyHead + stLtv.wLen;
  300. }
  301. //定位类型
  302. if(ui->checkBoxLocationType->isChecked()){
  303. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  304. stLtv.wLen = 5;
  305. stLtv.wTag = ORDER_BTS_LOCATION_TYPE;
  306. varTmp = ui->comboBoxLocationType->currentData();
  307. byTmp = (quint8)varTmp.toInt();
  308. if(byTmp <= 0){
  309. QMessageBox::critical(this, "提示", "请选择定位类型");
  310. switchBtnFlag(true);
  311. return;
  312. }
  313. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  314. memcpy(pbyHead, &stLtv, stLtv.wLen);
  315. wLen = wLen + stLtv.wLen;
  316. pbyHead = pbyHead + stLtv.wLen;
  317. }
  318. //两站数量
  319. if(ui->checkBoxTwoBtsNum->isChecked()){
  320. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  321. stLtv.wLen = 5;
  322. stLtv.wTag = ORDER_BTS_TWO_BTS_NUM;
  323. byTmp = ui->spinBoxTwoBtsNum->value();
  324. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  325. memcpy(pbyHead, &stLtv, stLtv.wLen);
  326. wLen = wLen + stLtv.wLen;
  327. pbyHead = pbyHead + stLtv.wLen;
  328. }
  329. //两站列表
  330. if(ui->checkBoxTwoBtsList->isChecked()){
  331. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  332. stLtv.wLen = 68;
  333. stLtv.wTag = ORDER_BTS_TWO_BTS_LIST;
  334. strText = ui->lineEditTwoBtsList->text();
  335. strText = strText.trimmed();
  336. baData = strText.toLocal8Bit();
  337. byCharLen = baData.size();
  338. if(byCharLen > 48){
  339. QMessageBox::information(this, "提示", "两站列表字符长度超过48位");
  340. switchBtnFlag(true);//启用按钮
  341. return;
  342. }
  343. memcpy((void*)stLtv.abyData, baData, byCharLen);
  344. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  345. wLen = wLen + stLtv.wLen;
  346. pbyHead = pbyHead + stLtv.wLen;
  347. }
  348. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  349. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查设置项");
  350. switchBtnFlag(true);
  351. return;
  352. }
  353. //将参数发送给主控模块
  354. if(wLen > 0){
  355. emit SignalSendConfigMsg(abyData, wLen, 0);
  356. }else{
  357. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  358. }
  359. switchBtnFlag(true);
  360. return;
  361. }
  362. //上传基站基本参数至网管中心
  363. void OamBtsParam::uploadBtsBaseParamAdd(){
  364. QJsonObject jsonObject; //定义一个json对象
  365. QVariant varTmp;//下来框中的用户数据
  366. quint8 byTmp = 0;
  367. QString strText = "";
  368. quint32 dwBtsId = 0;
  369. quint8 byTwoNum = 0;
  370. QByteArray baData;
  371. quint8 byCharLen = 0;
  372. //禁用按钮
  373. switchBtnFlag(false);
  374. //基站ID
  375. if(ui->checkBoxBtsId->isChecked()){
  376. dwBtsId = ui->spinBoxBtsId->value();
  377. if(dwBtsId < 1000){
  378. QMessageBox::information(this,"提示", "请输入基站编号");
  379. switchBtnFlag(true);
  380. return;
  381. }
  382. jsonObject["bts_id"] = QJsonValue::fromVariant(QVariant(static_cast<quint64>(dwBtsId)));
  383. m_dwBtsId = dwBtsId;//保存基站ID
  384. m_pMainDlg->mainDlgSetBtsId(dwBtsId);
  385. }
  386. //载波ID
  387. if(ui->checkBoxCarrierId->isChecked()){
  388. varTmp = ui->comboBoxCarrierId->currentData();
  389. byTmp = (quint8)varTmp.toInt();
  390. if(byTmp <= 0){
  391. QMessageBox::critical(this, "提示", "请选择载波编号");
  392. switchBtnFlag(true);
  393. return;
  394. }
  395. jsonObject["carrier_id"] = byTmp;
  396. }
  397. //时隙
  398. if(ui->checkBoxTimeslot->isChecked()){
  399. varTmp = ui->comboBoxTimeSlot->currentData();
  400. byTmp = (quint8)varTmp.toInt();
  401. if(byTmp <= 0){
  402. QMessageBox::critical(this, "提示", "请选择基站时隙");
  403. switchBtnFlag(true);
  404. return;
  405. }
  406. jsonObject["timeslot"] = byTmp;
  407. }
  408. //定位类型
  409. if(ui->checkBoxLocationType->isChecked()){
  410. varTmp = ui->comboBoxLocationType->currentData();
  411. byTmp = (quint8)varTmp.toInt();
  412. if(byTmp <= 0){
  413. QMessageBox::critical(this, "提示", "请选择定位类型");
  414. switchBtnFlag(true);
  415. return;
  416. }
  417. jsonObject["location_type"] = byTmp;
  418. }
  419. //两站定位数量
  420. if(ui->checkBoxTwoBtsNum->isChecked()){
  421. byTwoNum = ui->spinBoxTwoBtsNum->value();
  422. jsonObject["two_bts_num"] = byTwoNum;
  423. }
  424. //两站定位基站列表
  425. if(ui->checkBoxTwoBtsList->isChecked()){
  426. strText = ui->lineEditTwoBtsList->text();
  427. strText = strText.trimmed();
  428. baData = strText.toLocal8Bit();
  429. byCharLen = baData.size();
  430. if(byCharLen > 64){
  431. QMessageBox::information(this, "提示", "两站列表字符长度超过64位");
  432. switchBtnFlag(true);
  433. return;
  434. }
  435. jsonObject["two_bts_list"] = strText;
  436. }
  437. //启用按钮
  438. switchBtnFlag(true);
  439. //发送post请求给网管中心
  440. emit SignalUploadBtsBaseParamAdd("guiUploadBtsBaseParamAdd", jsonObject);
  441. }
  442. //获得基站ID
  443. quint32 OamBtsParam::GetBtsId(){
  444. return m_dwBtsId;
  445. }