226 lines
5.8 KiB
C
226 lines
5.8 KiB
C
|
#include "system/app_core.h"
|
|||
|
#include "system/includes.h"
|
|||
|
#include "server/server_core.h"
|
|||
|
#include "media/includes.h"
|
|||
|
#include "app_config.h"
|
|||
|
#include "app_task.h"
|
|||
|
#include "tone_player.h"
|
|||
|
#include "asm/charge.h"
|
|||
|
#include "app_charge.h"
|
|||
|
#include "app_main.h"
|
|||
|
#include "app_online_cfg.h"
|
|||
|
#include "app_power_manage.h"
|
|||
|
#include "gSensor/gSensor_manage.h"
|
|||
|
#include "ui_manage.h"
|
|||
|
#include "vm.h"
|
|||
|
#include "app_chargestore.h"
|
|||
|
#include "key_event_deal.h"
|
|||
|
#include "asm/pwm_led.h"
|
|||
|
#include "user_cfg.h"
|
|||
|
#include "sleep/sleep.h"
|
|||
|
#include "ui/ui_api.h"
|
|||
|
#include "clock_cfg.h"
|
|||
|
#include "dev_manager.h"
|
|||
|
#include "user_api/app_status_api.h"
|
|||
|
|
|||
|
#if TCFG_APP_SLEEP_EN
|
|||
|
|
|||
|
|
|||
|
static u16 power_off_timer = 0;
|
|||
|
static u16 led_blink_timer1 = 0;
|
|||
|
static u16 led_blink_timer2 = 0;
|
|||
|
static u16 power_on_timer = 0;
|
|||
|
|
|||
|
extern void app_status_handler(enum APP_STATUS status);
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 按键消息入口
|
|||
|
@param 无
|
|||
|
@return 1、消息已经处理,不需要发送到common 0、消息发送到common处理
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static int sleep_key_event_opr(struct sys_event *event)
|
|||
|
{
|
|||
|
int ret = false;
|
|||
|
int err = 0;
|
|||
|
|
|||
|
int key_event = event->u.key.event;
|
|||
|
int key_value = event->u.key.value;//
|
|||
|
|
|||
|
log_i("key_event:%d \n", key_event);
|
|||
|
switch (key_event) {
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 软关机处理
|
|||
|
@param 无
|
|||
|
@return
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void sleep_power_off()
|
|||
|
{
|
|||
|
if (get_charge_online_flag() == 0) {
|
|||
|
app_var.goto_poweroff_flag = 1;
|
|||
|
app_task_switch_to(APP_POWEROFF_TASK);
|
|||
|
} else {
|
|||
|
app_task_switch_to(APP_IDLE_TASK);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 关机闪灯处理
|
|||
|
@param 无
|
|||
|
@return
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void poweroff_led_blink1()
|
|||
|
{
|
|||
|
app_status_handler(APP_STATUS_POWER_OFF);
|
|||
|
}
|
|||
|
|
|||
|
static void poweroff_led_blink2()
|
|||
|
{
|
|||
|
app_status_handler(APP_STATUS_POWER_CLOSE);
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 开机闪灯处理
|
|||
|
@param 无
|
|||
|
@return
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void poweron_led_blink()
|
|||
|
{
|
|||
|
app_status_handler(APP_STATUS_POWER_ON);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 模式初始化
|
|||
|
@param 无
|
|||
|
@return
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void sleep_task_start(void)
|
|||
|
{
|
|||
|
sys_key_event_enable();
|
|||
|
|
|||
|
clock_idle(REC_IDLE_CLOCK);
|
|||
|
power_off_timer = sys_timeout_add(NULL, sleep_power_off, 30000);
|
|||
|
led_blink_timer1 = sys_timeout_add(NULL, poweroff_led_blink1, 28000);
|
|||
|
led_blink_timer2 = sys_timeout_add(NULL, poweroff_led_blink2, 29500);
|
|||
|
power_on_timer = sys_timeout_add(NULL, poweron_led_blink, 500);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 退出
|
|||
|
@param 无
|
|||
|
@return
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
|
|||
|
static void sleep_task_close()
|
|||
|
{
|
|||
|
sys_timeout_del(power_off_timer);
|
|||
|
sys_timeout_del(led_blink_timer1);
|
|||
|
sys_timeout_del(led_blink_timer2);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 模式活跃状态 所有消息入口
|
|||
|
@param 无
|
|||
|
@return 1、当前消息已经处理,不需要发送comomon
|
|||
|
0、当前消息不是linein处理的,发送到common统一处理
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static int sleep_sys_event_handler(struct sys_event *event)
|
|||
|
{
|
|||
|
const char *logo = NULL;
|
|||
|
int err = 0;
|
|||
|
switch (event->type) {
|
|||
|
case SYS_KEY_EVENT:
|
|||
|
return 1;
|
|||
|
case SYS_DEVICE_EVENT:
|
|||
|
///所有设备相关的事件不能返回true, 必须给留给公共处理的地方响应设备上下线
|
|||
|
switch ((u32)event->arg) {
|
|||
|
case DRIVER_EVENT_FROM_SD0:
|
|||
|
case DRIVER_EVENT_FROM_SD1:
|
|||
|
case DRIVER_EVENT_FROM_SD2:
|
|||
|
logo = (char *)event->u.dev.value;
|
|||
|
case DEVICE_EVENT_FROM_OTG:
|
|||
|
if ((u32)event->arg == DEVICE_EVENT_FROM_OTG) {
|
|||
|
logo = (char *)"udisk0";
|
|||
|
}
|
|||
|
|
|||
|
if (event->u.dev.event == DEVICE_EVENT_IN) {
|
|||
|
} else if (event->u.dev.event == DEVICE_EVENT_OUT) {
|
|||
|
}
|
|||
|
break;//DEVICE_EVENT_FROM_USB_HOST
|
|||
|
}//switch((u32)event->arg)
|
|||
|
break;//SYS_DEVICE_EVENT
|
|||
|
default:
|
|||
|
break;;
|
|||
|
}//switch (event->type)
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief sleep 主任务
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
void app_sleep_task()
|
|||
|
{
|
|||
|
int res;
|
|||
|
int msg[32];
|
|||
|
sleep_task_start();
|
|||
|
|
|||
|
while (1) {
|
|||
|
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
|
|||
|
|
|||
|
switch (msg[0]) {
|
|||
|
case APP_MSG_SYS_EVENT:
|
|||
|
if (sleep_sys_event_handler((struct sys_event *)(&msg[1])) == false) {
|
|||
|
app_default_event_deal((struct sys_event *)(&msg[1])); //由common统一处理
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
if (app_task_exitting()) {
|
|||
|
sleep_task_close();
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
|
|||
|
void app_sleep_task()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#endif
|