#ifndef APP_TASK_H
#define APP_TASK_H

#include "system/task.h"
#include "app_msg.h"
#include "system/event.h"


enum {
    APP_POWERON_TASK  = 1,
    APP_POWEROFF_TASK = 2,
    APP_BT_TASK       = 3,
    APP_MUSIC_TASK    = 4,
    APP_FM_TASK       = 5,
    APP_RECORD_TASK   = 6,
    APP_LINEIN_TASK   = 7,
    APP_RTC_TASK      = 8,
    APP_PC_TASK       = 9,
    APP_SPDIF_TASK    = 10,
    APP_IDLE_TASK     = 11,
    APP_WATCH_UPDATE_TASK     = 12,
    APP_SMARTBOX_ACTION_TASK  = 13,
    APP_CAT1_TASK  = 14,
    APP_TASK_MAX_INDEX,
};


enum {
    APP_MSG_SYS_EVENT = Q_EVENT,

    /* 用户自定义消息 */
    APP_MSG_SWITCH_TASK = Q_USER + 1,
    APP_MSG_USER        = Q_USER + 2,

};


//切换到前一个有效模式
void app_task_switch_prev();
//切换到下一个有效模式
void app_task_switch_next();
//返回到之前的模式
int app_task_switch_back();
//切换到指定模式
int app_task_switch_to(u8 app_task);
//获取当前模式id
u8 app_get_curr_task();
//通过id检查是否是当前模式
u8 app_check_curr_task(u8 app);
//模式切换退出检测
u8 app_task_exitting();

extern u8 app_curr_task;
extern u8 app_next_task;
extern u8 app_prev_task;


//*********************************************************************************//
//                               模式进入检测配置                                 //
//*********************************************************************************//
extern int music_app_check(void);
extern int linein_app_check(void);
extern int pc_app_check(void);
extern int record_app_check(void);

//*********************************************************************************//
//                               模式退出检测配置                                 //
//*********************************************************************************//
extern u8 bt_app_exit_check();

//*********************************************************************************//
//                               模式入口                                 //
//*********************************************************************************//
extern void app_bt_task();
extern void app_music_task();
extern void app_linein_task();
extern void app_pc_task();
extern void app_record_task();
extern void app_spdif_task();
extern void app_rtc_task();
extern void app_fm_task();
extern void app_idle_task();
extern void app_poweroff_task();
extern void app_poweron_task();
extern void app_watch_ui_updata_task();
extern void app_smartbox_task();
extern void app_cat1_task();




//*********************************************************************************//
//                               按键转换表                                 //
//*********************************************************************************//
extern u16 adkey_event_to_msg(u8 cur_task, struct key_event *key);
extern u16 iokey_event_to_msg(u8 cur_task, struct key_event *key);
extern u16 irkey_event_to_msg(u8 cur_task, struct key_event *key);
extern u16 rdec_key_event_to_msg(u8 cur_task, struct key_event *key);
extern u16 touch_key_event_to_msg(u8 cur_task, struct key_event *key);

//*********************************************************************************//
//                               公共消息处理                                //
//*********************************************************************************//
void app_default_event_deal(struct sys_event *event);
int app_common_key_msg_deal(struct sys_event *event);

#endif
