From b817bfff26fec876400283cccca4e3a1e44cb31c Mon Sep 17 00:00:00 2001 From: zhaohe Date: Tue, 27 Aug 2024 20:35:04 +0800 Subject: [PATCH] update --- app/src/acid_dispenser_ble_slave_main.c | 69 +++++++++++++++++++------------- app/src/app_basic_service/basic/event.h | 4 +- app/src/app_basic_service/basic/keyid.h | 2 +- app/src/app_service/zkey_driver.c | 71 ++++++++++++++++++++------------- 4 files changed, 88 insertions(+), 58 deletions(-) diff --git a/app/src/acid_dispenser_ble_slave_main.c b/app/src/acid_dispenser_ble_slave_main.c index 57b912a..557c98f 100644 --- a/app/src/acid_dispenser_ble_slave_main.c +++ b/app/src/acid_dispenser_ble_slave_main.c @@ -29,7 +29,7 @@ // static hand_acid_mode_t g_hand_acid_mode; // static bool g_hand_pump_working_state; // static bool g_connected; -static int32_t m_last_usr_operation_time = 0; +static int32_t m_last_usr_operation_time = 0; static void testlight_state(int val) { int effect = val % 3; @@ -145,43 +145,56 @@ static void nrf_gpio_set_rgb(uint8_t r, uint8_t g, uint8_t b) { nrf_gpio_pin_write(LEDB, b); } -static void update_light_state() { +// static void update_light_state() { +/** + * @brief + * 关机:灯熄灭 + * 开机: + * 点动模式:蓝灯 + * 手动模式:绿灯 + * 离线 :红灯 + * + */ + +// if (zappcore_get_state() == kstate_standby) { +// // 待机模式 +// nrf_gpio_set_rgb(0, 0, 0); +// } else { +// if (g_connected) { // 连接状态 +// if (g_hand_acid_mode == khand_acid_m_jog_mode) { +// nrf_gpio_set_rgb(0, 0, 1); // 点动模式 +// } else if (g_hand_acid_mode == khand_acid_m_continuous_mode) { +// nrf_gpio_set_rgb(0, 1, 0); // 手动模式 +// } else if (g_hand_acid_mode == khand_acid_m_unset_mode) { +// nrf_gpio_set_rgb(1, 1, 1); // 状态未同步 +// } +// } else { +// nrf_gpio_set_rgb(1, 0, 0); +// } +// } +// } +void process_offline_standby(app_event_t* event, uint16_t event_size) { // /** * @brief - * 关机:灯熄灭 - * 开机: - * 点动模式:蓝灯 - * 手动模式:绿灯 - * 离线 :红灯 - * + * 离线待机状态下, + * 1.停止广播 + * 2.关闭所有灯 */ - // if (zappcore_get_state() == kstate_standby) { - // // 待机模式 - // nrf_gpio_set_rgb(0, 0, 0); - // } else { - // if (g_connected) { // 连接状态 - // if (g_hand_acid_mode == khand_acid_m_jog_mode) { - // nrf_gpio_set_rgb(0, 0, 1); // 点动模式 - // } else if (g_hand_acid_mode == khand_acid_m_continuous_mode) { - // nrf_gpio_set_rgb(0, 1, 0); // 手动模式 - // } else if (g_hand_acid_mode == khand_acid_m_unset_mode) { - // nrf_gpio_set_rgb(1, 1, 1); // 状态未同步 - // } - // } else { - // nrf_gpio_set_rgb(1, 0, 0); - // } - // } -} -void process_offline_standby(app_event_t* event, uint16_t event_size) { // app_event_type_t eventType = event->eventType; - if (eventType == kappevent_state_machine_state_enter) { ZLOGI("enter standby"); nrf_gpio_set_rgb(0, 0, 0); + zble_module_stop_adv(); } else if (eventType == kappevent_state_machine_state_exit) { ZLOGI("exit standby"); - } else { + zble_module_start_adv(); + } else if (eventType == kappevent_key_pressed) { + ZLOGI("key pressed:%d", event->val.keyid); + } else if (eventType == kappevent_key_pressed_double) { + ZLOGI("key double pressed:%d", event->val.keyid); + } else if (eventType == kappevent_key_long_pressed) { + ZLOGI("key long pressed:%d", event->val.keyid); } } void process_offline_broadcast(app_event_t* event, uint16_t event_size) { // diff --git a/app/src/app_basic_service/basic/event.h b/app/src/app_basic_service/basic/event.h index f5c1352..859de4f 100644 --- a/app/src/app_basic_service/basic/event.h +++ b/app/src/app_basic_service/basic/event.h @@ -2,8 +2,8 @@ #include #include -#include "aproject_config/config.h" #include "app_protocols/app_protocols.h" +#include "aproject_config/config.h" #define ECG_DATA_REPORT_FRAME_NUM 50 @@ -15,7 +15,9 @@ typedef enum { kappevent_ble_connected, kappevent_ble_disconnected, kappevent_device_state_change_event, + // kappevent_key_pressed, + kappevent_key_pressed_double, kappevent_key_long_pressed, } app_event_type_t; diff --git a/app/src/app_basic_service/basic/keyid.h b/app/src/app_basic_service/basic/keyid.h index da6ac03..77807f2 100644 --- a/app/src/app_basic_service/basic/keyid.h +++ b/app/src/app_basic_service/basic/keyid.h @@ -1,5 +1,5 @@ #pragma once typedef enum { - keyid_reflux, keyid_addliquid, + keyid_reflux, } keyid_t; diff --git a/app/src/app_service/zkey_driver.c b/app/src/app_service/zkey_driver.c index dd37630..4b45d7f 100644 --- a/app/src/app_service/zkey_driver.c +++ b/app/src/app_service/zkey_driver.c @@ -13,19 +13,25 @@ // app_timer #include "sdk/components/libraries/timer/app_timer.h" // +#include "app_basic_service/basic/keyid.h" #include "app_basic_service\basic\event.h" +#include "app_basic_service\zapp_core.h" /*********************************************************************************************************************** * 按键监听 * ***********************************************************************************************************************/ -#define LONGPRESS_TRIGGER_TIME 1500 +#define LONGPRESS_TRIGGER_TIME 800 +#define PERIOD_MS 100 typedef struct { - bool keystate; - bool longPress; - bool pressing; - uint32_t pressTicket; uint32_t keid; + bool keystate; + int keyCurStateCntMs; + + uint32_t sessionTp; + int keyPressCnt; + int keyPressTime; + bool (*read_key_state)(); } key_t; @@ -50,30 +56,39 @@ static bool key_liquid_reflux_butt_read_state() { static void process_key(key_t* key) { static app_event_t event; - bool nowState = key->read_key_state(); // 触发按键 + bool nowState = key->read_key_state(); // 触发按键 + bool stateChange = false; if (nowState != key->keystate) { - // 按下事件 - if (nowState) { - key->longPress = false; - key->pressing = true; - key->pressTicket = znordic_getpower_on_ms(); - } - // 按键松开事件 - if (!nowState) { - if (!key->longPress) { - event.eventType = kappevent_key_pressed; - event.val.keyid = key->keid; // 触发按键 - zappcore_push_event(&event); - } - key->pressing = false; - } + key->keystate = nowState; + key->keyCurStateCntMs = 0; + stateChange = true; + } else { + key->keyCurStateCntMs += 100; + } + if (key->sessionTp != 0 && stateChange && !nowState) { + key->keyPressCnt++; } - if (key->pressing && !key->longPress) { - if (znordic_haspassed_ms(key->pressTicket) > LONGPRESS_TRIGGER_TIME) { - key->longPress = true; - event.eventType = kappevent_key_long_pressed; + // ZLOGI("key->keystate:%d", key->keystate); + + if (key->sessionTp == 0 && nowState && stateChange) { + key->sessionTp = znordic_getpower_on_ms(); + key->keyPressCnt = 0; + key->keyPressTime = 0; + } else if (key->sessionTp != 0 && nowState && key->keyCurStateCntMs >= LONGPRESS_TRIGGER_TIME) { // 按键长按超过一定时间 + key->sessionTp = 0; + event.eventType = kappevent_key_long_pressed; + event.val.keyid = key->keid; + zappcore_push_event(&event); + } else if (key->sessionTp != 0 && !nowState && key->keyCurStateCntMs >= 300) { // 超过500ms没人按下按键 + key->sessionTp = 0; + if (key->keyPressCnt == 2) { + event.eventType = kappevent_key_pressed_double; + event.val.keyid = key->keid; // 触发按键 + zappcore_push_event(&event); + } else if (key->keyPressCnt == 1) { + event.eventType = kappevent_key_pressed; event.val.keyid = key->keid; // 触发按键 zappcore_push_event(&event); } @@ -84,11 +99,11 @@ static void process_key(key_t* key) { static void key_driver_tmr_cb(void* p_context) { // static key_t mode_and_action_butt = { - .keid = 1, + .keid = keyid_addliquid, .read_key_state = key_read_acid_state, }; static key_t liquid_reflux_butt = { - .keid = 2, + .keid = keyid_reflux, .read_key_state = key_liquid_reflux_butt_read_state, }; @@ -98,5 +113,5 @@ static void key_driver_tmr_cb(void* p_context) { // void zkey_driver_init() { ZERROR_CHECK(app_timer_create(&m_key_monitor_tmr, APP_TIMER_MODE_REPEATED, key_driver_tmr_cb)); - ZERROR_CHECK(app_timer_start(m_key_monitor_tmr, APP_TIMER_TICKS(100), NULL)); + ZERROR_CHECK(app_timer_start(m_key_monitor_tmr, APP_TIMER_TICKS(PERIOD_MS), NULL)); }