oamsyncparam.cpp 24 KB

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