|
|
@ -14,6 +14,7 @@ |
|
|
|
#include "app_service/display_ctrl_service/display_mgr.h" |
|
|
|
#include "app_service/ecg_service/ecg_service.h" |
|
|
|
#include "app_service/light_ctrl.h" |
|
|
|
#include "zble_module.h" |
|
|
|
|
|
|
|
/*********************************************************************************************************************** |
|
|
|
* GLOBAL * |
|
|
@ -21,6 +22,7 @@ |
|
|
|
|
|
|
|
static uint8_t bletxbuf[255]; |
|
|
|
static uint8_t blereportbuf[255]; |
|
|
|
static bool m_poweron_flag; |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* UTILS * |
|
|
@ -48,9 +50,35 @@ static void send_success_receipt(ify_hrs_packet_t* rxpacket, int32_t emptydatasi |
|
|
|
zdatachannel_data_send2(bletxbuf, sendlen); |
|
|
|
} |
|
|
|
|
|
|
|
/******************************************************************************* |
|
|
|
* 下发消息处理 * |
|
|
|
*******************************************************************************/ |
|
|
|
/*********************************************************************************************************************** |
|
|
|
* 蓝牙连接事件处理 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
static void process_on_connect(void* arg) { |
|
|
|
if (zapp_state_machine_now_state() == kstate_standby) { |
|
|
|
zapp_state_machine_change_state(kstate_welcomPage); |
|
|
|
} |
|
|
|
|
|
|
|
if (m_poweron_flag) { |
|
|
|
light_ctrl_set_green_light_effect(kLightEffect_slowFlash); |
|
|
|
} |
|
|
|
} |
|
|
|
static void process_on_disconnect(void* arg) { |
|
|
|
if (m_poweron_flag) { |
|
|
|
light_ctrl_set_green_light_effect(kLightEffect_quickFlash); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void on_zble_event(zble_event_t* event) { |
|
|
|
if (event->eventType == kzble_event_connected) { |
|
|
|
zapp_exec_in_main_context(NULL, process_on_connect, NULL); |
|
|
|
} else if (event->eventType == kzble_event_disconnected) { |
|
|
|
zapp_exec_in_main_context(NULL, process_on_disconnect, NULL); |
|
|
|
} |
|
|
|
} |
|
|
|
/*********************************************************************************************************************** |
|
|
|
* 蓝牙消息处理 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
void one_conduction_process_rx_packet(uint8_t* rx, int len) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
@ -155,14 +183,39 @@ void one_conduction_process_rx_packet(uint8_t* rx, int len) { |
|
|
|
zdatachannel_data_send2(bletxbuf, sendlen); |
|
|
|
} |
|
|
|
|
|
|
|
/*********************************************************************************************************************** |
|
|
|
* 测试指令 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
else if (cmd == ify_hrs_cmd_start_realtime_preview) { |
|
|
|
if (zapp_state_machine_now_state() != kstate_mainPage) { |
|
|
|
send_error_receipt(rxheader, kifyhrs_ecode_device_busy); |
|
|
|
return; |
|
|
|
} |
|
|
|
static app_event_t event; |
|
|
|
event.eventType = kappevent_start_capture; |
|
|
|
|
|
|
|
zapp_ebus_push_event(&event); |
|
|
|
send_success_receipt(rxheader, 0); |
|
|
|
} |
|
|
|
|
|
|
|
else if (cmd == ify_hrs_cmd_stop_realtime_preview) { |
|
|
|
if (zapp_state_machine_now_state() != kstate_mainPage) { |
|
|
|
send_error_receipt(rxheader, kifyhrs_ecode_device_busy); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
static app_event_t event; |
|
|
|
event.eventType = kappevent_stop_capture; |
|
|
|
|
|
|
|
zapp_ebus_push_event(&event); |
|
|
|
send_success_receipt(rxheader, 0); |
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/*********************************************************************************************************************** |
|
|
|
* 状态切换 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
void on_state_change(device_state_t from, device_state_t to) { |
|
|
|
/** |
|
|
|
* @brief 开机 |
|
|
@ -177,6 +230,11 @@ void on_state_change(device_state_t from, device_state_t to) { |
|
|
|
dsp_mgr_load(); |
|
|
|
// dsp_mgr_change_page(kpage_welcome); |
|
|
|
ecg_service_load(); |
|
|
|
m_poweron_flag = true; |
|
|
|
|
|
|
|
if (zble_module_is_connected()) { |
|
|
|
light_ctrl_set_green_light_effect(kLightEffect_slowFlash); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
/** |
|
|
@ -194,18 +252,87 @@ void on_state_change(device_state_t from, device_state_t to) { |
|
|
|
|
|
|
|
// battery_mgr_service_change_state_to_standy(); |
|
|
|
hardware_power_mgr_main_power_supply_set(false); |
|
|
|
m_poweron_flag = false; |
|
|
|
} |
|
|
|
|
|
|
|
if (to == kstate_welcomPage) { |
|
|
|
// dsp_mgr_change_page(kpage_welcome); |
|
|
|
zapp_state_machine_change_state(kstate_standby); |
|
|
|
if (to == kstate_standby) { |
|
|
|
dsp_mgr_change_page(kpage_poweroff); |
|
|
|
} else if (to == kstate_welcomPage) { |
|
|
|
dsp_mgr_change_page(kpage_welcome); |
|
|
|
} else if (to == kstate_mainPage) { |
|
|
|
dsp_mgr_change_page(kpage_main); |
|
|
|
} else if (to == kstate_capture) { |
|
|
|
dsp_mgr_change_page(kpage_sampling); |
|
|
|
} else if (to == kstate_charging) { |
|
|
|
dsp_mgr_change_page(kpage_charging_page); |
|
|
|
} |
|
|
|
} |
|
|
|
void on_zapp_ebus_event(void* p_event_data, uint16_t event_size) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************************************************************** |
|
|
|
* 事件处理 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
void on_zapp_ebus_event(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 (zapp_state_machine_now_state() == kstate_standby) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* 1. 充电切换到充电状态 |
|
|
|
* |
|
|
|
*/ |
|
|
|
if (p_event->eventType == kappevent_battery_start_charge) { |
|
|
|
zapp_state_machine_change_state(kstate_charging); |
|
|
|
} else if (!znordic_rtc_has_setted() && zapp_state_machine_haspassed_ms() >= 60000) { |
|
|
|
ZLOGI_BLOCK("rtc not setted, power system off"); |
|
|
|
ZERROR_CHECK(sd_power_system_off()); |
|
|
|
} |
|
|
|
|
|
|
|
} else if (zapp_state_machine_now_state() == kstate_welcomPage) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* 延迟1.5s切换到主页面 |
|
|
|
*/ |
|
|
|
if (zapp_state_machine_haspassed_ms() >= 1500) { |
|
|
|
zapp_state_machine_change_state(kstate_mainPage); |
|
|
|
beep_set_effect(POWER_ON_EFFECT); |
|
|
|
} |
|
|
|
} else if (zapp_state_machine_now_state() == kstate_mainPage) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* 1. 断开连接->切换到关机状态 |
|
|
|
* 2. 开始采集指令->切换到采集状态 |
|
|
|
* 3. 充电中事件->切换到充电状态 |
|
|
|
* |
|
|
|
*/ |
|
|
|
if (zble_module_has_disconnected_ms() >= 3000) { |
|
|
|
zapp_state_machine_change_state(kstate_standby); |
|
|
|
} else if (p_event->eventType == kappevent_start_capture) { |
|
|
|
zapp_state_machine_change_state(kstate_capture); |
|
|
|
} else if (p_event->eventType == kappevent_battery_start_charge) { |
|
|
|
zapp_state_machine_change_state(kstate_charging); |
|
|
|
} |
|
|
|
|
|
|
|
} else if (zapp_state_machine_now_state() == kstate_capture) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* 1. 停止采集指令->切换到MainPage |
|
|
|
*/ |
|
|
|
if (p_event->eventType == kappevent_stop_capture) { |
|
|
|
zapp_state_machine_change_state(kstate_mainPage); |
|
|
|
} |
|
|
|
} else if (zapp_state_machine_now_state() == kstate_charging) { |
|
|
|
/** |
|
|
|
* @brief |
|
|
|
* 1. 充电结束事件->切换到待机 |
|
|
|
*/ |
|
|
|
if (p_event->eventType == kappevent_battery_end_charge) { |
|
|
|
if (!zble_module_is_connected()) { |
|
|
|
zapp_state_machine_change_state(kstate_standby); |
|
|
|
} else { |
|
|
|
zapp_state_machine_change_state(kstate_mainPage); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void one_conduction_main() { |
|
|
@ -215,17 +342,20 @@ void one_conduction_main() { |
|
|
|
ZLOG_FLUSH(); |
|
|
|
zapp_ebus_reg_event_listener(on_zapp_ebus_event); |
|
|
|
zapp_state_machine_reg_state_change_listener(on_state_change); |
|
|
|
zble_module_reglistener(on_zble_event); |
|
|
|
|
|
|
|
adc_mgr_init(); |
|
|
|
hardware_power_mgr_init(); |
|
|
|
|
|
|
|
battery_mgr_service_init(); |
|
|
|
battery_mgr_service_load(); |
|
|
|
|
|
|
|
light_ctrl_init(); |
|
|
|
beep_init(); |
|
|
|
dsp_mgr_init(); |
|
|
|
ecg_service_init(); |
|
|
|
|
|
|
|
zapp_state_machine_change_state(kstate_welcomPage); |
|
|
|
// zapp_state_machine_change_state(kstate_standby); |
|
|
|
|
|
|
|
zble_module_start_adv(); |
|
|
|
zapp_start_schedule(); |
|
|
|