|
|
@@ -37,10 +37,33 @@
|
|
|
|
|
|
#endif
|
|
|
|
|
|
-#define KEY_TEST_1_IO GPIO_PIN_14
|
|
|
-#define KEY_TEST_2_IO GPIO_PIN_2
|
|
|
-#define KEY_TEST_3_IO GPIO_PIN_0
|
|
|
-#define KEY_TEST_4_IO GPIO_PIN_1
|
|
|
+#define KEY_TEST_1_IO GPIO_PIN_14
|
|
|
+#define KEY_TEST_1_IO_SOURCE_RCU EXTI_SOURCE_GPIOC
|
|
|
+#define KEY_TEST_1_IO_SOURCE EXTI_SOURCE_PIN14
|
|
|
+#define KEY_TEST_1_IO_EXIT EXTI_14
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#define KEY_TEST_2_IO GPIO_PIN_2
|
|
|
+#define KEY_TEST_2_IO_SOURCE_RCU EXTI_SOURCE_GPIOB
|
|
|
+#define KEY_TEST_2_IO_SOURCE EXTI_SOURCE_PIN2
|
|
|
+#define KEY_TEST_2_IO_EXIT EXTI_2
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#define KEY_TEST_3_IO GPIO_PIN_0
|
|
|
+#define KEY_TEST_3_IO_SOURCE_RCU EXTI_SOURCE_GPIOA
|
|
|
+#define KEY_TEST_3_IO_SOURCE EXTI_SOURCE_PIN0
|
|
|
+#define KEY_TEST_3_IO_EXIT EXTI_0
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#define KEY_TEST_4_IO GPIO_PIN_1
|
|
|
+#define KEY_TEST_4_IO_SOURCE_RCU EXTI_SOURCE_GPIOA
|
|
|
+#define KEY_TEST_4_IO_SOURCE EXTI_SOURCE_PIN1
|
|
|
+#define KEY_TEST_4_IO_EXIT EXTI_1
|
|
|
+
|
|
|
|
|
|
|
|
|
#define KEY_TEST_1_GPIO GPIOC
|
|
|
@@ -163,12 +186,65 @@ void key_init(void)
|
|
|
#endif
|
|
|
board->get_lock_key = get_lock_key;
|
|
|
board->opt_lock_key = self_lock_opt;
|
|
|
+
|
|
|
+#elif SUPPORT_KEY_EXIT
|
|
|
+ rcu_periph_clock_enable(RCU_CFGCMP);
|
|
|
+ rcu_periph_clock_enable(RCU_GPIOC);
|
|
|
+ rcu_periph_clock_enable(RCU_GPIOA);
|
|
|
+ rcu_periph_clock_enable(RCU_GPIOB);
|
|
|
+ if(!board)
|
|
|
+ {
|
|
|
+ board = get_board();
|
|
|
+ }
|
|
|
+#if (RelaySlaveChaNum >= 1)
|
|
|
+ gpio_mode_set(KEY_TEST_1_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_1_IO);
|
|
|
+ nvic_irq_enable(EXTI4_15_IRQn,1);
|
|
|
+ syscfg_exti_line_config(KEY_TEST_1_IO_SOURCE_RCU,KEY_TEST_1_IO_SOURCE);
|
|
|
+ exti_init(KEY_TEST_1_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);
|
|
|
+#endif
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 2)
|
|
|
+ gpio_mode_set(KEY_TEST_2_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_2_IO);
|
|
|
+ nvic_irq_enable(EXTI2_3_IRQn,1);
|
|
|
+ syscfg_exti_line_config(KEY_TEST_2_IO_SOURCE_RCU,KEY_TEST_2_IO_SOURCE);
|
|
|
+ exti_init(KEY_TEST_2_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 3)
|
|
|
+ gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_3_IO);
|
|
|
+ nvic_irq_enable(EXTI0_1_IRQn,1);
|
|
|
+ syscfg_exti_line_config(KEY_TEST_3_IO_SOURCE_RCU,KEY_TEST_3_IO_SOURCE);
|
|
|
+ exti_init(KEY_TEST_3_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);
|
|
|
+#endif
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 4)
|
|
|
+ gpio_mode_set(KEY_TEST_3_4_GPIO, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_TEST_4_IO);
|
|
|
+ nvic_irq_enable(EXTI0_1_IRQn,1);
|
|
|
+ syscfg_exti_line_config(KEY_TEST_4_IO_SOURCE_RCU,KEY_TEST_4_IO_SOURCE);
|
|
|
+ exti_init(KEY_TEST_4_IO_EXIT,EXTI_INTERRUPT,EXTI_TRIG_FALLING);
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);
|
|
|
+#endif
|
|
|
+
|
|
|
|
|
|
#endif
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
+extern uint8_t relay_flag[RelaySlaveChaNum];
|
|
|
+extern uint8_t relay_status[RelaySlaveChaNum];
|
|
|
+uint8_t relay_counter_flag[RelaySlaveChaNum];
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
void EXTI4_15_IRQHandler(void){
|
|
|
#if SUPPORT_ALL_ON_OFF
|
|
|
@@ -187,7 +263,7 @@ void EXTI4_15_IRQHandler(void){
|
|
|
// if(board->md_data.r_data.state.state[j].state == RELAY_CLOSE)
|
|
|
// continue;
|
|
|
#if SUPPORT_CTRL2_LOCK2
|
|
|
- if(j >= 2)
|
|
|
+ if(j >= AVALIABLE_RELAY)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
@@ -201,6 +277,27 @@ void EXTI4_15_IRQHandler(void){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+#elif SUPPORT_KEY_EXIT
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 1)
|
|
|
+ if(RESET != exti_interrupt_flag_get(KEY_TEST_1_IO_EXIT))
|
|
|
+ {
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_1_IO_EXIT);
|
|
|
+ if(gpio_input_bit_get(KEY_TEST_1_GPIO,KEY_TEST_1_IO) == 0)
|
|
|
+ {
|
|
|
+ async_data da = {0};
|
|
|
+ da.fire_or_zero = _FIRE;
|
|
|
+ da.method = PROMPT_CTRL;
|
|
|
+ da.w_eep_flag = FLAG_W_EEP;
|
|
|
+ da.channel = 0;
|
|
|
+ da.reg = &board->relay_staging_staus[0];
|
|
|
+ da.status = board->md_data.r_data.state.state[0].state ? 0 : 1;
|
|
|
+ set_relay_sta_async(&da);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
if(RESET != exti_interrupt_flag_get(DERECTION_IO_1_EXIT))
|
|
|
@@ -219,6 +316,54 @@ void EXTI4_15_IRQHandler(void){
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+#if SUPPORT_KEY_EXIT
|
|
|
+void EXTI0_1_IRQHandler(void)
|
|
|
+{
|
|
|
+#if SUPPORT_DETECTION
|
|
|
+ if(board->md_data.r_data.detection & 0x1)
|
|
|
+#endif
|
|
|
+ {
|
|
|
+#if (RelaySlaveChaNum >= 3)
|
|
|
+ if(RESET != exti_interrupt_flag_get(KEY_TEST_3_IO_EXIT))
|
|
|
+ {
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_3_IO_EXIT);
|
|
|
+ if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_3_IO) == 0)
|
|
|
+ {
|
|
|
+ async_data da = {0};
|
|
|
+ da.fire_or_zero = _FIRE;
|
|
|
+ da.method = PROMPT_CTRL;
|
|
|
+ da.w_eep_flag = FLAG_W_EEP;
|
|
|
+ da.channel = 2;
|
|
|
+ da.reg = &board->relay_staging_staus[2];
|
|
|
+ da.status = board->md_data.r_data.state.state[2].state ? 0 : 1;
|
|
|
+ set_relay_sta_async(&da);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 4)
|
|
|
+ if(RESET != exti_interrupt_flag_get(KEY_TEST_4_IO_EXIT))
|
|
|
+ {
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_4_IO_EXIT);
|
|
|
+ if(gpio_input_bit_get(KEY_TEST_3_4_GPIO,KEY_TEST_4_IO) == 0)
|
|
|
+ {
|
|
|
+ async_data da = {0};
|
|
|
+ da.fire_or_zero = _FIRE;
|
|
|
+ da.method = PROMPT_CTRL;
|
|
|
+ da.w_eep_flag = FLAG_W_EEP;
|
|
|
+ da.channel = 3;
|
|
|
+ da.reg = &board->relay_staging_staus[3];
|
|
|
+ da.status = board->md_data.r_data.state.state[3].state ? 0 : 1;
|
|
|
+ set_relay_sta_async(&da);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#endif
|
|
|
|
|
|
|
|
|
void EXTI2_3_IRQHandler(void)
|
|
|
@@ -244,7 +389,7 @@ void EXTI2_3_IRQHandler(void)
|
|
|
// if(board->md_data.r_data.state.state[k].state ==RELAY_OPEN)
|
|
|
// continue;
|
|
|
#if SUPPORT_CTRL2_LOCK2
|
|
|
- if(k >= 2)
|
|
|
+ if(k >= AVALIABLE_RELAY)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
@@ -280,6 +425,32 @@ void EXTI2_3_IRQHandler(void)
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+#elif SUPPORT_KEY_EXIT
|
|
|
+
|
|
|
+#if (RelaySlaveChaNum >= 2)
|
|
|
+ if(RESET != exti_interrupt_flag_get(KEY_TEST_2_IO_EXIT))
|
|
|
+ {
|
|
|
+ exti_interrupt_flag_clear(KEY_TEST_2_IO_EXIT);
|
|
|
+#if SUPPORT_DETECTION
|
|
|
+ if(board->md_data.r_data.detection & 0x1)
|
|
|
+#endif
|
|
|
+ {
|
|
|
+ if(gpio_input_bit_get(KEY_TEST_2_GPIO,KEY_TEST_2_IO) == 0)
|
|
|
+ {
|
|
|
+ async_data da = {0};
|
|
|
+ da.fire_or_zero = _FIRE;
|
|
|
+ da.method = PROMPT_CTRL;
|
|
|
+ da.w_eep_flag = FLAG_W_EEP;
|
|
|
+ da.channel = 1;
|
|
|
+ da.reg = &board->relay_staging_staus[1];
|
|
|
+ da.status = board->md_data.r_data.state.state[1].state ? 0 : 1;
|
|
|
+ set_relay_sta_async(&da);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
#endif
|
|
|
#if SURPPORT_2_PT
|
|
|
if(RESET != exti_interrupt_flag_get(DERECTION_IO_2_EXIT))
|
|
|
@@ -297,6 +468,10 @@ void EXTI2_3_IRQHandler(void)
|
|
|
|
|
|
}
|
|
|
#endif
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
static void get_detection()
|
|
|
@@ -337,7 +512,7 @@ static void detection_opt(void)
|
|
|
continue;
|
|
|
#endif
|
|
|
#if SUPPORT_CTRL2_LOCK2
|
|
|
- if(k >= 2)
|
|
|
+ if(k >= AVALIABLE_RELAY)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
@@ -360,7 +535,7 @@ static void detection_opt(void)
|
|
|
for(uint8_t k = 0; k < PT_SUB_COUNT;k++)
|
|
|
{
|
|
|
#if SUPPORT_CTRL2_LOCK2
|
|
|
- if(k >= 2)
|
|
|
+ if(k >= AVALIABLE_RELAY)
|
|
|
{
|
|
|
continue;
|
|
|
}
|