main.c 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294
  1. /************************************************************************************************/
  2. /**
  3. * @file main.c
  4. * @author MCU Ecosystem Development Team
  5. * @brief 该示例展示的SN模块用法。
  6. *
  7. *
  8. **************************************************************************************************
  9. * @attention
  10. * Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
  11. *
  12. **************************************************************************************************
  13. */
  14. /*------------------------------------------includes--------------------------------------------*/
  15. #include "main.h"
  16. #include "common.h"
  17. #include "SN_GPIO.h"
  18. #include "SN_ADC.h"
  19. #include "SN_PWM.h"
  20. #include "SN_EXIT.h"
  21. #include "SN_TIM3_INIT.h"
  22. #include "SN_TIM1_INIT.h"
  23. #include "SN_UART.h"
  24. #include "SN_FLASH.h"
  25. #include "SN_RCC.h"
  26. #include "SN_SPI.h"
  27. #include "SN_DDQ.h"
  28. #include "i2c_bsp.h"
  29. #include "SN_STOP.h"
  30. #include <stdio.h>
  31. #include "myRadio.h"
  32. #include "eventUnit.h"
  33. #include "cmdDecode.h"
  34. #include "ReadKey.h"
  35. #define CAD_ENABLE 0
  36. #define SOFTWARE_VERSION 0x10
  37. #define EVENT_TIME_CYCLE_10ms 0
  38. #define EVENT_TIME_CYCLE_500ms 1
  39. #define EVENT_TEST_RX_TIMEOUT 2
  40. #define EVENT_RF_AUTO_PACKET_TX 3
  41. #define EVENT_UART1_RECV 4
  42. #define EVENT_RF_CONTINUOUS_TX 5
  43. #define EVENT_RF_CONTINUOUS_RX 6
  44. #define EVENT_RF_IDLE 7
  45. #define EVENT_RESET_DEVICE 8
  46. #define EVENT_TIMEOUT_TO_SAVE_PARAMS 9
  47. #define EVENT_RF_GET_PACKET 10
  48. #define EVENT_RF_PACKET_TX 11
  49. #define EVENT_RF_PACKET_RX 12
  50. #define EVENT_UART1_TRASMIT 13
  51. #define EVENT_TIME_CYCLE_1s 14
  52. #define EVENT_DEVICE_POWERON 15
  53. /*------------------------------------------functions-------------------------------------------*/
  54. #define BOARD_PIN_MOTOR GPIO_PIN_7 //
  55. #define BOARD_PORT_MOTOR GPIOA //
  56. #define BOARD_GPIO_MOTOR BOARD_PORT_MOTOR, BOARD_PIN_MOTOR //
  57. #define BOARD_PIN_BEEP GPIO_PIN_5 //
  58. #define BOARD_PORT_BEEP GPIOB //
  59. #define BOARD_GPIO_BEEP BOARD_PORT_BEEP, BOARD_PIN_BEEP //
  60. #define BOARD_PIN_LAMP GPIO_PIN_7 //
  61. #define BOARD_PORT_LAMP GPIOB //
  62. #define BOARD_GPIO_LAMP BOARD_PORT_LAMP, BOARD_PIN_LAMP //
  63. #define BOARD_PIN_KEY1 GPIO_PIN_6 //
  64. #define BOARD_PORT_KEY1 GPIOA //
  65. #define BOARD_GPIO_KEY1 BOARD_PORT_KEY1, BOARD_PIN_KEY1 //
  66. #define BOARD_PIN_ELECTRIAL GPIO_PIN_4 //
  67. #define BOARD_PORT_ELECTRIAL GPIOB //
  68. #define BOARD_GPIO_ELECTRIAL BOARD_PORT_ELECTRIAL, BOARD_PIN_ELECTRIAL //
  69. #define BOARD_PIN_CHG_OH GPIO_PIN_5 //
  70. #define BOARD_PORT_CHG_OH GPIOA //
  71. #define BOARD_GPIO_CHG_OH BOARD_PORT_CHG_OH, BOARD_PIN_CHG_OH //
  72. #define BOARD_PIN_CHG_CH GPIO_PIN_1 //
  73. #define BOARD_PORT_CHG_CH GPIOC //
  74. #define BOARD_GPIO_CHG_CH BOARD_PORT_CHG_CH, BOARD_PIN_CHG_CH //
  75. uint16_t ADC_VAL = 0;
  76. float MCU_VDD = 0;
  77. const uint32_t rfFreqBandList[] = {300920000, 420920000, 480920000, 858920000, 905920000, 155920000};
  78. deviceInfor_ts deviceInfor;
  79. const deviceInfor_ts deviceInforDef =
  80. {
  81. #ifdef DEF_FREQ_BAND_IS_315
  82. .freqBand = FREQ_BAND_315,
  83. #elif DEF_FREQ_BAND_IS_160
  84. .freqBand = FREQ_BAND_160,
  85. #elif DEF_FREQ_BAND_IS_433
  86. .freqBand = FREQ_BAND_433,
  87. #elif DEF_FREQ_BAND_IS_490
  88. .freqBand = FREQ_BAND_490,
  89. #elif DEF_FREQ_BAND_IS_868
  90. .freqBand = FREQ_BAND_868,
  91. #elif DEF_FREQ_BAND_IS_915
  92. .freqBand = FREQ_BAND_915,
  93. #endif
  94. .channel = 1,
  95. .syncWord = 0x45,
  96. #ifdef DEF_FREQ_BAND_IS_160
  97. .rfPower = RF_TX_PWR_P_10,
  98. #else
  99. #ifdef DEVICE_IS_1W
  100. .rfPower = RF_TX_PWR_P_4,
  101. #else
  102. .rfPower = RF_TX_PWR_P_20,
  103. #endif
  104. #endif
  105. .freqStep = 100, //=100->1000kHz
  106. .dogABselect = DOG_SLT_NONE,
  107. .targetImei = 0xffffffff,
  108. };
  109. uint8_t beepHandle = 0;
  110. bool beepStartFlag = false;
  111. uint8_t beepWorkCount = 0;
  112. uint8_t beepWorkLevel = 0;
  113. uint16_t beepWorkTime = 0;
  114. bool localOpenFlag = false;
  115. uint32_t localRfSendTimeCount = 0;
  116. static rfRxPacket_ts rfRecvPacket;
  117. #define WORK_TIMEOUT_MS 20*1000
  118. uint32_t workTimeout_ms = WORK_TIMEOUT_MS;
  119. #define HEART_TIMEOUT_S 15*60
  120. #define LOCAL_BACK_TIMEOUT_S 3*60
  121. uint32_t heartTimeout_s = HEART_TIMEOUT_S;
  122. uint8_t heatSendPackegeCount = 0;
  123. uint8_t lastMode = 0;
  124. uint8_t lastModeLevel = 2;
  125. bool isDevicePairFlag = false;
  126. bool isDevicePairOverFlag = false;
  127. bool keyPowerOnFlag = false;
  128. bool keyPowerOnClearFlag = false;
  129. bool keyPowerOnStartFlag = false;
  130. bool batLowVltFlag = false;
  131. bool batLowVltSendFlag = false;
  132. bool localBackFlag = false;
  133. typedef struct
  134. {
  135. uint32_t on_ms;
  136. uint32_t off_ms;
  137. }beepParams_ts;
  138. const beepParams_ts beepParams1[] =
  139. {
  140. {50, 100},
  141. {50, 100},
  142. {50, 100},
  143. {50, 100},
  144. {50, 100},
  145. };
  146. const beepParams_ts beepParams2[] =
  147. {
  148. {200, 100},
  149. {200, 100},
  150. {200, 100},
  151. {200, 100},
  152. {50, 100},
  153. {50, 100},
  154. };
  155. const beepParams_ts beepParams3[] =
  156. {
  157. {50, 50},
  158. {50, 50},
  159. {50, 50},
  160. {50, 50},
  161. {50, 50},
  162. {50, 50},
  163. {50, 50},
  164. {50, 50},
  165. {50, 50},
  166. };
  167. const beepParams_ts beepParams255[] =
  168. {
  169. {1000, 100},
  170. };
  171. const beepParams_ts beepParams254[] =
  172. {
  173. {50, 100},
  174. };
  175. const beepParams_ts beepParams253[] =
  176. {
  177. {100, 200},
  178. {100, 200},
  179. };
  180. void beep_init(void)
  181. {
  182. SN_GPIO_PIN_init(BOARD_GPIO_BEEP , GPIO_MODE_OUTPUT ,GPIO_NOPULL ,GPIO_OUTPUT_PUSHPULL);
  183. beepHandle = 0x55;
  184. }
  185. void beep_driver(void)
  186. {
  187. int workOnTime = 0;
  188. int workCount = 0;
  189. if (beepHandle != 0x55)
  190. {
  191. return;
  192. }
  193. if (beepWorkLevel)
  194. {
  195. if (beepWorkLevel == 1)
  196. {
  197. workOnTime = beepStartFlag?beepParams1[beepWorkCount].on_ms:beepParams1[beepWorkCount].off_ms;
  198. workCount = sizeof(beepParams1)/sizeof(beepParams1[0]);
  199. }
  200. if (beepWorkLevel == 2)
  201. {
  202. workOnTime = beepStartFlag?beepParams2[beepWorkCount].on_ms:beepParams2[beepWorkCount].off_ms;
  203. workCount = sizeof(beepParams2)/sizeof(beepParams2[0]);
  204. }
  205. if (beepWorkLevel == 3)
  206. {
  207. workOnTime = beepStartFlag?beepParams3[beepWorkCount].on_ms:beepParams3[beepWorkCount].off_ms;
  208. workCount = sizeof(beepParams3)/sizeof(beepParams3[0]);
  209. }
  210. if (beepWorkLevel == 255)
  211. {
  212. workOnTime = beepStartFlag?beepParams255[beepWorkCount].on_ms:beepParams255[beepWorkCount].off_ms;
  213. workCount = sizeof(beepParams255)/sizeof(beepParams255[0]);
  214. }
  215. if (beepWorkLevel == 254)
  216. {
  217. workOnTime = beepStartFlag?beepParams254[beepWorkCount].on_ms:beepParams254[beepWorkCount].off_ms;
  218. workCount = sizeof(beepParams254)/sizeof(beepParams254[0]);
  219. }
  220. if (beepWorkLevel == 253)
  221. {
  222. workOnTime = beepStartFlag?beepParams253[beepWorkCount].on_ms:beepParams253[beepWorkCount].off_ms;
  223. workCount = sizeof(beepParams253)/sizeof(beepParams253[0]);
  224. }
  225. if (++beepWorkTime >= workOnTime)
  226. {
  227. beepWorkTime = 0;
  228. beepStartFlag = !beepStartFlag;
  229. if (beepStartFlag == true)
  230. {
  231. beepWorkCount ++;
  232. if (beepWorkCount >= workCount)
  233. {
  234. beepWorkLevel = 0;
  235. return;
  236. }
  237. }
  238. }
  239. if (beepStartFlag)
  240. {
  241. SN_GPIO_PIN_write(BOARD_GPIO_BEEP, 1);
  242. }
  243. else
  244. {
  245. SN_GPIO_PIN_write(BOARD_GPIO_BEEP, 0);
  246. }
  247. }
  248. else
  249. {
  250. SN_GPIO_PIN_write(BOARD_GPIO_BEEP, 0);
  251. }
  252. }
  253. void beep_on(uint8_t level)
  254. {
  255. if (beepHandle != 0x55)
  256. {
  257. return;
  258. }
  259. beepWorkLevel = level;//
  260. beepWorkCount = 0;
  261. beepWorkTime = 0;
  262. beepStartFlag = true;
  263. }
  264. uint8_t motorHandle = 0;
  265. uint32_t motorWorkCount = 0;
  266. uint32_t motorWorkTime = 0;
  267. uint8_t motorWorkLevel = 0;
  268. uint8_t motorProccessIndex = 0;
  269. typedef struct
  270. {
  271. uint8_t pwmDuty;
  272. uint32_t p_ms[3];
  273. }motorParams_ts;
  274. const motorParams_ts motorParams[] =
  275. {
  276. {40, {400, 0, 0}},
  277. {60, {420, 0, 0}},
  278. {80, {440, 0, 0}},
  279. {80, {460, 0, 0}},
  280. {90, {480, 0, 0}},
  281. {100, {500, 0, 0}},
  282. {100, {1000, 0, 0}},
  283. {100, {100, 0, 0}},
  284. };
  285. void motor_init(void)
  286. {
  287. SN_PWM_TIM3_OUT_init(TIM3_CH2_PA7, 8); //
  288. std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_ACTIVE);
  289. // SN_GPIO_PIN_init(BOARD_GPIO_MOTOR , GPIO_MODE_OUTPUT ,GPIO_PULLUP ,GPIO_OUTPUT_PUSHPULL);
  290. motorHandle = 0x55;
  291. }
  292. void motor_driver(void)
  293. {
  294. if (motorHandle != 0x55)
  295. {
  296. return;
  297. }
  298. int workCount = 0;
  299. if (motorWorkLevel)
  300. {
  301. if (++motorWorkTime >= motorParams[motorWorkLevel - 1].p_ms[motorProccessIndex])
  302. {
  303. motorWorkTime = 0;
  304. motorProccessIndex ++;
  305. if (motorProccessIndex >= 3)
  306. {
  307. motorWorkLevel = 0;
  308. motorProccessIndex = 0;
  309. printf("motorWorkLevel = 0\r\n");
  310. std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_ACTIVE);
  311. return;
  312. }
  313. else if (motorProccessIndex == 1)
  314. {
  315. std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_ACTIVE);
  316. }
  317. else
  318. {
  319. std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_PWM1);
  320. }
  321. }
  322. }
  323. else
  324. {
  325. }
  326. // if (motorWorkCount)
  327. // {
  328. // motorWorkCount --;
  329. // if (motorWorkCount)
  330. // {
  331. // // SN_GPIO_PIN_toggle(BOARD_GPIO_MOTOR);
  332. // }
  333. // else
  334. // {
  335. // // SN_GPIO_PIN_write(BOARD_GPIO_MOTOR, 0);
  336. // std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_ACTIVE);
  337. // }
  338. // }
  339. }
  340. void motor_on(uint8_t level)
  341. {
  342. if (motorHandle != 0x55)
  343. {
  344. return;
  345. }
  346. motorWorkLevel = level;
  347. motorProccessIndex = 0;
  348. printf("motorWorkLevel = %d\r\n", motorWorkLevel);
  349. std_tim_set_ocmode(TIM3, TIM_CHANNEL_2, TIM_OUTPUT_MODE_PWM1);
  350. std_tim_set_ccx_value(TIM3,TIM_CHANNEL_2, std_tim_get_autoreload(TIM3)*(100-motorParams[motorWorkLevel - 1].pwmDuty)/100);
  351. }
  352. void motor_short(void)
  353. {
  354. motor_on(8);
  355. }
  356. void motor_long(void)
  357. {
  358. motor_on(7);
  359. }
  360. uint8_t lampHandle = 0;
  361. uint32_t lampWorkCount = 0;
  362. uint32_t lampWorkTimeCount = 0;
  363. bool remoteLampFlag = false;
  364. void lamp_init(void)
  365. {
  366. SN_GPIO_PIN_init(BOARD_GPIO_LAMP , GPIO_MODE_OUTPUT ,GPIO_NOPULL ,GPIO_OUTPUT_PUSHPULL);
  367. lampHandle = 0x55;
  368. }
  369. void lamp_driver(void)
  370. {
  371. if (lampHandle != 0x55)
  372. {
  373. return;
  374. }
  375. if (lampWorkCount)
  376. {
  377. lampWorkCount --;
  378. if (lampWorkCount)
  379. {
  380. SN_GPIO_PIN_toggle(BOARD_GPIO_LAMP);
  381. }
  382. else
  383. {
  384. SN_GPIO_PIN_write(BOARD_GPIO_LAMP, 0);
  385. }
  386. }
  387. else if (remoteLampFlag)
  388. {
  389. if (++lampWorkTimeCount>1000)
  390. {
  391. lampWorkTimeCount = 0;
  392. SN_GPIO_PIN_toggle(BOARD_GPIO_LAMP);
  393. }
  394. }
  395. }
  396. void lamp_on(uint32_t time_ms)
  397. {
  398. if (lampHandle != 0x55)
  399. {
  400. return;
  401. }
  402. lampWorkCount = time_ms;
  403. }
  404. void lamp_remote_on(bool onFlag)
  405. {
  406. if (lampHandle != 0x55)
  407. {
  408. return;
  409. }
  410. lampWorkTimeCount = 0;
  411. remoteLampFlag = onFlag;
  412. }
  413. uint8_t electrialHandle = 0;
  414. uint8_t electrialWorkCount = 0;
  415. uint32_t electrialWorkTime = 0;
  416. uint32_t electrialIntervalTime = 0;
  417. bool isElectrialOn = false;
  418. typedef struct
  419. {
  420. uint8_t pwmDuty;
  421. uint32_t workTime;
  422. uint32_t intvTime;
  423. }electrialParams_ts;
  424. electrialParams_ts electrialParams;
  425. void electrial_init(void)
  426. {
  427. SN_PWM_TIM3_OUT_init(TIM3_CH4_PB4, 8); //
  428. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_ACTIVE);
  429. electrialHandle = 0x55;
  430. }
  431. void electrial_driver(void)
  432. {
  433. if (electrialHandle != 0x55)
  434. {
  435. return;
  436. }
  437. if (electrialIntervalTime == 0)
  438. {
  439. if (electrialWorkCount)
  440. {
  441. if (electrialWorkTime)
  442. {
  443. electrialWorkTime --;
  444. if (electrialWorkTime == 0)
  445. {
  446. electrialWorkCount --;
  447. if (electrialWorkCount)
  448. {
  449. if (electrialParams.intvTime)
  450. {
  451. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_ACTIVE);
  452. }
  453. else
  454. {
  455. electrialWorkTime = electrialParams.workTime;
  456. }
  457. electrialIntervalTime = electrialParams.intvTime;
  458. }
  459. else
  460. {
  461. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_ACTIVE);
  462. }
  463. }
  464. }
  465. }
  466. }
  467. else
  468. {
  469. electrialIntervalTime --;
  470. if (electrialIntervalTime == 0)
  471. {
  472. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_PWM1);
  473. electrialWorkTime = electrialParams.workTime;
  474. }
  475. }
  476. }
  477. void pwm_setDuty(uint8_t pwm_duty)
  478. {
  479. if (pwm_duty > 100)
  480. {
  481. pwm_duty = 100;
  482. }
  483. printf("std_tim_get_autoreload(TIM3)=%d\n", std_tim_get_autoreload(TIM3));
  484. std_tim_set_ccx_value(TIM3,TIM_CHANNEL_4, std_tim_get_autoreload(TIM3)*(100-pwm_duty)/100);
  485. }
  486. void electrial_on(uint8_t level)
  487. {
  488. uint8_t setDuty = 1;
  489. if (electrialHandle != 0x55)
  490. {
  491. // return;
  492. SN_PWM_TIM3_OUT_init(TIM3_CH4_PB4, 8); //
  493. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_ACTIVE);
  494. electrialHandle = 0x55;
  495. }
  496. if (level > 99)
  497. {
  498. level = 99;
  499. }
  500. electrialWorkCount = 2;
  501. electrialIntervalTime = 0;
  502. electrialParams.workTime = level * 4;
  503. electrialParams.intvTime = (99 - (level-1)) * 3;
  504. electrialWorkTime = electrialParams.workTime;
  505. if (level < 10)
  506. {
  507. setDuty = 2;
  508. }
  509. else if (level < 20)
  510. {
  511. setDuty = 5;
  512. }
  513. else if (level < 30)
  514. {
  515. setDuty = 7;
  516. }
  517. else if (level < 60)
  518. {
  519. setDuty = 8;
  520. }
  521. else
  522. {
  523. setDuty = 10;
  524. }
  525. std_tim_set_psc(TIM3, 8);
  526. std_tim_set_autoreload(TIM3, 184);
  527. pwm_setDuty(setDuty);
  528. std_tim_set_ocmode(TIM3, TIM_CHANNEL_4, TIM_OUTPUT_MODE_PWM1);
  529. }
  530. uint8_t batAdcHandle = 0;
  531. void batAdc_init(void)
  532. {
  533. SN_ADC_IN_init(ADC_CHANNEL_2_PA4);
  534. batAdcHandle = 0x55;
  535. }
  536. uint16_t getBatAdcValue(void)
  537. {
  538. if (batAdcHandle != 0x55)
  539. {
  540. return 0;
  541. }
  542. std_adc_enable();
  543. SN_ADC_start();
  544. float MCU_VDD = SN_ADC_MCU_VDD();
  545. uint16_t ADC_VAL = SN_ADC_Get(0);
  546. std_adc_disable();
  547. uint16_t retVlt = (uint32_t)ADC_VAL*MCU_VDD/4096 *2;
  548. if (retVlt < 3000)
  549. {
  550. if (batLowVltFlag == false)
  551. {
  552. }
  553. batLowVltFlag = true;
  554. }
  555. else if (retVlt > 3300)
  556. {
  557. batLowVltFlag = false;
  558. batLowVltSendFlag = false;
  559. }
  560. printf("hello world %f %u\r\n", MCU_VDD, retVlt);
  561. return retVlt;
  562. }
  563. bool batChgStaFlag = false;
  564. void batChgSta_callback(void){
  565. workTimeout_ms = WORK_TIMEOUT_MS;
  566. // printf("BOARD_CH = %d\r\n", SN_GPIO_PIN_get(BOARD_GPIO_CHG_CH));
  567. // printf("BOARD_OH = %d\r\n", SN_GPIO_PIN_get(BOARD_GPIO_CHG_OH));
  568. workTimeout_ms = WORK_TIMEOUT_MS;
  569. if (SN_GPIO_PIN_get(BOARD_GPIO_CHG_CH) == 0)
  570. {
  571. batChgStaFlag = true;
  572. }
  573. else
  574. {
  575. if (SN_GPIO_PIN_get(BOARD_GPIO_CHG_OH))
  576. {
  577. batChgStaFlag = false;
  578. }
  579. }
  580. }
  581. void batChgSta_init(void)
  582. {
  583. SN_EXIT_set(BOARD_GPIO_CHG_OH,GPIO_PULLUP,batChgSta_callback,EXTI_TRIGGER_RISING_FALLING,NVIC_PRIO_3);
  584. SN_EXIT_set(BOARD_GPIO_CHG_CH,GPIO_PULLUP,batChgSta_callback,EXTI_TRIGGER_RISING_FALLING,NVIC_PRIO_3);
  585. }
  586. bool checkLowPowerFlag(void)
  587. {
  588. return (workTimeout_ms == 0 &&
  589. (rf_workProcess == RF_PRC_IDLE || rf_workProcess == RF_PRC_SLEEP) &&
  590. remoteLampFlag == false &&
  591. rf_workProcess != RF_PRC_TX &&
  592. keyPowerOnStartFlag == false &&
  593. isDevicePairFlag == false);
  594. }
  595. //---------------key
  596. typedef enum
  597. {
  598. KEY_VALUE_NONE = 0,
  599. KEY_VALUE_KEY_1,
  600. };
  601. KeyParamExt_ts *getKeyReturn;
  602. uint8_t keyPressValue;
  603. bool isKeyLowPowerFlag = false;
  604. int keyOutputValue = 0;
  605. int keyOutputValueTemp = 0;
  606. bool iskeyPressFlag = false;
  607. void key_callback(void){
  608. workTimeout_ms = WORK_TIMEOUT_MS;
  609. if (checkLowPowerFlag())
  610. {
  611. iskeyPressFlag = true;
  612. }
  613. }
  614. void key_init(void)
  615. {
  616. // SN_GPIO_PIN_init(BOARD_GPIO_KEY1 , GPIO_MODE_INPUT ,GPIO_PULLUP ,GPIO_OUTPUT_PUSHPULL);
  617. SN_EXIT_set(BOARD_GPIO_KEY1,GPIO_PULLUP,key_callback,EXTI_TRIGGER_FALLING,NVIC_PRIO_3);
  618. }
  619. int key_driver(void)
  620. {
  621. static uint32_t keyboundTime = 0;
  622. int keyScanIndex = 0;
  623. if (isKeyLowPowerFlag)
  624. {
  625. return KEY_VALUE_NONE;
  626. }
  627. keyOutputValue = KEY_VALUE_NONE;
  628. if (SN_GPIO_PIN_get(BOARD_GPIO_KEY1) == 0)
  629. {
  630. keyOutputValue = KEY_VALUE_KEY_1;
  631. }
  632. int ret = KEY_VALUE_NONE;
  633. if (keyOutputValueTemp != keyOutputValue)
  634. {
  635. keyboundTime = 7;
  636. }
  637. if (keyboundTime)
  638. {
  639. keyboundTime --;
  640. }
  641. else
  642. {
  643. ret = keyOutputValue;
  644. }
  645. keyOutputValueTemp = keyOutputValue;
  646. return ret;
  647. }
  648. void dealKeyPressProccess(void)
  649. {
  650. if (getKeyReturn->haveKey == false)
  651. {
  652. return;
  653. }
  654. if (batChgStaFlag == true)
  655. {
  656. return;
  657. }
  658. getKeyReturn->haveKey = false;
  659. switch (getKeyReturn->value)
  660. {
  661. case KEY_VALUE_KEY_1: // 档位调节增加健
  662. {
  663. workTimeout_ms = WORK_TIMEOUT_MS;
  664. iskeyPressFlag = false;
  665. if(getLongKeySt() == true)
  666. {
  667. clearLongKey();
  668. clearDoubleKey();
  669. keyPowerOnStartFlag = false;
  670. if(keyPowerOnFlag == false)
  671. {
  672. beep_on(255);
  673. motor_long();
  674. lamp_on(1000);
  675. clearReleaseKey();
  676. keyPowerOnFlag = true;
  677. myRadio_receiver(0);
  678. }
  679. else
  680. {
  681. // beep_on(255);
  682. motor_long();
  683. keyPowerOnClearFlag = true;
  684. }
  685. }
  686. else if(getDoubleKeySt() == true)
  687. {
  688. clearReleaseKey();
  689. if (keyPowerOnFlag)
  690. {
  691. beep_on(254);
  692. myRadio_setFrequency(rfFreqBandList[deviceInfor.freqBand] +
  693. (uint32_t)0 * deviceInfor.freqStep * 10 * 1000);
  694. myRadio_receiver(0);
  695. workTimeout_ms = 5*60000;
  696. isDevicePairFlag = true;
  697. }
  698. }
  699. else
  700. {
  701. if (getReleaseKeySt())
  702. {
  703. // NVIC_SystemReset();
  704. clearReleaseKey();
  705. // motor_on(50);
  706. iskeyPressFlag = false;
  707. if (keyPowerOnClearFlag)
  708. {
  709. keyPowerOnFlag = false;
  710. keyPowerOnClearFlag = false;
  711. }
  712. }
  713. else
  714. {
  715. EnableLongKey(2000);
  716. EnableReleaseKey();
  717. EnableDoubleKey();
  718. }
  719. }
  720. }
  721. break;
  722. default:
  723. break;
  724. }
  725. }
  726. void rfRx_callback(uint8_t status, rfRxPacket_ts packet)
  727. {
  728. printf("status:%d\r\n", status);
  729. switch (status)
  730. {
  731. case RX_STA_SECCESS:
  732. {
  733. printf("receive data:%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\r\n", packet.payload[0], packet.payload[1], packet.payload[2], packet.payload[3], packet.payload[4], packet.payload[5], packet.payload[6], packet.payload[7], packet.payload[8], packet.payload[9]);
  734. rfRecvPacket = packet;
  735. // RF_StopCad();
  736. myRadio_receiver(0);
  737. event_post(EVENT_RF_GET_PACKET);
  738. workTimeout_ms = WORK_TIMEOUT_MS;
  739. // myRadio_restartCadReceiver();
  740. }
  741. break;
  742. case RX_STA_TIMEOUT:
  743. {
  744. #if CAD_ENABLE == 1
  745. myRadio_receiver(0);
  746. #else
  747. myRadio_abort();
  748. #endif
  749. // myRadio_restartCadReceiver();
  750. }
  751. break;
  752. case RX_STA_PAYLOAD_ERROR:
  753. {
  754. myRadio_receiver(0);
  755. // myRadio_restartCadReceiver();
  756. }
  757. break;
  758. case TX_STA_SECCESS:
  759. {
  760. if (isDevicePairOverFlag)
  761. {
  762. isDevicePairOverFlag = false;
  763. myRadio_setFrequency(rfFreqBandList[deviceInfor.freqBand] +
  764. (uint32_t)deviceInfor.channel * deviceInfor.freqStep * 10 * 1000);
  765. printf("pair success channel=%d\r\n", deviceInfor.channel);
  766. }
  767. myRadio_receiver(0);
  768. // myRadio_cadReceiver(500, 2000);
  769. }
  770. break;
  771. default:
  772. break;
  773. }
  774. }
  775. uint32_t sendTimeout = 0;
  776. void LPTIM1_IRQHandler(void)
  777. {
  778. system_clock_config();
  779. if (std_lptim_get_flag(LPTIM_FLAG_ARRM) == LPTIM_FLAG_ARRM)
  780. {
  781. static uint8_t timeoutcount_1s = 0;
  782. std_lptim_clear_flag(LPTIM_CLEAR_ARRM);
  783. printf("LPTIM1_IRQHandler\r\n");
  784. if (timeoutcount_1s ++ >= 1)
  785. {
  786. timeoutcount_1s = 0;
  787. uint16_t getVlt = getBatAdcValue();
  788. if (batLowVltFlag == true)
  789. {
  790. if (batLowVltSendFlag == false)
  791. {
  792. workTimeout_ms = WORK_TIMEOUT_MS;
  793. batLowVltSendFlag = true;
  794. devicePairFram_ts devicePairBuffer;
  795. devicePairBuffer.clientInfor.infor.cmd = CMD_REBACK_SEND;
  796. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  797. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  798. devicePairBuffer.clientInfor.infor.deviceId = deviceInfor.targetImei;
  799. devicePairBuffer.value = getBatAdcValue();
  800. printf("batLowVltSendFlag %d\n", devicePairBuffer.value);
  801. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  802. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  803. }
  804. }
  805. else
  806. {
  807. if (keyPowerOnFlag)
  808. {
  809. if (heartTimeout_s)
  810. {
  811. heartTimeout_s --;
  812. if (heartTimeout_s == 0)
  813. {
  814. workTimeout_ms = 5*1000;
  815. if (localBackFlag)
  816. {
  817. heartTimeout_s = LOCAL_BACK_TIMEOUT_S;
  818. if (heatSendPackegeCount >= 2)
  819. {
  820. heatSendPackegeCount = 0;
  821. // 信号丢失
  822. if (lastMode == CMD_TRIGLE_VIRBRA)
  823. {
  824. motor_on(lastModeLevel);
  825. }
  826. else
  827. {
  828. beep_on(lastModeLevel);
  829. }
  830. }
  831. else
  832. {
  833. heatSendPackegeCount ++;
  834. }
  835. }
  836. else
  837. {
  838. heartTimeout_s = HEART_TIMEOUT_S;
  839. }
  840. devicePairFram_ts devicePairBuffer;
  841. devicePairBuffer.clientInfor.infor.cmd = CMD_REBACK_SEND;
  842. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  843. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  844. devicePairBuffer.clientInfor.infor.deviceId = deviceInfor.targetImei;
  845. devicePairBuffer.value = getBatAdcValue();
  846. printf("batLowVltSendFlag %d\n", devicePairBuffer.value);
  847. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  848. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  849. }
  850. }
  851. }
  852. }
  853. }
  854. }
  855. }
  856. void lptim1_init(void)
  857. {
  858. /* 使能RCL时钟并等待时钟稳定 */
  859. std_rcc_rcl_enable();
  860. while(std_rcc_get_rcl_ready() != RCC_CSR2_RCLRDY);
  861. /* 选择LPTIM1的时钟源为RCL */
  862. std_rcc_set_lptim1clk_source(RCC_LPTIM1_ASYNC_CLK_SRC_RCL);
  863. /* 使能LPTIM1时钟 */
  864. std_rcc_apb1_clk_enable(RCC_PERIPH_CLK_LPTIM1);
  865. /* 设置LPTIM1预分频器 */
  866. std_lptim_set_prescaler(LPTIM_PRESCALER_DIV1);
  867. /* 使能LPTIM1中断唤醒 */
  868. std_exti_interrupt_enable(EXTI_LINE_LPTIM1);
  869. /* 禁止LPTIM1事件唤醒 */
  870. std_exti_event_disable(EXTI_LINE_LPTIM1);
  871. /* 使能自动重载匹配中断 */
  872. std_lptim_interrupt_enable(LPTIM_INTERRUPT_ARRM);
  873. /* 使能LPTIM1 */
  874. std_lptim_enable();
  875. // std_lptim_disable();
  876. /* 启动LPTIM1计数 */
  877. std_lptim_start_counter(LPTIM_COUNT_CONTINUOUS);
  878. std_lptim_set_auto_reload(600*32000/1000);
  879. // std_lptim_start_counter(LPTIM_COUNT_SINGLE);
  880. NVIC_SetPriority(LPTIM1_IRQn, NVIC_PRIO_0);
  881. NVIC_EnableIRQ(LPTIM1_IRQn);
  882. }
  883. void lptim1_restart(uint32_t time_ms)
  884. {
  885. /* 启动LPTIM1计数 */
  886. std_lptim_set_auto_reload(time_ms*32000/1000);
  887. std_lptim_start_counter(LPTIM_COUNT_SINGLE);
  888. }
  889. void main_tim_callback(void)
  890. {
  891. static uint16_t timeCnt_1ms = 0;
  892. static uint16_t pairTimeCnt_1ms = 0;
  893. static uint32_t couint = 0;
  894. if (++timeCnt_1ms == 5)
  895. {
  896. timeCnt_1ms = 0;
  897. eventDriver();
  898. if (couint++ == 1000)
  899. {
  900. couint = 0;
  901. }
  902. if (workTimeout_ms)
  903. {
  904. workTimeout_ms--;
  905. if (workTimeout_ms == 0)
  906. {
  907. if (isDevicePairFlag)
  908. {
  909. isDevicePairFlag = false;
  910. myRadio_setFrequency(rfFreqBandList[deviceInfor.freqBand] +
  911. (uint32_t)deviceInfor.channel * deviceInfor.freqStep * 10 * 1000);
  912. }
  913. if (remoteLampFlag == false)
  914. {
  915. // lamp_on(100);
  916. #if CAD_ENABLE == 1
  917. myRadio_cadReceiver(30, 500);
  918. #else
  919. if (batChgStaFlag == false)
  920. {
  921. myRadio_receiver(60);
  922. }
  923. else
  924. {
  925. myRadio_receiver(0);
  926. }
  927. #endif
  928. }
  929. }
  930. else
  931. {
  932. if (isDevicePairFlag)
  933. {
  934. if (pairTimeCnt_1ms++ >= 500)
  935. {
  936. pairTimeCnt_1ms = 0;
  937. lamp_on(100);
  938. }
  939. }
  940. }
  941. }
  942. myRadio_timCallback(1);
  943. motor_driver();
  944. lamp_driver();
  945. electrial_driver();
  946. beep_driver();
  947. }
  948. }
  949. int main(void)
  950. {
  951. SN_SYSCLK_set(SYSCLK_48MHZ); //设置系统时钟为48MHZ
  952. std_delay_init(); //初始化延时(该延时是使用滴答定时器实现的)
  953. SN_FLASH_ReadE(0x00005e00, (uint8_t *)&deviceInfor, sizeof(deviceInfor_ts));
  954. if ((checkFramLegal((uint8_t *)&deviceInfor, sizeof(deviceInfor_ts)) == false))
  955. {
  956. deviceInfor = deviceInforDef;
  957. }
  958. // electrial_init();
  959. beep_init();
  960. motor_init();
  961. lamp_init();
  962. batAdc_init();
  963. std_delayms(1500);
  964. SN_UART_init(UART1,921600, UART1_RX_PA2, UART1_TX_PB6); //初始化串口
  965. batChgSta_init();
  966. key_init();
  967. if (SN_GPIO_PIN_get(BOARD_GPIO_KEY1) == 0)
  968. {
  969. keyPowerOnStartFlag = true;
  970. }
  971. if(myRadio_init(0, rfRx_callback))
  972. {
  973. beep_on(254);
  974. }
  975. else
  976. {
  977. lamp_on(1000);
  978. beep_on(255);
  979. }
  980. if (deviceInfor.targetImei != 0xffffffff)
  981. {
  982. deviceInfor.channel = deviceInfor.targetImei & 0x001f;
  983. }
  984. myRadio_setTxPower(20);
  985. myRadio_setBaudrate(RF_BAUDRATE_1220);
  986. myRadio_setFrequency(rfFreqBandList[deviceInfor.freqBand] +
  987. (uint32_t)deviceInfor.channel * deviceInfor.freqStep * 10 * 1000);
  988. myRadio_setSyncWord(0x45);
  989. // myRadio_cadReceiver(500, 2000);
  990. myRadio_receiver(0);
  991. SN_TIM1_CALL_set(9500, 0, main_tim_callback, NVIC_PRIO_0);
  992. lptim1_init();
  993. setEvent(EVENT_TIME_CYCLE_10ms, true, false, 10);
  994. setEvent(EVENT_TIME_CYCLE_500ms, true, false, 500);
  995. setEvent(EVENT_TIME_CYCLE_1s, true, false, 1000);
  996. printf("power on");
  997. printf("freqBand:%d\n", deviceInfor.freqBand);
  998. printf("channel:%d\n", deviceInfor.channel);
  999. printf("targetImei:%08X\n", deviceInfor.targetImei);
  1000. printf("dogABselect:%d\n", deviceInfor.dogABselect);
  1001. // motor_on(50);
  1002. if(SN_GPIO_PIN_get(BOARD_GPIO_KEY1) == 0)
  1003. {
  1004. workTimeout_ms = 30*60*1000;
  1005. SN_GPIO_PIN_write(BOARD_GPIO_LAMP, 1);
  1006. myRadio_setFrequency(rfFreqBandList[deviceInfor.freqBand] +
  1007. (uint32_t)1 * deviceInfor.freqStep * 10 * 1000);
  1008. myRadio_setCtrl(RADIO_EXT_CONTROL_TX_UNMODULATED, rfFreqBandList[deviceInfor.freqBand] +
  1009. (uint32_t)1 * deviceInfor.freqStep * 10 * 1000);
  1010. while (1);
  1011. }
  1012. while(1){
  1013. event_pend();
  1014. // iwdgSetCounter();
  1015. if (getEvent(EVENT_TIME_CYCLE_10ms))
  1016. {
  1017. keyPressValue = key_driver();
  1018. getKeyReturn = KeyValueChange(keyPressValue);
  1019. dealKeyPressProccess();
  1020. #if 0 //测试动态内存申请
  1021. // for (size_t i = 0; i < 1000; i++)
  1022. {
  1023. static uint16_t i = 0;
  1024. myUart_printf(0, "hello dma (%d)\r\n", i ++);
  1025. }
  1026. #endif
  1027. }
  1028. if (getEvent(EVENT_TIME_CYCLE_500ms))
  1029. {
  1030. //测试时钟是否准确,通过串口上位机打印的时间来判断
  1031. #if 0
  1032. SN_ADC_start();
  1033. float MCU_VDD = SN_ADC_MCU_VDD();
  1034. uint16_t ADC_VAL = SN_ADC_Get(0);
  1035. printf("hello world %f %u\r\n", MCU_VDD, ADC_VAL);
  1036. #endif
  1037. }
  1038. if (getEvent(EVENT_TIME_CYCLE_1s))
  1039. {
  1040. //测试时钟是否准确,通过串口上位机打印的时间来判断
  1041. #if 0
  1042. myUart_printf(0, "hello world %02x\r\n", lowPowerCtrlFlag.value);
  1043. #endif
  1044. }
  1045. if (getEvent(EVENT_DEVICE_POWERON))
  1046. {
  1047. // lowPowerCtrlFlag.bits.powerOn = 0;
  1048. }
  1049. if (getEvent(EVENT_RF_GET_PACKET))
  1050. {
  1051. // motor_long();
  1052. if (checkFramLegal(rfRecvPacket.payload, rfRecvPacket.len))
  1053. {
  1054. devicePairFram_ts *devicePairFram = (devicePairFram_ts *)rfRecvPacket.payload;
  1055. printf("EVENT_RF_GET_PACKET cmd:%02X\n", devicePairFram->clientInfor.infor.cmd);
  1056. printf("EVENT_RF_GET_PACKET infor.rfChannel:%d\n", devicePairFram->clientInfor.infor.rfChannel);
  1057. printf("EVENT_RF_GET_PACKET type:%d\n", devicePairFram->clientInfor.infor.type);
  1058. printf("EVENT_RF_GET_PACKET batChgStaFlag:%d\n", batChgStaFlag);
  1059. printf("EVENT_RF_GET_PACKET keyPowerOnFlag:%d\n", keyPowerOnFlag);
  1060. printf("EVENT_RF_GET_PACKET batLowVltFlag:%d\n", batLowVltFlag);
  1061. if ((batChgStaFlag == false) && (keyPowerOnFlag == true) && (batLowVltFlag == false))
  1062. {
  1063. if (((devicePairFram->clientInfor.infor.rfChannel == deviceInfor.channel) &&
  1064. (deviceInfor.dogABselect == devicePairFram->clientInfor.infor.type ||
  1065. devicePairFram->clientInfor.infor.type == DOG_SLT_AB)) ||
  1066. (devicePairFram->clientInfor.infor.cmd == CMD_DEVICE_PAIR && devicePairFram->clientInfor.infor.rfChannel == 0))
  1067. {
  1068. workTimeout_ms = 2000;//WORK_TIMEOUT_MS; //
  1069. heatSendPackegeCount = 0;
  1070. switch (devicePairFram->clientInfor.infor.cmd)
  1071. {
  1072. case CMD_DEVICE_PAIR:
  1073. {
  1074. deviceInfor.targetImei = devicePairFram->clientInfor.infor.deviceId;
  1075. deviceInfor.channel = deviceInfor.targetImei & 0x001f;
  1076. deviceInfor.dogABselect = devicePairFram->clientInfor.infor.type;
  1077. completFramParams((uint8_t *)&deviceInfor, sizeof(deviceInfor_ts));
  1078. uint8_t ret = SN_FLASH_Write_PAGE(0x2f,(uint8_t *)&deviceInfor, sizeof(deviceInfor));
  1079. printf("CMD_DEVICE_PAIR %d\n", ret);
  1080. if (devicePairFram->clientInfor.infor.type == DOG_SLT_B)
  1081. {
  1082. std_delayms(200);
  1083. }
  1084. devicePairFram_ts devicePairBuffer;
  1085. devicePairBuffer.clientInfor.infor.cmd = CMD_DEVICE_PAIR;
  1086. devicePairBuffer.clientInfor.infor.rfChannel = 0;
  1087. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1088. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1089. devicePairBuffer.value = getBatAdcValue();
  1090. printf("CMD_DEVICE_PAIR %d\n", devicePairBuffer.value);
  1091. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1092. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1093. beep_on(254);
  1094. isDevicePairFlag = false;
  1095. isDevicePairOverFlag = true;
  1096. }
  1097. break;
  1098. case CMD_TRIGLE_ELECTR:
  1099. {
  1100. electrial_on(devicePairFram->value);
  1101. devicePairFram_ts devicePairBuffer;
  1102. devicePairBuffer.clientInfor.infor.cmd = CMD_ACK;
  1103. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  1104. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1105. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1106. devicePairBuffer.value = getBatAdcValue();
  1107. printf("CMD_DEVICE_PAIR %d\n", devicePairBuffer.value);
  1108. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1109. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1110. }
  1111. break;
  1112. case CMD_TRIGLE_VIRBRA:
  1113. {
  1114. lastMode = CMD_TRIGLE_VIRBRA;
  1115. lastModeLevel = devicePairFram->value;
  1116. motor_on(devicePairFram->value);
  1117. devicePairFram_ts devicePairBuffer;
  1118. devicePairBuffer.clientInfor.infor.cmd = CMD_ACK;
  1119. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  1120. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1121. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1122. devicePairBuffer.value = getBatAdcValue();
  1123. printf("CMD_DEVICE_PAIR %d\n", devicePairBuffer.value);
  1124. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1125. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1126. }
  1127. break;
  1128. case CMD_TRIGLE_LAMP:
  1129. {
  1130. lamp_remote_on(devicePairFram->value);
  1131. devicePairFram_ts devicePairBuffer;
  1132. devicePairBuffer.clientInfor.infor.cmd = CMD_ACK;
  1133. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  1134. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1135. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1136. devicePairBuffer.value = getBatAdcValue();
  1137. printf("CMD_DEVICE_PAIR %d\n", devicePairBuffer.value);
  1138. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1139. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1140. }
  1141. break;
  1142. case CMD_TRIGLE_TRAIN_VOL:
  1143. {
  1144. lastMode = CMD_TRIGLE_TRAIN_VOL;
  1145. lastModeLevel = devicePairFram->value;
  1146. beep_on(devicePairFram->value);
  1147. devicePairFram_ts devicePairBuffer;
  1148. devicePairBuffer.clientInfor.infor.cmd = CMD_ACK;
  1149. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  1150. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1151. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1152. devicePairBuffer.value = getBatAdcValue();
  1153. printf("CMD_DEVICE_PAIR %d\n", devicePairBuffer.value);
  1154. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1155. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1156. }
  1157. break;
  1158. case CMD_REBACK_SEND:
  1159. {
  1160. localBackFlag = devicePairFram->value&0x0f?true:false;
  1161. if (localBackFlag)
  1162. {
  1163. heartTimeout_s = LOCAL_BACK_TIMEOUT_S;
  1164. }
  1165. else
  1166. {
  1167. heartTimeout_s = HEART_TIMEOUT_S;
  1168. }
  1169. devicePairFram_ts devicePairBuffer;
  1170. devicePairBuffer.clientInfor.infor.cmd = CMD_REBACK_SEND;
  1171. devicePairBuffer.clientInfor.infor.rfChannel = deviceInfor.channel;
  1172. devicePairBuffer.clientInfor.infor.type = deviceInfor.dogABselect;
  1173. devicePairBuffer.clientInfor.infor.deviceId = devicePairFram->clientInfor.infor.deviceId;
  1174. devicePairBuffer.value = getBatAdcValue();
  1175. printf("CMD_REBACK_SEND %d\n", devicePairBuffer.value);
  1176. completFramParams((uint8_t *)&devicePairBuffer, sizeof(devicePairBuffer));
  1177. myRadio_transmitArray((uint8_t *)&devicePairBuffer, sizeof(devicePairFram_ts));
  1178. }
  1179. break;
  1180. case CMD_ACK:
  1181. {
  1182. }
  1183. break;
  1184. default:
  1185. break;
  1186. }
  1187. }
  1188. }
  1189. else
  1190. {
  1191. printf("batChgStaFlag=%d\n", batChgStaFlag);
  1192. }
  1193. }
  1194. memset(&rfRecvPacket, 0, sizeof(rfRecvPacket));
  1195. }
  1196. myRadio_process();
  1197. #if ENABLE_LOWPOWER == 1
  1198. if (checkLowPowerFlag())
  1199. {
  1200. std_tim_disable(TIM1);
  1201. printf("low power\r\n");
  1202. if (keyPowerOnFlag && batLowVltFlag == false)
  1203. {
  1204. // lptim1_restart(500);
  1205. }
  1206. /* 进入Deepstop模式 最小功耗5ua 测试功耗要将仿真器断开 */
  1207. std_pmu_enter_stop(PMU_MODE_DEEPSTOP, PMU_ENTRY_LOWPOWER_MODE_WFI);
  1208. system_clock_config();
  1209. printf("low power wakeup\r\n");
  1210. std_tim_enable(TIM1);
  1211. if (iskeyPressFlag)
  1212. {
  1213. iskeyPressFlag = false;
  1214. myRadio_receiver(0);
  1215. }
  1216. else
  1217. {
  1218. #if CAD_ENABLE == 1
  1219. RF_ExitSleepState();
  1220. myRadio_restartCadReceiver();
  1221. #else
  1222. myRadio_receiver(60);
  1223. myRadio_delay(1);
  1224. std_pmu_enter_stop(PMU_MODE_DEEPSTOP, PMU_ENTRY_LOWPOWER_MODE_WFI);
  1225. #endif
  1226. }
  1227. }
  1228. #endif
  1229. }
  1230. }