oamsyncparam.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. #include "oamsyncparam.h"
  2. #include "ui_oamsyncparam.h"
  3. #include "maindlg.h"
  4. OamSyncParam::OamSyncParam(QWidget *parent)
  5. : QDialog(parent)
  6. , ui(new Ui::OamSyncParam)
  7. {
  8. ui->setupUi(this);
  9. m_pMainDlg = static_cast<MainDlg*>(parent);//保存上级窗口指针
  10. init();
  11. }
  12. OamSyncParam::~OamSyncParam()
  13. {
  14. delete ui;
  15. }
  16. void OamSyncParam::init(){
  17. QString strText = "";
  18. float fBaseFreq = 402.250;
  19. float fCenterFreq = 0;
  20. m_dwDeviceType = m_pMainDlg->getDeviceType();
  21. //初始化接收中心频率下拉框
  22. ui->comboBoxCenterFreq->addItem("请选择", 0);
  23. for(quint8 i = 1; i < 251; i++){
  24. fCenterFreq = fBaseFreq + 0.250*(i-1);
  25. strText = QString::number(fCenterFreq, 'f', 3) + "mHz";
  26. ui->comboBoxCenterFreq->addItem(strText, i-1);
  27. }
  28. //初始化接收同步字编号
  29. ui->comboBoxRxSyncWordId->addItem("请选择", 0);
  30. for(quint8 i = 1; i < 5; i++){
  31. strText = QString::number(i) + "号同步";
  32. ui->comboBoxRxSyncWordId->addItem(strText, i);
  33. }
  34. //初始化发射开关
  35. ui->comboBoxTxSwitch->addItem("请选择", 0);
  36. ui->comboBoxTxSwitch->addItem("关闭", 1);
  37. ui->comboBoxTxSwitch->addItem("打开", 2);
  38. //初始化发射中心频率下拉框
  39. ui->comboBoxTxCenterFreq->addItem("请选择", 0);
  40. for(quint8 i = 1; i < 251; i++){
  41. fCenterFreq = fBaseFreq + 0.250*(i-1);
  42. strText = QString::number(fCenterFreq, 'f', 3) + "mHz";
  43. ui->comboBoxTxCenterFreq->addItem(strText, i-1);
  44. }
  45. //初始化发射同步字编号
  46. ui->comboBoxTxSyncWordId->addItem("请选择", 0);
  47. for(quint8 i = 1; i < 5; i++){
  48. strText = QString::number(i) + "号同步";
  49. ui->comboBoxTxSyncWordId->addItem(strText, i);
  50. }
  51. //初始化发射功率下拉框
  52. ui->comboBoxTxPower->addItem("请选择", -11);
  53. for(qint8 i = -10; i < 21; i++){
  54. strText = QString::number(i) + "dBm";
  55. ui->comboBoxTxPower->addItem(strText, i);
  56. }
  57. updateUi();
  58. configSignalSlot();//配置信号与槽函数
  59. }
  60. //更新界面
  61. void OamSyncParam::updateUi(){
  62. m_dwDeviceType = m_pMainDlg->getDeviceType();
  63. if(m_dwDeviceType!= 0){//同步基站或者同步中继
  64. ui->checkBoxCenterFreq->setDisabled(false);
  65. ui->comboBoxCenterFreq->setDisabled(false);
  66. ui->label->setText("中心频率");
  67. ui->checkBoxTxPower->setDisabled(false);
  68. ui->comboBoxTxPower->setDisabled(false);
  69. ui->checkBoxRxSyncWordId->setChecked(false);
  70. ui->checkBoxRxSyncWordId->setDisabled(true);
  71. ui->comboBoxRxSyncWordId->setDisabled(true);
  72. ui->checkBoxTxSwitch->setChecked(false);
  73. ui->checkBoxTxSwitch->setDisabled(true);
  74. ui->comboBoxTxSwitch->setDisabled(true);
  75. ui->checkBoxTxCenterFreq->setChecked(false);
  76. ui->checkBoxTxCenterFreq->setDisabled(true);
  77. ui->comboBoxTxCenterFreq->setDisabled(true);
  78. ui->checkBoxTxSyncWordId->setChecked(false);
  79. ui->checkBoxTxSyncWordId->setDisabled(true);
  80. ui->comboBoxTxSyncWordId->setDisabled(true);
  81. ui->checkBoxRssi->setChecked(false);
  82. ui->checkBoxRssi->setDisabled(true);
  83. ui->doubleSpinBoxRssi->setDisabled(true);
  84. }else{//声波基站
  85. ui->checkBoxCenterFreq->setDisabled(false);
  86. ui->comboBoxCenterFreq->setDisabled(false);
  87. ui->label->setText("接收频率");
  88. ui->checkBoxTxPower->setDisabled(false);
  89. ui->comboBoxTxPower->setDisabled(false);
  90. ui->checkBoxRxSyncWordId->setDisabled(false);
  91. ui->comboBoxRxSyncWordId->setDisabled(false);
  92. ui->checkBoxTxSwitch->setDisabled(false);
  93. ui->comboBoxTxSwitch->setDisabled(false);
  94. ui->checkBoxTxCenterFreq->setDisabled(false);
  95. ui->comboBoxTxCenterFreq->setDisabled(false);
  96. ui->checkBoxTxSyncWordId->setDisabled(false);
  97. ui->comboBoxTxSyncWordId->setDisabled(false);
  98. ui->checkBoxRssi->setDisabled(false);
  99. ui->doubleSpinBoxRssi->setDisabled(false);
  100. }
  101. }
  102. //配置界面按钮信号与槽
  103. void OamSyncParam::configSignalSlot(){
  104. connect(ui->pushButtonAllSel, &QPushButton::clicked, this, &this->selectAllItem);//全选
  105. connect(ui->pushButtonAllNoSel, &QPushButton::clicked, this, &this->selectAllNoItem);//全不选
  106. connect(ui->pushButtonClear, &QPushButton::clicked, this, &this->clearAllItem);//清空
  107. connect(ui->pushButtonQuery, &QPushButton::clicked, this, &OamSyncParam::queryParam);//查询参数
  108. connect(ui->pushButtonConfig, &QPushButton::clicked, this, &OamSyncParam::configParam);//设置参数
  109. connect(ui->pushButtonUpload, &QPushButton::clicked, this,&this->uploadData);//上传参数
  110. connect(ui->comboBoxRxSyncWordId, &QComboBox::currentIndexChanged, this, &this->rxSyncWordIndexChanged);//接收同步字改变事件
  111. //将消息发送到主控模块
  112. connect(this, &this->SignalSendQueryMsg, m_pMainDlg, &m_pMainDlg->slotOamSendQueryMsg);
  113. connect(this, &this->SignalSendConfigMsg, m_pMainDlg, &m_pMainDlg->slotOamSendConfigMsg);
  114. connect(this, &this->SignalUploadBtsBaseParamUpdate, m_pMainDlg, &m_pMainDlg->slotUploadBtsBaseParamUpdate);//上传数据
  115. }
  116. //全选
  117. void OamSyncParam::selectAllItem(){
  118. if(m_dwDeviceType == 1 || m_dwDeviceType == 2){//同步基站
  119. ui->checkBoxCenterFreq->setChecked(true);
  120. ui->checkBoxTxPower->setChecked(true);
  121. ui->checkBoxRxSyncWordId->setChecked(false);
  122. ui->checkBoxRssi->setChecked(false);
  123. ui->checkBoxTxSwitch->setChecked(false);
  124. ui->checkBoxTxCenterFreq->setChecked(false);
  125. ui->checkBoxTxSyncWordId->setChecked(false);
  126. }else if(m_dwDeviceType == 0){//声波基站
  127. ui->checkBoxCenterFreq->setChecked(true);
  128. ui->checkBoxRxSyncWordId->setChecked(true);
  129. ui->checkBoxRssi->setChecked(true);
  130. ui->checkBoxTxSwitch->setChecked(true);
  131. ui->checkBoxTxCenterFreq->setChecked(true);
  132. ui->checkBoxTxSyncWordId->setChecked(true);
  133. ui->checkBoxTxPower->setChecked(true);
  134. }
  135. }
  136. //全不选
  137. void OamSyncParam::selectAllNoItem(){
  138. ui->checkBoxCenterFreq->setChecked(false);
  139. ui->checkBoxRxSyncWordId->setChecked(false);
  140. ui->checkBoxRssi->setChecked(false);
  141. ui->checkBoxTxSwitch->setChecked(false);
  142. ui->checkBoxTxCenterFreq->setChecked(false);
  143. ui->checkBoxTxSyncWordId->setChecked(false);
  144. ui->checkBoxTxPower->setChecked(false);
  145. }
  146. //清空参数
  147. void OamSyncParam::clearAllItem(){
  148. QString strText = "";
  149. ui->comboBoxCenterFreq->setCurrentIndex(0);
  150. ui->doubleSpinBoxRssi->setValue(-128);
  151. ui->comboBoxRxSyncWordId->setCurrentIndex(0);
  152. ui->comboBoxTxSwitch->setCurrentIndex(0);
  153. ui->comboBoxTxCenterFreq->setCurrentIndex(0);
  154. ui->comboBoxTxSyncWordId->setCurrentIndex(0);
  155. ui->comboBoxTxPower->setCurrentIndex(0);
  156. }
  157. //切换按钮状态
  158. //byFlag:开关状态,true:可用,false:不可用
  159. void OamSyncParam::switchBtnFlag(bool byFlag){
  160. ui->pushButtonAllSel->setEnabled(byFlag);
  161. ui->pushButtonAllNoSel->setEnabled(byFlag);
  162. ui->pushButtonClear->setEnabled(byFlag);
  163. ui->pushButtonQuery->setEnabled(byFlag);
  164. ui->pushButtonConfig->setEnabled(byFlag);
  165. }
  166. //查询参数
  167. void OamSyncParam::queryParam(){
  168. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  169. quint8 *pbyHead = abyData;
  170. quint16 wLen = 0;
  171. LTV_T stLtv;
  172. //禁用按钮
  173. switchBtnFlag(false);
  174. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  175. memset((void*)&stLtv, 0, sizeof(LTV_T));
  176. //接收频率
  177. if(ui->checkBoxCenterFreq->isChecked()){
  178. stLtv.wLen = 5;
  179. stLtv.wTag = ORDER_SYNC_CENTER_FREQ;
  180. memcpy(pbyHead, &stLtv, stLtv.wLen);
  181. wLen = wLen + stLtv.wLen;
  182. pbyHead = pbyHead + stLtv.wLen;
  183. }
  184. //接收同步字
  185. if(ui->checkBoxRxSyncWordId->isChecked()){
  186. stLtv.wLen = 5;
  187. stLtv.wTag = ORDER_SYNC_RX_SYNC_WORD;
  188. memcpy(pbyHead, &stLtv, stLtv.wLen);
  189. wLen = wLen + stLtv.wLen;
  190. pbyHead = pbyHead + stLtv.wLen;
  191. }
  192. //rssi
  193. if(ui->checkBoxRssi->isChecked()){
  194. stLtv.wLen = 6;
  195. stLtv.wTag = ORDER_SYNC_RSSI;
  196. memcpy(pbyHead, &stLtv, stLtv.wLen);
  197. wLen = wLen + stLtv.wLen;
  198. pbyHead = pbyHead + stLtv.wLen;
  199. }
  200. //发射开关
  201. if(ui->checkBoxTxSwitch->isChecked()){
  202. stLtv.wLen = 5;
  203. stLtv.wTag = ORDER_SYNC_TX_FLAG;
  204. memcpy(pbyHead, &stLtv, stLtv.wLen);
  205. wLen = wLen + stLtv.wLen;
  206. pbyHead = pbyHead + stLtv.wLen;
  207. }
  208. //发射频率ID
  209. if(ui->checkBoxTxCenterFreq->isChecked()){
  210. stLtv.wLen = 5;
  211. stLtv.wTag = ORDER_SYNC_TX_CENTER_FREQ;
  212. memcpy(pbyHead, &stLtv, stLtv.wLen);
  213. wLen = wLen + stLtv.wLen;
  214. pbyHead = pbyHead + stLtv.wLen;
  215. }
  216. //发射同步字
  217. if(ui->checkBoxTxSyncWordId->isChecked()){
  218. stLtv.wLen = 5;
  219. stLtv.wTag = ORDER_SYNC_TX_SYNC_WORD;
  220. memcpy(pbyHead, &stLtv, stLtv.wLen);
  221. wLen = wLen + stLtv.wLen;
  222. pbyHead = pbyHead + stLtv.wLen;
  223. }
  224. //发射功率
  225. if(ui->checkBoxTxPower->isChecked()){
  226. stLtv.wLen = 6;
  227. stLtv.wTag = ORDER_SYNC_TX_POWER;
  228. memcpy(pbyHead, &stLtv, stLtv.wLen);
  229. wLen = wLen + stLtv.wLen;
  230. pbyHead = pbyHead + stLtv.wLen;
  231. }
  232. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  233. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少查询项");
  234. //启用按钮
  235. switchBtnFlag(true);
  236. return;
  237. }
  238. //将参数发送给主控模块
  239. if(wLen > 0){
  240. emit SignalSendQueryMsg(abyData, wLen);
  241. }else{
  242. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  243. }
  244. switchBtnFlag(true);
  245. return;
  246. }
  247. //显示参数
  248. void OamSyncParam::showParam(LTV_T *pstData){
  249. quint32 dwTmp = 0;
  250. quint8 byTmp = 0;
  251. qint8 byTxPower = 0;
  252. qint16 wRssi = 0;
  253. quint8 byIndex = 0;
  254. quint16 wIndex = 0;
  255. quint8 byLen = pstData->wLen-4;
  256. //将数据显示在界面上
  257. if(pstData->wTag == ORDER_SYNC_CENTER_FREQ){//接收中心频率
  258. memcpy(&byTmp, pstData->abyData, byLen);
  259. byTmp += 1;
  260. ui->comboBoxCenterFreq->setCurrentIndex(byTmp);
  261. }else if(pstData->wTag == ORDER_SYNC_RX_SYNC_WORD){//接收同步字
  262. memcpy(&byTmp, pstData->abyData, byLen);
  263. wIndex = ui->comboBoxRxSyncWordId->findData(QVariant(byTmp));
  264. ui->comboBoxRxSyncWordId->setCurrentIndex(wIndex);//接收电平
  265. }else if(pstData->wTag == ORDER_SYNC_RSSI){
  266. memcpy(&wRssi, pstData->abyData, byLen);
  267. ui->doubleSpinBoxRssi->setValue(wRssi);
  268. }else if(pstData->wTag == ORDER_SYNC_TX_FLAG){//发射开关
  269. memcpy(&byTmp, pstData->abyData, byLen);
  270. wIndex = ui->comboBoxTxSwitch->findData(QVariant(byTmp));
  271. ui->comboBoxTxSwitch->setCurrentIndex(wIndex);
  272. }else if(pstData->wTag == ORDER_SYNC_TX_CENTER_FREQ){//发射中心频率
  273. memcpy(&byTmp, pstData->abyData, byLen);
  274. byTmp += 1;
  275. ui->comboBoxTxCenterFreq->setCurrentIndex(byTmp);
  276. }else if(pstData->wTag == ORDER_SYNC_TX_SYNC_WORD){//发送同步字
  277. memcpy(&byTmp, pstData->abyData, byLen);
  278. wIndex = ui->comboBoxTxSyncWordId->findData(QVariant(byTmp));
  279. ui->comboBoxTxSyncWordId->setCurrentIndex(wIndex);
  280. }else if(pstData->wTag == ORDER_SYNC_TX_POWER){//发送功率
  281. memcpy(&byTxPower, pstData->abyData, byLen);
  282. wIndex = ui->comboBoxTxPower->findData(QVariant(byTxPower));
  283. ui->comboBoxTxPower->setCurrentIndex(wIndex);
  284. }
  285. return;
  286. }
  287. //接收同步字选择事件改变
  288. void OamSyncParam::rxSyncWordIndexChanged(int index){
  289. if(index >0 && index < 4){
  290. ui->comboBoxTxSyncWordId->setDisabled(true);
  291. ui->comboBoxTxSyncWordId->setCurrentIndex(index + 1);//发射同步字
  292. ui->checkBoxTxSyncWordId->setChecked(true);
  293. ui->checkBoxTxSyncWordId->setDisabled(true);
  294. ui->checkBoxTxSwitch->setChecked(false);
  295. ui->checkBoxTxSwitch->setDisabled(false);
  296. ui->comboBoxTxSwitch->setDisabled(false);
  297. ui->comboBoxTxSwitch->setCurrentIndex(0);
  298. }else if(index == 4){
  299. ui->checkBoxTxSwitch->setChecked(true);
  300. ui->checkBoxTxSwitch->setDisabled(true);
  301. ui->comboBoxTxSwitch->setDisabled(true);
  302. ui->comboBoxTxSwitch->setCurrentIndex(1);
  303. ui->checkBoxTxSyncWordId->setChecked(false);
  304. ui->checkBoxTxSyncWordId->setDisabled(false);
  305. ui->comboBoxTxSyncWordId->setDisabled(false);
  306. ui->comboBoxTxSyncWordId->setCurrentIndex(0);//发射同步字
  307. }
  308. }
  309. //配置参数
  310. void OamSyncParam::configParam(){
  311. quint8 abyData[PS_FRAME_MCPA_PAYLOAD_LEN];
  312. quint8 *pbyHead = abyData;
  313. quint16 wLen = 0;
  314. LTV_T stLtv;
  315. quint8 byRxFreqId = 0;
  316. quint8 byTxFreqId = 0;
  317. quint8 byRxSyncWordId = 0;
  318. quint8 byTxSyncWordId = 0;
  319. qreal fTmp = 0;
  320. quint32 dwTmp = 0;
  321. quint8 byTmp = 0;
  322. qint8 byTxPower = 0;
  323. QVariant varTmp;
  324. //禁用按钮
  325. switchBtnFlag(false);
  326. memset(abyData, 0, PS_FRAME_MCPA_PAYLOAD_LEN);
  327. memset((void*)&stLtv, 0, sizeof(LTV_T));
  328. //中心频率
  329. if(ui->checkBoxCenterFreq->isChecked()){
  330. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  331. stLtv.wLen = 5;
  332. stLtv.wTag = ORDER_SYNC_CENTER_FREQ;
  333. varTmp = ui->comboBoxCenterFreq->currentData();
  334. byRxFreqId = (quint8)varTmp.toInt();
  335. memcpy((void*)stLtv.abyData, &byRxFreqId, (stLtv.wLen - 4));
  336. memcpy(pbyHead, &stLtv, stLtv.wLen);
  337. wLen = wLen + stLtv.wLen;
  338. pbyHead = pbyHead + stLtv.wLen;
  339. //频率间隔
  340. byTmp = 250;
  341. stLtv.wLen = 5;
  342. stLtv.wTag = ORDER_SYNC_FREQ_OFFSET;
  343. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  344. memcpy(pbyHead, &stLtv, stLtv.wLen);
  345. wLen = wLen + stLtv.wLen;
  346. pbyHead = pbyHead + stLtv.wLen;
  347. }
  348. //接收同步字
  349. if(ui->checkBoxRxSyncWordId->isChecked()){
  350. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  351. stLtv.wLen = 5;
  352. stLtv.wTag = ORDER_SYNC_RX_SYNC_WORD;
  353. varTmp = ui->comboBoxRxSyncWordId->currentData();
  354. byRxSyncWordId = (qint8)varTmp.toInt();
  355. if(byRxSyncWordId <= 0){
  356. QMessageBox::critical(this, "提示", "请选择接收同步");
  357. switchBtnFlag(true);
  358. return;
  359. }
  360. memcpy((void*)stLtv.abyData, &byRxSyncWordId, (stLtv.wLen - 4));
  361. memcpy(pbyHead, &stLtv, stLtv.wLen);
  362. wLen = wLen + stLtv.wLen;
  363. pbyHead = pbyHead + stLtv.wLen;
  364. //修改发射同步字
  365. ui->comboBoxTxSyncWordId->setCurrentIndex(byRxSyncWordId+1);
  366. }
  367. //发射开关
  368. if(ui->checkBoxTxSwitch->isChecked()){
  369. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  370. stLtv.wLen = 5;
  371. stLtv.wTag = ORDER_SYNC_TX_FLAG;
  372. varTmp = ui->comboBoxTxSwitch->currentData();
  373. byTmp = (qint8)varTmp.toInt();
  374. if(byTmp <= 0){
  375. QMessageBox::critical(this, "提示", "请选择发射开关");
  376. switchBtnFlag(true);
  377. return;
  378. }
  379. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  380. memcpy(pbyHead, &stLtv, stLtv.wLen);
  381. wLen = wLen + stLtv.wLen;
  382. pbyHead = pbyHead + stLtv.wLen;
  383. }
  384. //发射频率
  385. if(ui->checkBoxTxCenterFreq->isChecked()){
  386. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  387. stLtv.wLen = 5;
  388. stLtv.wTag = ORDER_SYNC_TX_CENTER_FREQ;
  389. varTmp = ui->comboBoxTxCenterFreq->currentData();
  390. byTxFreqId = (quint8)varTmp.toInt();
  391. //校验接收频率与发射频率间的关系
  392. if(abs(byTxFreqId - byRxFreqId) < 4){
  393. QMessageBox::critical(this, "提示", "发射频率非法");
  394. switchBtnFlag(true);
  395. return;
  396. }
  397. memcpy((void*)stLtv.abyData, &byTxFreqId, (stLtv.wLen - 4));
  398. memcpy(pbyHead, &stLtv, stLtv.wLen);
  399. wLen = wLen + stLtv.wLen;
  400. pbyHead = pbyHead + stLtv.wLen;
  401. //频率间隔
  402. byTmp = 250;
  403. stLtv.wLen = 5;
  404. stLtv.wTag = ORDER_SYNC_FREQ_OFFSET;
  405. memcpy((void*)stLtv.abyData, &byTmp, (stLtv.wLen - 4));
  406. memcpy(pbyHead, &stLtv, stLtv.wLen);
  407. wLen = wLen + stLtv.wLen;
  408. pbyHead = pbyHead + stLtv.wLen;
  409. }
  410. //发射同步字
  411. if(ui->checkBoxTxSyncWordId->isChecked()){
  412. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  413. stLtv.wLen = 5;
  414. stLtv.wTag = ORDER_SYNC_TX_SYNC_WORD;
  415. varTmp = ui->comboBoxTxSyncWordId->currentData();
  416. byTxSyncWordId = (qint8)varTmp.toInt();
  417. if(byTxSyncWordId <= 0){
  418. QMessageBox::critical(this, "提示", "请选择发射同步");
  419. switchBtnFlag(true);
  420. return;
  421. }else{
  422. if(byTxSyncWordId != byRxSyncWordId+1){
  423. QMessageBox::critical(this, "提示", "发射同步编号非法");
  424. switchBtnFlag(true);
  425. return;
  426. }
  427. }
  428. memcpy((void*)stLtv.abyData, &byTxSyncWordId, (stLtv.wLen - 4));
  429. memcpy(pbyHead, &stLtv, stLtv.wLen);
  430. wLen = wLen + stLtv.wLen;
  431. pbyHead = pbyHead + stLtv.wLen;
  432. }
  433. //发射功率
  434. if(ui->checkBoxTxPower->isChecked()){
  435. memset((void*)stLtv.abyData, 0, PS_MCP_A_DATA_LEN);
  436. stLtv.wLen = 5;
  437. stLtv.wTag = ORDER_SYNC_TX_POWER;
  438. varTmp = ui->comboBoxTxPower->currentData();
  439. byTxPower = (qint8)varTmp.toInt();
  440. if((byTxPower < -10) || (byTxPower > 20)){
  441. QMessageBox::critical(this, "提示", "请选择基站发射功率");
  442. switchBtnFlag(true);
  443. return;
  444. }
  445. memcpy((void*)stLtv.abyData, &byTxPower, (stLtv.wLen - 4));
  446. memcpy(pbyHead, &stLtv, stLtv.wLen);
  447. wLen = wLen + stLtv.wLen;
  448. pbyHead = pbyHead + stLtv.wLen;
  449. }
  450. if(ui->checkBoxRssi->isChecked()){
  451. QMessageBox::critical(this, "提示", "接收电平不可配置");
  452. switchBtnFlag(true);
  453. return;
  454. }
  455. if(wLen > PS_FRAME_MCPA_PAYLOAD_LEN){
  456. QMessageBox::information(this,"提示", "数据长度超过报文最大值,请减少配置项");
  457. switchBtnFlag(true);
  458. return;
  459. }
  460. //将参数发送给主控模块
  461. if(wLen > 0){
  462. emit SignalSendConfigMsg(abyData, wLen, 0);
  463. }else{
  464. QMessageBox::information(this,"提示", "请至少选择一项管理项");
  465. }
  466. switchBtnFlag(true);
  467. return;
  468. }
  469. //上传数据
  470. void OamSyncParam::uploadData(){
  471. QJsonObject jsonObject; //定义一个json对象
  472. quint8 byTmp = 0;
  473. QVariant varTmp;
  474. quint8 byRxFreqId = 0;//接收频率
  475. quint8 byRxSyncWordId = 0;//接收同步字
  476. qint8 byRssi = 0; //接收电平
  477. quint8 byTxFreqId = 0; //发射频率
  478. quint8 byTxSyncWordId = 0;//发射同步字
  479. qint8 byTxPower = 0;//发射功率
  480. //禁用按钮
  481. switchBtnFlag(false);
  482. //接收频率
  483. if(ui->checkBoxCenterFreq->isChecked()){
  484. varTmp = ui->comboBoxCenterFreq->currentData();
  485. byTmp = (quint8)varTmp.toInt();
  486. jsonObject["center_freq"] = byTmp;
  487. }
  488. //接收同步字
  489. if(ui->checkBoxRxSyncWordId->isChecked()){
  490. varTmp = ui->comboBoxRxSyncWordId->currentData();
  491. byRxSyncWordId = (quint8)varTmp.toInt();
  492. if(byRxSyncWordId <= 0){
  493. QMessageBox::critical(this, "提示", "请选择接收同步");
  494. switchBtnFlag(true);
  495. return;
  496. }
  497. jsonObject["rx_sync_word_id"] = byRxSyncWordId;
  498. }
  499. //接收电平
  500. if(ui->checkBoxRssi->isChecked()){
  501. byRssi = (qint8)ui->doubleSpinBoxRssi->value();
  502. jsonObject["rssi"] = byRssi;
  503. }
  504. //接收频率
  505. if(ui->checkBoxCenterFreq->isChecked()){
  506. varTmp = ui->comboBoxCenterFreq->currentData();
  507. byTmp = (quint8)varTmp.toInt();
  508. jsonObject["center_freq"] = byTmp;
  509. }
  510. //发射开关
  511. if(ui->checkBoxTxSwitch->isChecked()){
  512. varTmp = ui->comboBoxTxSwitch->currentData();
  513. byTmp = (qint8)varTmp.toInt();
  514. if(byTmp <= 0){
  515. QMessageBox::critical(this, "提示", "请选择发射开关");
  516. switchBtnFlag(true);
  517. return;
  518. }
  519. jsonObject["tx_switch"] = byTmp;
  520. }
  521. //发射频率
  522. if(ui->checkBoxTxCenterFreq->isChecked()){
  523. varTmp = ui->comboBoxTxCenterFreq->currentData();
  524. byTxFreqId = (quint8)varTmp.toInt();
  525. //校验接收频率与发射频率间的关系
  526. if(abs(byTxFreqId - byRxFreqId) < 4){
  527. QMessageBox::critical(this, "提示", "发射频率非法");
  528. switchBtnFlag(true);
  529. return;
  530. }
  531. jsonObject["tx_center_freq"] = byTxFreqId;
  532. }
  533. //发射同步字
  534. if(ui->checkBoxTxSyncWordId->isChecked()){
  535. varTmp = ui->comboBoxTxSyncWordId->currentData();
  536. byTxSyncWordId = (qint8)varTmp.toInt();
  537. if(byTxSyncWordId <= 0){
  538. QMessageBox::critical(this, "提示", "请选择发射同步");
  539. switchBtnFlag(true);
  540. return;
  541. }else{
  542. if(byTxSyncWordId != byRxSyncWordId+1){
  543. QMessageBox::critical(this, "提示", "发射同步编号非法");
  544. switchBtnFlag(true);
  545. return;
  546. }
  547. }
  548. jsonObject["tx_sync_word_id"] = byTxSyncWordId;
  549. }
  550. //发射功率
  551. if(ui->checkBoxTxPower->isChecked()){
  552. varTmp = ui->comboBoxTxPower->currentData();
  553. byTmp = (quint8)varTmp.toInt();
  554. if(byTmp <= 0){
  555. QMessageBox::critical(this, "提示", "请选择发射功率");
  556. switchBtnFlag(true);
  557. return;
  558. }
  559. byTxPower = byTmp - 11;
  560. jsonObject["tx_power"] = byTxPower;
  561. }
  562. //开启按钮
  563. switchBtnFlag(true);
  564. //发送post请求
  565. emit SignalUploadBtsBaseParamUpdate("guiUploadBtsBaseParamUpdate", jsonObject);
  566. return;
  567. }