main.c 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945
  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 uint8_t packetTxMode;
  31. static uint8_t packetRxMode;
  32. static rfRxPacket_ts rfRecvPacket;
  33. static rfTxPacket_ts rfTxPacket;
  34. static uint32_t rfTxCount = 0;
  35. static uint32_t rfRxCount = 0;
  36. static uint32_t rfTxAndGetAckTime_ms = 0;
  37. static uint32_t rfTxAndGetAckTimeSet_ms = 3000;
  38. static uint32_t rfTxReTmCount = 0;
  39. static bool rfTxGetAckStatus = false;
  40. static uint8_t rfCtrlMode;
  41. const uint32_t rfBaseFreqList[DVTP_MAX_COUNT] =
  42. {
  43. /*"0"*/420000000,//VG2379S433N0S1
  44. /*"1"*/490000000,//VG2379S490N0S1
  45. /*"2"*/868000000,//VG2373S868N0S1
  46. /*"3"*/915000000,//VG2373S915N0S1
  47. /*"4"*/150000000,//VGdd79S170N0S1
  48. /*"5"*/420000000,//VGdd79S433N0S1
  49. /*"6"*/490000000,//VGdd79S490N0S1
  50. /*"7"*/868000000,//VGdd79S868N0S1
  51. /*"8"*/915000000,//VGdd79S915N0S1
  52. /*"0"*/420000000,//VG2379S433X0M1
  53. /*"1"*/490000000,//VG2379S490X0M1
  54. /*"2"*/868000000,//VG2373S868X0M1
  55. /*"3"*/915000000,//VG2373S915X0M1
  56. /*"4"*/150000000,//VGdd79S170X0M1
  57. /*"5"*/420000000,//VGdd79S433X0M1
  58. /*"6"*/490000000,//VGdd79S490X0M1
  59. /*"7"*/868000000,//VGdd79S868X0M1
  60. /*"8"*/915000000,//VGdd79S915X0M1
  61. /*"0"*/420000000,//VG2379S433X0M2
  62. /*"1"*/490000000,//VG2379S490X0M2
  63. /*"2"*/868000000,//VG2373S868X0M2
  64. /*"3"*/915000000,//VG2373S915X0M2
  65. /*"4"*/150000000,//VGdd79S170X0M2
  66. /*"5"*/420000000,//VGdd79S433X0M2
  67. /*"6"*/490000000,//VGdd79S490X0M2
  68. /*"7"*/868000000,//VGdd79S868X0M2
  69. /*"8"*/915000000,//VGdd79S915X0M2
  70. /*"0"*/420000000,//VG2379S433N0SA
  71. /*"1"*/490000000,//VG2379S490N0SA
  72. /*"2"*/868000000,//VG2373S868N0SA
  73. /*"3"*/915000000,//VG2373S915N0SA
  74. /*"4"*/150000000,//VGdd79S170N0SA
  75. /*"5"*/420000000,//VGdd79S433N0SA
  76. /*"6"*/490000000,//VGdd79S490N0SA
  77. /*"7"*/868000000,//VGdd79S868N0SA
  78. /*"8"*/915000000,//VGdd79S915N0SA
  79. };
  80. const uint32_t rfBaudrateList[MAX_RF_BAUDRATE_COUNT] =
  81. {
  82. 90, 610, 1220, 2441, 5022, 12500, 37500, 62500
  83. };
  84. const int8_t rfTxPowerList[RF_TX_PWR_MAX_COUNT] =
  85. {
  86. -9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
  87. };
  88. static char deviceNameList[DVTP_MAX_COUNT][20] =
  89. {
  90. /*"0"*/"VG2379S433N0S1",
  91. /*"1"*/"VG2379S490N0S1",
  92. /*"2"*/"VG2373S868N0S1",
  93. /*"3"*/"VG2373S915N0S1",
  94. /*"4"*/"VGdd79S170N0S1",
  95. /*"5"*/"VGdd79S433N0S1",
  96. /*"6"*/"VGdd79S490N0S1",
  97. /*"7"*/"VGdd79S868N0S1",
  98. /*"8"*/"VGdd79S915N0S1",
  99. /*"0"*/"VG2379S433X0M1",
  100. /*"1"*/"VG2379S490X0M1",
  101. /*"2"*/"VG2373S868X0M1",
  102. /*"3"*/"VG2373S915X0M1",
  103. /*"4"*/"VGdd79S170X0M1",
  104. /*"5"*/"VGdd79S433X0M1",
  105. /*"6"*/"VGdd79S490X0M1",
  106. /*"7"*/"VGdd79S868X0M1",
  107. /*"8"*/"VGdd79S915X0M1",
  108. /*"0"*/"VG2379S433X0M2",
  109. /*"1"*/"VG2379S490X0M2",
  110. /*"2"*/"VG2373S868X0M2",
  111. /*"3"*/"VG2373S915X0M2",
  112. /*"4"*/"VGdd79S170X0M2",
  113. /*"5"*/"VGdd79S433X0M2",
  114. /*"6"*/"VGdd79S490X0M2",
  115. /*"7"*/"VGdd79S868X0M2",
  116. /*"8"*/"VGdd79S915X0M2",
  117. /*"0"*/"VG2379S433N0SA",
  118. /*"1"*/"VG2379S490N0SA",
  119. /*"2"*/"VG2373S868N0SA",
  120. /*"3"*/"VG2373S915N0SA",
  121. /*"4"*/"VGdd79S170N0SA",
  122. /*"5"*/"VGdd79S433N0SA",
  123. /*"6"*/"VGdd79S490N0SA",
  124. /*"7"*/"VGdd79S868N0SA",
  125. /*"8"*/"VGdd79S915N0SA",
  126. };
  127. static char rf_cr_name[][20] =
  128. {
  129. /*"0"*/"4/5",
  130. /*"1"*/"4/6",
  131. /*"2"*/"4/7",
  132. /*"3"*/"4/8",
  133. };
  134. static char rf_bw_name[][20] =
  135. {
  136. /*"0"*/"62.5k",
  137. /*"1"*/"125k",
  138. /*"2"*/"250k",
  139. /*"3"*/"500k",
  140. };
  141. static char rf_rgm_name[][20] =
  142. {
  143. /*"0"*/"LDO",
  144. /*"1"*/"DCDC",
  145. };
  146. userParams_ts deviceInforDef =
  147. {
  148. .projectModel = "VG237x",
  149. .deviceId = 1,
  150. .rfChannel = 13,
  151. .channelStep = 100,
  152. .txPower = RF_TX_PWR_P_22,
  153. .rfBaudrate = RF_BAUDRATE_1220,
  154. .chipType = DVTP_VGdd79S433N0S1,
  155. .packetLen = 12,
  156. .sendPacketCounts = 100,
  157. .rf_sf = 10,
  158. .rf_bw = 2,
  159. .rf_cr = 4,
  160. .rf_regulatorMode = 0x01,
  161. };
  162. userParams_ts deviceInfor;
  163. #define EVENT_TIME_CYCLE_10ms 0
  164. #define EVENT_TIME_CYCLE_500ms 1
  165. #define EVENT_UART3_RECV 2
  166. #define EVENT_UART_RECV 3
  167. // #define EVENT_TEST_RX_TIMEOUT 4
  168. #define EVENT_RF_CONTINUOUS_TX 5
  169. #define EVENT_RF_CONTINUOUS_RX 6
  170. #define EVENT_RF_IDLE 7
  171. #define EVENT_RF_CONTINUOUS_TX_MD 8
  172. #define EVENT_TIMEOUT_TO_SAVE_PARAMS 9
  173. #define EVENT_RF_GET_RX_PACKET 10
  174. #define EVENT_RF_PACKET_TX 11
  175. #define EVENT_RF_PACKET_RX 12
  176. #define EVENT_TIMEOUT_CHECK_RF_PACKET 13
  177. #define EVENT_RF_RX_ERROR 14
  178. static uint16_t eventReturn;
  179. void dealKeyPressProccess(void)
  180. {
  181. if (getKeyReturn->haveKey == false)
  182. {
  183. return;
  184. }
  185. getKeyReturn->haveKey = false;
  186. switch (getKeyReturn->value)
  187. {
  188. case LEFT_KEY:
  189. {
  190. if(getLongKeySt() == true)
  191. {
  192. clearLongKey();
  193. EnableReleaseKey();
  194. myDisplay_enter(ENTER_LAST_PAGE);
  195. }
  196. else
  197. {
  198. if (getReleaseKeySt())
  199. {
  200. }
  201. else
  202. {
  203. EnableLongKey(5);
  204. }
  205. }
  206. }
  207. break;
  208. case RIGHT_KEY:
  209. {
  210. if(getLongKeySt() == true)
  211. {
  212. clearLongKey();
  213. EnableReleaseKey();
  214. }
  215. else
  216. {
  217. if (getReleaseKeySt())
  218. {
  219. }
  220. else
  221. {
  222. EnableLongKey(5);
  223. }
  224. }
  225. }
  226. break;
  227. case TOP_KEY:
  228. {
  229. if(getCyclicKeySt() == true)
  230. {
  231. EnableCyclicKey(30);
  232. myDisplay_change(1);
  233. }
  234. else
  235. {
  236. if (getReleaseKeySt())
  237. {
  238. beep_shortBeep();
  239. myDisplay_change(1);
  240. }
  241. else
  242. {
  243. EnableReleaseKey();
  244. EnableCyclicKey(300);
  245. }
  246. }
  247. }
  248. break;
  249. case BOTTOM_KEY:
  250. {
  251. if(getCyclicKeySt() == true)
  252. {
  253. EnableCyclicKey(30);
  254. myDisplay_change(0);
  255. }
  256. else
  257. {
  258. if (getReleaseKeySt())
  259. {
  260. beep_shortBeep();
  261. myDisplay_change(0);
  262. }
  263. else
  264. {
  265. EnableReleaseKey();
  266. EnableCyclicKey(300);
  267. }
  268. }
  269. }
  270. break;
  271. case OK_KEY:
  272. {
  273. if(getLongKeySt() == true)
  274. {
  275. clearLongKey();
  276. EnableReleaseKey();
  277. beep_shortBeep();
  278. myDisplay_enter(ENTER_NEXT_PAGE);
  279. }
  280. else
  281. {
  282. if (getReleaseKeySt())
  283. {
  284. }
  285. else
  286. {
  287. EnableLongKey(5);
  288. }
  289. }
  290. }
  291. break;
  292. default:
  293. break;
  294. }
  295. }
  296. /**
  297. *
  298. * ���ڻص���������������Ӳ����ʱʱ����øú���
  299. */
  300. static void rcc_init(void)
  301. {
  302. //---------��ͨIO��ʱ��ʹ��
  303. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  304. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  305. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  306. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
  307. //----------SPI1ʱ��ʹ��
  308. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  309. //----------���ù���ʱ��ʹ��
  310. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  311. #if defined(STM32F10X_LD_VL) || defined(STM32F10X_MD_VL) || defined(STM32F10X_HD_VL)
  312. /* ADCCLK = PCLK2/2 */
  313. RCC_ADCCLKConfig(RCC_PCLK2_Div2);
  314. #else
  315. /* ADCCLK = PCLK2/4 */
  316. RCC_ADCCLKConfig(RCC_PCLK2_Div4);
  317. #endif
  318. }
  319. /**
  320. *
  321. * ���ڻص���������������Ӳ����ʱʱ����øú���
  322. */
  323. void UART1_CALLBACK(uint8_t *buf, uint16_t len)
  324. {
  325. if(uartPacket.isValid == 0)
  326. {
  327. memcpy(uartPacket.packet, buf, len);
  328. uartPacket.len = len;
  329. uartPacket.isValid = 1;
  330. baseCmdFram_ts *baseCmd = (baseCmdFram_ts *)uartPacket.packet;
  331. if (checkFramLegal(uartPacket.packet, uartPacket.len))
  332. {
  333. switch (baseCmd->cmd)
  334. {
  335. case CMD_TO_BOOTLOADER:
  336. {
  337. #ifdef BOOTLOADER_APP
  338. myFlash_setBootloadFlag();
  339. #endif
  340. NVIC_SystemReset();
  341. }break;
  342. default:
  343. break;
  344. }
  345. }
  346. event_post(EVENT_UART_RECV);
  347. }
  348. }
  349. void UART3_CALLBACK(uint8_t *buf, uint16_t len)
  350. {
  351. if(uart3Packet.isValid == 0)
  352. {
  353. memcpy(uart3Packet.packet, buf, len);
  354. uart3Packet.len = len;
  355. uart3Packet.isValid = true;
  356. event_post(EVENT_UART3_RECV);
  357. }
  358. }
  359. /**
  360. *
  361. * ��ʱ���жϻص�����������ʱ���жϻ���øú���
  362. */
  363. void TIM3_CALLBACK(void)
  364. {
  365. static uint8_t timeCnt_1ms = 0;
  366. beep_onDriver();
  367. if( ++timeCnt_1ms == 5)
  368. {
  369. timeCnt_1ms = 0;
  370. rfTxAndGetAckTime_ms ++;
  371. eventDriver();
  372. }
  373. }
  374. void uiEnterCallback(int pageId, int cursorCount, int status, int value)
  375. {
  376. switch (pageId - 1)
  377. {
  378. case UI_PAGE_ID_ITEM_MODE:
  379. {
  380. }break;
  381. case UI_PAGE_ID_RF_CONTINUOUS:
  382. {
  383. switch (cursorCount)
  384. {
  385. case CNT_ITEM_INDEX_TX:
  386. {
  387. // event_post(status ? EVENT_RF_CONTINUOUS_TX : EVENT_RF_CONTINUOUS_RX);
  388. event_post(EVENT_RF_CONTINUOUS_TX);
  389. rfCtrlMode = status ? UI_PAGE_ID_RF_CONTINUOUS : 0;
  390. }
  391. break;
  392. case CNT_ITEM_INDEX_RX:
  393. {
  394. event_post(status ? EVENT_RF_CONTINUOUS_RX : EVENT_RF_IDLE);
  395. }
  396. break;
  397. case CNT_ITEM_INDEX_TX_MD:
  398. {
  399. event_post(status ? EVENT_RF_CONTINUOUS_TX_MD : EVENT_RF_IDLE);
  400. }
  401. break;
  402. default:
  403. break;
  404. }
  405. }
  406. break;
  407. case UI_PAGE_ID_TX_PACKET:
  408. {
  409. switch (cursorCount)
  410. {
  411. case 0://signle pcaket tx
  412. case 1:// pcaket tx and wait ack
  413. case 2://packet tx unitl max count
  414. {
  415. setEvent(status ? EVENT_RF_PACKET_TX : EVENT_RF_IDLE,
  416. status ? true : false,
  417. status ? 500 : 0);
  418. rfCtrlMode = status ? UI_PAGE_ID_TX_PACKET : 0;
  419. rfTxCount = 0;
  420. rfRxCount = 0;
  421. packetTxMode = cursorCount;
  422. }
  423. break;
  424. default:
  425. break;
  426. }
  427. }
  428. break;
  429. case UI_PAGE_ID_RX_PACKET:
  430. {
  431. switch (cursorCount)
  432. {
  433. case 0:
  434. case 1:
  435. {
  436. event_post(status ? EVENT_RF_PACKET_RX : EVENT_RF_IDLE);
  437. rfCtrlMode = status ? UI_PAGE_ID_RX_PACKET : 0;
  438. rfTxCount = 0;
  439. rfRxCount = 0;
  440. packetRxMode = cursorCount;
  441. }
  442. break;
  443. default:
  444. break;
  445. }
  446. }
  447. break;
  448. case UI_PAGE_ID_SETTING:
  449. {
  450. switch (cursorCount)
  451. {
  452. case SET_ITEM_INDEX_TYPE://chipType
  453. {
  454. deviceInfor.chipType = value;
  455. if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
  456. {
  457. if (deviceInfor.txPower >= RF_TX_PWR_P_15)
  458. {
  459. deviceInfor.txPower = RF_TX_PWR_P_15;
  460. }
  461. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15, 1);
  462. }
  463. else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
  464. {
  465. if (deviceInfor.txPower >= RF_TX_PWR_P_10)
  466. {
  467. deviceInfor.txPower = RF_TX_PWR_P_10;
  468. }
  469. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10, 1);
  470. }
  471. else
  472. {
  473. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT - 1, 1);
  474. }
  475. myRadio_setTxPower(deviceInfor.txPower);
  476. myDisplay_setting_loadParams(SET_ITEM_INDEX_TXPOWER, "%ddBm", rfTxPowerList[deviceInfor.txPower]);
  477. myDisplay_setting_loadParams(SET_ITEM_INDEX_SF, "%u", deviceInfor.rf_sf);
  478. myDisplay_setting_loadParams(SET_ITEM_INDEX_BW, "%u->%s", deviceInfor.rf_bw, rf_bw_name[deviceInfor.rf_bw]);
  479. myDisplay_setting_loadParams(SET_ITEM_INDEX_CR, "%u->%s", deviceInfor.rf_cr, rf_cr_name[deviceInfor.rf_cr - 1]);
  480. myDisplay_setting_loadParams(SET_ITEM_INDEX_TYPE, deviceNameList[deviceInfor.chipType]);
  481. myDisplay_setting_loadParams(SET_ITEM_INDEX_FREQ, "%03u->%6.2fMHz", deviceInfor.rfChannel, (float)(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep)) / 1000000.0);
  482. myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  483. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  484. }
  485. break;
  486. case SET_ITEM_INDEX_FREQ://Freq
  487. {
  488. deviceInfor.rfChannel = value;
  489. myDisplay_setting_loadParams(SET_ITEM_INDEX_FREQ, "%03u->%6.2fMHz", deviceInfor.rfChannel, (float)(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep)) / 1000000.0);
  490. myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  491. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  492. }
  493. break;
  494. case SET_ITEM_INDEX_STEP://channelStep
  495. {
  496. deviceInfor.channelStep = value;
  497. myDisplay_setting_loadParams(SET_ITEM_INDEX_STEP, "%uHz", deviceInfor.channelStep*10*1000);
  498. myDisplay_setting_loadParams(SET_ITEM_INDEX_FREQ, "%03u->%6.2fMHz", deviceInfor.rfChannel, (float)(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep)) / 1000000.0);
  499. myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  500. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  501. }
  502. break;
  503. case SET_ITEM_INDEX_TXPOWER://TxPower
  504. {
  505. deviceInfor.txPower = value;
  506. myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
  507. myDisplay_setting_loadParams(SET_ITEM_INDEX_TXPOWER, "%ddBm", rfTxPowerList[deviceInfor.txPower]);
  508. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  509. }
  510. break;
  511. case SET_ITEM_INDEX_RFBAUDRATE://RFBAUDRATE
  512. {
  513. deviceInfor.rfBaudrate = value;
  514. myDisplay_setting_loadParams(SET_ITEM_INDEX_RFBAUDRATE, "%ubps", rfBaudrateList[deviceInfor.rfBaudrate]);
  515. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  516. deviceInfor.rf_sf = loraBaudrateFrame[deviceInfor.rfBaudrate].SpreadingFactor;
  517. deviceInfor.rf_bw = loraBaudrateFrame[deviceInfor.rfBaudrate].SignalBw;
  518. deviceInfor.rf_cr = loraBaudrateFrame[deviceInfor.rfBaudrate].ErrorCoding;
  519. myDisplay_setting_loadParams(SET_ITEM_INDEX_SF, "%u", deviceInfor.rf_sf);
  520. myDisplay_setting_loadParams(SET_ITEM_INDEX_BW, "%u->%s", deviceInfor.rf_bw, rf_bw_name[deviceInfor.rf_bw]);
  521. myDisplay_setting_loadParams(SET_ITEM_INDEX_CR, "%u->%s", deviceInfor.rf_cr, rf_cr_name[deviceInfor.rf_cr - 1]);
  522. }
  523. break;
  524. case SET_ITEM_INDEX_PACKET_LEN://
  525. {
  526. deviceInfor.packetLen = value;
  527. myDisplay_setting_loadParams(SET_ITEM_INDEX_PACKET_LEN, "%u Byte", deviceInfor.packetLen);
  528. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  529. }
  530. break;
  531. case SET_ITEM_INDEX_SF://
  532. {
  533. deviceInfor.rf_sf = value;
  534. myDisplay_setting_loadParams(SET_ITEM_INDEX_SF, "%u", deviceInfor.rf_sf);
  535. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  536. }
  537. break;
  538. case SET_ITEM_INDEX_BW://
  539. {
  540. deviceInfor.rf_bw = value;
  541. myDisplay_setting_loadParams(SET_ITEM_INDEX_BW, "%u->%s", deviceInfor.rf_bw, rf_bw_name[deviceInfor.rf_bw]);
  542. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  543. }
  544. break;
  545. case SET_ITEM_INDEX_CR://
  546. {
  547. deviceInfor.rf_cr = value;
  548. myDisplay_setting_loadParams(SET_ITEM_INDEX_CR, "%u->%s", deviceInfor.rf_cr, rf_cr_name[deviceInfor.rf_cr - 1]);
  549. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  550. }
  551. break;
  552. case SET_ITEM_INDEX_RGM://
  553. {
  554. deviceInfor.rf_regulatorMode = value;
  555. myDisplay_setting_loadParams(SET_ITEM_INDEX_RGM, "%u->%s", deviceInfor.rf_regulatorMode, rf_rgm_name[deviceInfor.rf_regulatorMode]);
  556. setEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS, false, 200);
  557. }
  558. break;
  559. default:
  560. break;
  561. }
  562. }
  563. break;
  564. default:
  565. break;
  566. }
  567. }
  568. void rfRx_callback(uint8_t status, rfRxPacket_ts packet)
  569. {
  570. switch (status)
  571. {
  572. case RX_STA_SECCESS:
  573. {
  574. rfRecvPacket = packet;
  575. myRadio_receiver();
  576. switch (packetRxMode)
  577. {
  578. case 0://signle pcaket rx
  579. {
  580. event_post(EVENT_RF_GET_RX_PACKET);
  581. }break;
  582. case 1:// pcaket rx and wait ack
  583. {
  584. setEvent( EVENT_RF_GET_RX_PACKET, false, 50);
  585. }break;
  586. default:
  587. break;
  588. }
  589. }
  590. break;
  591. case RX_STA_TIMEOUT:
  592. {
  593. event_post(EVENT_RF_RX_ERROR);
  594. }
  595. break;
  596. case RX_STA_PAYLOAD_ERROR:
  597. {
  598. event_post(EVENT_RF_RX_ERROR);
  599. }
  600. break;
  601. case TX_STA_SECCESS:
  602. {
  603. LED1_ON_ONE();
  604. if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
  605. {
  606. switch (packetTxMode)
  607. {
  608. case 0://signle pcaket tx
  609. {
  610. setEvent( EVENT_RF_PACKET_TX, false, 50);
  611. }break;
  612. case 1:// pcaket tx and wait ack
  613. {
  614. setEvent( EVENT_RF_PACKET_TX, false, (uint32_t)((float)(rfTxAndGetAckTime_ms>100?rfTxAndGetAckTime_ms:100) * 1.5));
  615. myRadio_receiver();
  616. }break;
  617. case 2://packet tx unitl max count
  618. {
  619. if (rfTxCount < deviceInfor.sendPacketCounts)
  620. {
  621. setEvent( EVENT_RF_PACKET_TX, false, 50);
  622. }
  623. else
  624. {
  625. event_clear(EVENT_RF_PACKET_TX);
  626. }
  627. }
  628. break;
  629. default:
  630. break;
  631. }
  632. myDisplay_ui_rf_tx_packet_consumeTime(rfTxAndGetAckTime_ms);
  633. }
  634. else
  635. {
  636. myRadio_receiver();
  637. }
  638. }
  639. break;
  640. default:
  641. break;
  642. }
  643. }
  644. int main(void)
  645. {
  646. userParams_ts userParamsTemp;
  647. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //
  648. #ifdef BOOTLOADER_APP
  649. SCB->VTOR = FLASH_BASE | 0x000C800;
  650. #endif
  651. rcc_init();
  652. GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //
  653. myFlash_readParams((uint8_t *)&deviceInfor, sizeof(userParams_ts));
  654. if (crc8_gernCheckT((unsigned char *)&deviceInfor,
  655. sizeof(userParams_ts) - 1,
  656. deviceInfor.checkSum) == 0)
  657. {
  658. deviceInfor = deviceInforDef;
  659. }
  660. if (memcmp(deviceInfor.projectModel, deviceInforDef.projectModel, strlen(deviceInforDef.projectModel)) != 0)
  661. {
  662. deviceInfor = deviceInforDef;
  663. }
  664. key_init();
  665. LED_Init();
  666. // myUart3_init(115200, UART3_CALLBACK); //
  667. myUart1_init(115200, UART1_CALLBACK);
  668. myTim1_init(200, TIM3_CALLBACK);
  669. myADC_init();
  670. beep_init();
  671. beep_setFreq(deviceInfor.beepNumb);
  672. myRadio_setChipType(deviceInfor.chipType);
  673. RadioSetregulatorMode(deviceInfor.rf_regulatorMode);
  674. myRadio_init(0, rfRx_callback);
  675. myRadio_setFrequency(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  676. myRadio_setTxPower(rfTxPowerList[deviceInfor.txPower]);
  677. myRadio_setRfParams(deviceInfor.rf_sf, deviceInfor.rf_bw, deviceInfor.rf_cr);
  678. myDisplay_init(uiEnterCallback);
  679. myDisplay_ui_firstUi_setDeviceName(deviceNameList[deviceInfor.chipType]);
  680. myDisplay_ui_firstUi_setFreq(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  681. myDisplay_ui_firstUi_setRfPower(rfTxPowerList[deviceInfor.txPower]);
  682. myDisplay_ui_firstUi_setRfparams(deviceInfor.rf_sf, rf_bw_name[deviceInfor.rf_bw], deviceInfor.rf_cr);
  683. myDisplay_ui_firstUi_setRfRgm(rf_rgm_name[deviceInfor.rf_regulatorMode]);
  684. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TYPE, deviceInfor.chipType, 0, DVTP_MAX_COUNT - 1, 1);
  685. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_FREQ, deviceInfor.rfChannel, 0, 254, 1);
  686. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_STEP, deviceInfor.channelStep, 25, 200, 1);
  687. if ((deviceInfor.chipType >= DVTP_VG2379S433X0M1) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M1))
  688. {
  689. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_15, 1);
  690. }
  691. else if ((deviceInfor.chipType >= DVTP_VG2379S433X0M2) && (deviceInfor.chipType <= DVTP_VGdd79S915X0M2))
  692. {
  693. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_P_10, 1);
  694. }
  695. else
  696. {
  697. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_TXPOWER, deviceInfor.txPower, RF_TX_PWR_N_3, RF_TX_PWR_MAX_COUNT - 1, 1);
  698. }
  699. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RFBAUDRATE, deviceInfor.rfBaudrate, RF_BAUDRATE_90, MAX_RF_BAUDRATE_COUNT - 1, 1);
  700. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_PACKET_LEN, deviceInfor.packetLen, 1, 255, 1);
  701. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_SF, deviceInfor.rf_sf, 5, 12, 1);
  702. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_BW, deviceInfor.rf_bw, 0, 3, 1);
  703. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_CR, deviceInfor.rf_cr, 1, 4, 1);
  704. myDisplay_setSettingParamsProfile(SET_ITEM_INDEX_RGM, deviceInfor.rf_regulatorMode, 0, 1, 1);
  705. myDisplay_setting_loadParams(SET_ITEM_INDEX_FREQ, "%03u->%6.2fMHz", deviceInfor.rfChannel, (float)(SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep)) / 1000000.0);
  706. myDisplay_setting_loadParams(SET_ITEM_INDEX_STEP, "%uHz", deviceInfor.channelStep*10*1000);
  707. myDisplay_setting_loadParams(SET_ITEM_INDEX_TYPE, deviceNameList[deviceInfor.chipType]);
  708. myDisplay_setting_loadParams(SET_ITEM_INDEX_RFBAUDRATE, "%ubps", rfBaudrateList[deviceInfor.rfBaudrate]);
  709. myDisplay_setting_loadParams(SET_ITEM_INDEX_TXPOWER, "%ddBm", rfTxPowerList[deviceInfor.txPower]);
  710. myDisplay_setting_loadParams(SET_ITEM_INDEX_SF, "%u", deviceInfor.rf_sf);
  711. myDisplay_setting_loadParams(SET_ITEM_INDEX_BW, "%u->%s", deviceInfor.rf_bw, rf_bw_name[deviceInfor.rf_bw]);
  712. myDisplay_setting_loadParams(SET_ITEM_INDEX_CR, "%u->%s", deviceInfor.rf_cr, rf_cr_name[deviceInfor.rf_cr - 1]);
  713. myDisplay_setting_loadParams(SET_ITEM_INDEX_RGM, "%u->%s", deviceInfor.rf_regulatorMode, rf_rgm_name[deviceInfor.rf_regulatorMode]);
  714. myDisplay_setting_loadParams(SET_ITEM_INDEX_PACKET_LEN, "%u Byte", deviceInfor.packetLen);
  715. myDisplay_ui_deviceInfor_setVer(SOFT_VERSION);
  716. myDisplay_ui_deviceInfor_setModule("VGKitBoard_237xS");
  717. beep_longBeep();
  718. setEvent(EVENT_TIME_CYCLE_10ms, true, 10);
  719. setEvent(EVENT_TIME_CYCLE_500ms, true, 500);
  720. // setEvent(EVENT_RF_PACKET_TX, true, 2000);
  721. myRadio_receiver();
  722. while(1)
  723. {
  724. eventReturn = event_pend();
  725. if (getEvent(EVENT_TIME_CYCLE_10ms))
  726. {
  727. getKeyReturn = KeyValueChange(keyPressValue);
  728. dealKeyPressProccess();
  729. }
  730. if (getEvent(EVENT_TIME_CYCLE_500ms))
  731. {
  732. present_moduleCurrendValue = myADC_getVoltageValue()/50/0.5*1000;
  733. myDisplay_ui_rf_continuos_txCurrent(present_moduleCurrendValue);
  734. myDisplay_ui_rf_rxPacket_rxCurrent(present_moduleCurrendValue);
  735. myDisplay_ui_rf_continuos_rxRssi(myRadio_getRssi());
  736. uiTimerFlash_callBack();
  737. }
  738. if (getEvent(EVENT_RF_CONTINUOUS_RX))
  739. {
  740. myRadio_setCtrl(RADIO_EXT_CONTROL_RX_SENSITIVITY,
  741. SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  742. startToCountingRx = true;
  743. validPackageCount = 0;
  744. }
  745. if (getEvent(EVENT_RF_CONTINUOUS_TX))
  746. {
  747. myRadio_setCtrl(RADIO_EXT_CONTROL_TX_UNMODULATED,
  748. SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  749. }
  750. if (getEvent(EVENT_RF_CONTINUOUS_TX_MD))
  751. {
  752. myRadio_setTxPower(deviceInfor.txPower);
  753. myRadio_setCtrl(RADIO_EXT_CONTROL_TX_MODULATED,
  754. SET_RF_FREQ_HZ(rfBaseFreqList[deviceInfor.chipType], deviceInfor.rfChannel, deviceInfor.channelStep));
  755. }
  756. if (getEvent(EVENT_RF_PACKET_TX))
  757. {
  758. rfTxCount ++;
  759. event_clear(EVENT_RF_PACKET_TX);
  760. memset(rfTxPacket.payload, 0, sizeof(rfTxPacket.payload));
  761. sprintf(rfTxPacket.payload, "%05u-hello...", rfTxCount);
  762. rfTxPacket.len = strlen(rfTxPacket.payload);
  763. memset(&rfTxPacket.payload[rfTxPacket.len + 1], 0x77, sizeof(rfTxPacket.payload) - rfTxPacket.len - 1);
  764. rfTxPacket.len = deviceInfor.packetLen;
  765. myDisplay_ui_rf_tx_packet_buffer(rfTxPacket.payload);
  766. myDisplay_ui_rf_tx_packet_counts(deviceInfor.packetLen);
  767. rfTxAndGetAckTime_ms = 0;
  768. myRadio_transmit(&rfTxPacket);
  769. event_clear(EVENT_TIMEOUT_CHECK_RF_PACKET);
  770. printf("rfTxPacket.absTime = %u\n", rfTxPacket.absTime);
  771. if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
  772. {
  773. switch (packetTxMode)
  774. {
  775. case 0://signle pcaket tx
  776. case 2://packet tx unitl max count
  777. {
  778. setEvent(EVENT_RF_PACKET_TX, false, (rfTxPacket.absTime + 1000));
  779. }break;
  780. case 1:// pcaket tx and wait ack
  781. {
  782. setEvent(EVENT_RF_PACKET_TX, false, (rfTxPacket.absTime + 1000));
  783. if (rfTxCount > deviceInfor.sendPacketCounts)
  784. {
  785. myDisplay_ui_rf_tx_packet_rate((float)rfRxCount/rfTxCount * 100);
  786. rfTxCount = 0;
  787. rfRxCount = 0;
  788. }
  789. else
  790. {
  791. }
  792. }break;
  793. default:
  794. break;
  795. }
  796. }
  797. }
  798. if (getEvent(EVENT_RF_PACKET_RX))
  799. {
  800. myRadio_receiver();
  801. validPackageCount = 0;
  802. }
  803. if (getEvent(EVENT_RF_GET_RX_PACKET))
  804. {
  805. rfRxCount ++;
  806. myDisplay_ui_rf_continuos_rxLen(0, validPackageCount);
  807. if (rfCtrlMode == UI_PAGE_ID_TX_PACKET)
  808. {
  809. switch (packetTxMode)
  810. {
  811. case 0://signle pcaket tx
  812. {
  813. }break;
  814. case 1:// pcaket tx and wait ack
  815. {
  816. event_post(EVENT_RF_PACKET_TX);
  817. myDisplay_ui_rf_tx_packet_ackRssi(rfRecvPacket.rssi, rfRecvPacket.snr);
  818. }break;
  819. case 2://packet tx unitl max count
  820. {
  821. }
  822. break;
  823. default:
  824. break;
  825. }
  826. }else if (rfCtrlMode == UI_PAGE_ID_RX_PACKET)
  827. {
  828. switch (packetRxMode)
  829. {
  830. case 0:
  831. {
  832. }break;
  833. case 1:
  834. {
  835. rfTxCount ++;
  836. memset(rfTxPacket.payload, 0, sizeof(rfTxPacket.payload));
  837. sprintf(rfTxPacket.payload, "%05u-hello...", rfTxCount);
  838. rfTxPacket.len = strlen(rfTxPacket.payload);
  839. memset(&rfTxPacket.payload[rfTxPacket.len + 1], 0x77, sizeof(rfTxPacket.payload) - rfTxPacket.len - 1);
  840. rfTxPacket.len = deviceInfor.packetLen;
  841. myRadio_transmit(&rfTxPacket);
  842. }break;
  843. default:
  844. break;
  845. }
  846. myDisplay_ui_rf_rxPacket_rssi(rfRecvPacket.rssi, rfRecvPacket.snr);
  847. myDisplay_ui_rf_rxPacket_count(rfRxCount);
  848. if (atoi(rfRecvPacket.payload) == 1)
  849. {
  850. rfRxCount = 1;
  851. }
  852. float rxRate = (float)rfRxCount / atoi(rfRecvPacket.payload) * 100;
  853. myDisplay_ui_rf_rxPacket_rate(rxRate);
  854. myDisplay_ui_rf_rxPacket_scroll_buffer(rfRecvPacket.payload, 0);
  855. myDisplay_ui_rf_rxContinue_scroll_buffer(rfRecvPacket.payload, 0);
  856. }
  857. else if (rfCtrlMode == UI_PAGE_ID_FIRST_UI)
  858. {
  859. setEvent( EVENT_RF_PACKET_TX, false, 0);
  860. }
  861. myUart1_sendArray(rfRecvPacket.payload, rfRecvPacket.len);
  862. memset(rfRecvPacket.payload, 0, sizeof(rfRecvPacket.payload));
  863. LED2_ON_ONE();
  864. }
  865. if (getEvent(EVENT_RF_RX_ERROR))
  866. {
  867. myRadio_receiver();
  868. }
  869. if (getEvent(EVENT_RF_IDLE))
  870. {
  871. startToCountingRx = false;
  872. myRadio_abort();
  873. event_clear(EVENT_RF_PACKET_TX);
  874. }
  875. if (getEvent(EVENT_UART_RECV))
  876. {
  877. if (uartPacket.isValid)
  878. {
  879. uartPacket.isValid = false;
  880. myDisplay_ui_rf_rxPacket_buffer(uartPacket.packet, 10);
  881. rfTxPacket.len = uartPacket.len;
  882. memcpy(rfTxPacket.payload, uartPacket.packet, rfTxPacket.len);
  883. myRadio_transmit(&rfTxPacket);
  884. uartPacket.len = 0;
  885. }
  886. }
  887. if (getEvent(EVENT_UART3_RECV))
  888. {
  889. if (uart3Packet.isValid)
  890. {
  891. uart3Packet.isValid = false;
  892. uart3Packet.len = 0;
  893. myDisplay_ui_rf_rxPacket_buffer(uart3Packet.packet, 0);
  894. }
  895. }
  896. if (getEvent(EVENT_TIMEOUT_TO_SAVE_PARAMS))
  897. {
  898. deviceInfor.checkSum = crc8_ger((unsigned char*)&deviceInfor, sizeof(userParams_ts) - 1);
  899. myFlash_writeParams((uint8_t*)&deviceInfor, sizeof(userParams_ts));
  900. }
  901. keyPressValue = keyScan();
  902. myRadio_process();
  903. }
  904. }