234 lines
5.6 KiB
C
234 lines
5.6 KiB
C
|
|
|||
|
/*************************************************************
|
|||
|
此文件函数主要是spdif模式按键处理和事件处理
|
|||
|
|
|||
|
void app_spdif_task()
|
|||
|
spdif模式主函数
|
|||
|
|
|||
|
static int spdif_sys_event_handler(struct sys_event *event)
|
|||
|
spdif模式系统事件所有处理入口
|
|||
|
|
|||
|
static void spdif_task_close(void)
|
|||
|
spdif模式退出
|
|||
|
|
|||
|
**************************************************************/
|
|||
|
|
|||
|
|
|||
|
#include "app_config.h"
|
|||
|
#include "key_event_deal.h"
|
|||
|
#include "system/includes.h"
|
|||
|
#include "tone_player.h"
|
|||
|
#include "app_task.h"
|
|||
|
#include "tone_player.h"
|
|||
|
#include "media/includes.h"
|
|||
|
#include "asm/audio_spdif.h"
|
|||
|
#include "clock_cfg.h"
|
|||
|
|
|||
|
#include "ui/ui_api.h"
|
|||
|
#include "ui_manage.h"
|
|||
|
|
|||
|
|
|||
|
#if TCFG_APP_SPDIF_EN
|
|||
|
|
|||
|
extern struct audio_spdif_hdl spdif_slave_hdl;
|
|||
|
/* #define LOG_TAG_CONST APP_SPDIF */
|
|||
|
#define LOG_TAG "[APP_SPDIF]"
|
|||
|
#define LOG_ERROR_ENABLE
|
|||
|
#define LOG_DEBUG_ENABLE
|
|||
|
#define LOG_INFO_ENABLE
|
|||
|
/* #define LOG_DUMP_ENABLE */
|
|||
|
#define LOG_CLI_ENABLE
|
|||
|
#include "debug.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static u8 source = 0;
|
|||
|
|
|||
|
///*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 硬件设置
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void spdif_open(void)
|
|||
|
{
|
|||
|
#if TCFG_SPDIF_OUTPUT_ENABLE
|
|||
|
spdif_slave_hdl.output_port = SPDIF_OUT_PORT_A;//PB11
|
|||
|
#endif
|
|||
|
spdif_slave_hdl.input_port = SPDIF_IN_PORT_A;//PA9
|
|||
|
source = 0;
|
|||
|
audio_spdif_slave_open(&spdif_slave_hdl);
|
|||
|
|
|||
|
audio_spdif_slave_start(&spdif_slave_hdl);
|
|||
|
#if TCFG_HDMI_ARC_ENABLE
|
|||
|
extern void hdmi_cec_init(void);
|
|||
|
hdmi_cec_init();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
///*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 模式初始化
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void spdif_app_init(void)
|
|||
|
{
|
|||
|
extern void spdif_dec_init(void);
|
|||
|
spdif_dec_init();
|
|||
|
ui_update_status(STATUS_SPDIF_MODE);
|
|||
|
clock_idle(SPDIF_IDLE_CLOCK);
|
|||
|
UI_SHOW_WINDOW(ID_WINDOW_SPDIF);
|
|||
|
sys_key_event_enable();
|
|||
|
spdif_open();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 模式退出
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void spdif_task_close(void)
|
|||
|
{
|
|||
|
UI_HIDE_CURR_WINDOW();
|
|||
|
audio_spdif_slave_close(&spdif_slave_hdl);
|
|||
|
log_info("APP_SPDIF_STOP1\n");
|
|||
|
extern void spdif_dec_close(void);
|
|||
|
spdif_dec_close();
|
|||
|
#if TCFG_HDMI_ARC_ENABLE
|
|||
|
extern void hdmi_cec_close(void);
|
|||
|
hdmi_cec_close();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 输入io口设置
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static void switch_spdif_input_port(void)
|
|||
|
{
|
|||
|
source++;
|
|||
|
if (source > 2) {
|
|||
|
source = 0;
|
|||
|
}
|
|||
|
printf("\n--func=%s\n", __FUNCTION__);
|
|||
|
switch (source) {
|
|||
|
case 0:
|
|||
|
audio_spdif_slave_switch_port(&spdif_slave_hdl, SPDIF_IN_PORT_A);
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
audio_spdif_slave_switch_port(&spdif_slave_hdl, SPDIF_IN_PORT_C);
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
audio_spdif_slave_switch_port(&spdif_slave_hdl, SPDIF_IN_PORT_D);
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 按键消息入口
|
|||
|
@param 无
|
|||
|
@return 1、消息已经处理,不需要发送到common 0、消息发送到common处理
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static int spdif_key_event_opr(struct sys_event *event)
|
|||
|
{
|
|||
|
int ret = true;
|
|||
|
int err = 0;
|
|||
|
|
|||
|
int key_event = event->u.key.event;
|
|||
|
int key_value = event->u.key.value;//
|
|||
|
|
|||
|
log_info("key_event:%d \n", key_event);
|
|||
|
|
|||
|
switch (key_event) {
|
|||
|
case KEY_SPDIF_SW_SOURCE:
|
|||
|
log_info("KEY_SPDIF_SW_SOURCE \n");
|
|||
|
switch_spdif_input_port();
|
|||
|
break;
|
|||
|
default :
|
|||
|
ret = false;
|
|||
|
break;
|
|||
|
}
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 模式活跃状态 所有消息入口
|
|||
|
@param 无
|
|||
|
@return 1、当前消息已经处理,不需要发送comomon 0、当前消息不是linein处理的,发送到common统一处理
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
static int spdif_sys_event_handler(struct sys_event *event)
|
|||
|
{
|
|||
|
switch (event->type) {
|
|||
|
case SYS_KEY_EVENT:
|
|||
|
return spdif_key_event_opr(event);
|
|||
|
case SYS_DEVICE_EVENT:
|
|||
|
return false;
|
|||
|
default:
|
|||
|
return false;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//*----------------------------------------------------------------------------*/
|
|||
|
/**@brief spdif 主任务
|
|||
|
@param 无
|
|||
|
@return 无
|
|||
|
@note
|
|||
|
*/
|
|||
|
/*----------------------------------------------------------------------------*/
|
|||
|
void app_spdif_task()
|
|||
|
{
|
|||
|
|
|||
|
int res;
|
|||
|
int msg[32];
|
|||
|
spdif_app_init();
|
|||
|
while (1) {
|
|||
|
app_task_get_msg(msg, ARRAY_SIZE(msg), 1);
|
|||
|
|
|||
|
switch (msg[0]) {
|
|||
|
case APP_MSG_SYS_EVENT:
|
|||
|
if (spdif_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()) {
|
|||
|
spdif_task_close();
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#else
|
|||
|
|
|||
|
|
|||
|
void app_spdif_task()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|