main.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. #include "main.h"
  2. #include "ReadKey.h"
  3. #include "key.h"
  4. #include "ReadKey.h"
  5. #include "crc8.h"
  6. #include "led.h"
  7. #include "eventUnit.h"
  8. #include "myADC.h"
  9. #include "myInputCapture.h"
  10. #include "myLcd.h"
  11. #include "myDisplayUnit.h"
  12. #include "myFlashData.h"
  13. #include "myTim.h"
  14. #include "myUart.h"
  15. #include "myUart3.h"
  16. #include "myRadio.h"
  17. #define SOFT_VERSION 0x14
  18. #define SET_RF_FREQ_HZ(base, ch,step) base+ch*step*10*1000
  19. //---------------key
  20. KeyParamExt_ts *getKeyReturn;
  21. key_value_te keyPressValue;
  22. static uint16_t present_adcValue;
  23. static uartPacket_ts uartPacket;
  24. static uartPacket_ts uart3Packet;
  25. static bool startToCountingRx = false;
  26. static float present_moduleCurrendValue;
  27. static float validPackageCount = 0;
  28. static uint32_t rfContinuousFreq = 1;
  29. static float rfRxTestRate = 1;
  30. static rfRxPacket_ts rfRecvPacket;
  31. static rfTxPacket_ts rfTxPacket;
  32. static uint32_t rfTxCount = 0;
  33. static uint32_t rfRxCount = 0;
  34. static uint32_t rfTxAndGetAckTime_ms = 0;
  35. static uint32_t rfTxAndGetAckTimeSet_ms = 3000;
  36. static uint32_t rfTxReTmCount = 0;
  37. static bool rfTxGetAckStatus = false;
  38. static uint8_t rfCtrlMode;
  39. const uint32_t rfBaseFreqList[1];
  40. const uint32_t rfBaudrateList[1];
  41. const int8_t rfTxPowerList[] = {13, 13, 10, 8, 7, 5, 4, 2, 0, -3, -6, -10, -18, -30};
  42. const int8_t rfTxPowerValueList[] = {0x3f,0x3f,0X17,0x15,0x07,0x2c,0x06,0x05,0X0B,0x04,0x0A,0x02,0x01,0x00};
  43. static char deviceNameList[1][20] =
  44. {
  45. "VG297"
  46. };
  47. userParams_ts deviceInforDef =
  48. {
  49. .projectModel = "VG297X",
  50. .deviceId = 1,
  51. .chipType = 0,
  52. .txPower = 3,
  53. .rfChannel = 13,
  54. .channelStep = 100,
  55. };
  56. userParams_ts deviceInfor;
  57. #define EVENT_TIME_CYCLE_10ms 0
  58. #define EVENT_TIME_CYCLE_500ms 1
  59. #define EVENT_UART3_RECV 2
  60. #define EVENT_UART_RECV 3
  61. // #define EVENT_TEST_RX_TIMEOUT 4
  62. #define EVENT_RF_CONTINUOUS_TX 5
  63. #define EVENT_RF_CONTINUOUS_RX 6
  64. #define EVENT_RF_IDLE 7
  65. #define EVENT_RF_CONTINUOUS_TX_MD 8
  66. #define EVENT_TIMEOUT_TO_SAVE_PARAMS 9
  67. #define EVENT_RF_GET_RX_PACKET 10
  68. #define EVENT_RF_PACKET_TX 11
  69. #define EVENT_RF_PACKET_RX 12
  70. #define EVENT_TIMEOUT_CHECK_RF_PACKET 13
  71. #define EVENT_RF_RX_ERROR 14
  72. static uint16_t eventReturn;
  73. void dealKeyPressProccess(void)
  74. {
  75. if (getKeyReturn->haveKey == false)
  76. {
  77. return;
  78. }
  79. getKeyReturn->haveKey = false;
  80. switch (getKeyReturn->value)
  81. {
  82. case LEFT_KEY:
  83. {
  84. if(getLongKeySt() == true)
  85. {
  86. clearLongKey();
  87. EnableReleaseKey();
  88. myDisplay_enter(ENTER_LAST_PAGE);
  89. }
  90. else
  91. {
  92. if (getReleaseKeySt())
  93. {
  94. }
  95. else
  96. {
  97. EnableLongKey(5);
  98. }
  99. }
  100. }
  101. break;
  102. case RIGHT_KEY:
  103. {
  104. if(getLongKeySt() == true)
  105. {
  106. clearLongKey();
  107. EnableReleaseKey();
  108. }
  109. else
  110. {
  111. if (getReleaseKeySt())
  112. {
  113. }
  114. else
  115. {
  116. EnableLongKey(5);
  117. }
  118. }
  119. }
  120. break;
  121. case TOP_KEY:
  122. {
  123. if(getCyclicKeySt() == true)
  124. {
  125. EnableCyclicKey(30);
  126. myDisplay_change(1);
  127. }
  128. else
  129. {
  130. if (getReleaseKeySt())
  131. {
  132. beep_shortBeep();
  133. myDisplay_change(1);
  134. }
  135. else
  136. {
  137. EnableReleaseKey();
  138. EnableCyclicKey(300);
  139. }
  140. }
  141. }
  142. break;
  143. case BOTTOM_KEY:
  144. {
  145. if(getCyclicKeySt() == true)
  146. {
  147. EnableCyclicKey(30);
  148. myDisplay_change(0);
  149. }
  150. else
  151. {
  152. if (getReleaseKeySt())
  153. {
  154. beep_shortBeep();
  155. myDisplay_change(0);
  156. }
  157. else
  158. {
  159. EnableReleaseKey();
  160. EnableCyclicKey(300);
  161. }
  162. }
  163. }
  164. break;
  165. case OK_KEY:
  166. {
  167. if(getLongKeySt() == true)
  168. {
  169. clearLongKey();
  170. EnableReleaseKey();
  171. beep_shortBeep();
  172. myDisplay_enter(ENTER_NEXT_PAGE);
  173. }
  174. else
  175. {
  176. if (getReleaseKeySt())
  177. {
  178. }
  179. else
  180. {
  181. EnableLongKey(5);
  182. }
  183. }
  184. }
  185. break;
  186. default:
  187. break;
  188. }
  189. }
  190. /**
  191. *
  192. * 串口回调函数,当串口有硬件超时时会调用该函数
  193. */
  194. static void rcc_init(void)
  195. {
  196. //---------普通IO口时钟使能
  197. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  198. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  199. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  200. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  201. //----------SPI1时钟使能
  202. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  203. //----------复用功能时钟使能
  204. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  205. #if defined(STM32F10X_LD_VL) || defined(STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)
  206. /* ADCCLK = PCLK2/2 */
  207. RCC_ADCCLKConfig(RCC_PCLK2_Div2);
  208. #else
  209. /* ADCCLK = PCLK2/4 */
  210. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  211. #endif
  212. }
  213. /**
  214. *
  215. * 串口回调函数,当串口有硬件超时时会调用该函数
  216. */
  217. void UART1_CALLBACK(uint8_t *buf, uint16_t len)
  218. {
  219. if(uartPacket.isValid == 0)
  220. {
  221. memcpy(uartPacket.packet, buf, len);
  222. uartPacket.len = len;
  223. uartPacket.isValid = 1;
  224. baseCmdFram_ts *baseCmd = (baseCmdFram_ts *)uartPacket.packet;
  225. if (checkFramLegal(uartPacket.packet, uartPacket.len))
  226. {
  227. switch (baseCmd->cmd)
  228. {
  229. case CMD_TO_BOOTLOADER:
  230. {
  231. #ifdef BOOTLOADER_APP
  232. myFlash_setBootloadFlag();
  233. #endif
  234. NVIC_SystemReset();
  235. }break;
  236. default:
  237. break;
  238. }
  239. }
  240. event_post(EVENT_UART_RECV);
  241. }
  242. }
  243. void UART3_CALLBACK(uint8_t *buf, uint16_t len)
  244. {
  245. if(uart3Packet.isValid == 0)
  246. {
  247. memcpy(uart3Packet.packet, buf, len);
  248. uart3Packet.len = len;
  249. uart3Packet.isValid = true;
  250. event_post(EVENT_UART3_RECV);
  251. }
  252. }
  253. /**
  254. *
  255. * 定时器中断回调,当产生定时器中断会调用该函数
  256. */
  257. void TIM3_CALLBACK(void)
  258. {
  259. static uint8_t timeCnt_1ms = 0;
  260. beep_onDriver();
  261. if(timeCnt_1ms ++ == 5)
  262. {
  263. timeCnt_1ms = 0;
  264. rfTxAndGetAckTime_ms ++;
  265. eventDriver();
  266. }
  267. }
  268. void uiEnterCallback(int pageId, int cursorCount, int status, int value)
  269. {
  270. switch (pageId - 1)
  271. {
  272. case UI_PAGE_ID_ITEM_MODE:
  273. {
  274. }break;
  275. case UI_PAGE_ID_RF_CONTINUOUS:
  276. {
  277. switch (cursorCount)
  278. {
  279. case CNT_ITEM_INDEX_TX:
  280. {
  281. // event_post(status ? EVENT_RF_CONTINUOUS_TX : EVENT_RF_CONTINUOUS_RX);
  282. event_post(EVENT_RF_CONTINUOUS_TX);
  283. rfCtrlMode = status ? UI_PAGE_ID_RF_CONTINUOUS : 0;
  284. }
  285. break;
  286. case CNT_ITEM_INDEX_RX:
  287. {
  288. event_post(status ? EVENT_RF_CONTINUOUS_RX : EVENT_RF_IDLE);
  289. }
  290. break;
  291. case CNT_ITEM_INDEX_TX_MD:
  292. {
  293. event_post(status ? EVENT_RF_CONTINUOUS_TX_MD : EVENT_RF_IDLE);
  294. }
  295. break;
  296. default:
  297. break;
  298. }
  299. }
  300. break;
  301. case UI_PAGE_ID_TX_PACKET:
  302. {
  303. switch (cursorCount)
  304. {
  305. case 0:
  306. {
  307. setEvent(status ? EVENT_RF_PACKET_TX : EVENT_RF_IDLE,
  308. status ? true : false,
  309. status ? 500 : 0);
  310. rfCtrlMode = status ? UI_PAGE_ID_TX_PACKET : 0;
  311. rfTxCount = 0;
  312. rfRxCount = 0;
  313. }
  314. break;
  315. case 1:
  316. default:
  317. break;
  318. }
  319. }
  320. break;
  321. case UI_PAGE_ID_RX_PACKET:
  322. {
  323. switch (cursorCount)
  324. {
  325. case 0:
  326. {
  327. event_post(status ? EVENT_RF_PACKET_RX : EVENT_RF_IDLE);
  328. rfCtrlMode = status ? UI_PAGE_ID_RX_PACKET : 0;
  329. rfTxCount = 0;
  330. rfRxCount = 0;
  331. }
  332. break;
  333. default:
  334. break;
  335. }
  336. }
  337. break;
  338. case UI_PAGE_ID_SETTING:
  339. {
  340. switch (cursorCount)
  341. {
  342. case SET_ITEM_INDEX_TYPE://chipType
  343. {
  344. deviceInfor.chipType = value;
  345. myRadio_setTxPower(rfTxPowerValueList[deviceInfor.txPower]);
  346. myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
  347. myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
  348. myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
  349. // myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  350. // myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  351. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  352. }
  353. break;
  354. case SET_ITEM_INDEX_FREQ://Freq
  355. {
  356. deviceInfor.rfChannel = value;
  357. // myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  358. // myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  359. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  360. }
  361. break;
  362. case SET_ITEM_INDEX_STEP://channelStep
  363. {
  364. deviceInfor.channelStep = value;
  365. myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep*10*1000);
  366. // myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  367. // myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  368. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  369. }
  370. break;
  371. case SET_ITEM_INDEX_TXPOWER://TxPower
  372. {
  373. deviceInfor.txPower = value;
  374. myRadio_setTxPower(rfTxPowerValueList[deviceInfor.txPower]);
  375. myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
  376. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  377. }
  378. break;
  379. case SET_ITEM_INDEX_RFBAUDRATE://RFBAUDRATE
  380. {
  381. deviceInfor.rfBaudrate = value;
  382. myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
  383. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  384. }
  385. break;
  386. default:
  387. break;
  388. }
  389. }
  390. break;
  391. default:
  392. break;
  393. }
  394. }
  395. void rfRx_callback(uint8_t status, rfRxPacket_ts packet)
  396. {
  397. switch (status)
  398. {
  399. case RX_STA_SECCESS:
  400. {
  401. rfRecvPacket = packet;
  402. myRadio_receiver();
  403. event_post(EVENT_RF_GET_RX_PACKET);
  404. if (startToCountingRx)
  405. {
  406. if (memcmp(rfRecvPacket.payload, "hel", 3) == 0)
  407. {
  408. validPackageCount ++;
  409. }
  410. }
  411. else
  412. {
  413. }
  414. }
  415. break;
  416. case RX_STA_TIMEOUT:
  417. {
  418. event_post(EVENT_RF_RX_ERROR);
  419. }
  420. break;
  421. case RX_STA_PAYLOAD_ERROR:
  422. {
  423. event_post(EVENT_RF_RX_ERROR);
  424. }
  425. break;
  426. case TX_STA_SECCESS:
  427. {
  428. LED1_ON_ONE();
  429. myRadio_receiver();
  430. }
  431. break;
  432. default:
  433. break;
  434. }
  435. }
  436. int main(void)
  437. {
  438. userParams_ts userParamsTemp;
  439. #ifdef BOOTLOADER_APP
  440. SCB->VTOR = FLASH_BASE | 0x0000C800;
  441. #endif
  442. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  443. rcc_init();
  444. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //关闭jtag , 开启swd
  445. //读取本地保存数据
  446. myFlash_readParams((uint8_t *)&deviceInfor, sizeof(userParams_ts));
  447. if (crc8_gernCheckT((unsigned char *)&deviceInfor,
  448. sizeof(userParams_ts) - 1,
  449. deviceInfor.checkSum) == 0)
  450. {
  451. deviceInfor = deviceInforDef;
  452. }
  453. if (memcmp(deviceInfor.projectModel, deviceInforDef.projectModel, strlen(deviceInforDef.projectModel)) != 0)
  454. {
  455. deviceInfor = deviceInforDef;
  456. }
  457. //初始化按键
  458. key_init();
  459. //初始化LED灯
  460. LED_Init();
  461. //初始化串口
  462. // myUart3_init(115200, UART3_CALLBACK); //用于透传模块测试,需要时再打开
  463. myUart1_init(115200, UART1_CALLBACK);
  464. //初始化定时器
  465. myTim1_init(200, TIM3_CALLBACK);
  466. //初始化模拟转换ADC,用于无线模块驱动电流检测
  467. myADC_init();
  468. //蜂鸣器初始化
  469. beep_init();
  470. beep_setFreq(deviceInfor.beepNumb);
  471. //初始化射频
  472. // myRadio_setChipType(deviceInfor.chipType);
  473. myRadio_setTxPower(rfTxPowerValueList[deviceInfor.txPower]);
  474. myRadio_init(0, rfRx_callback);
  475. // myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  476. // myRadio_setBaudrate(deviceInfor.rfBaudrate);
  477. // LCD显示屏初始化界面显示
  478. myDisplay_init(uiEnterCallback);
  479. myDisplay_ui_firstUi_setDeviceName(deviceNameList[deviceInfor.chipType]);
  480. // myDisplay_ui_firstUi_setFreq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  481. myDisplay_ui_firstUi_setRfPower(rfTxPowerList[deviceInfor.txPower]);
  482. myDisplay_ui_firstUi_setRfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
  483. // myDisplay_ui_rf_setting_freq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  484. myDisplay_ui_rf_setting_channelStep(deviceInfor.channelStep * 10 * 1000);
  485. myDisplay_ui_rf_setting_type(deviceNameList[deviceInfor.chipType]);
  486. myDisplay_ui_rf_setting_rfBr(rfBaudrateList[deviceInfor.rfBaudrate]);
  487. myDisplay_ui_rf_setting_rfPower(rfTxPowerList[deviceInfor.txPower]);
  488. myDisplay_ui_deviceInfor_setVer(SOFT_VERSION);
  489. myDisplay_ui_deviceInfor_setModule("VGKitBoard_VG297");
  490. //上电长想一声
  491. beep_longBeep();
  492. setEvent(EVENT_TIME_CYCLE_10ms, true, 10);
  493. setEvent(EVENT_TIME_CYCLE_500ms, true, 500);
  494. // setEvent(EVENT_RF_PACKET_TX, true, 2000);
  495. myRadio_receiver();
  496. while(1)
  497. {
  498. eventReturn = event_pend();
  499. if (getEvent(EVENT_TIME_CYCLE_10ms))
  500. {
  501. getKeyReturn = KeyValueChange(keyPressValue);
  502. dealKeyPressProccess();
  503. }
  504. if (getEvent(EVENT_TIME_CYCLE_500ms))
  505. {
  506. present_moduleCurrendValue = myADC_getVoltageValue()/50/0.5*1000;
  507. myDisplay_ui_rf_continuos_txCurrent(present_moduleCurrendValue);
  508. myDisplay_ui_rf_rxPacket_rxCurrent(present_moduleCurrendValue);
  509. // myDisplay_ui_rf_continuos_rxRssi(myRadio_getRssi());
  510. uiTimerFlash_callBack();
  511. }
  512. if (getEvent(EVENT_RF_CONTINUOUS_RX))
  513. {
  514. // myRadio_setCtrl(RADIO_EXT_CONTROL_RX_SENSITIVITY,
  515. // SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  516. startToCountingRx = true;
  517. validPackageCount = 0;
  518. }
  519. if (getEvent(EVENT_RF_CONTINUOUS_TX))
  520. {
  521. myRadio_setCtrl(RADIO_EXT_CONTROL_TX_UNMODULATED,
  522. SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  523. }
  524. if (getEvent(EVENT_RF_PACKET_TX))
  525. {
  526. rfTxPacket.len = strlen("hello world");
  527. memcpy(rfTxPacket.payload, "hello world", rfTxPacket.len);
  528. rfTxPacket.payload[rfTxPacket.len] = ((rfTxCount) & 0x0f) + 0x30;
  529. rfTxPacket.len ++;
  530. rfTxPacket.payload[rfTxPacket.len] = 0;
  531. myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
  532. myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
  533. myRadio_transmit(&rfTxPacket);
  534. event_clear(EVENT_TIMEOUT_CHECK_RF_PACKET);
  535. if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
  536. {
  537. rfTxCount ++;
  538. if(rfTxAndGetAckTimeSet_ms == 0 || rfTxAndGetAckTimeSet_ms > 1500)
  539. {
  540. setEvent( EVENT_RF_PACKET_TX, false, 1500);
  541. }
  542. else
  543. {
  544. setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTimeSet_ms*20/10);
  545. }
  546. rfTxAndGetAckTime_ms = 0;
  547. if (rfTxGetAckStatus == false)
  548. {
  549. myDisplay_ui_rf_tx_packet_consumeTime(~(uint32_t)0);
  550. rfTxReTmCount ++;
  551. if (rfTxReTmCount == 10)
  552. {
  553. rfTxReTmCount = 0;
  554. rfTxAndGetAckTimeSet_ms = 0;
  555. }
  556. }
  557. rfTxGetAckStatus = false;
  558. }
  559. }
  560. if (getEvent(EVENT_RF_PACKET_RX))
  561. {
  562. myRadio_receiver();
  563. validPackageCount = 0;
  564. }
  565. if (getEvent(EVENT_RF_GET_RX_PACKET))
  566. {
  567. rfRxCount ++;
  568. myDisplay_ui_rf_rxPacket_rssi(rfRecvPacket.rssi);
  569. myDisplay_ui_rf_rxPacket_count(rfRxCount);
  570. myDisplay_ui_rf_rxPacket_scroll_buffer(rfRecvPacket.payload, 0);
  571. myDisplay_ui_rf_rxContinue_scroll_buffer(rfRecvPacket.payload, 0);
  572. myDisplay_ui_rf_continuos_rxLen(0, validPackageCount);
  573. myUart1_sendArray(rfRecvPacket.payload, rfRecvPacket.len);
  574. memset(rfRecvPacket.payload, 0, sizeof(rfRecvPacket.payload));
  575. if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
  576. {
  577. myDisplay_ui_rf_tx_packet_consumeTime(rfTxAndGetAckTime_ms);
  578. myDisplay_ui_rf_tx_packet_ackRssi(rfRecvPacket.rssi);
  579. myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
  580. if(rfTxAndGetAckTime_ms == 0 || rfTxAndGetAckTime_ms >= 1500)
  581. {
  582. setEvent( EVENT_RF_PACKET_TX, false, 1500);
  583. }
  584. else
  585. {
  586. setEvent( EVENT_RF_PACKET_TX, false, rfTxAndGetAckTime_ms*20/10);
  587. }
  588. rfTxGetAckStatus = true;
  589. rfTxReTmCount = 0;
  590. rfTxAndGetAckTimeSet_ms = rfTxAndGetAckTime_ms;
  591. rfTxAndGetAckTime_ms = 0;
  592. }
  593. if (rfCtrlMode == UI_PAGE_ID_RX_PACKET)
  594. {
  595. setEvent( EVENT_RF_PACKET_TX, false, 0);
  596. }
  597. LED2_ON_ONE();
  598. }
  599. if (getEvent(EVENT_RF_RX_ERROR))
  600. {
  601. myRadio_receiver();
  602. }
  603. if (getEvent(EVENT_RF_IDLE))
  604. {
  605. startToCountingRx = false;
  606. myRadio_abort();
  607. event_clear(EVENT_RF_PACKET_TX);
  608. }
  609. if (getEvent(EVENT_UART_RECV))
  610. {
  611. if (uartPacket.isValid)
  612. {
  613. uartPacket.isValid = false;
  614. rfTxCount ++;
  615. rfTxPacket.len = uartPacket.len;
  616. if (rfTxPacket.len > MAX_RF_PACKET_LEN)
  617. {
  618. rfTxPacket.len = MAX_RF_PACKET_LEN;
  619. }
  620. memcpy(rfTxPacket.payload, uartPacket.packet, rfTxPacket.len);
  621. myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
  622. myDisplay_ui_rf_tx_packet_counts((float)rfRxCount/rfTxCount * 100 * 10, rfTxCount);
  623. myRadio_transmit(&rfTxPacket);
  624. }
  625. }
  626. if (getEvent(EVENT_UART3_RECV))
  627. {
  628. if (uart3Packet.isValid)
  629. {
  630. uart3Packet.isValid = false;
  631. uart3Packet.len = 0;
  632. myDisplay_ui_rf_rxPacket_buffer(uart3Packet.packet, 0);
  633. }
  634. }
  635. if (getEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS))
  636. {
  637. deviceInfor.checkSum = crc8_ger((unsigned char*)&deviceInfor, sizeof(userParams_ts) - 1);
  638. myFlash_writeParams((uint8_t*)&deviceInfor, sizeof(userParams_ts));
  639. }
  640. keyPressValue = keyScan();
  641. myRadio_process();
  642. }
  643. }