diff --git a/app/src/basic/qrs_time_domain_zh.c b/app/src/basic/qrs_time_domain_zh.c index b6abf91..bc4b187 100644 --- a/app/src/basic/qrs_time_domain_zh.c +++ b/app/src/basic/qrs_time_domain_zh.c @@ -214,6 +214,14 @@ void QRS_processData(uint16_t _data) { } } } -uint16_t QRS_getHeartRate() { return m_heartrate; } +uint16_t QRS_getHeartRate() { + __disable_fiq(); + uint16_t heartrate = m_heartrate; + __enable_fiq(); + + if (heartrate > 200) return 0; + if (heartrate < 55) return 0; + return heartrate; +} uint16_t QRS_getMaxValueLastVal() { return m_max_val_in_m_data; } \ No newline at end of file diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c index f114cd1..76e516a 100644 --- a/app/src/board/board_light_ctrl.c +++ b/app/src/board/board_light_ctrl.c @@ -102,20 +102,18 @@ void BoardLight_Init() { static bool m_boardlight_loaded = false; void BoardLight_load() { - if (m_boardlight_loaded) { - return; - } - m_boardlight_loaded = true; + // if (m_boardlight_loaded) { + // return; + // } + // m_boardlight_loaded = true; BoardLight_setGreenLightState(false); } void BoardLight_unload() { - if (!m_boardlight_loaded) { - return; - } + // if (!m_boardlight_loaded) { + // return; + // } m_boardlight_loaded = false; - app_timer_stop(m_green_light_effect_tmr); BoardLight_setGreenLightEffect(kLightEffect_close); - // nrfx_pwm_uninit(&light_ctrl.driver); } void BoardLight_setGreenLightEffect(LightEffect_t effect) { diff --git a/app/src/device_state.h b/app/src/device_state.h index ca75ed9..dd99c41 100644 --- a/app/src/device_state.h +++ b/app/src/device_state.h @@ -36,6 +36,8 @@ typedef struct { typedef enum { // 待机 kdevice_state_standby = 0, + // 充电中 + kdevice_state_charging, // 开机 kdevice_state_poweron, // 首页 @@ -48,8 +50,7 @@ typedef enum { kdevice_state_sampling_complete, // 采集异常 kdevice_state_sampling_error, - // 充电中 - kdevice_state_charging, + } device_state_t; static const char* device_state_to_str(device_state_t ds) { diff --git a/app/src/display_manager.c b/app/src/display_manager.c index 02fdbc3..507a706 100644 --- a/app/src/display_manager.c +++ b/app/src/display_manager.c @@ -134,7 +134,7 @@ void mainPage_show(bool colon_state) { // ZLOGI("mainPage_show %d %d", colon_state, x, y); ssd1306_basic_draw_str(x, y, &xchange, &ychange, fmt("%02d:%02d", now.tm_hour, now.tm_min), &fontclocklib); - x = x + 2 + xchange; + x = x + 6 + xchange; ssd1306_basic_draw_battery_level(x, y, &xchange, &ychange, batterylevel, MAIN_PAGE_BATTERY_WIDTH, MAIN_PAGE_BATTERY_HEIGHT); ssd1306_basic_gram_update(); m_main_page_colon_state = colon_state; @@ -289,9 +289,9 @@ void dsp_mgr_change_to_sampling(int progress_s, int heartrate) { // sps->wave_drawser_x = SMAPLE_PAGE_START_X + 5; sps->wave_drawser_y = SMAPLE_PAGE_START_Y + sps->progress_hight + 5; sps->wave_drawser_hight = 45; - sps->wave_drawser_width = 90; + sps->wave_drawser_width = 85; - sps->heartrate_x = sps->wave_drawser_x + sps->wave_drawser_width + 2; + sps->heartrate_x = sps->wave_drawser_x + sps->wave_drawser_width + 1; sps->heartrate_y = sps->wave_drawser_y + 5; int progress = progress_s / SAMPLE_MIN_TIME_S * 25; @@ -347,7 +347,11 @@ void samplePage_update_state(int progress_s, int wave_y, int heartrate, bool upd if (heartrate <= 0) { ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, "-- ", &font_asicc16x8_lib); } else { - ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, fmt("%3d", heartrate), &font_asicc16x8_lib); + if (heartrate >= 100) { + ssd1306_basic_draw_str(sps->heartrate_x, sps->heartrate_y + 20, &xchange, &ychange, fmt("%d", heartrate), &font_asicc16x8_lib); + } else { + ssd1306_basic_draw_str(sps->heartrate_x + 4, sps->heartrate_y + 20, &xchange, &ychange, fmt("%d", heartrate), &font_asicc16x8_lib); + } } wave_drawer_draw_next_point(&sps->wave_drawer, wave_y); if (update_screen) ssd1306_basic_gram_update(); diff --git a/app/src/one_conduction_main.c b/app/src/one_conduction_main.c index b42a0dc..e496e57 100644 --- a/app/src/one_conduction_main.c +++ b/app/src/one_conduction_main.c @@ -64,6 +64,7 @@ static void power_on() { BoardBeepCtrl_load(); BoardEcgSensor_load(); BoardBattery_load(); + BoardLight_load(); hwss_init(); sample_data_mgr_init(); @@ -98,7 +99,6 @@ void ENTER_DEEP_SLEEP() { NVIC_SystemReset(); } - /******************************************************************************* * 状态切换方法 * *******************************************************************************/ @@ -106,9 +106,7 @@ void ENTER_DEEP_SLEEP() { * @brief 切换到充电中状态 */ static void state_machine__change_to_charging_state() { // - if (ds_now_state() == kdevice_state_home) { - // 已开机 DO Nothing - } else if (ds_now_state() == kdevice_state_standby) { + if (ds_now_state() == kdevice_state_standby) { power_on(); } else { ZASSERT(false); @@ -149,7 +147,10 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { if (!p_event_data) return; app_event_t* p_event = (app_event_t*)p_event_data; - if (ds_now_state() != kdevice_state_standby) { + if (ds_now_state() != kdevice_state_standby && // + ds_now_state() != kdevice_state_charging && // + ds_now_state() != kdevice_state_poweron // + ) { if (zdatachannel_is_connected()) { BoardLight_setGreenLightEffect(kLightEffect_slowFlash); } else { @@ -242,6 +243,11 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { ZLOGI("auto sleep because ble unconnected"); state_machine__change_to_standby_state(); } + + else if (BoardBattery_get_charging_state()) { + // BoardLight_setGreenLightEffect(kLightEffect_close); + state_machine__change_to_standby_state(); + } // ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(), plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms()); }