diff --git a/main/app_main.cpp b/main/app_main.cpp index b7f8d93..f7740a0 100644 --- a/main/app_main.cpp +++ b/main/app_main.cpp @@ -49,6 +49,7 @@ wifi_state_light_structer_t wifi_state_light_structer = { T_key_structer_t T_key_structer = { .key_before_state = false, .key_now_state = false, + .key_start_time = 0, }; /*********************************************************************************************************************** @@ -102,6 +103,10 @@ void process_key_event(void) } } +void process_key_long_press_event(void) +{ +} + void T_reaction_schedule(void) { if (reaction_structer.reaction_start_flag) @@ -127,7 +132,7 @@ extern "C" void app_main(void) cover_init(); beep_init(); - T_key_registered_cb(process_key_event); + T_key_registered_cb(process_key_event, process_key_long_press_event); T_wifi_registered_cb(); T_heating_plate_registered_cb(T_temp_get_data); diff --git a/main/key.c b/main/key.c index 678ca0d..4236743 100644 --- a/main/key.c +++ b/main/key.c @@ -10,19 +10,23 @@ */ #include "key.h" +#include "port.h" + +#define key_long_press_time_ms 5000 static T_key_structer_t *T_key_structer_s; -static key_event_cb event_cb_s; +static key_event_cb short_press_event_cb_s; +static key_event_cb long_press_event_cb_s; void T_key_init(T_key_structer_t *T_key_structer) { T_key_structer_s = T_key_structer; } -void T_key_registered_cb(key_event_cb event_cb) +void T_key_registered_cb(key_event_cb short_press_event_cb, key_event_cb long_press_event_cb) { - - event_cb_s = event_cb; + short_press_event_cb_s = short_press_event_cb; + long_press_event_cb_s = long_press_event_cb; } void T_key_on_event(void) @@ -34,8 +38,18 @@ void T_key_schedule(void) T_key_structer_s->key_now_state = T_key_get_level(); if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == true)) { - event_cb_s(); + short_press_event_cb_s(); + T_key_structer_s->key_start_time = port_get_ticket(); + } + + if (T_key_structer_s->key_now_state) + { + if (port_get_ticket() - T_key_structer_s->key_start_time > key_long_press_time_ms) + { + long_press_event_cb_s(); + } } + T_key_structer_s->key_before_state = T_key_structer_s->key_now_state; } diff --git a/main/key.h b/main/key.h index e7dc715..cfa918c 100644 --- a/main/key.h +++ b/main/key.h @@ -1,18 +1,20 @@ #pragma once -#include "stdbool.h" +#include +#include typedef struct { bool key_before_state; bool key_now_state; + uint32_t key_start_time; } T_key_structer_t; typedef bool (*key_camera_cb)(void); typedef void (*key_event_cb)(void); void T_key_init(T_key_structer_t *T_key_structer); -void T_key_registered_cb(key_event_cb event_cb); +void T_key_registered_cb(key_event_cb short_press_event_cb, key_event_cb long_press_event_cb); void T_key_on_event(void); void T_key_schedule(void); bool T_key_get_level(void); \ No newline at end of file