Browse Source

添加 低电量相关逻辑

master
zhaohe 1 year ago
parent
commit
8306008ba0
  1. 2
      README.md
  2. 2
      app/app.uvprojx
  3. 2
      app/src/ble_cmd_process_service.c
  4. 4
      app/src/board/board.h
  5. 9
      app/src/board/board_light_ctrl.c
  6. 21
      app/src/one_conduction_main.c

2
README.md

@ -11,7 +11,7 @@ TODO
4. 添加连接状态指示灯 OK
4. 修改屏幕显示位置 OK (不改了)
6. 调整ADC放大倍数 (不修改,显示默认放大1.8倍,中心方法)
6. 调整ADC放大倍数 (不修改,显示默认放大1.8倍,中心方法) OK
5. 充电中,限制用户操作 ,充电时,不测量,但没有任何提示。OK
7. 开机时进行低电量检测 OK
3. 修改心率采样ADC参考电压 OK

2
app/app.uvprojx

@ -313,7 +313,7 @@
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>4</Optim>
<Optim>1</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

2
app/src/ble_cmd_process_service.c

@ -302,7 +302,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->drop_state1 = 0x00;
receipt->device_state0.sampling_state = (ds_now_state() == kdevice_state_sampling);
receipt->device_state0.report_state = m_realtime_report_state;
receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < APP_LOW_BATTERY_LIMIT);
receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < APP_LOW_BATTERY_WARNING_LIMIT);
receipt->device_state0.full_storge = (sample_data_mgr_storage_is_full());
receipt->device_state1 = 0;

4
app/src/board/board.h

@ -43,5 +43,7 @@
#define APP_BATTERY_PROTECT_LEVEL 2 // 低于此电量不能开机,保护电池
#define APP_AUTO_STANDY_BATTERY_LEVEL 10 // 低于此电量自动待机,保持时钟
#define APP_WORK_BATTERY_LEVEL 13 // Main初始化时候和从standy切换到work的时候,检查这个电量
#define APP_WORK_BATTERY_LEVEL 15 // Main初始化时候和从standy切换到work的时候,检查这个电量
#define APP_LOW_BATTERY_WARNING_LIMIT 20 //
#define LOW_BATTERY_REMINDER_DELAY_MS 3000

9
app/src/board/board_light_ctrl.c

@ -56,7 +56,7 @@ void BoardLight_toggleGreenLightState() { BoardLight_setGreenLightState(!m_board
void BoardLight_setGreenLightState(bool state) {
m_boardlight_greenlightstate = state;
if (state) {
light_ctrl.seq_values.channel_0 = 80; // top_value
light_ctrl.seq_values.channel_0 = 95; // top_value
nrfx_pwm_simple_playback(&light_ctrl.driver, &light_ctrl.seq, 1, NRF_DRV_PWM_FLAG_LOOP);
} else {
nrfx_pwm_stop(&light_ctrl.driver, true);
@ -102,10 +102,16 @@ void BoardLight_Init() {
static bool m_boardlight_loaded = false;
void BoardLight_load() {
if (m_boardlight_loaded) {
return;
}
m_boardlight_loaded = true;
BoardLight_setGreenLightState(false);
}
void BoardLight_unload() {
if (!m_boardlight_loaded) {
return;
}
m_boardlight_loaded = false;
app_timer_stop(m_green_light_effect_tmr);
BoardLight_setGreenLightEffect(kLightEffect_close);
@ -116,7 +122,6 @@ void BoardLight_setGreenLightEffect(LightEffect_t effect) {
if (m_light_effect == effect) return;
m_light_effect = effect;
switch (effect) {
case kLightEffect_close:
app_timer_stop(m_green_light_effect_tmr);

21
app/src/one_conduction_main.c

@ -91,7 +91,7 @@ void ENTER_DEEP_SLEEP() {
BoardEcgSensor_set_sence_state();
BoardBattery_sence_gpio_init_before_sleep();
// nrf_sdh_disable_request();
app_timer_stop_all();
app_timer_pause();
nrf_sdh_suspend();
sd_power_system_off();
NVIC_SystemReset();
@ -159,6 +159,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
/*******************************************************************************
* *
*******************************************************************************/
static uint32_t lasttrypoweron_time = 0;
if (ds_now_state() == kdevice_state_standby) {
// -->
if (BoardBattery_get_charging_state()) {
@ -166,11 +168,15 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
}
// -->
else if (BoardEcgSensor_plod_get_connected_state()) {
else if (BoardEcgSensor_plod_get_connected_state() && znordic_haspassed_ms(lasttrypoweron_time) >= LOW_BATTERY_REMINDER_DELAY_MS) {
lasttrypoweron_time = znordic_getpower_on_ms();
if (BoardBattery_get_battery_level() > APP_WORK_BATTERY_LEVEL) {
state_machine__change_to_poweroning_state();
} else {
BoardLight_load();
BoardLight_blockFlash(3, 100);
BoardLight_unload();
}
}
@ -179,7 +185,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
if (!znordic_rtc_has_setted()) {
ENTER_DEEP_SLEEP();
}
if(APP_BATTERY_PROTECT_LEVEL > BoardBattery_get_battery_level()){
if (APP_BATTERY_PROTECT_LEVEL > BoardBattery_get_battery_level()) {
ENTER_DEEP_SLEEP();
}
}
@ -225,8 +231,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
}
}
//
else if (BoardBattery_get_battery_level() < APP_AUTO_STANDY_BATTERY_LEVEL) {
//
else if (BoardBattery_get_battery_level() < APP_AUTO_STANDY_BATTERY_LEVEL && ds_cur_state_haspassed_ms() > 3000) {
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());
@ -389,6 +395,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
*******************************************************************************/
void one_conduction_main() {
ZLOGI("one_conduction_main");
BoardBeepCtrl_init();
AppEvent_regListener(app_event_listener);
@ -398,11 +405,15 @@ void one_conduction_main() {
BoardLight_load();
BoardBattery_load();
#if 1
if (BoardBattery_get_battery_level() < APP_WORK_BATTERY_LEVEL) {
BoardLight_blockFlash(3, 100);
// ,使
app_timer_pause();
nrf_delay_ms(LOW_BATTERY_REMINDER_DELAY_MS);
ENTER_DEEP_SLEEP();
}
#endif
ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb));
ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(300), NULL));

Loading…
Cancel
Save