oambaseparam.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. #include "oambaseparam.h"
  2. #include "ui_oambaseparam.h"
  3. #include "maindlg.h"
  4. extern quint8 gMain_bySoftType;
  5. OamBaseParam::OamBaseParam(QWidget *parent)
  6. : QDialog(parent)
  7. , ui(new Ui::OamBaseParam)
  8. {
  9. ui->setupUi(this);
  10. m_pMainDlg = static_cast<MainDlg*>(parent);//保存主窗口指针
  11. init();
  12. }
  13. OamBaseParam::~OamBaseParam()
  14. {
  15. delete ui;
  16. }
  17. void OamBaseParam::init(){
  18. m_dwDeviceType = m_pMainDlg->getDeviceType();
  19. initUi();//增加串口下拉框数据
  20. configSignalSlot();//配置信号与槽
  21. }
  22. //初始化设备类型下来框数据
  23. void OamBaseParam::initUi(){
  24. ui->comboBoxDeviceType->addItem("请选择", 0);
  25. ui->comboBoxDeviceType->addItem("声波基站", 1);
  26. ui->comboBoxDeviceType->addItem("同步基站", 2);
  27. ui->comboBoxDeviceType->addItem("同步中继", 3);
  28. ui->comboBoxDeviceType->setCurrentIndex(0);
  29. //禁用配置按钮
  30. if(gMain_bySoftType == MAIN_SOFT_TYPE_PRO){
  31. ui->pushButtonConfig->setEnabled(false);
  32. }
  33. //更新界面
  34. updateUi();
  35. }
  36. //更新界面
  37. void OamBaseParam::updateUi(){
  38. m_dwDeviceType = m_pMainDlg->getDeviceType();
  39. if(m_dwDeviceType!= 0){//同步基站
  40. ui->checkBoxBleBtsName->setDisabled(true);
  41. ui->checkBoxBleBtsName->setChecked(false);
  42. ui->lineEditBleBtsName->setDisabled(true);
  43. ui->pushButtonImportBleBtsName->setDisabled(true);
  44. }else{//声波基站
  45. ui->checkBoxBleBtsName->setDisabled(false);
  46. ui->lineEditBleBtsName->setDisabled(false);
  47. ui->pushButtonImportBleBtsName->setDisabled(false);
  48. }
  49. }
  50. //配置界面按钮信号与槽
  51. void OamBaseParam::configSignalSlot(){
  52. connect(ui->pushButtonAllSel, &QPushButton::clicked, this,&this->selectAllItem);//全选
  53. connect(ui->pushButtonAllNoSel, &QPushButton::clicked, this,&this->selectAllNoItem);//全不选
  54. connect(ui->pushButtonClear, &QPushButton::clicked, this,&this->clearAllItem);//清空
  55. connect(ui->pushButtonQuery, &QPushButton::clicked, this,&this->queryBaseParam);//查询参数
  56. connect(ui->pushButtonConfig, &QPushButton::clicked, this,&this->configBaseParam);//设置参数
  57. connect(ui->pushButtonUpload, &QPushButton::clicked, this,&this->uploadData);//上传参数
  58. connect(ui->pushButtonImportBleBtsName, &QPushButton::clicked, this,&this->importBleName);//导入蓝牙基站名称
  59. //connect(ui->pushButtonImportWifiBtsName, &QPushButton::clicked, this,&this->configBaseParam);//导入wifi基站名称
  60. //将消息发送到主控模块
  61. connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg);
  62. connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg);
  63. connect(this, &this->SignalUploadBtsBaseParamUpdate, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamUpdate);
  64. }
  65. //全选
  66. void OamBaseParam::selectAllItem(){
  67. ui->checkBoxProjectId->setChecked(true);
  68. ui->checkBoxDeviceType->setChecked(true);
  69. ui->checkBoxGenNo->setChecked(true);
  70. ui->checkBoxDeviceModel->setChecked(true);
  71. ui->checkBoxSoftVersion->setChecked(true);
  72. if(m_dwDeviceType == 0){
  73. ui->checkBoxBleBtsName->setChecked(true);
  74. }
  75. }
  76. //全不选
  77. void OamBaseParam::selectAllNoItem(){
  78. ui->checkBoxProjectId->setChecked(false);
  79. ui->checkBoxDeviceType->setChecked(false);
  80. ui->checkBoxGenNo->setChecked(false);
  81. ui->checkBoxDeviceModel->setChecked(false);
  82. ui->checkBoxSoftVersion->setChecked(false);
  83. ui->checkBoxBleBtsName->setChecked(false);
  84. }
  85. //清空参数
  86. void OamBaseParam::clearAllItem(){
  87. QString strText = "";
  88. ui->lineEditProjectId->setText(strText);
  89. ui->comboBoxDeviceType->setCurrentIndex(0);
  90. ui->lineEditGenNo->setText(strText);
  91. ui->lineEditDeviceModel->setText(strText);
  92. ui->lineEditSoftVersion->setText(strText);
  93. ui->lineEditBleBtsName->setText(strText);
  94. }
  95. //切换按钮状态
  96. //byFlag:开关状态,true:可用,false:不可用
  97. void OamBaseParam::switchBtnFlag(bool byFlag){
  98. ui->pushButtonAllSel->setEnabled(byFlag);
  99. ui->pushButtonAllNoSel->setEnabled(byFlag);
  100. ui->pushButtonClear->setEnabled(byFlag);
  101. ui->pushButtonQuery->setEnabled(byFlag);
  102. ui->pushButtonConfig->setEnabled(byFlag);
  103. ui->pushButtonImportBleBtsName->setEnabled(byFlag);
  104. //禁用配置按钮
  105. if(gMain_bySoftType == MAIN_SOFT_TYPE_PRO){
  106. ui->pushButtonConfig->setEnabled(false);
  107. }
  108. }
  109. //显示基本参数
  110. void OamBaseParam::showBaseParam(LTV_T *pstData){
  111. quint8 byLen = pstData->wLen - 4;
  112. QString strText = "";
  113. quint8 byTmp = 0;
  114. quint32 dwTmp = 0;
  115. //将数据显示在界面上
  116. if(pstData->wTag == 0x0001){//设备类型
  117. memcpy(&byTmp, pstData->abyData, byLen);
  118. ui->comboBoxDeviceType->setCurrentIndex(byTmp);
  119. }else if(pstData->wTag == 0x0002){//设备生产序列号
  120. strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData));
  121. strText = strText.trimmed();
  122. ui->lineEditGenNo->setText(strText);
  123. }else if(pstData->wTag == 0x0003){//设备型号
  124. strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData));
  125. strText = strText.trimmed();
  126. ui->lineEditDeviceModel->setText(strText);
  127. }else if(pstData->wTag == 0x0004){//软件版本
  128. strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData));
  129. strText = strText.trimmed();
  130. ui->lineEditSoftVersion->setText(strText);
  131. }else if(pstData->wTag == 0x0005){//项目编号
  132. memcpy(&dwTmp, pstData->abyData, byLen);
  133. QString hexStr = QString::number(dwTmp, 16);
  134. hexStr = hexStr.rightJustified(8, '0', Qt::AlignRight);
  135. hexStr = hexStr.toUpper();
  136. ui->lineEditProjectId->setText(hexStr);
  137. m_pMainDlg->setProjectId(dwTmp);//保存项目编号
  138. }else if(pstData->wTag == 0x0006){//ble名称
  139. strText = QString::fromLocal8Bit((char *)pstData->abyData, strlen((char*)pstData->abyData));
  140. strText = strText.trimmed();
  141. ui->lineEditBleBtsName->setText(strText);
  142. m_stOamBase.bleBtsName = strText;
  143. }/*else if(pstData->wTag == 0x0007){//wifi名称
  144. strText = QString::fromUtf8((char *)pstData->abyData, byLen);
  145. strText = strText.trimmed();
  146. ui->lineEditWifiBtsName->setText(strText);
  147. m_stOamBase.wifiBtsName = strText;
  148. }*/
  149. return;
  150. }
  151. //查询基本参数
  152. void OamBaseParam::queryBaseParam(){
  153. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  154. quint8 *pbyHead = NULL;
  155. quint16 wLen = 0;
  156. LTV_T stLtv;
  157. //禁用按钮
  158. switchBtnFlag(false);
  159. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  160. memset((void*)&stLtv, 0, sizeof(LTV_T));
  161. pbyHead = abyData;
  162. if(ui->checkBoxProjectId->isChecked()){//项目编号
  163. stLtv.wLen = 8;
  164. stLtv.wTag = ORDER_DEVICE_PROJECT_ID;
  165. memcpy(pbyHead, &stLtv, stLtv.wLen);
  166. wLen = wLen + stLtv.wLen;
  167. pbyHead = pbyHead + stLtv.wLen;
  168. }
  169. if(ui->checkBoxDeviceType->isChecked()){//选择了设备类型
  170. stLtv.wLen = 5;
  171. stLtv.wTag = ORDER_DEVICE_TYPE;
  172. memcpy(pbyHead, &stLtv, stLtv.wLen);
  173. wLen = wLen + stLtv.wLen;
  174. pbyHead = pbyHead + stLtv.wLen;
  175. }
  176. if(ui->checkBoxGenNo->isChecked()){//选择设备生产序列号
  177. stLtv.wLen = 24;
  178. stLtv.wTag = ORDER_DEVICE_SERIAL_NO;
  179. memcpy(pbyHead, &stLtv, stLtv.wLen);
  180. wLen = wLen + stLtv.wLen;
  181. pbyHead = pbyHead + stLtv.wLen;
  182. }
  183. if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号
  184. stLtv.wLen = 24;
  185. stLtv.wTag = ORDER_DEVICE_MODEL;
  186. memcpy(pbyHead, &stLtv, stLtv.wLen);
  187. wLen = wLen + stLtv.wLen;
  188. pbyHead = pbyHead + stLtv.wLen;
  189. }
  190. if(ui->checkBoxSoftVersion->isChecked()){//软件版本
  191. stLtv.wLen = 24;
  192. stLtv.wTag = ORDER_DEVICE_MCU_VERSION;
  193. memcpy(pbyHead, &stLtv, stLtv.wLen);
  194. wLen = wLen + stLtv.wLen;
  195. pbyHead = pbyHead + stLtv.wLen;
  196. }
  197. if(ui->checkBoxBleBtsName->isChecked()){//蓝牙名称
  198. stLtv.wLen = 32;
  199. stLtv.wTag = ORDER_DEVICE_BLE_BTS_NAME;
  200. memcpy(pbyHead, &stLtv, stLtv.wLen);
  201. wLen = wLen + stLtv.wLen;
  202. pbyHead = pbyHead + stLtv.wLen;
  203. }
  204. // if(ui->checkBoxWifiBtsName->isChecked()){//wifi名称
  205. // stLtv.wLen = 32;
  206. // stLtv.wTag = 0x0007;
  207. // memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  208. // wLen = wLen + stLtv.wLen;
  209. // pbyHead = pbyHead + stLtv.wLen;
  210. // }
  211. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  212. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查询项");
  213. switchBtnFlag(true);
  214. return;
  215. }
  216. //将参数发送给主控模块
  217. if(wLen > 0){
  218. emit SignalSendQueryMsg(abyData, wLen);
  219. }else{
  220. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  221. }
  222. //启用按钮
  223. switchBtnFlag(true);
  224. return;
  225. }
  226. //配置基本参数
  227. void OamBaseParam::configBaseParam(){
  228. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  229. quint8 *pbyHead = abyData;
  230. quint16 wLen = 0;
  231. LTV_T stLtv;
  232. QByteArray tmp;
  233. quint8 byDeviceType = 0;
  234. QString stText = "";
  235. quint32 dwProjectId = 0;
  236. //禁用按钮
  237. switchBtnFlag(false);
  238. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  239. memset((void*)&stLtv, 0, sizeof(LTV_T));
  240. if(ui->checkBoxDeviceType->isChecked()){//选择了设备类型
  241. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  242. stLtv.wLen = 5;
  243. stLtv.wTag = ORDER_DEVICE_TYPE;
  244. byDeviceType = ui->comboBoxDeviceType->currentIndex();
  245. memcpy((void*)stLtv.abyData, &byDeviceType, 1);
  246. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  247. wLen += stLtv.wLen;
  248. pbyHead = pbyHead + stLtv.wLen;
  249. }
  250. if(ui->checkBoxGenNo->isChecked()){//选择设备生产序列号
  251. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  252. stLtv.wLen = 24;
  253. stLtv.wTag = ORDER_DEVICE_SERIAL_NO;
  254. stText = ui->lineEditGenNo->text().trimmed();
  255. tmp = stText.toUtf8();
  256. memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size());
  257. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  258. wLen += stLtv.wLen;
  259. pbyHead = pbyHead + stLtv.wLen;
  260. }
  261. if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号
  262. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  263. stLtv.wLen = 24;
  264. stLtv.wTag = ORDER_DEVICE_MODEL;
  265. stText = ui->lineEditDeviceModel->text().trimmed();
  266. tmp = stText.toUtf8();
  267. memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size());
  268. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  269. wLen += stLtv.wLen;
  270. pbyHead = pbyHead + stLtv.wLen;
  271. }
  272. if(ui->checkBoxSoftVersion->isChecked()){//软件版本
  273. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  274. stLtv.wLen = 24;
  275. stLtv.wTag = ORDER_DEVICE_MCU_VERSION;
  276. stText = ui->lineEditSoftVersion->text().trimmed();
  277. tmp = stText.toUtf8();
  278. memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size());
  279. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  280. wLen += stLtv.wLen;
  281. pbyHead = pbyHead + stLtv.wLen;
  282. }
  283. //项目编号
  284. if(ui->checkBoxProjectId->isChecked()){
  285. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  286. stLtv.wLen = 12;
  287. stLtv.wTag = ORDER_DEVICE_PROJECT_ID;
  288. stText = ui->lineEditProjectId->text().trimmed();
  289. QByteArray hexArray = QByteArray::fromHex(stText.toUtf8()); // 将16进制字符串转换为QByteArray,确保以16进制形式解析
  290. QDataStream stream(&hexArray, QIODevice::ReadOnly);// 使用QDataStream来读取转换后的QByteArray
  291. stream>>dwProjectId;
  292. memcpy((void*)stLtv.abyData, &dwProjectId, sizeof(quint32));
  293. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  294. wLen += stLtv.wLen;
  295. pbyHead = pbyHead + stLtv.wLen;
  296. m_pMainDlg->setProjectId(dwProjectId);//保存项目编号
  297. }
  298. if(ui->checkBoxBleBtsName->isChecked()){
  299. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  300. stLtv.wLen = 32;
  301. stLtv.wTag = ORDER_DEVICE_BLE_BTS_NAME;
  302. stText = ui->lineEditBleBtsName->text().trimmed();
  303. tmp = stText.toUtf8();
  304. if(tmp.size() > 28 || tmp.size() <= 0){
  305. QMessageBox::information(this,"提示", "请先导入蓝牙名称");
  306. switchBtnFlag(true);//启用按钮
  307. return;
  308. }
  309. memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size());
  310. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  311. wLen += stLtv.wLen;
  312. pbyHead = pbyHead + stLtv.wLen;
  313. m_stOamBase.bleBtsName = stText;
  314. }
  315. // if(ui->checkBoxWifiBtsName->isChecked()){//wifi名称
  316. // stLtv.wLen = 32;
  317. // stLtv.wTag = 0x0007;
  318. // stText = ui->lineEditWifiBtsName->text().trimmed();
  319. // tmp = stText.toUtf8();
  320. // // if(tmp.size() > 28 || tmp.size() <= 0){
  321. // // QMessageBox::information(this,"提示", "请先导入wifi名称");
  322. // // return;
  323. // // }
  324. // memcpy((void*)stLtv.abyData, tmp.constData(), tmp.size());
  325. // memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  326. // wLen += stLtv.wLen;
  327. // pbyHead = pbyHead + stLtv.wLen;
  328. // m_stOamBase.wifiBtsName = stText;
  329. // }
  330. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  331. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查设置项");
  332. switchBtnFlag(true);
  333. return;
  334. }
  335. //将参数发送给主控模块
  336. if(wLen > 0){
  337. emit SignalSendConfigMsg(abyData, wLen, 0);
  338. }else{
  339. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  340. }
  341. //启用按钮
  342. switchBtnFlag(true);
  343. return;
  344. }
  345. //导入蓝牙名称
  346. void OamBaseParam::importBleName(){
  347. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  348. quint8 *pbyHead = abyData;
  349. quint16 wLen = 0;
  350. LTV_T stLtv;
  351. //禁用按钮
  352. switchBtnFlag(false);
  353. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  354. memset((void*)&stLtv, 0, sizeof(LTV_T));
  355. stLtv.wLen = 32;
  356. stLtv.wTag = 0x0006;
  357. memcpy(pbyHead, &stLtv, sizeof(quint8)*stLtv.wLen);
  358. wLen = wLen + stLtv.wLen;
  359. pbyHead = pbyHead + stLtv.wLen;
  360. //将参数发送给主控模块
  361. emit SignalSendQueryMsg(abyData, wLen);
  362. //启用按钮
  363. switchBtnFlag(true);
  364. return;
  365. }
  366. //上传数据到管理中心
  367. void OamBaseParam::uploadData(){
  368. QJsonObject jsonObject; //定义一个json对象
  369. quint8 byTmp = 0;
  370. QString strText = "";
  371. quint32 dwProjectId = 0;
  372. //禁用按钮
  373. switchBtnFlag(false);
  374. //设备类型
  375. if(ui->checkBoxDeviceType->isChecked()){
  376. byTmp = ui->comboBoxDeviceType->currentIndex();
  377. jsonObject["bts_type"] = byTmp;
  378. }
  379. //选择设备生产序列号
  380. if(ui->checkBoxGenNo->isChecked()){
  381. strText = ui->lineEditGenNo->text().trimmed();
  382. jsonObject["serial_number"] = strText;
  383. }
  384. if(ui->checkBoxDeviceModel->isChecked()){//选择设备型号
  385. strText = ui->lineEditDeviceModel->text().trimmed();
  386. jsonObject["bts_model"] = strText;
  387. }
  388. if(ui->checkBoxSoftVersion->isChecked()){//软件版本
  389. strText = ui->lineEditSoftVersion->text().trimmed();
  390. jsonObject["soft_version"] = strText;
  391. }
  392. if(ui->checkBoxProjectId->isChecked()){//项目编号
  393. strText = ui->lineEditProjectId->text().trimmed();
  394. QByteArray hexArray = QByteArray::fromHex(strText.toUtf8()); // 将16进制字符串转换为QByteArray,确保以16进制形式解析
  395. QDataStream stream(&hexArray, QIODevice::ReadOnly);// 使用QDataStream来读取转换后的QByteArray
  396. stream>>dwProjectId;
  397. jsonObject["project_id"] = QJsonValue::fromVariant(QVariant(static_cast<quint64>(dwProjectId)));
  398. m_pMainDlg->setProjectId(dwProjectId);//保存项目编号
  399. }
  400. if(ui->checkBoxBleBtsName->isChecked()){
  401. strText = ui->lineEditBleBtsName->text().trimmed();
  402. jsonObject["ble_name"] = strText;
  403. }
  404. //启用按钮
  405. switchBtnFlag(true);
  406. //发送post请求
  407. emit SignalUploadBtsBaseParamUpdate("guiUploadBtsBaseParamUpdate", jsonObject);
  408. return;
  409. }