diff --git a/app/src/one_conduction/display_manager.c b/app/src/one_conduction/display_manager.c index 5fd71dc..3037e05 100644 --- a/app/src/one_conduction/display_manager.c +++ b/app/src/one_conduction/display_manager.c @@ -31,35 +31,8 @@ PageState_t* dsp_mgr_get_state(void) { return NULL; } int compute_x_pos_by_center(int16_t x, int16_t width) { return x - width / 2; } int compute_y_pos_by_center(int16_t y, int16_t height) { return y - height / 2; } -void dsp_mgr_change_to_preparePage() { - ssd1306_basic_clear(); - uint8_t x = 0; - uint8_t y = 0; - uint8_t xchange, ychange; - - // ssd1306_basic_draw_str(&x, &y, "123", &fontclocklib); - ssd1306_basic_draw_str(x, y, &xchange, &ychange, "ooox", &font8x8_xo_lib); - y = y + font8x8_xo_lib.heightPixel; - x = x + font8x8_xo_lib.widthPixel; - ssd1306_basic_draw_str(x, y, &xchange, &ychange, "保持静止", &font24x24_zh_lib); - ssd1306_basic_gram_update(); - dsp_mgr_change_to_page(kPage_preparePage); -} static wave_drawer_t wave_drawer; -void dsp_mgr_change_to_sampling() { // - - wave_drawer_init(&wave_drawer, 1, 1, 120, 40); - wave_drawer_draw_border(&wave_drawer); - - uint8_t xchange, ychange; - - ssd1306_basic_draw_progress(1, 47, 80, 8, 50, 30); - - ssd1306_basic_draw_str(82, 43, &xchange, &ychange, "<>123", &font_asicc16x8_lib); - ssd1306_basic_gram_update(); -} - void dsp_mgr_draw_point(int16_t y) { wave_drawer_draw_next_point(&wave_drawer, y); ssd1306_basic_gram_update(); @@ -231,6 +204,61 @@ void mainPage_show(bool colon_state) { void dsp_mgr_change_to_main() { mainPage_show(true); } void mainPage_updateState() { mainPage_show(!m_main_page_colon_state); } +/******************************************************************************* + * 保持静止页面 * + *******************************************************************************/ +static int m_prepare_page_progress = 0; +void PreparePage_show(int progress) { + m_prepare_page_progress = progress; + ssd1306_basic_clear_gram(); + uint8_t x = 0; + uint8_t y = 0; + uint8_t xchange, ychange; + + x = compute_x_pos_by_center(SCREEN_CENTER_X, font24x24_zh_lib.widthPixel * 4); + y = compute_y_pos_by_center(SCREEN_CENTER_Y, font24x24_zh_lib.heightPixel); + + ssd1306_basic_draw_str(x, y, &xchange, &ychange, "保持静止", &font24x24_zh_lib); + + if (progress == 0) { + ssd1306_basic_draw_str(x - font8x8_xo_lib.widthPixel, y - font8x8_xo_lib.heightPixel, &xchange, &ychange, "xxxx", &font8x8_xo_lib); + } else if (progress == 1) { + ssd1306_basic_draw_str(x - font8x8_xo_lib.widthPixel, y - font8x8_xo_lib.heightPixel, &xchange, &ychange, "oxxx", &font8x8_xo_lib); + } else if (progress == 2) { + ssd1306_basic_draw_str(x - font8x8_xo_lib.widthPixel, y - font8x8_xo_lib.heightPixel, &xchange, &ychange, "ooxx", &font8x8_xo_lib); + } else if (progress == 3) { + ssd1306_basic_draw_str(x - font8x8_xo_lib.widthPixel, y - font8x8_xo_lib.heightPixel, &xchange, &ychange, "ooox", &font8x8_xo_lib); + } else if (progress == 4) { + ssd1306_basic_draw_str(x - font8x8_xo_lib.widthPixel, y - font8x8_xo_lib.heightPixel, &xchange, &ychange, "oooo", &font8x8_xo_lib); + } + + ssd1306_basic_gram_update(); +} + +void dsp_mgr_change_to_preparePage() { + PreparePage_show(0); + dsp_mgr_change_to_page(kPage_preparePage); +} +void dsp_mgr_preparePage_set_progress(int progress) { PreparePage_show(progress); } +int dsp_mgr_preparePage_get_progress() { return m_prepare_page_progress; } + +void PreparePage_schedule() {} + +/******************************************************************************* + * 采样页面 * + *******************************************************************************/ +void dsp_mgr_change_to_sampling() { // + wave_drawer_init(&wave_drawer, 1, 1, 120, 40); + wave_drawer_draw_border(&wave_drawer); + + uint8_t xchange, ychange; + + ssd1306_basic_draw_progress(1, 47, 80, 8, 50, 30); + + ssd1306_basic_draw_str(82, 43, &xchange, &ychange, "<>123", &font_asicc16x8_lib); + ssd1306_basic_gram_update(); +} + void mainPage_schedule() { static uint32_t last_update_time = 0; if (znordic_haspassed_ms(last_update_time) < 300) { diff --git a/app/src/one_conduction/display_manager.h b/app/src/one_conduction/display_manager.h index 06426e4..36d06e1 100644 --- a/app/src/one_conduction/display_manager.h +++ b/app/src/one_conduction/display_manager.h @@ -59,7 +59,6 @@ void dsp_mgr_init(void); void dsp_mgr_uninit(void); void dsp_mgr_schedule(void); - PageState_t* dsp_mgr_get_state(void); uint32_t dsp_mgr_get_page_elapsed_time_s(void); @@ -69,7 +68,11 @@ void dsp_mgr_change_to_poweroff(); void dsp_mgr_change_to_welcome(); void dsp_mgr_change_to_main(); void dsp_mgr_change_to_chargingPage(); + void dsp_mgr_change_to_preparePage(); +void dsp_mgr_preparePage_set_progress(int progress); +int dsp_mgr_preparePage_get_progress(); + void dsp_mgr_change_to_sampling(); void dsp_mgr_change_to_samplingError(); void dsp_mgr_change_to_storaging(); diff --git a/app/src/one_conduction/one_conduction_main.c b/app/src/one_conduction/one_conduction_main.c index 4e24a21..f179bd3 100644 --- a/app/src/one_conduction/one_conduction_main.c +++ b/app/src/one_conduction/one_conduction_main.c @@ -13,6 +13,7 @@ typedef enum { kplod_connecting_event, // 导联连接中事件 kplod_start_charge_event, // 充电事件 + kplod_charging_event, // 充电中 kplod_end_charge_event, // 充电结束事件 kevent_tmr_scheduler_event, // 定时器调度事件 @@ -148,6 +149,9 @@ static void m_charge_event_detect_tmr_cb(void* p_context) { // appevent.eventType = kplod_start_charge_event; ischarging = true; app_sched_event_put(&appevent, sizeof(appevent), app_event_process_cb); + } else { + appevent.eventType = kplod_charging_event; + app_sched_event_put(&appevent, sizeof(appevent), app_event_process_cb); } } else { if (ischarging) { @@ -245,6 +249,11 @@ static void state_machine__change_to_home_state() { dsp_mgr_change_to_main(); } +static void state_machine__change_to_sampling_state() { + state_machine_change_to_state(kdevice_state_sampling); + dsp_mgr_change_to_sampling(); +} + static void app_event_process_cb(void* p_event_data, uint16_t event_size) { if (!p_event_data) return; app_event_t* p_event = (app_event_t*)p_event_data; @@ -281,9 +290,47 @@ static void app_event_process_cb(void* p_event_data, uint16_t event_size) { /******************************************************************************* * 首页 * *******************************************************************************/ - if (!m_plod_state_connected_state && plod_state_has_disconnected_ms() >= 3000) { + // 如果用户长时间不操作,自动切换到待机状态 + if (!m_plod_state_connected_state && plod_state_has_disconnected_ms() >= 3000 && cur_state_haspassed_ms() >= 3000) { state_machine__change_to_standby_state(); } + // 如果用户继续保持静止,切换到采集页面 + else if (m_plod_state_connected_state && cur_state_haspassed_ms() > 1500) { + // dsp_mgr_change_to_preparePage + state_machine_change_to_state(kdevice_state_keep_still); + dsp_mgr_change_to_preparePage(); + } + } else if (m_device_state == kdevice_state_keep_still) { + /******************************************************************************* + * 保持静止页面 * + *******************************************************************************/ + if (!m_plod_state_connected_state) { + // 如果用户未保持静止,切换到首页 + state_machine__change_to_home_state(); + } else { + /******************************************************************************* + * 页面加载中 * + *******************************************************************************/ + if (cur_state_haspassed_ms() >= (500 * 5)) { + // state_machine__change_to_sampling_state(); + } else if (cur_state_haspassed_ms() >= (500 * 4)) { + if (dsp_mgr_preparePage_get_progress() != 4) { + dsp_mgr_preparePage_set_progress(4); + } + } else if (cur_state_haspassed_ms() >= (500 * 3)) { + if (dsp_mgr_preparePage_get_progress() != 3) { + dsp_mgr_preparePage_set_progress(3); + } + } else if (cur_state_haspassed_ms() >= (500 * 2)) { + if (dsp_mgr_preparePage_get_progress() != 2) { + dsp_mgr_preparePage_set_progress(2); + } + } else if (cur_state_haspassed_ms() >= (500 * 1)) { + if (dsp_mgr_preparePage_get_progress() != 1) { + dsp_mgr_preparePage_set_progress(1); + } + } + } } #if 0