detection.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836
  1. /*********************************************************************************************************
  2. * Module : detection
  3. * Abstract :
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 ~ 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-04-08
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "detection.h"
  11. #include "gd32e23x.h"
  12. #include "common.h"
  13. #include "board_cfg.h"
  14. #include "relay.h"
  15. #define DERECTION_GPIO_1 GPIOA
  16. #define DERECTION_IO_1 GPIO_PIN_11
  17. #define DERECTION_IO_1_RCU EXTI_SOURCE_GPIOA
  18. #define DERECTION_IO_1_PIN DERECTION_IO_11
  19. #define DERECTION_IO_1_SOURCE EXTI_SOURCE_PIN11
  20. #define DERECTION_IO_1_EXIT EXTI_11
  21. #if (SURPPORT_2_PT)
  22. #define DERECTION_GPIO_2 GPIOB
  23. #define DERECTION_IO_2 GPIO_PIN_3
  24. #define DERECTION_IO_2_RCU EXTI_SOURCE_GPIOB
  25. #define DERECTION_IO_2_PIN DERECTION_IO_3
  26. #define DERECTION_IO_2_SOURCE EXTI_SOURCE_PIN3
  27. #define DERECTION_IO_2_EXIT EXTI_3
  28. #endif
  29. #define KEY_TEST_1_IO GPIO_PIN_14
  30. #define KEY_TEST_1_IO_SOURCE_RCU EXTI_SOURCE_GPIOC
  31. #define KEY_TEST_1_IO_SOURCE EXTI_SOURCE_PIN14
  32. #define KEY_TEST_1_IO_EXIT EXTI_14
  33. #define KEY_TEST_2_IO GPIO_PIN_2
  34. #define KEY_TEST_2_IO_SOURCE_RCU EXTI_SOURCE_GPIOB
  35. #define KEY_TEST_2_IO_SOURCE EXTI_SOURCE_PIN2
  36. #define KEY_TEST_2_IO_EXIT EXTI_2
  37. #define KEY_TEST_3_IO GPIO_PIN_0
  38. #define KEY_TEST_3_IO_SOURCE_RCU EXTI_SOURCE_GPIOA
  39. #define KEY_TEST_3_IO_SOURCE EXTI_SOURCE_PIN0
  40. #define KEY_TEST_3_IO_EXIT EXTI_0
  41. #define KEY_TEST_4_IO GPIO_PIN_1
  42. #define KEY_TEST_4_IO_SOURCE_RCU EXTI_SOURCE_GPIOA
  43. #define KEY_TEST_4_IO_SOURCE EXTI_SOURCE_PIN1
  44. #define KEY_TEST_4_IO_EXIT EXTI_1
  45. #define KEY_TEST_1_GPIO GPIOC
  46. #define KEY_TEST_2_GPIO GPIOB
  47. #define KEY_TEST_3_4_GPIO GPIOA
  48. static board_t *board = 0;
  49. #define KEY_RST_RCU RCU_GPIOC
  50. #define KEY_RST_IO GPIOC
  51. #define KEY_RST GPIO_PIN_14
  52. #define KEY_RST_EXTI_SOURCE EXTI_SOURCE_GPIOC
  53. #define KEY_RST_EXTI EXTI_14
  54. #define KEY_RST_EXTI_IO EXTI_SOURCE_PIN14
  55. #define KEY_TEST_RCU RCU_GPIOB
  56. #define KEY_TEST_IO GPIOB
  57. #define KEY_TEST GPIO_PIN_2
  58. #define KEY_TEST_EXTI_SOURCE EXTI_SOURCE_GPIOB
  59. #define KEY_TEST_EXTI EXTI_2
  60. #define KEY_TEST_EXTI_IO EXTI_SOURCE_PIN2
  61. static void get_detection(void);
  62. static void detection_opt(void);
  63. #if SUPPORT_SELF_LOCK
  64. static void get_test_1();
  65. static void get_test_2();
  66. static void get_test_3();
  67. static void get_test_4();
  68. static void get_lock_key(void);
  69. static void self_lock_opt(void);
  70. #endif
  71. void detection_init(void)
  72. {
  73. #if SUPPORT_DETECTION
  74. board = get_board();
  75. rcu_periph_clock_enable(RCU_CFGCMP);
  76. rcu_periph_clock_enable(RCU_GPIOA);
  77. #if SURPPORT_2_PT
  78. rcu_periph_clock_enable(RCU_GPIOB);
  79. #endif
  80. gpio_mode_set(DERECTION_GPIO_1, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_1);
  81. #if SURPPORT_2_PT
  82. gpio_mode_set(DERECTION_GPIO_2, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, DERECTION_IO_2);
  83. #endif
  84. nvic_irq_enable(EXTI4_15_IRQn,2);
  85. syscfg_exti_line_config(DERECTION_IO_1_RCU,DERECTION_IO_1_SOURCE);
  86. exti_init(DERECTION_IO_1_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  87. exti_interrupt_flag_clear(DERECTION_IO_1_EXIT);
  88. #if SURPPORT_2_PT
  89. nvic_irq_enable(EXTI2_3_IRQn,2);
  90. syscfg_exti_line_config(DERECTION_IO_2_RCU,DERECTION_IO_2_SOURCE);
  91. exti_init(DERECTION_IO_2_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  92. exti_interrupt_flag_clear(DERECTION_IO_2_EXIT);
  93. #endif
  94. board->detection = get_detection;
  95. board->opt_detection = detection_opt;
  96. #endif
  97. }
  98. void key_init(void)
  99. {
  100. #if SUPPORT_ALL_ON_OFF
  101. rcu_periph_clock_enable(RCU_CFGCMP);
  102. rcu_periph_clock_enable(KEY_RST_RCU);
  103. gpio_mode_set(KEY_RST_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_RST);
  104. nvic_irq_enable(EXTI4_15_IRQn,2);
  105. syscfg_exti_line_config(KEY_RST_EXTI_SOURCE,KEY_RST_EXTI_IO);
  106. exti_init(KEY_RST_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  107. exti_interrupt_flag_clear(KEY_RST_EXTI);
  108. rcu_periph_clock_enable(KEY_TEST_RCU);
  109. gpio_mode_set(KEY_TEST_IO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST);
  110. nvic_irq_enable(EXTI2_3_IRQn,2);
  111. syscfg_exti_line_config(KEY_TEST_EXTI_SOURCE,KEY_TEST_EXTI_IO);
  112. exti_init(KEY_TEST_EXTI,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  113. exti_interrupt_flag_clear(KEY_TEST_EXTI);
  114. #elif SUPPORT_SELF_LOCK
  115. rcu_periph_clock_enable(RCU_CFGCMP);
  116. rcu_periph_clock_enable(RCU_GPIOC);
  117. if(!board)
  118. {
  119. board = get_board();
  120. }
  121. #if (RelaySlaveChaNum >= 1)
  122. gpio_mode_set(KEY_TEST_1_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_1_IO);
  123. #endif
  124. #if (RelaySlaveChaNum >= 2)
  125. rcu_periph_clock_enable(RCU_GPIOB);
  126. gpio_mode_set(KEY_TEST_2_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_2_IO);
  127. #endif
  128. #if (RelaySlaveChaNum >= 3)
  129. rcu_periph_clock_enable(RCU_GPIOA);
  130. gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_3_IO);
  131. #endif
  132. #if (RelaySlaveChaNum >= 4)
  133. gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_4_IO);
  134. #endif
  135. board->get_lock_key = get_lock_key;
  136. board->opt_lock_key = self_lock_opt;
  137. #elif SUPPORT_KEY_EXIT
  138. rcu_periph_clock_enable(RCU_CFGCMP);
  139. rcu_periph_clock_enable(RCU_GPIOC);
  140. rcu_periph_clock_enable(RCU_GPIOA);
  141. rcu_periph_clock_enable(RCU_GPIOB);
  142. if(!board)
  143. {
  144. board = get_board();
  145. }
  146. #if (RelaySlaveChaNum >= 1)
  147. gpio_mode_set(KEY_TEST_1_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_1_IO);
  148. nvic_irq_enable(EXTI4_15_IRQn,1);
  149. syscfg_exti_line_config(KEY_TEST_1_IO_SOURCE_RCU,KEY_TEST_1_IO_SOURCE);
  150. exti_init(KEY_TEST_1_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  151. exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);
  152. #endif
  153. #if (RelaySlaveChaNum >= 2)
  154. gpio_mode_set(KEY_TEST_2_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_2_IO);
  155. nvic_irq_enable(EXTI2_3_IRQn,1);
  156. syscfg_exti_line_config(KEY_TEST_2_IO_SOURCE_RCU,KEY_TEST_2_IO_SOURCE);
  157. exti_init(KEY_TEST_2_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  158. exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);
  159. #endif
  160. #if (RelaySlaveChaNum >= 3)
  161. gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_3_IO);
  162. nvic_irq_enable(EXTI0_1_IRQn,1);
  163. syscfg_exti_line_config(KEY_TEST_3_IO_SOURCE_RCU,KEY_TEST_3_IO_SOURCE);
  164. exti_init(KEY_TEST_3_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  165. exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);
  166. #endif
  167. #if (RelaySlaveChaNum >= 4)
  168. gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_4_IO);
  169. nvic_irq_enable(EXTI0_1_IRQn,1);
  170. syscfg_exti_line_config(KEY_TEST_4_IO_SOURCE_RCU,KEY_TEST_4_IO_SOURCE);
  171. exti_init(KEY_TEST_4_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
  172. exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);
  173. #endif
  174. #endif
  175. }
  176. extern uint8_t relay_flag[RelaySlaveChaNum];
  177. extern uint8_t relay_status[RelaySlaveChaNum];
  178. uint8_t relay_counter_flag[RelaySlaveChaNum];
  179. void EXTI4_15_IRQHandler(void){
  180. #if SUPPORT_ALL_ON_OFF
  181. if(RESET != exti_interrupt_flag_get(KEY_RST_EXTI))
  182. {
  183. exti_interrupt_flag_clear(KEY_RST_EXTI);
  184. if(board)
  185. {
  186. if(gpio_input_bit_get(KEY_TEST_IO,KEY_TEST) != 0)
  187. {
  188. async_data da = {0};
  189. da.fire_or_zero = _FIRE;
  190. da.w_eep_flag = FLAG_W_EEP;
  191. for(uint8_t j = 0; j < PT_SUB_COUNT;j++)
  192. {
  193. // if(board->md_data.r_data.state.state[j].state == RELAY_CLOSE)
  194. // continue;
  195. #if SUPPORT_CTRL2_LOCK2
  196. if(j >= AVALIABLE_RELAY)
  197. {
  198. continue;
  199. }
  200. #endif
  201. da.channel = j;
  202. da.method = DELAY_CTRL;
  203. da.reg = &board->relay_staging_staus[j];
  204. da.status = RELAY_CLOSE;
  205. set_relay_sta_async(&da);
  206. }
  207. }
  208. }
  209. }
  210. #elif SUPPORT_KEY_EXIT
  211. #if (RelaySlaveChaNum >= 1)
  212. if(RESET != exti_interrupt_flag_get(KEY_TEST_1_IO_EXIT))
  213. {
  214. exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);
  215. if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == 0)
  216. {
  217. async_data da = {0};
  218. da.fire_or_zero = _FIRE;
  219. da.method = PROMPT_CTRL;
  220. da.w_eep_flag = FLAG_W_EEP;
  221. da.channel = 0;
  222. da.reg = &board->relay_staging_staus[0];
  223. da.status = board->md_data.r_data.state.state[0].state ? 0 : 1;
  224. set_relay_sta_async(&da);
  225. }
  226. }
  227. #endif
  228. #endif
  229. if(RESET != exti_interrupt_flag_get(DERECTION_IO_1_EXIT))
  230. {
  231. exti_interrupt_flag_clear(DERECTION_IO_1_EXIT);
  232. if(board)
  233. {
  234. //for(int i = 0;i <20;i++);
  235. if(gpio_input_bit_get(DERECTION_GPIO_1,DERECTION_IO_1) == 0)
  236. {
  237. board->detection_1_value = 1;
  238. board->detection_1_count = 0;
  239. }
  240. }
  241. }
  242. }
  243. #if SUPPORT_KEY_EXIT
  244. void EXTI0_1_IRQHandler(void)
  245. {
  246. #if SUPPORT_DETECTION
  247. if(board->md_data.r_data.detection & 0x1)
  248. #endif
  249. {
  250. #if (RelaySlaveChaNum >= 3)
  251. if(RESET != exti_interrupt_flag_get(KEY_TEST_3_IO_EXIT))
  252. {
  253. exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);
  254. if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == 0)
  255. {
  256. async_data da = {0};
  257. da.fire_or_zero = _FIRE;
  258. da.method = PROMPT_CTRL;
  259. da.w_eep_flag = FLAG_W_EEP;
  260. da.channel = 2;
  261. da.reg = &board->relay_staging_staus[2];
  262. da.status = board->md_data.r_data.state.state[2].state ? 0 : 1;
  263. set_relay_sta_async(&da);
  264. }
  265. }
  266. #endif
  267. #if (RelaySlaveChaNum >= 4)
  268. if(RESET != exti_interrupt_flag_get(KEY_TEST_4_IO_EXIT))
  269. {
  270. exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);
  271. if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == 0)
  272. {
  273. async_data da = {0};
  274. da.fire_or_zero = _FIRE;
  275. da.method = PROMPT_CTRL;
  276. da.w_eep_flag = FLAG_W_EEP;
  277. da.channel = 3;
  278. da.reg = &board->relay_staging_staus[3];
  279. da.status = board->md_data.r_data.state.state[3].state ? 0 : 1;
  280. set_relay_sta_async(&da);
  281. }
  282. }
  283. #endif
  284. }
  285. }
  286. #endif
  287. void EXTI2_3_IRQHandler(void)
  288. {
  289. #if SUPPORT_ALL_ON_OFF
  290. if(RESET != exti_interrupt_flag_get(KEY_TEST_EXTI))
  291. {
  292. exti_interrupt_flag_clear(KEY_TEST_EXTI);
  293. if(board)
  294. {
  295. if(gpio_input_bit_get(KEY_RST_IO,KEY_RST) != 0)
  296. {
  297. #if SUPPORT_DETECTION
  298. if(board->md_data.r_data.detection & 0x1)
  299. #endif
  300. {
  301. async_data da = {0};
  302. da.fire_or_zero = _FIRE;
  303. da.method = DELAY_CTRL;
  304. da.w_eep_flag = FLAG_W_EEP;
  305. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  306. {
  307. // if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
  308. // continue;
  309. #if SUPPORT_CTRL2_LOCK2
  310. if(k >= AVALIABLE_RELAY)
  311. {
  312. continue;
  313. }
  314. #endif
  315. da.channel =k;
  316. da.reg = &board->relay_staging_staus[k];
  317. da.status = RELAY_OPEN;
  318. set_relay_sta_async(&da);
  319. }
  320. }
  321. }
  322. #if SURPPORT_2_PT
  323. #if SUPPORT_DETECTION
  324. if(board->md_data.r_data.detection & 0x2)
  325. #endif
  326. {
  327. async_data da = {0};
  328. da.fire_or_zero = _FIRE;
  329. da.method = DELAY_CTRL;
  330. da.w_eep_flag = FLAG_W_EEP;
  331. for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
  332. {
  333. if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
  334. continue;
  335. da.channel =k;
  336. da.reg = &board->relay_staging_staus[k];
  337. da.status = RELAY_OPEN;
  338. set_relay_sta_async(&da);
  339. }
  340. }
  341. #endif
  342. }
  343. }
  344. #elif SUPPORT_KEY_EXIT
  345. #if (RelaySlaveChaNum >= 2)
  346. if(RESET != exti_interrupt_flag_get(KEY_TEST_2_IO_EXIT))
  347. {
  348. exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);
  349. #if SUPPORT_DETECTION
  350. if(board->md_data.r_data.detection & 0x1)
  351. #endif
  352. {
  353. if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == 0)
  354. {
  355. async_data da = {0};
  356. da.fire_or_zero = _FIRE;
  357. da.method = PROMPT_CTRL;
  358. da.w_eep_flag = FLAG_W_EEP;
  359. da.channel = 1;
  360. da.reg = &board->relay_staging_staus[1];
  361. da.status = board->md_data.r_data.state.state[1].state ? 0 : 1;
  362. set_relay_sta_async(&da);
  363. }
  364. }
  365. }
  366. #endif
  367. #endif
  368. #if SURPPORT_2_PT
  369. if(RESET != exti_interrupt_flag_get(DERECTION_IO_2_EXIT))
  370. {
  371. exti_interrupt_flag_clear(DERECTION_IO_2_EXIT);
  372. if(board)
  373. {
  374. //for(int i = 0;i <20;i++);
  375. if(gpio_input_bit_get(DERECTION_GPIO_2,DERECTION_IO_2) == 0)
  376. {
  377. board->detection_2_value = 1;
  378. board->detection_2_count = 0;
  379. }
  380. }
  381. }
  382. #endif
  383. }
  384. static void get_detection()
  385. {
  386. #if SUPPORT_DETECTION
  387. if(board)
  388. {
  389. uint16_t data = 0;
  390. if(board->detection_1_value > 0)
  391. {
  392. data |= (1 << 0);
  393. }
  394. #if SURPPORT_2_PT
  395. if(board->detection_2_value > 0)
  396. {
  397. data |= (1 << 1);
  398. }
  399. #endif
  400. board->md_data.r_data.detection = data;
  401. }
  402. #endif
  403. }
  404. static void detection_opt(void)
  405. {
  406. if(board)
  407. {
  408. #if SUPPORT_RELAY_REMENBER
  409. if(board->md_data.r_data.detection & 0x1)
  410. {
  411. if(board->handle_input_pt[0] == 0)
  412. {
  413. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  414. {
  415. #if SUPPORT_SELF_LOCK
  416. if(board->val_key[k] == 0)
  417. continue;
  418. #endif
  419. #if SUPPORT_CTRL2_LOCK2
  420. if(k >= AVALIABLE_RELAY)
  421. {
  422. continue;
  423. }
  424. #endif
  425. async_data da = {0};
  426. da.channel =k;
  427. da.fire_or_zero = _FIRE;
  428. da.method = DELAY_CTRL;
  429. da.reg = &board->relay_staging_staus[k];
  430. da.status = board->handle_status[k];
  431. da.w_eep_flag = FLAG_N_W_EEP;
  432. set_relay_sta_async(&da);
  433. }
  434. board->handle_input_pt[0] = 1;
  435. }
  436. }else
  437. {
  438. if(board->handle_input_pt[0] == 1)
  439. {
  440. for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
  441. {
  442. #if SUPPORT_CTRL2_LOCK2
  443. if(k >= AVALIABLE_RELAY)
  444. {
  445. continue;
  446. }
  447. #endif
  448. board->handle_status[k] = board->md_data.r_data.state.state[k].state;
  449. async_data da = {0};
  450. da.channel =k;
  451. da.fire_or_zero = _FIRE;
  452. da.method = PROMPT_CTRL;
  453. da.reg = &board->relay_staging_staus[k];
  454. da.status = RELAY_CLOSE;
  455. da.w_eep_flag = FLAG_N_W_EEP;
  456. set_relay_sta_async(&da);
  457. }
  458. board->handle_input_pt[0] = 0;
  459. }
  460. }
  461. #if SURPPORT_2_PT
  462. if(board->md_data.r_data.detection & 0x2)
  463. {
  464. if(board->handle_input_pt[1] == 0)
  465. {
  466. for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
  467. {
  468. async_data da = {0};
  469. da.channel =k;
  470. da.fire_or_zero = _FIRE;
  471. da.method = DELAY_CTRL;
  472. da.reg = &board->relay_staging_staus[k];
  473. da.status = board->handle_status[k];
  474. da.w_eep_flag = FLAG_N_W_EEP;
  475. set_relay_sta_async(&da);
  476. }
  477. board->handle_input_pt[1] = 1;
  478. }
  479. }else
  480. {
  481. if(board->handle_input_pt[1] == 1)
  482. {
  483. for(uint8_t k = PT_SUB_COUNT; k < RelaySlaveChaNum;k++)
  484. {
  485. board->handle_status[k] = board->md_data.r_data.state.state[k].state;
  486. async_data da = {0};
  487. da.channel =k;
  488. da.fire_or_zero = _FIRE;
  489. da.method = PROMPT_CTRL;
  490. da.reg = &board->relay_staging_staus[k];
  491. da.status = RELAY_CLOSE;
  492. da.w_eep_flag = FLAG_N_W_EEP;
  493. set_relay_sta_async(&da);
  494. }
  495. board->handle_input_pt[1] = 0;
  496. }
  497. }
  498. #endif
  499. #endif
  500. }
  501. }
  502. #if SUPPORT_SELF_LOCK
  503. static void get_lock_key(void)
  504. {
  505. #if (RelaySlaveChaNum >= 1)
  506. if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == RESET)
  507. {
  508. board->val_key[0] = 1;
  509. }else
  510. {
  511. board->val_key[0] = 0;
  512. }
  513. #endif
  514. #if (RelaySlaveChaNum >= 2)
  515. if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == RESET)
  516. {
  517. board->val_key[1] = 1;
  518. }else
  519. {
  520. board->val_key[1] = 0;
  521. }
  522. #endif
  523. #if (RelaySlaveChaNum >= 3)
  524. if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == RESET)
  525. {
  526. board->val_key[2] = 1;
  527. }else
  528. {
  529. board->val_key[2] = 0;
  530. }
  531. #endif
  532. #if (RelaySlaveChaNum >= 4)
  533. if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == RESET)
  534. {
  535. board->val_key[3] = 1;
  536. }else
  537. {
  538. board->val_key[3] = 0;
  539. }
  540. #endif
  541. }
  542. //#if (RelaySlaveChaNum >= 1)
  543. //static void get_test_1()
  544. //{
  545. // uint8_t val = 0;
  546. // if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == RESET)
  547. // {
  548. // val = 1;
  549. // }
  550. // board->key_1 = val;
  551. //}
  552. //#endif
  553. //#if (RelaySlaveChaNum >= 2)
  554. //static void get_test_2()
  555. //{
  556. // uint8_t val = 0;
  557. // if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == RESET)
  558. // {
  559. // val = 1;
  560. // }
  561. // board->key_2 = val;
  562. //}
  563. //#endif
  564. //#if (RelaySlaveChaNum >= 3)
  565. //static void get_test_3()
  566. //{
  567. // uint8_t val = 0;
  568. // if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == RESET)
  569. // {
  570. // val = 1;
  571. // }
  572. // board->key_3 = val;
  573. //}
  574. //#endif
  575. //#if (RelaySlaveChaNum >= 4)
  576. //static void get_test_4()
  577. //{
  578. // uint8_t val = 0;
  579. // if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == RESET)
  580. // {
  581. // val = 1;
  582. // }
  583. // board->key_4 = val;
  584. //}
  585. //#endif
  586. static void self_lock_opt(void)
  587. {
  588. #if (RelaySlaveChaNum <= 4)
  589. async_data da = {0};
  590. da.fire_or_zero = _FIRE;
  591. da.method = PROMPT_CTRL;
  592. da.w_eep_flag = FLAG_W_EEP;
  593. for(uint8_t i = 0; i < RelaySlaveChaNum;i++)
  594. {
  595. da.channel = i;
  596. da.reg = &board->relay_staging_staus[i];
  597. if(board->val_key[i] == 0)
  598. {
  599. if(board->handle_k_status[i] == 1)
  600. {
  601. da.status = RELAY_CLOSE;
  602. set_relay_sta_async(&da);
  603. board->handle_k_status[i] = 0;
  604. }
  605. }else
  606. {
  607. if(board->handle_k_status[i] == 0)
  608. {
  609. if(board->md_data.r_data.detection & 0x1)
  610. {
  611. da.status = RELAY_OPEN;
  612. set_relay_sta_async(&da);
  613. }
  614. board->handle_k_status[i] = 1;
  615. }
  616. }
  617. }
  618. #endif
  619. }
  620. //static void self_lock_opt1(void)
  621. //{
  622. // async_data da = {0};
  623. //
  624. // da.fire_or_zero = _FIRE;
  625. // da.method = PROMPT_CTRL;
  626. // da.w_eep_flag = FLAG_W_EEP;
  627. //#if (RelaySlaveChaNum >= 1)
  628. // if(board->key_1 == 0)
  629. // {
  630. // da.channel =0;
  631. // da.reg = &board->relay_staging_staus[0];
  632. // if(board->handle_k_1_status == 1)
  633. // {
  634. // da.status = RELAY_CLOSE;
  635. // set_relay_sta_async(&da);
  636. // board->handle_k_1_status = 0;
  637. // }
  638. // }else
  639. // {
  640. // da.channel =0;
  641. // da.reg = &board->relay_staging_staus[0];
  642. // if(board->handle_k_1_status == 0)
  643. // {
  644. // da.status = RELAY_OPEN;
  645. // set_relay_sta_async(&da);
  646. // board->handle_k_1_status = 1;
  647. // }
  648. // }
  649. //#endif
  650. //
  651. //
  652. //#if (RelaySlaveChaNum >= 2)
  653. // if(board->key_2 == 0)
  654. // {
  655. // da.channel =1;
  656. // da.reg = &board->relay_staging_staus[1];
  657. // if(board->handle_k_2_status == 1)
  658. // {
  659. // da.status = RELAY_CLOSE;
  660. // set_relay_sta_async(&da);
  661. // board->handle_k_2_status = 0;
  662. // }
  663. // }else
  664. // {
  665. // da.channel =1;
  666. // da.reg = &board->relay_staging_staus[1];
  667. // if(board->handle_k_2_status == 0)
  668. // {
  669. // da.status = RELAY_OPEN;
  670. // set_relay_sta_async(&da);
  671. // board->handle_k_2_status = 1;
  672. // }
  673. // }
  674. //#endif
  675. //
  676. //#if (RelaySlaveChaNum >= 3)
  677. // if(board->key_3 == 0)
  678. // {
  679. // da.channel =2;
  680. // da.reg = &board->relay_staging_staus[2];
  681. // if(board->handle_k_3_status == 1)
  682. // {
  683. // da.status = RELAY_CLOSE;
  684. // set_relay_sta_async(&da);
  685. // board->handle_k_3_status = 0;
  686. // }
  687. // }else
  688. // {
  689. // da.channel =2;
  690. // da.reg = &board->relay_staging_staus[2];
  691. // if(board->handle_k_3_status == 0)
  692. // {
  693. // da.status = RELAY_OPEN;
  694. // set_relay_sta_async(&da);
  695. // board->handle_k_3_status = 1;
  696. // }
  697. // }
  698. //#endif
  699. //
  700. //#if (RelaySlaveChaNum >= 4)
  701. // if(board->key_4 == 0)
  702. // {
  703. // da.channel =3;
  704. // da.reg = &board->relay_staging_staus[3];
  705. // if(board->handle_k_4_status == 1)
  706. // {
  707. // da.status = RELAY_CLOSE;
  708. // set_relay_sta_async(&da);
  709. // board->handle_k_4_status = 0;
  710. // }
  711. // }else
  712. // {
  713. // da.channel =3;
  714. // da.reg = &board->relay_staging_staus[3];
  715. // if(board->handle_k_4_status == 0)
  716. // {
  717. // da.status = RELAY_OPEN;
  718. // set_relay_sta_async(&da);
  719. // board->handle_k_4_status = 1;
  720. // }
  721. // }
  722. //#endif
  723. //}
  724. #endif